Attached Files | 41143.diff [^] (6,238 bytes) 2019-06-21 08:33 [Show Content] [Hide Content]diff --git a/src-db/database/sourcedata/AD_REF_LIST.xml b/src-db/database/sourcedata/AD_REF_LIST.xml
--- a/src-db/database/sourcedata/AD_REF_LIST.xml
+++ b/src-db/database/sourcedata/AD_REF_LIST.xml
@@ -2439,6 +2439,17 @@
<!--C445C8D95D5140F9B749D8BFBE9B2292--> <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
<!--C445C8D95D5140F9B749D8BFBE9B2292--></AD_REF_LIST>
+<!--C4DEF975175344FFBA6780B6E25647A8--><AD_REF_LIST>
+<!--C4DEF975175344FFBA6780B6E25647A8--> <AD_REF_LIST_ID><![CDATA[C4DEF975175344FFBA6780B6E25647A8]]></AD_REF_LIST_ID>
+<!--C4DEF975175344FFBA6780B6E25647A8--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--C4DEF975175344FFBA6780B6E25647A8--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--C4DEF975175344FFBA6780B6E25647A8--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--C4DEF975175344FFBA6780B6E25647A8--> <VALUE><![CDATA[OBPOS_ChangeServicePriceNeedApproval]]></VALUE>
+<!--C4DEF975175344FFBA6780B6E25647A8--> <NAME><![CDATA[Web POS Change Service Price Need Approval]]></NAME>
+<!--C4DEF975175344FFBA6780B6E25647A8--> <AD_REFERENCE_ID><![CDATA[A26BA480E2014707B47257024C3CBFF7]]></AD_REFERENCE_ID>
+<!--C4DEF975175344FFBA6780B6E25647A8--> <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
+<!--C4DEF975175344FFBA6780B6E25647A8--></AD_REF_LIST>
+
<!--C53C8C617332457D9B747A32AEB91EFF--><AD_REF_LIST>
<!--C53C8C617332457D9B747A32AEB91EFF--> <AD_REF_LIST_ID><![CDATA[C53C8C617332457D9B747A32AEB91EFF]]></AD_REF_LIST_ID>
<!--C53C8C617332457D9B747A32AEB91EFF--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/web/org.openbravo.retail.posterminal/js/actions/changeprice.js b/web/org.openbravo.retail.posterminal/js/actions/changeprice.js
--- a/web/org.openbravo.retail.posterminal/js/actions/changeprice.js
+++ b/web/org.openbravo.retail.posterminal/js/actions/changeprice.js
@@ -119,46 +119,76 @@
validatePrice()
.then(function() {
- // Finally price is editable...
- OB.UTIL.Approval.requestApproval(
- view.model,
- 'OBPOS_approval.setPrice',
- function(approved, supervisor, approvalType) {
- if (approved) {
- var approvals = receipt.get('approvals') || [];
- approvals.push({
- approvalType: {
- approval: 'OBPOS_approval.setPrice',
- message: 'OBPOS_approval.setPriceMessage',
- params: [
- selectedReceiptLine.get('product').get('_identifier'),
- OB.I18N.formatCurrency(selectedReceiptLine.getGross()),
- OB.I18N.formatCurrency(price)
- ]
- },
- userContact: supervisor.get('id'),
- created: new Date().getTime()
+ var callback = function() {
+ if (
+ OB.MobileApp.model.get('priceModificationReasons').length > 0
+ ) {
+ view.doShowPopup({
+ popup: 'modalPriceModification',
+ args: {
+ callback: setPrices,
+ selectedModels: selectedReceiptLines,
+ receipt: receipt,
+ line: selectedReceiptLine
+ }
});
- receipt.set('approvals', approvals);
- if (
- OB.MobileApp.model.get('priceModificationReasons').length >
- 0
- ) {
- view.doShowPopup({
- popup: 'modalPriceModification',
- args: {
- callback: setPrices,
- selectedModels: selectedReceiptLines,
- receipt: receipt,
- line: selectedReceiptLine
- }
+ } else {
+ setPrices();
+ }
+ },
+ needToLookForServices = false,
+ i = 0;
+
+ if (
+ !OB.MobileApp.model.hasPermission(
+ 'OBPOS_ChangeServicePriceNeedApproval',
+ true
+ )
+ ) {
+ // Iterate Selected Lines to look for services
+ for (i; i < selectedReceiptLines.length; i++) {
+ needToLookForServices = true;
+ if (
+ selectedReceiptLines[i].get('product').get('productType') ===
+ 'I'
+ ) {
+ needToLookForServices = false;
+ break;
+ }
+ }
+ }
+
+ if (!needToLookForServices) {
+ // Finally price is editable...
+ OB.UTIL.Approval.requestApproval(
+ view.model,
+ 'OBPOS_approval.setPrice',
+ function(approved, supervisor, approvalType) {
+ if (approved) {
+ var approvals = receipt.get('approvals') || [];
+ approvals.push({
+ approvalType: {
+ approval: 'OBPOS_approval.setPrice',
+ message: 'OBPOS_approval.setPriceMessage',
+ params: [
+ selectedReceiptLine.get('product').get('_identifier'),
+ OB.I18N.formatCurrency(
+ selectedReceiptLine.getGross()
+ ),
+ OB.I18N.formatCurrency(price)
+ ]
+ },
+ userContact: supervisor.get('id'),
+ created: new Date().getTime()
});
- } else {
- setPrices();
+ receipt.set('approvals', approvals);
+ callback();
}
}
- }
- );
+ );
+ } else {
+ callback();
+ }
})
.catch(function() {
// Ignore. User cancelled action
41143Test.diff [^] (7,446 bytes) 2019-06-24 07:34 [Show Content] [Hide Content]diff --git a/src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java b/src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java
--- a/src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java
+++ b/src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java
@@ -1425,6 +1425,8 @@
"products_row1_bestseller", EnyoKind.UNKOWN); //
public static TestIdConstructor BUTTON_PRODUCT_BESTSELLERS_MULTITOOL = new TestIdConstructor(
"Multi-tool", EnyoKind.PRODUCT); //
+ public static TestIdConstructor BUTTON_PRODUCT_GPSMINI = new TestIdConstructor(
+ "GPS Mini", EnyoKind.PRODUCT); //
public static TestIdConstructor BUTTON_FIRST_IDENTIFIER = new TestIdConstructor(
"productTable_row1_identifier", EnyoKind.UNKOWN); //
public static TestIdConstructor BUTTON_SECOND_IDENTIFIER = new TestIdConstructor(
diff --git a/src-test/org/openbravo/test/mobile/retail/pack/selenium/tests/multiselection/ChangePriceMultipleLinesServiceApproval.java b/src-test/org/openbravo/test/mobile/retail/pack/selenium/tests/multiselection/ChangePriceMultipleLinesServiceApproval.java
new file mode 100644
--- /dev/null
+++ b/src-test/org/openbravo/test/mobile/retail/pack/selenium/tests/multiselection/ChangePriceMultipleLinesServiceApproval.java
@@ -0,0 +1,140 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo Public License
+ * Version 1.0 (the "License"), being the Mozilla Public License
+ * Version 1.1 with a permitted attribution clause; you may not use this
+ * file except in compliance with the License. You may obtain a copy of
+ * the License at http://www.openbravo.com/legal/license.html
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ * The Original Code is Openbravo ERP.
+ * The Initial Developer of the Original Code is Openbravo S.L.U.
+ * All portions are Copyright (C) 2019 Openbravo S.L.U.
+ * All Rights Reserved.
+ * Contributor(s):
+ ************************************************************************
+ *
+ * @author GIG
+ *
+ */
+
+package org.openbravo.test.mobile.retail.pack.selenium.tests.multiselection;
+
+import org.junit.Test;
+import org.openbravo.test.mobile.core.selenium.SeleniumHelper;
+import org.openbravo.test.mobile.core.utils.TestLogger;
+import org.openbravo.test.mobile.retail.mobilecore.database.DatabaseHelperInsertUpdateOrDelete;
+import org.openbravo.test.mobile.retail.mobilecore.utils.RetailUtils;
+import org.openbravo.test.mobile.retail.pack.selenium.TestIdPack;
+import org.openbravo.test.mobile.retail.pack.selenium.terminals.WebPOSTerminalHelper;
+
+public class ChangePriceMultipleLinesServiceApproval extends WebPOSTerminalHelper {
+ final static String PRODUCT_NAME = "GPS Mini";
+ final static String APPROVAL_SET_PRICE_PREF_NAME = "OBPOS_approval.setPrice";
+ final static String APPROVAL_CHANGE_SERVICE_PRICE_PREF_NAME = "OBPOS_ChangeServicePriceNeedApproval";
+ final String APPROVAL_SET_PRICE_PREF_ID = RetailUtils.getRandomUUID();
+ final String APPROVAL_SET_PRICE_ALL_PREF_ID = RetailUtils.getRandomUUID();
+ final String APPROVAL_CHANGE_SERVICE_PRICE_PREF_ID = RetailUtils.getRandomUUID();
+ boolean approvalCreated = false;
+ boolean changeServicePrice = false;
+
+ @Test
+ public void test() {
+ tap(TestIdPack.BUTTON_SEARCH);
+ write(TestIdPack.FIELD_SEARCH_TEXT, PRODUCT_NAME);
+ TestIdPack.FIELD_SEARCH_TEXT.enyoNode().executeExtension(".waterfall('onchange')");
+ tap(TestIdPack.BUTTON_SEARCH_EXECUTE);
+ tap(TestIdPack.BUTTON_SEARCHPRODUCT_FIRSTROW);
+
+ isVisible(TestIdPack.BUTTON_SEARCHPRODUCT_FIRSTROW, true);
+ write(TestIdPack.FIELD_SEARCH_TEXT, "Warranty (deferrable 5 days)");
+ tap(TestIdPack.BUTTON_SEARCH_EXECUTE);
+ tap(TestIdPack.BUTTON_SEARCHPRODUCT_DEFA040);
+
+ tap(TestIdPack.BUTTON_CONTINUE);
+
+ verify(TestIdPack.BUTTON_PAY_AMOUNT, "115.00");
+
+ tap(TestIdPack.TABLE_RECEIPTLINES, TestIdPack.BUTTON_SEARCHPRODUCT_DEFA040.getRowName());
+ tap(TestIdPack.BUTTON_EDIT);
+ tap(TestIdPack.BUTTON_KEYPAD_1);
+ tap(TestIdPack.BUTTON_KEYPAD_PRICE);
+ verify(TestIdPack.BUTTON_PAY_AMOUNT, "101.00");
+
+ TestLogger.getLogger().info("Select two lines");
+ tap(TestIdPack.BUTTON_EDIT);
+
+ isVisible(TestIdPack.BUTTON_MULTISELECTION_BTN_SINGLESELECTION, true);
+
+ tap(TestIdPack.BUTTON_MULTISELECTION_BTN_SINGLESELECTION);
+
+ TestLogger.getLogger().info("Check multiselection mode");
+ isVisible(TestIdPack.BUTTON_MULTISELECTION_BTN_SINGLESELECTION, false);
+ isVisible(TestIdPack.BUTTON_MULTISELECTION_BTN_MULTISELECTION, true);
+ isVisible(TestIdPack.BUTTON_MULTISELECTION_BTN_SELECTALL, true);
+
+ tap(TestIdPack.TABLE_RECEIPTLINES, TestIdPack.BUTTON_PRODUCT_GPSMINI.getRowName());
+
+ tap(TestIdPack.BUTTON_KEYPAD_5);
+ tap(TestIdPack.BUTTON_KEYPAD_PRICE);
+
+ // Check Approval
+ isVisible(TestIdPack.POPUP_APPROVAL, true);
+ final String lblAppRequired = (String) SeleniumHelper
+ .executeScriptWithReturn("OB.I18N.getLabel('OBMOBC_ApprovalRequiredTitle')");
+ verify(TestIdPack.LABEL_APPROVAL_POPUP_TITLE, lblAppRequired);
+ write(TestIdPack.FIELD_APPROVAL_USERNAME, "Openbravo");
+ write(TestIdPack.FIELD_APPROVAL_PASSWORD, "openbravo");
+ tap(TestIdPack.BUTTON_APPROVE);
+ isVisible(TestIdPack.POPUP_APPROVAL, false);
+
+ verify(TestIdPack.BUTTON_PAY_AMOUNT, "10.00");
+
+ // Remove receipt
+ tap(TestIdPack.BUTTON_DELETERECEIPT);
+ tap(TestIdPack.BUTTON_DELETERECEIPT_CONFIRM);
+ verify(TestIdPack.LABEL_TOTALTOPAY, "0.00");
+ }
+
+ protected void setApprovalSetPrice(boolean value) {
+ setPreferenceValue(APPROVAL_SET_PRICE_PREF_ID, APPROVAL_SET_PRICE_PREF_NAME, "N",
+ "3073EDF96A3C42CC86C7069E379522D2", value);
+ setPreferenceValue(APPROVAL_SET_PRICE_ALL_PREF_ID, APPROVAL_SET_PRICE_PREF_NAME, "Y", "100",
+ value);
+ }
+
+ protected void setApprovalChangeServicePrice(boolean value) {
+ setPreferenceValue(APPROVAL_CHANGE_SERVICE_PRICE_PREF_ID,
+ APPROVAL_CHANGE_SERVICE_PRICE_PREF_NAME, "N", "3073EDF96A3C42CC86C7069E379522D2", value);
+ }
+
+ private void setPreferenceValue(String preferenceId, String preferenceName, String value,
+ String user, boolean create) {
+ String sql;
+ if (create) {
+ sql = String
+ .format(
+ "INSERT INTO ad_preference(ad_user_id, ad_preference_id, ad_client_id, ad_org_id, isactive, createdby, updatedby, value, property, ispropertylist, selected) "
+ + "VALUES ('%s','%s', '39363B0921BB4293B48383844325E84C', '0', to_char('Y'),'100', '100', '%s', '%s', to_char('Y'), to_char('Y'))",
+ user, preferenceId, value, preferenceName);
+ } else {
+ sql = String.format("DELETE FROM ad_preference where ad_preference_id = '%s'", preferenceId);
+ }
+ new DatabaseHelperInsertUpdateOrDelete().execute(sql, 1);
+ }
+
+ @Override
+ public void beforeWithReload() {
+ setApprovalSetPrice(true);
+ setApprovalChangeServicePrice(true);
+ }
+
+ @Override
+ public void afterWithReload() {
+ setApprovalSetPrice(false);
+ setApprovalChangeServicePrice(false);
+ }
+
+}
|