# HG changeset patch
# User Silambarasan Sekar <silambarasan@qualiantech.com>
# Date 1473849948 -19800
#      Wed Sep 14 16:15:48 2016 +0530
# Node ID 3e08b2d9de57d261765c2663eee0fb27e843fe4b
# Parent  5a0d4a37f9b6a7046f1e82cb8a071df2897574e3
Related to Issue 33963: Added new Discount Rule "Price Adjustment List" for calculating discounts from Products tab.

diff -r 5a0d4a37f9b6 -r 3e08b2d9de57 src/org/openbravo/retail/posterminal/master/DiscountFilterProductProperties.java
--- a/src/org/openbravo/retail/posterminal/master/DiscountFilterProductProperties.java	Tue Sep 13 08:30:49 2016 -0600
+++ b/src/org/openbravo/retail/posterminal/master/DiscountFilterProductProperties.java	Wed Sep 14 16:15:48 2016 +0530
@@ -37,6 +37,9 @@
         add(new HQLProperty("ap.obdiscIsGift", "obdiscIsGift"));
         add(new HQLProperty("ap.obdiscQty", "obdiscQty"));
         add(new HQLProperty("ap.obdiscGifqty", "obdiscGifqty"));
+        add(new HQLProperty("ap.discountAmount", "discountAmount"));
+        add(new HQLProperty("ap.discount", "discount"));
+        add(new HQLProperty("ap.fixedUnitPrice", "fixedUnitPrice"));
         add(new HQLProperty("concat(ap.priceAdjustment.name, ' - ', ap.product.name)",
             "_identifier"));
         add(new HQLProperty(
diff -r 5a0d4a37f9b6 -r 3e08b2d9de57 web/org.openbravo.retail.posterminal/js/model/discounts.js
--- a/web/org.openbravo.retail.posterminal/js/model/discounts.js	Tue Sep 13 08:30:49 2016 -0600
+++ b/web/org.openbravo.retail.posterminal/js/model/discounts.js	Wed Sep 14 16:15:48 2016 +0530
@@ -378,6 +378,53 @@
     }
   });
 
+  //Price Adjustment List
+  OB.Model.Discounts.registerRule('9FF0F09112994CABB5451BE47E7B23AD', {
+    async: true,
+    implementation: function (discountRule, receipt, line, listener) {
+      var linePrice, discountedLinePrice, qty = line.get('qty'),
+          minQty = discountRule.get('minQuantity'),
+          maxQty = discountRule.get('maxQuantity'),
+          criteria;
+
+      if ((minQty && qty < minQty) || (maxQty && qty > maxQty)) {
+        return;
+      }
+
+      linePrice = line.get('discountedLinePrice') || line.get('price');
+      // Query local DB to know detail about the rule (products and quantities) 
+      criteria = {
+        priceAdjustment: discountRule.id,
+        product: line.get('product').id
+      };
+
+      OB.Dal.find(OB.Model.DiscountFilterProduct, criteria, function (products) {
+        // getting discount values from product tab
+        var discountedProduct = products.models[0];
+        discountRule.set('fixedPrice', discountedProduct.get('fixedUnitPrice'));
+        discountRule.set('discountAmount', discountedProduct.get('discountAmount'));
+        discountRule.set('discount', discountedProduct.get('discount'));
+
+        if (discountRule.get('fixedPrice') || discountRule.get('fixedPrice') === 0) {
+          discountedLinePrice = discountRule.get('fixedPrice');
+        } else {
+          discountedLinePrice = (linePrice - discountRule.get('discountAmount')) * (1 - discountRule.get('discount') / 100);
+        }
+        discountRule.set('qtyOffer', qty);
+        receipt.addPromotion(line, discountRule, {
+          amt: OB.DEC.toNumber((linePrice - (new BigDecimal(String(discountedLinePrice)))) * qty)
+        });
+        line.set('discountedLinePrice', discountedLinePrice);
+
+        listener.trigger('completed');
+
+      }, function () {
+        window.console.error('Error querying for Price Adjustment List products', discountRule, receipt, line, arguments);
+        listener.trigger('completed');
+      });
+
+    }
+  });
 
   // Because of dependency models cannot be directly registered in promotions module
   if (OB && OB.Model && OB.Model.Discounts && OB.Model.Discounts.extraModels) {
