summaryrefslogtreecommitdiff
path: root/addons/pos_hr/static/src/js/models.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/pos_hr/static/src/js/models.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (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.js97
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;
+ },
+});
+
+});