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