diff --git a/pos_salesperson/__init__.py b/pos_salesperson/__init__.py new file mode 100644 index 00000000000..d6210b1285d --- /dev/null +++ b/pos_salesperson/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/pos_salesperson/__manifest__.py b/pos_salesperson/__manifest__.py new file mode 100644 index 00000000000..8159ac96c1d --- /dev/null +++ b/pos_salesperson/__manifest__.py @@ -0,0 +1,13 @@ +{ + "name": "Pos Salesperson", + "depends": ["pos_hr"], + "version": "0.1", + "license": "LGPL-3", + "installable": True, + "data": ["views/pos_order_views.xml"], + "assets": { + "point_of_sale._assets_pos": [ + "pos_salesperson/static/src/app/**/*" + ] + } +} diff --git a/pos_salesperson/models/__init__.py b/pos_salesperson/models/__init__.py new file mode 100644 index 00000000000..b111786fe6e --- /dev/null +++ b/pos_salesperson/models/__init__.py @@ -0,0 +1,4 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import pos_order +from . import pos_session diff --git a/pos_salesperson/models/pos_order.py b/pos_salesperson/models/pos_order.py new file mode 100644 index 00000000000..aecd27bb0b9 --- /dev/null +++ b/pos_salesperson/models/pos_order.py @@ -0,0 +1,7 @@ +from odoo import models, fields + + +class PosOrder(models.Model): + _inherit = "pos.order" + + salesperson_id = fields.Many2one("hr.employee", string="Salesperson") diff --git a/pos_salesperson/models/pos_session.py b/pos_salesperson/models/pos_session.py new file mode 100644 index 00000000000..850d6fa9a64 --- /dev/null +++ b/pos_salesperson/models/pos_session.py @@ -0,0 +1,10 @@ +from odoo import models + + +class PosSession(models.Model): + _inherit = "pos.session" + + def _load_pos_data_models(self, config_id): + models = super()._load_pos_data_models(config_id) + models += ["hr.employee"] + return models diff --git a/pos_salesperson/static/src/app/components/control_button/control_button.js b/pos_salesperson/static/src/app/components/control_button/control_button.js new file mode 100644 index 00000000000..d1c3cb3d41d --- /dev/null +++ b/pos_salesperson/static/src/app/components/control_button/control_button.js @@ -0,0 +1,11 @@ +import { patch } from "@web/core/utils/patch"; +import { ControlButtons } from "@point_of_sale/app/screens/product_screen/control_buttons/control_buttons"; +import { SalespersonButton } from "@pos_salesperson/app/components/salesperson_button/salesperson_button"; + + +patch(ControlButtons,{ + components:{ + ...ControlButtons.components, + SalespersonButton + } +}) diff --git a/pos_salesperson/static/src/app/components/control_button/control_button.xml b/pos_salesperson/static/src/app/components/control_button/control_button.xml new file mode 100644 index 00000000000..5f4457f350d --- /dev/null +++ b/pos_salesperson/static/src/app/components/control_button/control_button.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pos_salesperson/static/src/app/components/salesperson_button/salesperson_button.js b/pos_salesperson/static/src/app/components/salesperson_button/salesperson_button.js new file mode 100644 index 00000000000..0389132fef1 --- /dev/null +++ b/pos_salesperson/static/src/app/components/salesperson_button/salesperson_button.js @@ -0,0 +1,39 @@ +import { useService } from "@web/core/utils/hooks"; +import { _t } from "@web/core/l10n/translation"; +import { usePos } from "@point_of_sale/app/store/pos_hook"; +import { makeAwaitable } from "@point_of_sale/app/store/make_awaitable_dialog"; +import { SelectionPopup } from "@point_of_sale/app/utils/input_popups/selection_popup"; +import { Component, useState } from "@odoo/owl"; + + +export class SalespersonButton extends Component{ + static template = "pos_salesperson.SalespersonButton"; + + setup(){ + this.state = useState({selectedSalesPerson:""}) + this.dialog = useService("dialog"); + this.pos = usePos(); + } + + async chooseSalesPerson(){ + const order = this.pos.get_order(); + const allSalesPersonList = this.pos.models?.["hr.employee"]; + + let salesPersonList = allSalesPersonList.map((s)=>({ + id:s.id, + item:s, + label:s.name, + isSelected:false + })) + + const selectedSalesPerson = await makeAwaitable(this.dialog, SelectionPopup, { + list: salesPersonList, + title: _t("Select the salesperson"), + }); + + if(selectedSalesPerson){ + this.state.selectedSalesPerson = selectedSalesPerson; + order.salesperson_id = selectedSalesPerson; + } + } +} diff --git a/pos_salesperson/static/src/app/components/salesperson_button/salesperson_button.xml b/pos_salesperson/static/src/app/components/salesperson_button/salesperson_button.xml new file mode 100644 index 00000000000..0c87c7a84d0 --- /dev/null +++ b/pos_salesperson/static/src/app/components/salesperson_button/salesperson_button.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/pos_salesperson/views/pos_order_views.xml b/pos_salesperson/views/pos_order_views.xml new file mode 100644 index 00000000000..8321d1256da --- /dev/null +++ b/pos_salesperson/views/pos_order_views.xml @@ -0,0 +1,22 @@ + + + pos.order.form + pos.order + + + + + + + + + pos.order.list + pos.order + + + + + + + +