IDEMPIERE-4127 GL Inventory Clearing - Minor rounding variances
This commit is contained in:
parent
2c3425c9cc
commit
61241bb021
|
|
@ -973,12 +973,11 @@ public class Doc_AllocationHdr extends Doc
|
||||||
List<Object> valuesPay = DB.getSQLValueObjectsEx(getTrxName(), sql.toString(),
|
List<Object> valuesPay = DB.getSQLValueObjectsEx(getTrxName(), sql.toString(),
|
||||||
MPayment.Table_ID, payment.getC_Payment_ID(), as.getC_AcctSchema_ID(), acct.getAccount_ID());
|
MPayment.Table_ID, payment.getC_Payment_ID(), as.getC_AcctSchema_ID(), acct.getAccount_ID());
|
||||||
if (valuesPay != null) {
|
if (valuesPay != null) {
|
||||||
if (payment.isReceipt()) {
|
paymentSource = (BigDecimal) valuesPay.get(0); // AmtSourceDr
|
||||||
|
paymentAccounted = (BigDecimal) valuesPay.get(1); // AmtAcctDr
|
||||||
|
if (paymentSource.signum() == 0 && paymentAccounted.signum() == 0) {
|
||||||
paymentSource = (BigDecimal) valuesPay.get(2); // AmtSourceCr
|
paymentSource = (BigDecimal) valuesPay.get(2); // AmtSourceCr
|
||||||
paymentAccounted = (BigDecimal) valuesPay.get(3); // AmtAcctCr
|
paymentAccounted = (BigDecimal) valuesPay.get(3); // AmtAcctCr
|
||||||
} else {
|
|
||||||
paymentSource = (BigDecimal) valuesPay.get(0); // AmtSourceDr
|
|
||||||
paymentAccounted = (BigDecimal) valuesPay.get(1); // AmtAcctDr
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -995,7 +994,7 @@ public class Doc_AllocationHdr extends Doc
|
||||||
// Full Payment in currency
|
// Full Payment in currency
|
||||||
if (allocationSource.abs().compareTo(paymentSource.abs()) == 0)
|
if (allocationSource.abs().compareTo(paymentSource.abs()) == 0)
|
||||||
{
|
{
|
||||||
acctDifference = totalAllocationAccounted.subtract(paymentAccounted.abs()); // gain is negative
|
acctDifference = totalAllocationAccounted.abs().subtract(paymentAccounted.abs()); // gain is negative
|
||||||
StringBuilder d2 = new StringBuilder("(full) = ").append(acctDifference);
|
StringBuilder d2 = new StringBuilder("(full) = ").append(acctDifference);
|
||||||
if (log.isLoggable(Level.FINE)) log.fine(d2.toString());
|
if (log.isLoggable(Level.FINE)) log.fine(d2.toString());
|
||||||
description.append(" - ").append(d2);
|
description.append(" - ").append(d2);
|
||||||
|
|
@ -1016,6 +1015,46 @@ public class Doc_AllocationHdr extends Doc
|
||||||
paymentAccounted0.abs().compareTo(totalAllocationAccounted.abs()) == 0;
|
paymentAccounted0.abs().compareTo(totalAllocationAccounted.abs()) == 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// percent of total payment
|
||||||
|
double multiplier = allocationSource.doubleValue() / paymentSource.doubleValue();
|
||||||
|
// Reduce Orig Payment Accounted
|
||||||
|
paymentAccounted = paymentAccounted.multiply(BigDecimal.valueOf(multiplier));
|
||||||
|
// Difference based on percentage of Orig Payment
|
||||||
|
acctDifference = totalAllocationAccounted.abs().subtract(paymentAccounted.abs()); // gain is negative
|
||||||
|
// ignore Tolerance
|
||||||
|
if (acctDifference.abs().compareTo(TOLERANCE) < 0)
|
||||||
|
acctDifference = Env.ZERO;
|
||||||
|
// Round
|
||||||
|
int precision = as.getStdPrecision();
|
||||||
|
if (acctDifference.scale() > precision)
|
||||||
|
acctDifference = acctDifference.setScale(precision, RoundingMode.HALF_UP);
|
||||||
|
StringBuilder d2 = new StringBuilder("(partial) = ").append(acctDifference).append(" - Multiplier=").append(multiplier);
|
||||||
|
if (log.isLoggable(Level.FINE)) log.fine(d2.toString());
|
||||||
|
description.append(" - ").append(d2);
|
||||||
|
|
||||||
|
// Different period
|
||||||
|
if (MPeriod.getC_Period_ID(getCtx(), payment.getDateAcct(), payment.getAD_Org_ID()) !=
|
||||||
|
MPeriod.getC_Period_ID(getCtx(), getDateAcct(), getAD_Org_ID()))
|
||||||
|
{
|
||||||
|
if (paymentAccounted.scale() > precision)
|
||||||
|
paymentAccounted = paymentAccounted.setScale(precision, RoundingMode.HALF_UP);
|
||||||
|
paymentSource = paymentSource.multiply(BigDecimal.valueOf(multiplier));
|
||||||
|
if (paymentSource.scale() > precision)
|
||||||
|
paymentSource = paymentSource.setScale(precision, RoundingMode.HALF_UP);
|
||||||
|
BigDecimal allocationAccounted0 = MConversionRate.convert(getCtx(),
|
||||||
|
allocationSource, getC_Currency_ID(),
|
||||||
|
as.getC_Currency_ID(), payment.getDateAcct(),
|
||||||
|
payment.getC_ConversionType_ID(), payment.getAD_Client_ID(), payment.getAD_Org_ID());
|
||||||
|
BigDecimal paymentAccounted0 = MConversionRate.convert(getCtx(),
|
||||||
|
paymentSource, getC_Currency_ID(),
|
||||||
|
as.getC_Currency_ID(), getDateAcct(),
|
||||||
|
getC_ConversionType_ID(), getAD_Client_ID(), getAD_Org_ID());
|
||||||
|
isSameSourceDiffPeriod = allocationAccounted0.abs().compareTo(paymentAccounted.abs()) == 0 &&
|
||||||
|
paymentAccounted0.abs().compareTo(totalAllocationAccounted.abs()) == 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (acctDifference == null || acctDifference.signum() == 0)
|
if (acctDifference == null || acctDifference.signum() == 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue