Attached Files | OBPOS_PreProcessActions.diff [^] (26,747 bytes) 2019-11-12 11:28 [Show Content] [Hide Content]diff --git a/src/org/openbravo/retail/posterminal/OrderLoader.java b/src/org/openbravo/retail/posterminal/OrderLoader.java
--- a/src/org/openbravo/retail/posterminal/OrderLoader.java
+++ b/src/org/openbravo/retail/posterminal/OrderLoader.java
@@ -1305,10 +1305,10 @@
if (payment.optBoolean("isPrePayment", false)) {
continue;
}
-
+
BigDecimal amount = BigDecimal.valueOf(payment.getDouble("origAmount"))
.setScale(pricePrecision, RoundingMode.HALF_UP);
- if(amount.signum()==0) {
+ if (amount.signum() == 0) {
continue;
}
diff --git a/web/org.openbravo.retail.posterminal/js/data/dataordersave.js b/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
--- a/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
+++ b/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
@@ -124,7 +124,6 @@
context.receipt = model.get('order');
if (context.receipt.get('isbeingprocessed') === 'Y') {
-
// clean up some synched data as this method is called in synchronized mode also
OB.MobileApp.model.resetCheckpointData();
//The receipt has already been sent, it should not be sent again
@@ -134,8 +133,7 @@
var orderDate = new Date();
var normalizedCreationDate = OB.I18N.normalizeDate(context.receipt.get('creationDate'));
var creationDate;
- var frozenReceipt = new OB.Model.Order(),
- diffReceipt = new OB.Model.Order();
+ var diffReceipt = new OB.Model.Order();
if (normalizedCreationDate === null) {
creationDate = new Date();
normalizedCreationDate = OB.I18N.normalizeDate(creationDate);
@@ -150,7 +148,8 @@
model: model,
receipt: model.get('order')
}, function (args) {
- var receipt = args.context.receipt;
+ var receipt = args.context.receipt,
+ closedOrderList = [args.context.receipt];
if (args && args.cancellation && args.cancellation === true) {
args.context.receipt.set('isbeingprocessed', 'N');
args.context.receipt.set('hasbeenpaid', 'N');
@@ -166,221 +165,263 @@
args.context.receipt.setIsCalculateGrossLockState(false);
return true;
}
- OB.UTIL.clone(receipt, frozenReceipt);
-
- OB.UTIL.TicketCloseUtils.processChangePayments(frozenReceipt, function () {
- receipt.trigger('checkOpenDrawer');
- if (OB.UTIL.RfidController.isRfidConfigured()) {
- OB.UTIL.RfidController.processRemainingCodes(frozenReceipt);
- OB.UTIL.RfidController.updateEpcBuffers();
- }
+ //New Hook From Here
+ OB.UTIL.HookManager.executeHooks('OBPOS_PreProcessActions', {
+ closedOrder: model.get('order'),
+ closedOrderList: closedOrderList
+ }, function (args) {
+ var frozenOrderList = [];
+ var syncReceipt, updateCashup, completeOrder;
+
+ syncReceipt = function () {
- OB.trace('Execution of pre order save hook OK.');
- delete frozenReceipt.attributes.json;
- frozenReceipt.set('creationDate', normalizedCreationDate);
- frozenReceipt.set('timezoneOffset', creationDate.getTimezoneOffset());
- frozenReceipt.set('created', creationDate.getTime());
- frozenReceipt.set('obposCreatedabsolute', OB.I18N.formatDateISO(creationDate));
- frozenReceipt.set('orderDate', orderDate);
- frozenReceipt.set('movementDate', OB.I18N.normalizeDate(new Date()));
- frozenReceipt.set('accountingDate', OB.I18N.normalizeDate(new Date()));
- frozenReceipt.set('undo', null);
- frozenReceipt.set('multipleUndo', null);
-
- // Set the quantities to deliver
- frozenReceipt.setQuantitiesToDeliver();
+ var frozenReceipt = frozenOrderList[0],
+ syncSuccessCallback, syncErrorCallback, closeParamCallback, restoreReceiptCallback, serverMessageForQuotation, receiptForPostSyncReceipt;
+ // success transaction...
+ OB.info("[receipt.closed] Transaction success. ReceiptId: " + frozenReceipt.get('id'));
+ OB.info('Ticket closed: ', frozenReceipt.get('json').replace(/logclientErrors/g, "logErrors"), "caller: " + OB.UTIL.getStackTrace('Backbone.Events.trigger', true));
- frozenReceipt.set('paymentMethodKind', null);
- if (frozenReceipt.get('payments').length === 1 && frozenReceipt.get('completeTicket') && frozenReceipt.isFullyPaid()) {
- var payment = frozenReceipt.get('payments').models[0];
- frozenReceipt.set('paymentMethodKind', payment.get('kind'));
- }
-
- // multiterminal support
- // be sure that the active terminal is the one set as the order proprietary
- frozenReceipt.set('posTerminal', OB.MobileApp.model.get('terminal').id);
- frozenReceipt.set('posTerminal' + OB.Constants.FIELDSEPARATOR + OB.Constants.IDENTIFIER, OB.MobileApp.model.get('terminal')._identifier);
-
- frozenReceipt.get('approvals').forEach(function (approval) {
- if (typeof (approval.approvalType) === 'object') {
- approval.approvalMessage = OB.I18N.getLabel(approval.approvalType.message, approval.approvalType.params);
- approval.approvalType = approval.approvalType.approval;
+ // create a clone of the receipt to be used when executing the final callback
+ receipt.clearWith(frozenReceipt);
+ OB.UTIL.clone(receipt, diffReceipt);
+ if (OB.UTIL.HookManager.get('OBPOS_PostSyncReceipt')) {
+ receiptForPostSyncReceipt = new OB.Model.Order();
+ OB.UTIL.clone(frozenReceipt, receiptForPostSyncReceipt);
}
- });
- frozenReceipt.set('obposAppCashup', OB.MobileApp.model.get('terminal').cashUpId);
- // convert returns
- if (receipt.isNegative()) {
- _.forEach(frozenReceipt.get('payments').models, function (item) {
- if (!item.get('isPrePayment') && !item.get('reversedPaymentId') && !frozenReceipt.get('isPaid')) {
- item.set('amount', -item.get('amount'));
- if (item.get('amountRounded')) {
- item.set('amountRounded', -item.get('amountRounded'));
+ serverMessageForQuotation = function (frozenReceipt) {
+ var isLayaway = (frozenReceipt.get('orderType') === 2 || frozenReceipt.get('isLayaway'));
+ var currentDocNo = frozenReceipt.get('documentNo');
+ if (frozenReceipt && frozenReceipt.get('isQuotation')) {
+ OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_QuotationSaved', [currentDocNo]));
+ } else {
+ if (isLayaway) {
+ OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_MsgLayawaySaved', [currentDocNo]));
+ } else {
+ OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_MsgReceiptSaved', [currentDocNo]));
}
- item.set('origAmount', -item.get('origAmount'));
- if (item.get('origAmountRounded')) {
- item.set('origAmountRounded', -item.get('origAmountRounded'));
- }
- item.set('paid', -item.get('paid'));
- } else {
- item.set('paid', item.get('amount'));
}
- });
- }
-
- var successCallback = function () {
+ OB.trace('Order successfully removed.');
+ };
- var syncSuccessCallback, syncErrorCallback, closeParamCallback, restoreReceiptCallback, serverMessageForQuotation, receiptForPostSyncReceipt;
- // success transaction...
- OB.info("[receipt.closed] Transaction success. ReceiptId: " + frozenReceipt.get('id'));
- OB.info('Ticket closed: ', frozenReceipt.get('json').replace(/logclientErrors/g, "logErrors"), "caller: " + OB.UTIL.getStackTrace('Backbone.Events.trigger', true));
-
- // create a clone of the receipt to be used when executing the final callback
- receipt.clearWith(frozenReceipt);
- OB.UTIL.clone(receipt, diffReceipt);
- if (OB.UTIL.HookManager.get('OBPOS_PostSyncReceipt')) {
- receiptForPostSyncReceipt = new OB.Model.Order();
- OB.UTIL.clone(frozenReceipt, receiptForPostSyncReceipt);
+ closeParamCallback = function () {
+ if (eventParams && eventParams.callback) {
+ eventParams.callback({
+ frozenReceipt: frozenReceipt,
+ diffReceipt: diffReceipt,
+ isCancelled: false
+ });
}
+ };
- serverMessageForQuotation = function (frozenReceipt) {
- var isLayaway = (frozenReceipt.get('orderType') === 2 || frozenReceipt.get('isLayaway'));
- var currentDocNo = frozenReceipt.get('documentNo');
- if (frozenReceipt && frozenReceipt.get('isQuotation')) {
- OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_QuotationSaved', [currentDocNo]));
- } else {
- if (isLayaway) {
- OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_MsgLayawaySaved', [currentDocNo]));
- } else {
- OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_MsgReceiptSaved', [currentDocNo]));
- }
- }
- OB.trace('Order successfully removed.');
- };
+ syncSuccessCallback = function (callback, eventParams) {
+ if (OB.UTIL.HookManager.get('OBPOS_PostSyncReceipt') && (!eventParams || (eventParams && !eventParams.ignoreSyncProcess))) {
+ OB.UTIL.HookManager.executeHooks('OBPOS_PostSyncReceipt', {
+ receipt: receiptForPostSyncReceipt,
+ syncSuccess: true
+ }, function () {
+ callback();
+ });
+ } else {
+ callback();
+ }
+ };
+
+ restoreReceiptCallback = function () {
+ restoreReceiptOnError(eventParams, receipt);
+ };
- closeParamCallback = function () {
- if (eventParams && eventParams.callback) {
- eventParams.callback({
- frozenReceipt: frozenReceipt,
- diffReceipt: diffReceipt,
- isCancelled: false
- });
- }
- };
+ syncErrorCallback = function () {
+ if (OB.UTIL.HookManager.get('OBPOS_PostSyncReceipt')) {
+ OB.UTIL.HookManager.executeHooks('OBPOS_PostSyncReceipt', {
+ receipt: receiptForPostSyncReceipt,
+ syncSuccess: false
+ }, restoreReceiptCallback);
+ } else {
+ restoreReceiptCallback();
+ }
+ };
- syncSuccessCallback = function (callback, eventParams) {
- if (OB.UTIL.HookManager.get('OBPOS_PostSyncReceipt') && (!eventParams || (eventParams && !eventParams.ignoreSyncProcess))) {
- OB.UTIL.HookManager.executeHooks('OBPOS_PostSyncReceipt', {
- receipt: receiptForPostSyncReceipt,
- syncSuccess: true
- }, function () {
- callback();
- });
- } else {
- callback();
- }
- };
-
- restoreReceiptCallback = function () {
- restoreReceiptOnError(eventParams, receipt);
- };
-
- syncErrorCallback = function () {
- if (OB.UTIL.HookManager.get('OBPOS_PostSyncReceipt')) {
- OB.UTIL.HookManager.executeHooks('OBPOS_PostSyncReceipt', {
- receipt: receiptForPostSyncReceipt,
- syncSuccess: false
- }, restoreReceiptCallback);
- } else {
- restoreReceiptCallback();
- }
- };
-
- if (!OB.MobileApp.model.hasPermission('OBMOBC_SynchronizedMode', true)) {
- // the trigger is fired on the receipt object, as there is only 1 that is being updated
- receipt.trigger('integrityOk', frozenReceipt); // Is important for module print last receipt. This module listen trigger.
- closeParamCallback();
- }
+ if (!OB.MobileApp.model.hasPermission('OBMOBC_SynchronizedMode', true)) {
+ // the trigger is fired on the receipt object, as there is only 1 that is being updated
+ //TODO: Check this event
+ receipt.trigger('integrityOk', frozenReceipt); // Is important for module print last receipt. This module listen trigger.
+ closeParamCallback();
+ }
- OB.trace('Execution Sync process.');
- OB.MobileApp.model.runSyncProcess(function () {
- // in synchronized mode do the doc sequence update in the success
- if (OB.MobileApp.model.hasPermission('OBMOBC_SynchronizedMode', true)) {
- OB.Dal.transaction(function (tx) {
- OB.UTIL.calculateCurrentCash(null, tx);
- OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(frozenReceipt.get('documentnoSuffix'), frozenReceipt.get('quotationnoSuffix'), frozenReceipt.get('returnnoSuffix'), function () {
- // the trigger is fired on the receipt object, as there is only 1 that is being updated
- receipt.trigger('integrityOk', frozenReceipt); // Is important for module print last receipt. This module listen trigger.
- syncSuccessCallback(function () {
- serverMessageForQuotation(frozenReceipt);
- closeParamCallback();
- }, eventParams);
- }, tx);
- });
- } else {
- syncSuccessCallback(function () {
- serverMessageForQuotation(frozenReceipt);
- }, eventParams);
- }
- OB.debug("Ticket closed: runSyncProcess executed");
- }, function () {
- syncErrorCallback();
- });
- };
+ OB.trace('Execution Sync process.');
+ OB.MobileApp.model.runSyncProcess(function () {
+ // in synchronized mode do the doc sequence update in the success
+ if (OB.MobileApp.model.hasPermission('OBMOBC_SynchronizedMode', true)) {
+ OB.Dal.transaction(function (tx) {
+ OB.UTIL.calculateCurrentCash(null, tx);
+ OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(frozenReceipt.get('documentnoSuffix'), frozenReceipt.get('quotationnoSuffix'), frozenReceipt.get('returnnoSuffix'), function () {
+ // the trigger is fired on the receipt object, as there is only 1 that is being updated
+ //TODO: Check this event
+ receipt.trigger('integrityOk', frozenReceipt); // Is important for module print last receipt. This module listen trigger.
+ syncSuccessCallback(function () {
+ serverMessageForQuotation(frozenReceipt);
+ closeParamCallback();
+ }, eventParams);
+ }, tx);
+ });
+ } else {
+ syncSuccessCallback(function () {
+ serverMessageForQuotation(frozenReceipt);
+ }, eventParams);
+ }
+ OB.debug("Ticket closed: runSyncProcess executed");
+ }, function () {
+ syncErrorCallback();
+ });
+ };
+
+ updateCashup = function (idx, tx) {
+ if (idx === args.closedOrderList.length) {
+ OB.UTIL.setScanningFocus(true);
+ syncReceipt(tx);
+ return;
+ }
- var executePreSyncReceipt = function (tx) {
- OB.UTIL.HookManager.executeHooks('OBPOS_PreSyncReceipt', {
- receipt: frozenReceipt,
- model: model,
- tx: tx
- }, function (args) {
- frozenReceipt.set('json', JSON.stringify(frozenReceipt.serializeToJSON()));
- frozenReceipt.set('hasbeenpaid', 'Y');
- // Important: at this point, the frozenReceipt is considered final. Nothing must alter it
- // when all the properties of the frozenReceipt have been set, keep a copy
- OB.UTIL.clone(receipt, diffReceipt);
+ var frozenReceipt = frozenOrderList[idx];
+ OB.UTIL.cashUpReport(frozenReceipt, function (cashUp) {
+ var executePreSyncReceipt = function (tx) {
+ OB.UTIL.HookManager.executeHooks('OBPOS_PreSyncReceipt', {
+ receipt: frozenReceipt,
+ model: model,
+ tx: tx
+ }, function (args) {
+ frozenReceipt.set('json', JSON.stringify(frozenReceipt.serializeToJSON()));
+ frozenReceipt.set('hasbeenpaid', 'Y');
+ if (idx === OB.DEC.Zero) {
+ // Important: at this point, the frozenReceipt is considered final. Nothing must alter it
+ // when all the properties of the frozenReceipt have been set, keep a copy
+ OB.UTIL.clone(receipt, diffReceipt);
+ } else {
+ frozenReceipt.unset('preventOrderSave');
+ }
+ OB.Dal.saveInTransaction(tx, frozenReceipt, function () {
+ updateCashup(idx + 1, tx);
+ });
+ });
+ };
+
+ frozenReceipt.set('cashUpReportInformation', JSON.parse(cashUp.models[0].get('objToSend')));
+ frozenReceipt.set('json', JSON.stringify(frozenReceipt.serializeToJSON()));
+ if (OB.MobileApp.model.hasPermission('OBMOBC_SynchronizedMode', true)) {
OB.Dal.saveInTransaction(tx, frozenReceipt, function () {
- successCallback();
+ executePreSyncReceipt(tx);
});
- });
- };
-
- //Create the invoice
- frozenReceipt.generateInvoice(function (invoice) {
- if (invoice) {
- frozenReceipt.set('calculatedInvoice', invoice);
- }
- OB.info("[receipt.closed] Starting transaction. ReceiptId: " + frozenReceipt.get('id'));
- OB.Dal.transaction(function (tx) {
- OB.trace('Calculationg cashup information.');
- OB.UTIL.cashUpReport(frozenReceipt, function (cashUp) {
- frozenReceipt.set('cashUpReportInformation', JSON.parse(cashUp.models[0].get('objToSend')));
- frozenReceipt.set('json', JSON.stringify(frozenReceipt.serializeToJSON()));
- OB.UTIL.setScanningFocus(true);
- if (OB.MobileApp.model.hasPermission('OBMOBC_SynchronizedMode', true)) {
+ } else {
+ OB.UTIL.calculateCurrentCash(null, tx);
+ OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(frozenReceipt.get('documentnoSuffix'), frozenReceipt.get('quotationnoSuffix'), frozenReceipt.get('returnnoSuffix'), function () {
+ OB.trace('Saving receipt.');
OB.Dal.saveInTransaction(tx, frozenReceipt, function () {
executePreSyncReceipt(tx);
});
- } else {
- OB.UTIL.calculateCurrentCash(null, tx);
- OB.MobileApp.model.updateDocumentSequenceWhenOrderSaved(frozenReceipt.get('documentnoSuffix'), frozenReceipt.get('quotationnoSuffix'), frozenReceipt.get('returnnoSuffix'), function () {
- OB.trace('Saving receipt.');
- OB.Dal.saveInTransaction(tx, frozenReceipt, function () {
- executePreSyncReceipt(tx);
- });
- }, tx);
+ }, tx);
+ }
+ }, tx);
+ };
+
+ completeOrder = function (idx) {
+ var frozenReceipt = new OB.Model.Order(),
+ currentReceipt = args.closedOrderList[idx];
+ if (idx === args.closedOrderList.length) {
+ frozenReceipt = frozenOrderList[0];
+ OB.info("[receipt.closed] Starting transaction. ReceiptId: " + receipt.get('id'));
+ OB.Dal.transaction(function (tx) {
+ OB.trace('Calculationg cashup information.');
+ updateCashup(OB.DEC.Zero, tx);
+ }, function () {
+ // the transaction failed
+ OB.UTIL.showError("[receipt.closed] The transaction failed to be commited. ReceiptId: " + receipt.get('id'));
+ // rollback other changes
+ receipt.set('hasbeenpaid', 'N');
+ frozenReceipt.set('hasbeenpaid', 'N');
+ }, null);
+ return;
+ }
+
+ OB.UTIL.clone(currentReceipt, frozenReceipt);
+
+ frozenOrderList.push(frozenReceipt);
+
+ OB.UTIL.TicketCloseUtils.processChangePayments(frozenReceipt, function () {
+ receipt.trigger('checkOpenDrawer');
+
+ if (OB.UTIL.RfidController.isRfidConfigured()) {
+ OB.UTIL.RfidController.processRemainingCodes(frozenReceipt);
+ OB.UTIL.RfidController.updateEpcBuffers();
+ }
+
+ OB.trace('Execution of pre order save hook OK.');
+ delete frozenReceipt.attributes.json;
+ frozenReceipt.set('creationDate', normalizedCreationDate);
+ frozenReceipt.set('timezoneOffset', creationDate.getTimezoneOffset());
+ frozenReceipt.set('created', creationDate.getTime());
+ frozenReceipt.set('obposCreatedabsolute', OB.I18N.formatDateISO(creationDate));
+ frozenReceipt.set('orderDate', orderDate);
+ frozenReceipt.set('movementDate', OB.I18N.normalizeDate(new Date()));
+ frozenReceipt.set('accountingDate', OB.I18N.normalizeDate(new Date()));
+ frozenReceipt.set('undo', null);
+ frozenReceipt.set('multipleUndo', null);
+
+ // Set the quantities to deliver
+ frozenReceipt.setQuantitiesToDeliver();
+
+ frozenReceipt.set('paymentMethodKind', null);
+ if (frozenReceipt.get('payments').length === 1 && frozenReceipt.get('completeTicket') && frozenReceipt.isFullyPaid()) {
+ var payment = frozenReceipt.get('payments').models[0];
+ frozenReceipt.set('paymentMethodKind', payment.get('kind'));
+ }
+
+ // multiterminal support
+ // be sure that the active terminal is the one set as the order proprietary
+ frozenReceipt.set('posTerminal', OB.MobileApp.model.get('terminal').id);
+ frozenReceipt.set('posTerminal' + OB.Constants.FIELDSEPARATOR + OB.Constants.IDENTIFIER, OB.MobileApp.model.get('terminal')._identifier);
+
+ frozenReceipt.get('approvals').forEach(function (approval) {
+ if (typeof (approval.approvalType) === 'object') {
+ approval.approvalMessage = OB.I18N.getLabel(approval.approvalType.message, approval.approvalType.params);
+ approval.approvalType = approval.approvalType.approval;
}
- }, tx);
- }, function () {
- // the transaction failed
- OB.UTIL.showError("[receipt.closed] The transaction failed to be commited. ReceiptId: " + receipt.get('id'));
- // rollback other changes
- receipt.set('hasbeenpaid', 'N');
- frozenReceipt.set('hasbeenpaid', 'N');
- }, null);
- });
+ });
+
+ frozenReceipt.set('obposAppCashup', OB.MobileApp.model.get('terminal').cashUpId);
+ // convert returns
+ if (currentReceipt.isNegative()) {
+ _.forEach(frozenReceipt.get('payments').models, function (item) {
+ if (!item.get('isPrePayment') && !item.get('reversedPaymentId') && !frozenReceipt.get('isPaid')) {
+ item.set('amount', -item.get('amount'));
+ if (item.get('amountRounded')) {
+ item.set('amountRounded', -item.get('amountRounded'));
+ }
+ item.set('origAmount', -item.get('origAmount'));
+ if (item.get('origAmountRounded')) {
+ item.set('origAmountRounded', -item.get('origAmountRounded'));
+ }
+ item.set('paid', -item.get('paid'));
+ } else {
+ item.set('paid', item.get('amount'));
+ }
+ });
+ }
+
+ //Create the invoice
+ frozenReceipt.generateInvoice(function (invoice) {
+ if (invoice) {
+ frozenReceipt.set('calculatedInvoice', invoice);
+ }
+ completeOrder(idx + 1);
+ });
+ });
+ };
+ completeOrder(0);
+ //To Here
});
+ //
});
};
|