You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

110 lines
4.9 KiB

odoo.define('pos_discount_manager.ValidateManager', function(require) {
'use strict';
var models = require('point_of_sale.models');
const Registries = require('point_of_sale.Registries');
var PaymentScreen = require('point_of_sale.PaymentScreen')
const ValidateManagers = (PaymentScreen) =>
class extends PaymentScreen {
/**
*Override the validate button to approve discount limit
*/
async _finalizeValidation() {
if ((this.currentOrder.is_paid_with_cash() || this.currentOrder.get_change()) && this.env.pos.config.iface_cashdrawer) {
this.env.pos.proxy.printer.open_cashbox();
}
this.currentOrder.initialize_validation_date();
let syncedOrderBackendIds = [];
try {
if (this.currentOrder.is_to_invoice()) {
syncedOrderBackendIds = await this.env.pos.push_and_invoice_order(
this.currentOrder
);
} else {
syncedOrderBackendIds = await this.env.pos.push_single_order(this.currentOrder);
}
} catch (error) {
if (error instanceof Error) {
throw error;
} else {
await this._handlePushOrderError(error);
}
}
if (syncedOrderBackendIds.length && this.currentOrder.wait_for_push_order()) {
const result = await this._postPushOrderResolve(
this.currentOrder,
syncedOrderBackendIds
);
if (!result) {
await this.showPopup('ErrorPopup', {
title: 'Error: no internet connection.',
body: error,
});
}
}
var order = this.env.pos.get_order();
var employee_dis = this.env.pos.get_cashier()['limited_discount'];
var employee_name = this.env.pos.get_cashier()['name']
var flag = 1;
var global;
var dis = 0;
for (var i = 0; i < order.orderlines.length; i++) {
dis = dis + order.orderlines.models[i].discount;
if (order.orderlines.models[i].discount > employee_dis || order.orderlines.models[i].disc_percentage > employee_dis || dis > employee_dis) {
flag = 0;
}
}
if (flag != 1) {
const {
confirmed,
payload
} = await this.showPopup('NumberPopup', {
title: this.env._t(employee_name + ', your discount is over the limit. \n MANAGER pin for Approval'),
});
if (confirmed) {
var output = this.env.pos.employees.filter((obj) => obj.role == 'manager');
var pin = output[0].pin
if (Sha1.hash(payload) == pin) {
this.showScreen(this.nextScreen);
} else {
this.showPopup('ErrorPopup', {
title: this.env._t(" MANAGER RESTRICTED YOUR DISCOUNT"),
body: this.env._t(employee_name + ", Your Manager pin is INCORRECT."),
});
return false;
}
}
else {
return false;
}
}
this.currentOrder.finalized = true;
this.showScreen(this.nextScreen);
// If we succeeded in syncing the current order, and
// there are still other orders that are left unsynced,
// we ask the user if he is willing to wait and sync them.
if (syncedOrderBackendIds.length && this.env.pos.db.get_orders().length) {
const {
confirmed
} = await this.showPopup('ConfirmPopup', {
title: this.env._t('Remaining unsynced orders'),
body: this.env._t(
'There are unsynced orders. Do you want to sync these orders?'
),
});
if (confirmed) {
// Not yet sure if this should be awaited or not.
this.env.pos.push_orders();
}
}
}
}
Registries.Component.extend(PaymentScreen, ValidateManagers);
return ValidateManagers;
});