From 2c98a18529162ff16754452cdadfe7bca6f76e23 Mon Sep 17 00:00:00 2001 From: arat-odoo Date: Thu, 3 Jul 2025 10:16:12 +0530 Subject: [PATCH] [ADD] salesperson_pos: added sales person button in pos and view in list order created sales person button in pos and assign sales person given order and display in list and form view order. --- salesperson_pos/__init__.py | 1 + salesperson_pos/__manifest__.py | 14 +++++ salesperson_pos/models/__init__.py | 1 + salesperson_pos/models/pos_order.py | 7 +++ .../src/control_buttons/control_buttons.js | 13 +++++ .../src/control_buttons/control_buttons.xml | 8 +++ .../static/src/pos_order/pos_order.js | 11 ++++ .../salesperson_button/salesperson_button.js | 55 +++++++++++++++++++ .../salesperson_button/salesperson_button.xml | 15 +++++ .../salesperson_dialog/saleperson_dialog.xml | 34 ++++++++++++ .../salesperson_dialog/salesperson_dialog.js | 26 +++++++++ salesperson_pos/views/pos_order_views.xml | 24 ++++++++ 12 files changed, 209 insertions(+) create mode 100644 salesperson_pos/__init__.py create mode 100644 salesperson_pos/__manifest__.py create mode 100644 salesperson_pos/models/__init__.py create mode 100644 salesperson_pos/models/pos_order.py create mode 100644 salesperson_pos/static/src/control_buttons/control_buttons.js create mode 100644 salesperson_pos/static/src/control_buttons/control_buttons.xml create mode 100644 salesperson_pos/static/src/pos_order/pos_order.js create mode 100644 salesperson_pos/static/src/salesperson_button/salesperson_button.js create mode 100644 salesperson_pos/static/src/salesperson_button/salesperson_button.xml create mode 100644 salesperson_pos/static/src/salesperson_dialog/saleperson_dialog.xml create mode 100644 salesperson_pos/static/src/salesperson_dialog/salesperson_dialog.js create mode 100644 salesperson_pos/views/pos_order_views.xml diff --git a/salesperson_pos/__init__.py b/salesperson_pos/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/salesperson_pos/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/salesperson_pos/__manifest__.py b/salesperson_pos/__manifest__.py new file mode 100644 index 00000000000..d14604590f8 --- /dev/null +++ b/salesperson_pos/__manifest__.py @@ -0,0 +1,14 @@ +{ + "name": "SalesPerson Choosing Button In Pos", + "version": "1.0", + "depends": ["point_of_sale", "hr"], + "data": ["views/pos_order_views.xml"], + "appication": True, + "installable": True, + "assets": { + "point_of_sale._assets_pos": [ + "salesperson_pos/static/src/**/*", + ], + }, + "license": "LGPL-3", +} diff --git a/salesperson_pos/models/__init__.py b/salesperson_pos/models/__init__.py new file mode 100644 index 00000000000..e9ab911ddcc --- /dev/null +++ b/salesperson_pos/models/__init__.py @@ -0,0 +1 @@ +from . import pos_order diff --git a/salesperson_pos/models/pos_order.py b/salesperson_pos/models/pos_order.py new file mode 100644 index 00000000000..321aede0eee --- /dev/null +++ b/salesperson_pos/models/pos_order.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class PosOrder(models.Model): + _inherit = "pos.order" + + salesperson_id = fields.Many2one("hr.employee", string="Salesperson", readonly=True) diff --git a/salesperson_pos/static/src/control_buttons/control_buttons.js b/salesperson_pos/static/src/control_buttons/control_buttons.js new file mode 100644 index 00000000000..eac76f3226a --- /dev/null +++ b/salesperson_pos/static/src/control_buttons/control_buttons.js @@ -0,0 +1,13 @@ +import { patch } from "@web/core/utils/patch"; +import { ControlButtons } from "@point_of_sale/app/screens/product_screen/control_buttons/control_buttons"; +import { SelectSalesPersonButton } from "../salesperson_button/salesperson_button"; + +patch(ControlButtons, { + setup() { + super.setup(); + }, + components: { + ...ControlButtons.components, + SelectSalesPersonButton, + }, +}); diff --git a/salesperson_pos/static/src/control_buttons/control_buttons.xml b/salesperson_pos/static/src/control_buttons/control_buttons.xml new file mode 100644 index 00000000000..03626bfdb9e --- /dev/null +++ b/salesperson_pos/static/src/control_buttons/control_buttons.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/salesperson_pos/static/src/pos_order/pos_order.js b/salesperson_pos/static/src/pos_order/pos_order.js new file mode 100644 index 00000000000..aa703ad5063 --- /dev/null +++ b/salesperson_pos/static/src/pos_order/pos_order.js @@ -0,0 +1,11 @@ +import { patch } from "@web/core/utils/patch"; +import { PosOrder } from "@point_of_sale/app/models/pos_order"; +patch(PosOrder.prototype, { + set_salesperson(salespersonID) { + try { + this.update({ salesperson_id: salespersonID }); + } catch (error) { + console.log("error", error); + } + }, +}); diff --git a/salesperson_pos/static/src/salesperson_button/salesperson_button.js b/salesperson_pos/static/src/salesperson_button/salesperson_button.js new file mode 100644 index 00000000000..5feb82522ba --- /dev/null +++ b/salesperson_pos/static/src/salesperson_button/salesperson_button.js @@ -0,0 +1,55 @@ +import { Component, useState } from "@odoo/owl"; +import { useService } from "@web/core/utils/hooks"; +import { usePos } from "@point_of_sale/app/store/pos_hook"; +import { AlertDialog } from "@web/core/confirmation_dialog/confirmation_dialog"; +import { SalespersonListPopup } from "../salesperson_dialog/salesperson_dialog"; + +export class SelectSalesPersonButton extends Component { + static template = "salesperson_pos.SelectSalesPersonButton"; + static components = { SalespersonListPopup }; + static props = {}; + setup() { + this.pos = usePos(); + this.dialog = useService("dialog"); + this.orm = useService("orm"); + this.state = useState({ + selectedSalesperson: null, + }); + } + + async SelectSalesPerson() { + const currentOrder = this.pos.get_order(); + + if (!currentOrder) { + return false; + } + + try { + const salespersonList = await this.orm.searchRead( + "hr.employee", + [], + ["id", "name", "work_email"] + ); + + if (salespersonList.length === 0) { + this.dialog.add(AlertDialog, { + title: "No Salesperson", + body: "No salesperson found in the system.", + }); + return; + } + this.dialog.add(SalespersonListPopup, { + title: "Select Salesperson", + salespersonList, + confirm: (salesperson) => { + this.state.selectedSalesperson = salesperson; + if (salesperson) { + currentOrder.set_salesperson(salesperson?.id); + } + }, + }); + } catch (error) { + console.log(error); + } + } +} diff --git a/salesperson_pos/static/src/salesperson_button/salesperson_button.xml b/salesperson_pos/static/src/salesperson_button/salesperson_button.xml new file mode 100644 index 00000000000..ef4103e034d --- /dev/null +++ b/salesperson_pos/static/src/salesperson_button/salesperson_button.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/salesperson_pos/static/src/salesperson_dialog/saleperson_dialog.xml b/salesperson_pos/static/src/salesperson_dialog/saleperson_dialog.xml new file mode 100644 index 00000000000..815a50e50fa --- /dev/null +++ b/salesperson_pos/static/src/salesperson_dialog/saleperson_dialog.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + +
NameEmail
+ + + +
+ + +
+ +
+
+
+
+
diff --git a/salesperson_pos/static/src/salesperson_dialog/salesperson_dialog.js b/salesperson_pos/static/src/salesperson_dialog/salesperson_dialog.js new file mode 100644 index 00000000000..082e7b91866 --- /dev/null +++ b/salesperson_pos/static/src/salesperson_dialog/salesperson_dialog.js @@ -0,0 +1,26 @@ +import { Component, useState } from "@odoo/owl"; +import { Dialog } from "@web/core/dialog/dialog"; +export class SalespersonListPopup extends Component { + static template = "salesperson_pos.SalespersonListPopup"; + static props = { + title: String, + salespersonList: Array, + confirm: Function, + close: Function, + }; + + static components = { Dialog }; + setup() { + this.selectSalesperson = this.selectSalesperson.bind(this); + } + + selectSalesperson(salesperson) { + this.props.confirm(salesperson); + this.props.close(); + } + + cancelSelection() { + this.props.confirm(null); + this.props.close(); + } +} diff --git a/salesperson_pos/views/pos_order_views.xml b/salesperson_pos/views/pos_order_views.xml new file mode 100644 index 00000000000..9f2c2f790f7 --- /dev/null +++ b/salesperson_pos/views/pos_order_views.xml @@ -0,0 +1,24 @@ + + + + pos.order.list.inherit + pos.order + + + + + + + + + + pos.order.form.inherit + pos.order + + + + + + + +