Project:
View Issue Details[ Jump to Notes ] | [ Issue History ] [ Print ] | |||||||
ID | ||||||||
0043880 | ||||||||
Type | Category | Severity | Reproducibility | Date Submitted | Last Update | |||
defect | [Retail Modules] Discounts by Total | major | always | 2020-04-27 13:41 | 2020-05-25 09:33 | |||
Reporter | Leyre | View Status | public | |||||
Assigned To | ranjith_qualiantech_com | |||||||
Priority | urgent | Resolution | unable to reproduce | Fixed in Version | RR19Q4 | |||
Status | closed | Fix in branch | Fixed in SCM revision | |||||
Projection | none | ETA | none | Target Version | ||||
OS | Any | Database | Any | Java version | ||||
OS Version | Database version | Ant version | ||||||
Product Version | SCM revision | |||||||
Review Assigned To | marvintm | |||||||
Regression level | ||||||||
Regression date | ||||||||
Regression introduced in release | ||||||||
Regression introduced by commit | ||||||||
Triggers an Emergency Pack | No | |||||||
Summary | 0043880: Using the old discount engine, the "by total" discount is not calculated correctly on the receipt lines | |||||||
Description | Using the old discount engine, the "by total" discount is not calculated correctly on the receipt lines | |||||||
Steps To Reproduce | Using the 20Q1 version, add the "Discount rules for Retail by total" module in the correct version: ** In our local instance: Web POS 1.2.6703 Discounts & Promotions Rules for Retail 1.3.6701 Discount rules for Retail by total 1.0.1300 Apply the patches related to the issues 43322 and 43521 (or confirm that the patches are applied) ** Backend: 1. Configure the preference "Web POS Use advanced discounts engine" = N 2. Create a new "User Defined Amount" discount 3. Create a new "Variable Discount per Total Amount" discount ** Web POS: 1. Add two products non grouped with price = 9.90 2. Add another product with price = 2.90 3. Add the first discount "User Defined Amount" = 1 4. Try to add the second discount "Variable Discount per Total Amount" = 10. Verify that the total discount/line is not applied correctly or proportionally on the products. --> ANOTHER EXAMPLE DETECTED: ** Web POS: 1. Add one product = 699.9 2. Add another product 399.9 3. Add the first discount "User Defined Amount" = -20 only to the first product. 4. Add the second discount "Variable Discount per Total Amount" = -100 The sum of the "by total" discount, of all the lines is not 100 | |||||||
Tags | No tags attached. | |||||||
Attached Files | 43880 source bytotal.patch [^] (2,856 bytes) 2020-05-13 10:23 [Show Content] [Hide Content]# HG changeset patch # User Ranjith S R <ranjith@qualiantech.com> # Date 1589358087 -19800 # Wed May 13 13:51:27 2020 +0530 # Node ID 81eaca9f48fa85ee0ab598c5d68ce9fcedb85d94 # Parent 95a79c86bcff41cddf04bd0924f53a40415b7485 Related to issue 43880 : Discount should be calculated based on Total Receipt Amount * Total Discount Amount will be calculated for the total receipt amount which excludes manual promotions amount or any other promotions amount. diff -r 95a79c86bcff -r 81eaca9f48fa web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js --- a/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js Tue May 05 11:00:47 2020 +0200 +++ b/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js Wed May 13 13:51:27 2020 +0530 @@ -117,24 +117,32 @@ ); //Calculate the discounts applied to receipt, to update the total receipt discountReceipt = preprocess.linesToCompute.reduce(function(memo, l) { - var discount = 0, - ruleApplied = _.find(l.line.get('promotions'), function(p) { - return p.ruleId === ruleFromReceipt.get('rule').id; - }); + var discount = 0; if ( - !l.line.get('splitline') && - OB.UTIL.isNullOrUndefined(ruleApplied) + l.line.get('promotions') && + l.line.get('promotions').length > 0 ) { - discount = - l.line.getDiscount() > 0 - ? l.line.getDiscount() - : !OB.UTIL.isNullOrUndefined( - l.line.get('manualPromotions') - ) && l.line.get('manualPromotions').length > 0 - ? l.line.get('manualPromotions').reduce(function(memo, mp) { - return OB.DEC.add(memo, mp.amt); - }, 0) - : 0; + l.line.get('promotions').forEach(function(prom) { + if (OB.UTIL.isNullOrUndefined(prom.amt)) { + return; + } + if ( + prom.ruleId !== discountRule.get('id') && + prom.rule.get('userAmt') !== discountRule.get('userAmt') + ) { + discount = OB.DEC.add(discount, prom.amt); + } + }); + } else if ( + l.line.get('manualPromotions') && + l.line.get('manualPromotions').length > 0 + ) { + l.line.get('manualPromotions').forEach(function(prom) { + if (OB.UTIL.isNullOrUndefined(prom.amt)) { + return; + } + discount = OB.DEC.add(discount, prom.amt); + }); } return OB.DEC.add(memo, discount); }, 0); 43880 test.patch [^] (17,389 bytes) 2020-05-13 10:23 [Show Content] [Hide Content] # HG changeset patch # User Ranjith S R <ranjith@qualiantech.com> # Date 1589358127 -19800 # Wed May 13 13:52:07 2020 +0530 # Node ID 0518edd6f88ca56c112956bc813c2ee6e23e8ec5 # Parent 25925187c340cd17b0e608123a7937645222746a Verifies issue 43880 : Added Automated Test I43880_VerifyTotalDiscounts diff -r 25925187c340 -r 0518edd6f88c src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java --- a/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java Mon May 11 11:35:51 2020 +0530 +++ b/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java Wed May 13 13:52:07 2020 +0530 @@ -768,6 +768,8 @@ // Discount Category public static TestIdConstructor BUTTON_DISCOUNTSCATEGORY_DISCOUNTSLIST = new TestIdConstructor( "coreElementContainer_discountsList", EnyoKind.BUTTON); // + public static TestIdConstructor BUTTON_DISCOUNTSCATEGORY_SEARCHBOX = new TestIdConstructor( + "discatlistitemprinter_filterText"); // public static TestIdConstructor BUTTON_DISCOUNTCATEGORY_SEARCH = new TestIdConstructor( "discatlistitemprinter_button2", EnyoKind.BUTTON); public static TestIdConstructor BUTTON_DISCOUNTCATEGORY_ROW1 = new TestIdConstructor( diff -r 25925187c340 -r 0518edd6f88c src-test/org/openbravo/test/mobile/retail/extmodules/selenium/tests/discounts_bytotal/I43880_VerifyTotalDiscounts.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/tests/discounts_bytotal/I43880_VerifyTotalDiscounts.java Wed May 13 13:52:07 2020 +0530 @@ -0,0 +1,330 @@ +/* + ************************************************************************* + * 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 RAN + * + */ + +package org.openbravo.test.mobile.retail.extmodules.selenium.tests.discounts_bytotal; + +import org.junit.Test; +import org.openbravo.test.mobile.retail.extmodules.selenium.TestIdExtModules; +import org.openbravo.test.mobile.retail.extmodules.selenium.terminals.WebPOSExtModulesTerminalHelper; + +public class I43880_VerifyTotalDiscounts extends WebPOSExtModulesTerminalHelper { + final String PRODUCT_NAME_1 = "Basecamp lantern"; + final String PRODUCT_NAME_2 = "Basecamp lantern with legs"; + final String PRODUCT_NAME_3 = "Backpack ADP2 12l"; + final String VAR_DISCOUNT_AMT_NAME = "disc_5_var_euro"; + final String VAR_TOTALDISCOUNT_AMT_NAME = "Variable Amount Discount By Total"; + + @Test + public void test() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_1); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "55.50"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_6); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "699.90"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_2); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "731.80"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_3); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,099.80"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1_CHECKBOX); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,079.80"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-20.00"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "979.80"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-20.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2, "-62.97"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-37.03"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test2() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_3); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "40.00"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_2); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "71.90"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "61.80"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "51.70"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "22.70"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_CHECKAPPLYALL); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "19.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT, "-1.00"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "9.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2_EXTMOD, "-4.52"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT2_EXTMOD, "-4.52"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT2, "-0.96"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test3() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_3); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "20.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "40.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "60.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "80.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "100.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "120.00"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW4); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW5); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW6); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "119.40"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_6); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "59.40"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test4() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_1); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "55.50"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "100.00"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_2); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "131.90"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "300.00"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_5); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2_CHECKBOX); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "250.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-50.00"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_8); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "70.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 180 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-72.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-50.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 180 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT2, "-108.00"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + private void getDiscount(String discountName) { + tap(TestIdExtModules.BUTTON_MENU); + tap(TestIdExtModules.BUTTON_MENU_RECEIPTDISCOUNTS); + tap(TestIdExtModules.BUTTON_DISCOUNTSCATEGORY_DISCOUNTSLIST); + write(TestIdExtModules.BUTTON_DISCOUNTSCATEGORY_SEARCHBOX, discountName); + tap(TestIdExtModules.BUTTON_DISCOUNTCATEGORY_SEARCH); + tap(TestIdExtModules.BUTTON_DISCOUNTCATEGORY_ROW1); + } +} 43880_source_bytotal_v2.patch [^] (5,564 bytes) 2020-05-18 19:04 [Show Content] [Hide Content] # HG changeset patch # User Ranjith S R <ranjith@qualiantech.com> # Date 1589820972 -19800 # Mon May 18 22:26:12 2020 +0530 # Node ID df9ff9761dfaaaf75bea24f06dceed2a3b05d5a1 # Parent 132fdcec4c2f031bbf4ef530685235dcbfa88785 Related to issue 43880 : Discount should be calculated based on Total Receipt Amount * Total Discount Amount will be calculated for the total receipt amount which excludes manual promotions amount or any other promotions amount. diff -r 132fdcec4c2f -r df9ff9761dfa web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js --- a/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js Thu Apr 02 15:43:26 2020 +0200 +++ b/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js Mon May 18 22:26:12 2020 +0530 @@ -308,7 +308,6 @@ if (!discountRule.get('applyNext')) { OB.Model.Discounts.DISCT.removeAutoPromotionsFromReceipt(receipt); } - var accumdiscount = 0; OB.Model.Discounts.DISCT.preprocess( discountRule, @@ -321,32 +320,43 @@ ruleFromReceipt.get('rule').userAmt || discountRule.get('userAmt') || discountRule.get('disctTotalamountdisc'); - preprocess.linesToCompute = _.sortBy( - preprocess.linesToCompute, - function(rule) { - return rule.line.get('discountedNet'); - } - ); //Calculate the discounts applied to receipt, to update the total receipt discountReceipt = preprocess.linesToCompute.reduce(function(memo, l) { var discount = 0, - ruleApplied = _.find(l.line.get('promotions'), function(p) { - return p.ruleId === ruleFromReceipt.get('rule').id; - }); + promotionList = l.line.get('promotions') || []; + var promoApplied = _.filter(promotionList, function(p) { + return ( + p.ruleId === ruleFromReceipt.get('rule').id && + p.discountinstance === + ruleFromReceipt.get('rule').discountinstance + ); + }); + if (promoApplied.length > 0) { + return memo; + } + if (l.line.get('orderManualPromotionsAlreadyApplied')) { + return memo; + } + promotionList.forEach(function(p) { + if (OB.UTIL.isNullOrUndefined(p.amt) || p.manual) { + return; + } + + if ( + p.ruleId !== discountRule.get('id') && + p.discountinstance === + ruleFromReceipt.get('rule').discountinstance + ) { + discount = OB.DEC.add(discount, p.amt); + } + }); if ( - !l.line.get('splitline') && - OB.UTIL.isNullOrUndefined(ruleApplied) + l.line.get('manualPromotions') && + l.line.get('manualPromotions').length > 0 ) { - discount = - l.line.getDiscount() > 0 - ? l.line.getDiscount() - : !OB.UTIL.isNullOrUndefined( - l.line.get('manualPromotions') - ) && l.line.get('manualPromotions').length > 0 - ? l.line.get('manualPromotions').reduce(function(memo, mp) { - return OB.DEC.add(memo, mp.amt); - }, 0) - : 0; + l.line.get('manualPromotions').forEach(function(p) { + discount = OB.DEC.add(discount, p.amt); + }); } return OB.DEC.add(memo, discount); }, 0); @@ -359,26 +369,28 @@ linePrice = l.total, promotionList = [], promoApplied = null; - // distributing discount in all lines based on total of each one - // if PIT, in gross - // if no PIT, in net - if (!l.line.get('splitline')) { - if (!OB.UTIL.isNullOrUndefined(l.line.get('promotions'))) { - promotionList = l.line.get('promotions'); - } - if (!OB.UTIL.isNullOrUndefined(l.line.get('manualPromotions'))) { - promotionList = promotionList.concat( - l.line.get('manualPromotions') - ); - } - promotionList = _.uniq(promotionList, false, function(p) { - return p.ruleId; + + if ( + !OB.UTIL.isNullOrUndefined(l.line.get('promotions')) && + l.line.get('promotions').length > 0 + ) { + l.line.get('promotions').forEach(function(p) { + if (OB.UTIL.isNullOrUndefined(p.amt) || p.manual) { + return; + } + promotionList.push(p); }); } + if (!OB.UTIL.isNullOrUndefined(l.line.get('manualPromotions'))) { + promotionList = promotionList.concat( + l.line.get('manualPromotions') + ); + } promoApplied = _.find(promotionList, function(p) { return ( p.ruleId === discountRule.get('id') && - p.rule.get('userAmt') === discountRule.get('userAmt') + p.discountinstance === + ruleFromReceipt.get('rule').discountinstance ); }); if (!OB.UTIL.isNullOrUndefined(promoApplied)) { 43880_source_test_v2.patch [^] (19,770 bytes) 2020-05-18 19:05 [Show Content] [Hide Content] # HG changeset patch # User Ranjith S R <ranjith@qualiantech.com> # Date 1589821023 -19800 # Mon May 18 22:27:03 2020 +0530 # Node ID 159afc437135551f808d99367e883f921287ee2b # Parent 46a6471562f48f1c8ecfb86670a05b44b761e3d7 Verifies issue 43880 : Added Automated Test I43880_VerifyTotalDiscounts diff -r 46a6471562f4 -r 159afc437135 src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java --- a/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java Mon May 18 16:42:03 2020 +0530 +++ b/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java Mon May 18 22:27:03 2020 +0530 @@ -766,6 +766,8 @@ // Discount Category public static TestIdConstructor BUTTON_DISCOUNTSCATEGORY_DISCOUNTSLIST = new TestIdConstructor( "coreElementContainer_discountsList", EnyoKind.BUTTON); // + public static TestIdConstructor BUTTON_DISCOUNTSCATEGORY_SEARCHBOX = new TestIdConstructor( + "discatlistitemprinter_filterText"); // public static TestIdConstructor BUTTON_DISCOUNTCATEGORY_SEARCH = new TestIdConstructor( "discatlistitemprinter_button2", EnyoKind.BUTTON); public static TestIdConstructor BUTTON_DISCOUNTCATEGORY_ROW1 = new TestIdConstructor( diff -r 46a6471562f4 -r 159afc437135 src-test/org/openbravo/test/mobile/retail/extmodules/selenium/tests/discounts_bytotal/I43880_VerifyTotalDiscounts.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/tests/discounts_bytotal/I43880_VerifyTotalDiscounts.java Mon May 18 22:27:03 2020 +0530 @@ -0,0 +1,357 @@ +/* + ************************************************************************* + * 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 RAN + * + */ + +package org.openbravo.test.mobile.retail.extmodules.selenium.tests.discounts_bytotal; + +import org.junit.Test; +import org.openbravo.test.mobile.retail.extmodules.selenium.TestIdExtModules; +import org.openbravo.test.mobile.retail.extmodules.selenium.terminals.WebPOSExtModulesTerminalHelper; + +public class I43880_VerifyTotalDiscounts extends WebPOSExtModulesTerminalHelper { + final String PRODUCT_NAME_1 = "Basecamp lantern"; + final String PRODUCT_NAME_2 = "Basecamp lantern with legs"; + final String PRODUCT_NAME_3 = "Backpack ADP2 12l"; + final String PRODUCT_NAME_4 = "Headlamp ultralight"; + final String VAR_DISCOUNT_AMT_NAME = "disc_5_var_euro"; + final String VAR_TOTALDISCOUNT_AMT_NAME = "Variable Amount Discount By Total"; + final String VAR_TOTALDISCOUNT_PERCENT_NAME = "Variable Percentage Discount By Total"; + + @Test + public void test() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_1); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "55.50"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_6); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "699.90"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_2); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "731.80"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_3); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,099.80"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1_CHECKBOX); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,079.80"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-20.00"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "979.80"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-20.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2, "-62.97"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-37.03"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_4); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "998.70"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_5); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,039.70"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3_CHECKBOX); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,029.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT, "-10.00"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test2() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_3); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "20.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "40.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "60.00"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "22.70"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "12.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-4.36"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-4.36"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD, "-1.28"); + + // Add Variable Percentage Discount By Total + getDiscount(VAR_TOTALDISCOUNT_PERCENT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "10.16"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-4.36"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_PERCENT_NAME + " - 20%"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2_EXTMOD, "-1.11"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-4.36"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_PERCENT_NAME + " - 20%"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT2_EXTMOD, "-1.11"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD, "-1.28"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_PERCENT_NAME + " - 20%"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT2_EXTMOD, "-0.32"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test3() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_3); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "20.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "40.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "60.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "80.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "100.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "120.00"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW4); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW5); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW6); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "119.40"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_6); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "59.40"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test4() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_1); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "55.50"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "100.00"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_2); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "131.90"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "300.00"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_5); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2_CHECKBOX); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "250.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-50.00"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_8); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "70.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 180 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-72.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-50.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 180 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT2, "-108.00"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + private void getDiscount(String discountName) { + tap(TestIdExtModules.BUTTON_MENU); + tap(TestIdExtModules.BUTTON_MENU_RECEIPTDISCOUNTS); + tap(TestIdExtModules.BUTTON_DISCOUNTSCATEGORY_DISCOUNTSLIST); + write(TestIdExtModules.BUTTON_DISCOUNTSCATEGORY_SEARCHBOX, discountName); + tap(TestIdExtModules.BUTTON_DISCOUNTCATEGORY_SEARCH); + tap(TestIdExtModules.BUTTON_DISCOUNTCATEGORY_ROW1); + } +} diff -r 46a6471562f4 -r 159afc437135 src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java --- a/src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java Mon May 18 16:42:03 2020 +0530 +++ b/src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java Mon May 18 22:27:03 2020 +0530 @@ -2899,6 +2899,10 @@ "listOrderLines_row3_control3"); // public static TestIdConstructor LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD = new TestIdConstructor( "listOrderLines_row3_control4"); // + public static TestIdConstructor LABEL_RECEIPT_ROW3_DISCOUNTNAME2_EXTMOD = new TestIdConstructor( + "listOrderLines_row3_control7"); // + public static TestIdConstructor LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT2_EXTMOD = new TestIdConstructor( + "listOrderLines_row3_control8"); // public static TestIdConstructor LABEL_RECEIPT_ROW4_DISCOUNTNAME_EXTMOD = new TestIdConstructor( "listOrderLines_row4_control3"); // public static TestIdConstructor LABEL_RECEIPT_ROW4_DISCOUNTAMOUNT_EXTMOD = new TestIdConstructor( 43880_source_bytotal_v3.patch [^] (7,327 bytes) 2020-05-25 09:32 [Show Content] [Hide Content] # HG changeset patch # User Ranjith S R <ranjith@qualiantech.com> # Date 1590391784 -19800 # Mon May 25 12:59:44 2020 +0530 # Node ID b1749737146291fd0cf3efd5d10c81117f60c9e1 # Parent 132fdcec4c2f031bbf4ef530685235dcbfa88785 Related to issue 43880 : Discount should be calculated based on Total Receipt Amount * Total Discount Amount will be calculated for the total receipt amount which excludes manual promotions amount or any other promotions amount. diff -r 132fdcec4c2f -r b17497371462 web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js --- a/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js Thu Apr 02 15:43:26 2020 +0200 +++ b/web/org.openbravo.retail.discounts.bytotal/js/promotion-by-total-utils.js Mon May 25 12:59:44 2020 +0530 @@ -308,7 +308,6 @@ if (!discountRule.get('applyNext')) { OB.Model.Discounts.DISCT.removeAutoPromotionsFromReceipt(receipt); } - var accumdiscount = 0; OB.Model.Discounts.DISCT.preprocess( discountRule, @@ -321,32 +320,59 @@ ruleFromReceipt.get('rule').userAmt || discountRule.get('userAmt') || discountRule.get('disctTotalamountdisc'); - preprocess.linesToCompute = _.sortBy( - preprocess.linesToCompute, - function(rule) { - return rule.line.get('discountedNet'); - } - ); + + var orderManualPromotions = + receipt.get('orderManualPromotions') || [], + discountOrderNo = _.find(orderManualPromotions.models, function(p) { + return p.get('discountRule').get('id') === discountRule.get('id'); + }).get('rule').noOrder, + validateDiscountOrder = function(currentDiscountRule) { + var appliedTotalDiscount = _.find( + orderManualPromotions.models, + function(p) { + return ( + p.get('discountRule').get('id') === + currentDiscountRule.ruleId + ); + } + ); + if ( + appliedTotalDiscount && + appliedTotalDiscount.get('rule').noOrder && + appliedTotalDiscount.get('rule').noOrder >= discountOrderNo + ) { + return true; + } + return false; + }; + //Calculate the discounts applied to receipt, to update the total receipt discountReceipt = preprocess.linesToCompute.reduce(function(memo, l) { var discount = 0, - ruleApplied = _.find(l.line.get('promotions'), function(p) { - return p.ruleId === ruleFromReceipt.get('rule').id; - }); + promotionList = l.line.get('promotions') || []; + promotionList.forEach(function(p) { + if ( + OB.UTIL.isNullOrUndefined(p.amt) || + p.manual || + validateDiscountOrder(p) + ) { + return; + } + if ( + p.ruleId !== discountRule.get('id') && + p.discountinstance === + ruleFromReceipt.get('rule').discountinstance + ) { + discount = OB.DEC.add(discount, p.amt); + } + }); if ( - !l.line.get('splitline') && - OB.UTIL.isNullOrUndefined(ruleApplied) + l.line.get('manualPromotions') && + l.line.get('manualPromotions').length > 0 ) { - discount = - l.line.getDiscount() > 0 - ? l.line.getDiscount() - : !OB.UTIL.isNullOrUndefined( - l.line.get('manualPromotions') - ) && l.line.get('manualPromotions').length > 0 - ? l.line.get('manualPromotions').reduce(function(memo, mp) { - return OB.DEC.add(memo, mp.amt); - }, 0) - : 0; + l.line.get('manualPromotions').forEach(function(p) { + discount = OB.DEC.add(discount, p.amt); + }); } return OB.DEC.add(memo, discount); }, 0); @@ -359,26 +385,32 @@ linePrice = l.total, promotionList = [], promoApplied = null; - // distributing discount in all lines based on total of each one - // if PIT, in gross - // if no PIT, in net - if (!l.line.get('splitline')) { - if (!OB.UTIL.isNullOrUndefined(l.line.get('promotions'))) { - promotionList = l.line.get('promotions'); - } - if (!OB.UTIL.isNullOrUndefined(l.line.get('manualPromotions'))) { - promotionList = promotionList.concat( - l.line.get('manualPromotions') - ); - } - promotionList = _.uniq(promotionList, false, function(p) { - return p.ruleId; + + if ( + !OB.UTIL.isNullOrUndefined(l.line.get('promotions')) && + l.line.get('promotions').length > 0 + ) { + l.line.get('promotions').forEach(function(p) { + if ( + OB.UTIL.isNullOrUndefined(p.amt) || + p.manual || + validateDiscountOrder(p) + ) { + return; + } + promotionList.push(p); }); } + if (!OB.UTIL.isNullOrUndefined(l.line.get('manualPromotions'))) { + promotionList = promotionList.concat( + l.line.get('manualPromotions') + ); + } promoApplied = _.find(promotionList, function(p) { return ( p.ruleId === discountRule.get('id') && - p.rule.get('userAmt') === discountRule.get('userAmt') + p.discountinstance === + ruleFromReceipt.get('rule').discountinstance ); }); if (!OB.UTIL.isNullOrUndefined(promoApplied)) { @@ -431,19 +463,14 @@ definition.extraProperties = ruleFromReceipt.get('rule').extraProperties || {}; definition.extraProperties.lineQtyOffer = l.line.get('qty'); - if ( - !line.get('splitline') && - l.line.get('promotions') && - l.line.get('promotions').length > 0 - ) { - var discountedGross = l.line - .get('promotions') - .reduce(function(memo, element) { - return OB.DEC.add( - memo, - element.actualAmt || element.amt || 0 - ); - }, 0); + if (promotionList.length > 0) { + var discountedGross = promotionList.reduce(function( + memo, + element + ) { + return OB.DEC.add(memo, element.actualAmt || element.amt || 0); + }, + 0); if ( OB.DEC.sub( l.line.getGross(), 43880_source_test_v3.patch [^] (25,355 bytes) 2020-05-25 09:33 [Show Content] [Hide Content] # HG changeset patch # User Ranjith S R <ranjith@qualiantech.com> # Date 1589821023 -19800 # Mon May 18 22:27:03 2020 +0530 # Node ID 146f562d61e0adb34088735f0ded2689f83cf63b # Parent 455deb3b612810b59b007cd8155080816911c7b4 Verifies issue 43880 : Added Automated Test I43880_VerifyTotalDiscounts diff -r 455deb3b6128 -r 146f562d61e0 src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java --- a/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java Mon May 25 10:32:04 2020 +0530 +++ b/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/TestIdExtModules.java Mon May 18 22:27:03 2020 +0530 @@ -766,6 +766,8 @@ // Discount Category public static TestIdConstructor BUTTON_DISCOUNTSCATEGORY_DISCOUNTSLIST = new TestIdConstructor( "coreElementContainer_discountsList", EnyoKind.BUTTON); // + public static TestIdConstructor BUTTON_DISCOUNTSCATEGORY_SEARCHBOX = new TestIdConstructor( + "discatlistitemprinter_filterText"); // public static TestIdConstructor BUTTON_DISCOUNTCATEGORY_SEARCH = new TestIdConstructor( "discatlistitemprinter_button2", EnyoKind.BUTTON); public static TestIdConstructor BUTTON_DISCOUNTCATEGORY_ROW1 = new TestIdConstructor( diff -r 455deb3b6128 -r 146f562d61e0 src-test/org/openbravo/test/mobile/retail/extmodules/selenium/tests/discounts_bytotal/I43880_VerifyTotalDiscounts.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src-test/org/openbravo/test/mobile/retail/extmodules/selenium/tests/discounts_bytotal/I43880_VerifyTotalDiscounts.java Mon May 18 22:27:03 2020 +0530 @@ -0,0 +1,457 @@ +/* + ************************************************************************* + * 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 RAN + * + */ + +package org.openbravo.test.mobile.retail.extmodules.selenium.tests.discounts_bytotal; + +import org.junit.Test; +import org.openbravo.test.mobile.retail.extmodules.selenium.TestIdExtModules; +import org.openbravo.test.mobile.retail.extmodules.selenium.terminals.WebPOSExtModulesTerminalHelper; + +public class I43880_VerifyTotalDiscounts extends WebPOSExtModulesTerminalHelper { + final String PRODUCT_NAME_1 = "Basecamp lantern"; + final String PRODUCT_NAME_2 = "Basecamp lantern with legs"; + final String PRODUCT_NAME_3 = "Backpack ADP2 12l"; + final String PRODUCT_NAME_4 = "Headlamp ultralight"; + final String VAR_DISCOUNT_AMT_NAME = "disc_5_var_euro"; + final String VAR_TOTALDISCOUNT_AMT_NAME = "Variable Amount Discount By Total"; + final String VAR_TOTALDISCOUNT_PERCENT_NAME = "Variable Percentage Discount By Total"; + + @Test + public void test() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_1); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "55.50"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_6); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "699.90"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_2); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "731.80"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_3); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,099.80"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1_CHECKBOX); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,079.80"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-20.00"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "979.80"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-20.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2, "-62.97"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-37.03"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_4); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "998.70"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_5); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,039.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-20.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2, "-59.66"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-35.09"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT, "-5.25"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3_CHECKBOX); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "1,029.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-20.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2, "-60.18"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-35.40"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT, "-10.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 100 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT2, "-4.42"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test2() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_3); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "20.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "40.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "60.00"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "22.70"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "12.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-4.36"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-4.36"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD, "-1.28"); + + // Add Variable Percentage Discount By Total + getDiscount(VAR_TOTALDISCOUNT_PERCENT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "10.16"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-4.36"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_PERCENT_NAME + " - 20%"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2_EXTMOD, "-1.11"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-4.36"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_PERCENT_NAME + " - 20%"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT2_EXTMOD, "-1.11"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD, "-1.28"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_PERCENT_NAME + " - 20%"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT2_EXTMOD, "-0.32"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test3() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_3); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "20.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "40.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "60.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "80.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "100.00"); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "120.00"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW4); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW5); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW6); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "119.40"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_6); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "59.40"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 60 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD, "-10.00"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test4() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_1); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "55.50"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "100.00"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_2); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "131.90"); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "300.00"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_5); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2_CHECKBOX); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "250.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-50.00"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_8); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "70.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 180 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT, "-72.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT, "-50.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 180 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT2, "-108.00"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + @Test + public void test5() { + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_3); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "40.00"); + + tap(TestIdExtModules.BUTTON_SEARCH); + write(TestIdExtModules.FIELD_SEARCH_TEXT, PRODUCT_NAME_2); + tap(TestIdExtModules.BUTTON_SEARCH_EXECUTE); + tap(TestIdExtModules.BUTTON_SEARCHPRODUCT_FIRSTROW); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "71.90"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW1); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "61.80"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW2); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "51.70"); + + tap(TestIdExtModules.BUTTON_RECEIPT_ROW3); + tap(TestIdExtModules.BUTTON_KEYPAD_2); + tap(TestIdExtModules.BUTTON_KEYPAD_DOT); + tap(TestIdExtModules.BUTTON_KEYPAD_9); + tap(TestIdExtModules.BUTTON_KEYPAD_PRICE); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "22.70"); + + // Add User defined Discount + getDiscount(VAR_DISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_CHECKAPPLYALL); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "19.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT, "-1.00"); + + // Add Variable Discount per Total Amount + getDiscount(VAR_TOTALDISCOUNT_AMT_NAME); + tap(TestIdExtModules.BUTTON_KEYPAD_1); + tap(TestIdExtModules.BUTTON_KEYPAD_0); + tap(TestIdExtModules.BUTTON_KEYPAD_ENTER); + tap(TestIdExtModules.BUTTON_RECEIPTDISCOUNTS_APPLY); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "9.70"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME_EXTMOD, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT_EXTMOD, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW1_DISCOUNTAMOUNT2_EXTMOD, "-4.52"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME_EXTMOD, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT_EXTMOD, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTNAME2_EXTMOD, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW2_DISCOUNTAMOUNT2_EXTMOD, "-4.52"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME, "-- " + VAR_DISCOUNT_AMT_NAME); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT, "-1.00"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTNAME2, + "-- " + VAR_TOTALDISCOUNT_AMT_NAME + " - 10 EUR"); + verify(TestIdExtModules.LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT2, "-0.96"); + + tap(TestIdExtModules.BUTTON_DELETERECEIPT); + tap(TestIdExtModules.BUTTON_DELETERECEIPT_CONFIRM); + verify(TestIdExtModules.LABEL_TOTALTOPAY, "0.00"); + } + + private void getDiscount(String discountName) { + tap(TestIdExtModules.BUTTON_MENU); + tap(TestIdExtModules.BUTTON_MENU_RECEIPTDISCOUNTS); + tap(TestIdExtModules.BUTTON_DISCOUNTSCATEGORY_DISCOUNTSLIST); + write(TestIdExtModules.BUTTON_DISCOUNTSCATEGORY_SEARCHBOX, discountName); + tap(TestIdExtModules.BUTTON_DISCOUNTCATEGORY_SEARCH); + tap(TestIdExtModules.BUTTON_DISCOUNTCATEGORY_ROW1); + } +} diff -r 455deb3b6128 -r 146f562d61e0 src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java --- a/src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java Mon May 25 10:32:04 2020 +0530 +++ b/src-test/org/openbravo/test/mobile/retail/pack/selenium/TestIdPack.java Mon May 18 22:27:03 2020 +0530 @@ -2899,6 +2899,10 @@ "listOrderLines_row3_control3"); // public static TestIdConstructor LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT_EXTMOD = new TestIdConstructor( "listOrderLines_row3_control4"); // + public static TestIdConstructor LABEL_RECEIPT_ROW3_DISCOUNTNAME2_EXTMOD = new TestIdConstructor( + "listOrderLines_row3_control7"); // + public static TestIdConstructor LABEL_RECEIPT_ROW3_DISCOUNTAMOUNT2_EXTMOD = new TestIdConstructor( + "listOrderLines_row3_control8"); // public static TestIdConstructor LABEL_RECEIPT_ROW4_DISCOUNTNAME_EXTMOD = new TestIdConstructor( "listOrderLines_row4_control3"); // public static TestIdConstructor LABEL_RECEIPT_ROW4_DISCOUNTAMOUNT_EXTMOD = new TestIdConstructor( | |||||||
Relationships [ Relation Graph ] [ Dependency Graph ] | |||||||||||||||
|
Notes | |
(0119839) marvintm (manager) 2020-05-13 15:41 |
The problem cannot be currently reproduced in pi, as it only affected the old discounts engine. We have attached a patch with a solution which can be applied in previous releases. |
Issue History | |||
Date Modified | Username | Field | Change |
2020-04-27 13:41 | Leyre | New Issue | |
2020-04-27 13:41 | Leyre | Assigned To | => Retail |
2020-04-27 13:41 | Leyre | Resolution time | => 1589752800 |
2020-04-27 13:41 | Leyre | Triggers an Emergency Pack | => No |
2020-04-27 13:42 | Leyre | Relationship added | related to 0043521 |
2020-04-27 13:43 | Leyre | Relationship added | related to 0043322 |
2020-04-30 10:23 | Leyre | Steps to Reproduce Updated | View Revisions |
2020-04-30 10:23 | Leyre | Steps to Reproduce Updated | View Revisions |
2020-05-05 11:44 | ranjith_qualiantech_com | Assigned To | Retail => ranjith_qualiantech_com |
2020-05-06 04:57 | ranjith_qualiantech_com | Status | new => scheduled |
2020-05-06 12:43 | ranjith_qualiantech_com | File Added: 43880 source bytotal.patch | |
2020-05-06 12:47 | ranjith_qualiantech_com | Note Added: 0119623 | |
2020-05-11 15:20 | ranjith_qualiantech_com | Note Deleted: 0119623 | |
2020-05-12 09:02 | ranjith_qualiantech_com | File Deleted: 43880 source bytotal.patch | |
2020-05-13 10:23 | ranjith_qualiantech_com | File Added: 43880 source bytotal.patch | |
2020-05-13 10:23 | ranjith_qualiantech_com | File Added: 43880 test.patch | |
2020-05-13 15:41 | marvintm | Review Assigned To | => marvintm |
2020-05-13 15:41 | marvintm | Note Added: 0119839 | |
2020-05-13 15:41 | marvintm | Status | scheduled => closed |
2020-05-13 15:41 | marvintm | Resolution | open => unable to reproduce |
2020-05-13 15:41 | marvintm | Fixed in Version | => RR19Q4 |
2020-05-18 19:04 | ranjith_qualiantech_com | File Added: 43880_source_bytotal_v2.patch | |
2020-05-18 19:05 | ranjith_qualiantech_com | File Added: 43880_source_test_v2.patch | |
2020-05-25 09:32 | ranjith_qualiantech_com | File Added: 43880_source_bytotal_v3.patch | |
2020-05-25 09:33 | ranjith_qualiantech_com | File Added: 43880_source_test_v3.patch |
Copyright © 2000 - 2009 MantisBT Group |