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
+
+
+
+
+
+
+
+