Nicolas Malin created OFBIZ-6988:
------------------------------------
Summary: Estimated resolution with break on price and quantity
Key: OFBIZ-6988
URL: https://issues.apache.org/jira/browse/OFBIZ-6988
Project: OFBiz
Issue Type: Improvement
Components: product
Affects Versions: Trunk
Reporter: Nicolas Malin
Assignee: Nicolas Malin
Priority: Minor
On the service *calcShipmentCostEstimate*, each estimated shipment cost are
analysed to resolve who is enable to apply on the order.
During the breakQtys block analyse, OFBiz check if the estimate match the
quantity with their breaks and valid it if one is good
{code}
if (qv != null) {
useQty = true;
BigDecimal min = BigDecimal.ONE.movePointLeft(4);
BigDecimal max = BigDecimal.ONE.movePointLeft(4);
try {
min = qv.getBigDecimal("fromQuantity");
max = qv.getBigDecimal("thruQuantity");
} catch (Exception e) {
}
if (shippableQuantity.compareTo(min) >= 0 &&
(max.compareTo(BigDecimal.ZERO) == 0 || shippableQuantity.compareTo(max) <= 0))
{
qtyValid = true;
}
if (Debug.infoOn()) Debug.logInfo(" # QUANTITY SHIP min
: " + min + ", max : " + max + ", value " + shippableQuantity + " qtyValid " +
qtyValid, module);
}
if (pv != null) {
usePrice = true;
BigDecimal min = BigDecimal.ONE.movePointLeft(4);
BigDecimal max = BigDecimal.ONE.movePointLeft(4);
try {
min = pv.getBigDecimal("fromQuantity");
max = pv.getBigDecimal("thruQuantity");
} catch (Exception e) {
}
if (shippableTotal.compareTo(min) >= 0 &&
(max.compareTo(BigDecimal.ZERO) == 0 || shippableTotal.compareTo(max) <= 0)) {
priceValid = true;
}
if (Debug.infoOn()) Debug.logInfo(" # PRICE TOT SHIP
min : " + min + ", max : " + max + ", value " + shippableTotal+ " qtyValid " +
priceValid, module);
}
// Now check the tests.
if ((useWeight && weightValid) || (useQty && qtyValid) ||
(usePrice && priceValid)) {
estimateList.add(thisEstimate);
}
{code}
I didn't understand why a estimate shippping cost that contains a break no
valid can be apply on the order.
On a customer project I ave these rules:
|| ||Quantity Break Id|| Price Break Id|| Flat Price || Order Price
Percent ||
|FR000| | 0 - 300 [FRP4] | 15 |0|
|FR001| 0 - 30,000 [FRB01]| 300 - 0 [FRP3] | |5|
|FR004| 100,000 - 0 [FRB04]| 300 - 0 [FRP3] | |1|
|FR003| 50,001 - 99,999 [FRB03]| 300 - 0 [FRP3] | |2|
|FR002| 30,001 - 50,000 [FRB02]| 300 - 0 [FRP3] | |3|
The problem with the previous code that for a total price more than 300€ OFBiz
give me a random rule between FR00[1-4] and it's wrong because I have also a
break on total quantity shipped
I propose to change the check like this
{code}
@@ -406,7 +410,9 @@
}
}
// Now check the tests.
- if ((useWeight && weightValid) || (useQty && qtyValid) ||
(usePrice && priceValid)) {
+ if ((!useWeight || useWeight && weightValid)
+ && (!useQty || useQty && qtyValid)
+ && (!usePrice || usePrice && priceValid)) {
estimateList.add(thisEstimate);
}
}
{code}
To ensure that is a break is define on the estimated shipping cost, we enable
this last only all define break are valid.
Any suggest ?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)