Attached Files | issue35444.commit [^] (18,154 bytes) 2017-03-16 11:30
issue35444_16Q4.diff [^] (15,860 bytes) 2017-03-20 16:49 [Show Content] [Hide Content]diff --git a/src/org/openbravo/retail/posterminal/OBPOSComponentProvider.java b/src/org/openbravo/retail/posterminal/OBPOSComponentProvider.java
--- a/src/org/openbravo/retail/posterminal/OBPOSComponentProvider.java
+++ b/src/org/openbravo/retail/posterminal/OBPOSComponentProvider.java
@@ -255,7 +255,7 @@
"model/discounts",
// Hook
- "components/menuhook", "components/hookPreDeleteLine",
+ "components/menuhook",
// Websockets
"utils/rfidWebsocket",
diff --git a/web/org.openbravo.retail.posterminal/js/components/hookPreDeleteLine.js b/web/org.openbravo.retail.posterminal/js/components/hookPreDeleteLine.js
deleted file mode 100644
--- a/web/org.openbravo.retail.posterminal/js/components/hookPreDeleteLine.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- ************************************************************************************
- * Copyright (C) 2015-2016 Openbravo S.L.U.
- * Licensed under the Openbravo Commercial License version 1.0
- * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
- * or in the legal folder of this module distribution.
- ************************************************************************************
- */
-
-/*global enyo */
-
-OB.UTIL.HookManager.registerHook('OBPOS_PreDeleteLine', function (args, c) {
- enyo.$.scrim.show();
- args.order.get('lines').forEach(function (line, idx) {
- line.set('undoPosition', idx);
- });
- OB.UTIL.HookManager.callbackExecutor(args, c);
-});
\ No newline at end of file
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/editline.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/editline.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/editline.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/editline.js
@@ -187,48 +187,9 @@
i18nContent: 'OBPOS_ButtonDelete',
classes: 'btnlink-orange',
tap: function () {
- var me = this,
- order = this.model.get('order');
-
- function callback() {
- OB.UTIL.HookManager.executeHooks('OBPOS_PostDeleteLine', {
- order: order,
- selectedLines: me.owner.owner.selectedModels
- }, function () {
- order.unset('preventServicesUpdate');
- order.unset('deleting');
- order.get('lines').trigger('updateRelations');
- order.calculateReceipt();
- enyo.$.scrim.hide();
- });
- }
- OB.UTIL.HookManager.executeHooks('OBPOS_PreDeleteLine', {
- order: me.owner.owner.receipt,
- selectedLines: me.owner.owner.selectedModels
- }, function () {
- me.owner.owner.receipt.set('undo', null);
- if (order && order.get('isQuotation') && order.get('hasbeenpaid') === 'Y') {
- me.owner.owner.doShowPopup({
- popup: 'modalNotEditableOrder'
- });
- return;
- }
- OB.UTIL.Approval.requestApproval(
- me.model, 'OBPOS_approval.deleteLine', function (approved, supervisor, approvalType) {
- if (approved) {
- order.set('preventServicesUpdate', true);
- order.set('deleting', true);
- if (me.owner.owner.selectedModels && me.owner.owner.selectedModels.length > 1) {
- order.deleteLines(me.owner.owner.selectedModels, 0, me.owner.owner.selectedModels.length, callback);
- order.trigger('scan');
- } else {
- me.owner.owner.doDeleteLine({
- line: me.owner.owner.line,
- callback: callback
- });
- }
- }
- });
+ this.owner.owner.doDeleteLine({
+ line: this.owner.owner.line,
+ selectedModels: this.owner.owner.selectedModels
});
},
init: function (model) {
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/keyboardorder.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/keyboardorder.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/keyboardorder.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/keyboardorder.js
@@ -1,6 +1,6 @@
/*
************************************************************************************
- * Copyright (C) 2012-2016 Openbravo S.L.U.
+ * Copyright (C) 2012-2017 Openbravo S.L.U.
* Licensed under the Openbravo Commercial License version 1.0
* You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
* or in the legal folder of this module distribution.
@@ -22,7 +22,8 @@
onAddProduct: '',
onSetDiscountQty: '',
onDiscountsMode: '',
- onSetMultiSelectionItems: ''
+ onSetMultiSelectionItems: '',
+ onDeleteLine: ''
},
discountsMode: false,
handlers: {
@@ -213,34 +214,13 @@
// action bindable to a command that completely deletes a product from the order list
var actionDeleteLine = function (keyboard) {
- function callback() {
- OB.UTIL.HookManager.executeHooks('OBPOS_PostDeleteLine', {
- order: me.receipt,
- selectedLines: me.selectedModels
- }, function () {
- keyboard.receipt.unset('preventServicesUpdate');
- keyboard.receipt.unset('deleting');
- keyboard.receipt.get('lines').trigger('updateRelations');
- keyboard.receipt.calculateReceipt();
- enyo.$.scrim.hide();
- });
- }
if (!me.validateReceipt(keyboard, true)) {
return true;
}
if (keyboard.line) {
- OB.UTIL.HookManager.executeHooks('OBPOS_PreDeleteLine', {
- order: me.receipt,
- selectedLines: me.selectedModels
- }, function () {
- keyboard.receipt.set('preventServicesUpdate', true);
- keyboard.receipt.set('deleting', true);
- if (me.selectedModels.length > 1) {
- keyboard.receipt.deleteLines(me.selectedModels, 0, me.selectedModels.length, callback);
- } else {
- keyboard.receipt.deleteLine(keyboard.line, false, callback);
- }
- keyboard.receipt.trigger('scan');
+ keyboard.doDeleteLine({
+ line: keyboard.line,
+ selectedModels: keyboard.selectedModels
});
}
};
@@ -250,19 +230,6 @@
var value = OB.I18N.parseNumber(txt),
toadd;
- function callback() {
- OB.UTIL.HookManager.executeHooks('OBPOS_PostDeleteLine', {
- order: me.receipt,
- selectedLines: me.selectedModels
- }, function () {
- keyboard.receipt.unset('preventServicesUpdate');
- keyboard.receipt.unset('deleting');
- keyboard.receipt.get('lines').trigger('updateRelations');
- keyboard.receipt.calculateReceipt();
- enyo.$.scrim.hide();
- });
- }
-
if (!keyboard.line) {
return true;
}
@@ -285,22 +252,9 @@
}
if (toadd !== 0) {
if (value === 0) { // If final quantity will be 0 then request approval
- OB.UTIL.Approval.requestApproval(me.model, 'OBPOS_approval.deleteLine', function (approved, supervisor, approvalType) {
- if (approved) {
- OB.UTIL.HookManager.executeHooks('OBPOS_PreDeleteLine', {
- order: me.receipt,
- selectedLines: me.selectedModels
- }, function () {
- keyboard.receipt.set('preventServicesUpdate', true);
- keyboard.receipt.set('deleting', true);
- if (me.selectedModels.length > 1) {
- keyboard.receipt.deleteLines(me.selectedModels, 0, me.selectedModels.length, callback);
- } else {
- keyboard.receipt.deleteLine(me.line, false, callback);
- }
- keyboard.receipt.trigger('scan');
- });
- }
+ keyboard.doDeleteLine({
+ line: keyboard.line,
+ selectedModels: keyboard.selectedModels
});
} else {
actionAddProduct(keyboard, toadd);
@@ -427,19 +381,6 @@
return;
}
- function callback() {
- OB.UTIL.HookManager.executeHooks('OBPOS_PostDeleteLine', {
- order: me.receipt,
- selectedLines: me.selectedModels
- }, function () {
- keyboard.receipt.unset('preventServicesUpdate');
- keyboard.receipt.unset('deleting');
- keyboard.receipt.get('lines').trigger('updateRelations');
- keyboard.receipt.calculateReceipt();
- enyo.$.scrim.hide();
- });
- }
-
if ((!_.isNull(txt) || !_.isUndefined(txt)) && !_.isNaN(OB.I18N.parseNumber(txt))) {
qty = OB.I18N.parseNumber(txt);
if (!me.validateQuantity(keyboard, qty)) {
@@ -467,19 +408,6 @@
return true;
}
- function callback() {
- OB.UTIL.HookManager.executeHooks('OBPOS_PostDeleteLine', {
- order: me.receipt,
- selectedLines: me.selectedModels
- }, function () {
- keyboard.receipt.unset('preventServicesUpdate');
- keyboard.receipt.unset('deleting');
- keyboard.receipt.get('lines').trigger('updateRelations');
- keyboard.receipt.calculateReceipt();
- enyo.$.scrim.hide();
- });
- }
-
function actionAddProducts() {
keyboard.receipt.set('undo', null);
if (me.selectedModels.length > 1) {
@@ -502,24 +430,9 @@
value = keyboard.line.get('qty') - qty;
}
if (value === 0) { // If final quantity will be 0 then request approval
- OB.UTIL.Approval.requestApproval(me.model, 'OBPOS_approval.deleteLine', function (approved, supervisor, approvalType) {
- if (approved) {
- OB.UTIL.HookManager.executeHooks('OBPOS_PreDeleteLine', {
- order: me.receipt,
- selectedLines: me.selectedModels
- }, function () {
- keyboard.receipt.set('undo', null);
- keyboard.line.set('deleteApproved', true);
- keyboard.receipt.set('preventServicesUpdate', true);
- keyboard.receipt.set('deleting', true);
- if (me.selectedModels.length > 1) {
- keyboard.receipt.deleteLines(me.selectedModels, 0, me.selectedModels.length, callback);
- } else {
- keyboard.receipt.deleteLine(me.line, false, callback);
- }
- keyboard.receipt.trigger('scan');
- });
- }
+ keyboard.doDeleteLine({
+ line: keyboard.line,
+ selectedModels: keyboard.selectedModels
});
} else {
var approvalNeeded = false,
@@ -637,12 +550,7 @@
stateless: true,
action: function (keyboard) {
if (keyboard.line) {
- OB.UTIL.Approval.requestApproval(me.model, 'OBPOS_approval.deleteLine', function (approved, supervisor, approvalType) {
- if (approved) {
- keyboard.line.set('deleteApproved', true);
- actionDeleteLine(keyboard);
- }
- });
+ actionDeleteLine(keyboard);
}
}
});
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/pointofsale.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/pointofsale.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/pointofsale.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/pointofsale.js
@@ -850,18 +850,95 @@
this.tabChange(inSender, inEvent);
},
deleteLine: function (inSender, inEvent) {
+ var me = this,
+ ln = inEvent.line,
+ selectedModels = inEvent.selectedModels,
+ receipt = this.model.get('order');
+
+ function postDeleteLine() {
+ OB.UTIL.HookManager.executeHooks('OBPOS_PostDeleteLine', {
+ order: receipt,
+ selectedLines: selectedModels
+ }, function () {
+ receipt.unset('preventServicesUpdate');
+ receipt.unset('deleting');
+ receipt.get('lines').trigger('updateRelations');
+ receipt.calculateReceipt();
+ enyo.$.scrim.hide();
+ });
+ }
+
+ function preDeleteLine() {
+ OB.UTIL.HookManager.executeHooks('OBPOS_PreDeleteLine', {
+ order: receipt,
+ selectedLines: selectedModels
+ }, function () {
+ enyo.$.scrim.show();
+ receipt.get('lines').forEach(function (line, idx) {
+ line.set('undoPosition', idx);
+ });
+ receipt.set('undo', null);
+ receipt.set('preventServicesUpdate', true);
+ receipt.set('deleting', true);
+ if (selectedModels.length > 1) {
+ receipt.deleteLines(selectedModels, 0, selectedModels.length, postDeleteLine);
+ } else {
+ receipt.deleteLine(ln, false, postDeleteLine);
+ }
+ receipt.trigger('scan');
+ });
+ }
+
+
+ //Editable Validation
if (this.model.get('order').get('isEditable') === false) {
this.doShowPopup({
popup: 'modalNotEditableOrder'
});
return true;
}
- var line = inEvent.line,
- receipt = this.model.get('order');
- if (line && receipt) {
- receipt.deleteLine(line, false, inEvent.callback);
- receipt.trigger('scan');
+
+ //Services validation
+ var unGroupedServiceLines = _.filter(selectedModels, function (line) {
+ return line.get('product').get('productType') === 'S' && line.get('product').get('quantityRule') === 'PP' && !line.get('groupService') && line.has('relatedLines') && line.get('relatedLines').length > 0 && !line.get('originalOrderLineId');
+ });
+ if (unGroupedServiceLines && unGroupedServiceLines.length > 0) {
+ var i, j, serviceQty, productQty, uniqueServices, getServiceQty, getProductQty;
+ uniqueServices = _.uniq(unGroupedServiceLines, false, function (line) {
+ return line.get('product').get('id') + line.get('relatedLines')[0].orderlineId;
+ });
+ getServiceQty = function (service) {
+ return _.filter(unGroupedServiceLines, function (line) {
+ return line.get('product').get('id') === service.get('product').get('id') && line.get('relatedLines')[0].orderlineId === service.get('relatedLines')[0].orderlineId;
+ }).length;
+ };
+ getProductQty = function (service) {
+ return _.find(receipt.get('lines').models, function (line) {
+ return _.indexOf(_.pluck(service.get('relatedLines'), 'orderlineId'), line.get('id')) !== -1;
+ }).get('qty');
+ };
+
+ for (i = 0; i < uniqueServices.length; i++) {
+ serviceQty = getServiceQty(uniqueServices[i]);
+ productQty = getProductQty(uniqueServices[i]);
+ if (productQty && productQty !== serviceQty) {
+ OB.UTIL.showConfirmation.display(OB.I18N.getLabel('OBPOS_LineCanNotBeDeleted'), OB.I18N.getLabel('OBPOS_AllServiceLineMustSelectToDelete'), [{
+ label: OB.I18N.getLabel('OBMOBC_LblOk')
+ }]);
+ return;
+ }
+ }
}
+
+ OB.UTIL.Approval.requestApproval(me.model, 'OBPOS_approval.deleteLine', function (approved, supervisor, approvalType) {
+ if (approved) {
+ ln.set('deleteApproved', true);
+ selectedModels.forEach(function (line, idx) {
+ line.set('deleteApproved', true);
+ });
+ preDeleteLine();
+ }
+ });
},
editLine: function (inSender, inEvent) {
if (this.model.get('order').get('isEditable') === false) {
|