diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/pos_hr/static/src/js/models.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/pos_hr/static/src/js/models.js')
| -rw-r--r-- | addons/pos_hr/static/src/js/models.js | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/addons/pos_hr/static/src/js/models.js b/addons/pos_hr/static/src/js/models.js new file mode 100644 index 00000000..9b4c8f4a --- /dev/null +++ b/addons/pos_hr/static/src/js/models.js @@ -0,0 +1,97 @@ +odoo.define('pos_hr.employees', function (require) { + "use strict"; + +var models = require('point_of_sale.models'); + +models.load_models([{ + model: 'hr.employee', + fields: ['name', 'id', 'user_id'], + domain: function(self){ + return self.config.employee_ids.length > 0 + ? [ + '&', + ['company_id', '=', self.config.company_id[0]], + '|', + ['user_id', '=', self.user.id], + ['id', 'in', self.config.employee_ids], + ] + : [['company_id', '=', self.config.company_id[0]]]; + }, + loaded: function(self, employees) { + if (self.config.module_pos_hr) { + self.employees = employees; + self.employee_by_id = {}; + self.employees.forEach(function(employee) { + self.employee_by_id[employee.id] = employee; + var hasUser = self.users.some(function(user) { + if (user.id === employee.user_id[0]) { + employee.role = user.role; + return true; + } + return false; + }); + if (!hasUser) { + employee.role = 'cashier'; + } + }); + } + } +}]); + +var posmodel_super = models.PosModel.prototype; +models.PosModel = models.PosModel.extend({ + load_server_data: function () { + var self = this; + return posmodel_super.load_server_data.apply(this, arguments).then(function () { + var employee_ids = _.map(self.employees, function(employee){return employee.id;}); + var records = self.rpc({ + model: 'hr.employee', + method: 'get_barcodes_and_pin_hashed', + args: [employee_ids], + }); + return records.then(function (employee_data) { + self.employees.forEach(function (employee) { + var data = _.findWhere(employee_data, {'id': employee.id}); + if (data !== undefined){ + employee.barcode = data.barcode; + employee.pin = data.pin; + } + }); + }); + }); + }, + set_cashier: function(employee) { + posmodel_super.set_cashier.apply(this, arguments); + const selectedOrder = this.get_order(); + if (selectedOrder && !selectedOrder.get_orderlines().length) { + // Order without lines can be considered to be un-owned by any employee. + // We set the employee on that order to the currently set employee. + selectedOrder.employee = employee; + } + } +}); + +var super_order_model = models.Order.prototype; +models.Order = models.Order.extend({ + initialize: function (attributes, options) { + super_order_model.initialize.apply(this, arguments); + if (!options.json) { + this.employee = this.pos.get_cashier(); + } + }, + init_from_JSON: function (json) { + super_order_model.init_from_JSON.apply(this, arguments); + if (this.pos.config.module_pos_hr) { + this.employee = this.pos.employee_by_id[json.employee_id]; + } + }, + export_as_JSON: function () { + const json = super_order_model.export_as_JSON.apply(this, arguments); + if (this.pos.config.module_pos_hr) { + json.employee_id = this.employee ? this.employee.id : false; + } + return json; + }, +}); + +}); |
