diff --git a/pos_salesperson/__init__.py b/pos_salesperson/__init__.py
new file mode 100644
index 00000000000..0650744f6bc
--- /dev/null
+++ b/pos_salesperson/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/pos_salesperson/__manifest__.py b/pos_salesperson/__manifest__.py
new file mode 100644
index 00000000000..64477638a99
--- /dev/null
+++ b/pos_salesperson/__manifest__.py
@@ -0,0 +1,21 @@
+{
+ 'name': "POS salesperson",
+ 'version': '1.0',
+ 'license': 'LGPL-3',
+ 'depends': ['pos_hr'],
+ 'author': "Kalpan Desai",
+ 'category': 'Sales/Point of Sale',
+ 'description': """
+ Salesperson in POS
+ """,
+ 'installable': True,
+ 'application': True,
+ 'data': [
+ 'views/pos_view.xml',
+ ],
+ 'assets': {
+ 'point_of_sale._assets_pos': [
+ 'pos_salesperson/static/src/**/*'
+ ]
+ },
+}
diff --git a/pos_salesperson/models/__init__.py b/pos_salesperson/models/__init__.py
new file mode 100644
index 00000000000..b2f4b5e054e
--- /dev/null
+++ b/pos_salesperson/models/__init__.py
@@ -0,0 +1,2 @@
+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..00e2e010e38
--- /dev/null
+++ b/pos_salesperson/models/pos_order.py
@@ -0,0 +1,11 @@
+from odoo import fields, models
+
+
+class PosOrder(models.Model):
+ _inherit = 'pos.order'
+
+ salesperson_id = fields.Many2one(
+ 'hr.employee',
+ string='Salesperson',
+ help='The salesperson responsible for this order.'
+ )
diff --git a/pos_salesperson/models/pos_session.py b/pos_salesperson/models/pos_session.py
new file mode 100644
index 00000000000..422da9185c5
--- /dev/null
+++ b/pos_salesperson/models/pos_session.py
@@ -0,0 +1,12 @@
+from odoo import api, models
+
+
+class PosSession(models.Model):
+ """Inherit the pos.session to load the data of hr.employee model"""
+ _inherit = 'pos.session'
+
+ @api.model
+ def _load_pos_data_models(self, config_id):
+ data = super()._load_pos_data_models(config_id)
+ data += ['hr.employee']
+ return data
diff --git a/pos_salesperson/static/src/salesperson_button/salesperson_button.js b/pos_salesperson/static/src/salesperson_button/salesperson_button.js
new file mode 100644
index 00000000000..12e6a85fa62
--- /dev/null
+++ b/pos_salesperson/static/src/salesperson_button/salesperson_button.js
@@ -0,0 +1,30 @@
+import { SalespersonList } from '../salesperson_list/salesperson_list';
+import { ControlButtons } from '@point_of_sale/app/screens/product_screen/control_buttons/control_buttons';
+import { makeAwaitable } from "@point_of_sale/app/store/make_awaitable_dialog";
+import { patch } from '@web/core/utils/patch';
+import { useState } from '@odoo/owl';
+
+patch(ControlButtons.prototype, {
+ setup(){
+ super.setup();
+ this.state = useState({
+ salesperson_id: null,
+ });
+ },
+ async selectSalesperson() {
+ const currentOrder = this.pos.get_order();
+ if (!currentOrder) {
+ return;
+ }
+
+ const currentSalesperson = currentOrder.salesperson_id || null;
+ const payload = await makeAwaitable(this.dialog, SalespersonList, {
+ salesperson: currentSalesperson,
+ getPayload: (newSalesperson) => newSalesperson || null,
+ });
+ this.state.salesperson_id = payload || null;
+ currentOrder.salesperson_id = payload || null;
+ return currentOrder.salesperson_id;
+
+ }
+})
diff --git a/pos_salesperson/static/src/salesperson_button/salesperson_button.xml b/pos_salesperson/static/src/salesperson_button/salesperson_button.xml
new file mode 100644
index 00000000000..590484814c1
--- /dev/null
+++ b/pos_salesperson/static/src/salesperson_button/salesperson_button.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pos_salesperson/static/src/salesperson_list/salesperson_list.js b/pos_salesperson/static/src/salesperson_list/salesperson_list.js
new file mode 100644
index 00000000000..26d36d80374
--- /dev/null
+++ b/pos_salesperson/static/src/salesperson_list/salesperson_list.js
@@ -0,0 +1,42 @@
+import { _t } from "@web/core/l10n/translation";
+import { useService } from "@web/core/utils/hooks";
+import { Dialog } from "@web/core/dialog/dialog";
+import { usePos } from "@point_of_sale/app/store/pos_hook";
+import { Component, useState } from "@odoo/owl";
+import { useHotkey } from "@web/core/hotkeys/hotkey_hook";
+
+
+export class SalespersonList extends Component {
+ static template = "POS_Salesperson.SalespersonList";
+ static components = { Dialog };
+ static props = {
+ salesperson: {
+ optional: true,
+ type: [{ value: null }, Object],
+ },
+ getPayload : { type: Function },
+ close : { type: Function }
+ }
+
+ setup() {
+ this.pos = usePos();
+ this.ui = useState(useService("ui"));
+ this.dialog = useService("dialog");
+
+ this.state = useState({
+ query: null,
+ previousQuery: "",
+ currentOffset: 0,
+ });
+ useHotkey("enter", () => this.onEnter());
+ }
+ getSalesPerson(){
+ const salesperson = this.pos.models['hr.employee'].getAll();
+ return salesperson;
+ }
+
+ clickSalesPerson(salesperson) {
+ this.props.getPayload(salesperson);
+ this.props.close();
+ }
+}
diff --git a/pos_salesperson/static/src/salesperson_list/salesperson_list.xml b/pos_salesperson/static/src/salesperson_list/salesperson_list.xml
new file mode 100644
index 00000000000..8b81271a805
--- /dev/null
+++ b/pos_salesperson/static/src/salesperson_list/salesperson_list.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
diff --git a/pos_salesperson/views/pos_view.xml b/pos_salesperson/views/pos_view.xml
new file mode 100644
index 00000000000..2a461bfaff3
--- /dev/null
+++ b/pos_salesperson/views/pos_view.xml
@@ -0,0 +1,24 @@
+
+
+
+ pos.order.form.inherit
+ pos.order
+
+
+
+
+
+
+
+
+
+ pos.order.list.inherit
+ pos.order
+
+
+
+
+
+
+
+