IDEMPIERE-4128 Matched invoice posting with wrong precision based on transaction currency instead of schema currency (#316)
- Fix error in setting the currency for source amount - Improve unit test to check source amount precision as well
This commit is contained in:
parent
c4b39eac8c
commit
57e4e3fceb
|
@ -1184,7 +1184,7 @@ public final class FactLine extends X_Fact_Acct
|
||||||
// Fixing source amounts
|
// Fixing source amounts
|
||||||
BigDecimal drSourceAmt = fact.getAmtSourceDr();
|
BigDecimal drSourceAmt = fact.getAmtSourceDr();
|
||||||
BigDecimal crSourceAmt = fact.getAmtSourceCr();
|
BigDecimal crSourceAmt = fact.getAmtSourceCr();
|
||||||
setAmtSource(getC_Currency_ID(), crSourceAmt.multiply(multiplier), drSourceAmt.multiply(multiplier));
|
setAmtSource(fact.getC_Currency_ID(), crSourceAmt.multiply(multiplier), drSourceAmt.multiply(multiplier));
|
||||||
// end Bayu Sistematika
|
// end Bayu Sistematika
|
||||||
//
|
//
|
||||||
success = true;
|
success = true;
|
||||||
|
|
|
@ -550,25 +550,28 @@ public class MatchInvTest extends AbstractTestCase {
|
||||||
plv.setValidFrom(currentDate);
|
plv.setValidFrom(currentDate);
|
||||||
plv.saveEx();
|
plv.saveEx();
|
||||||
|
|
||||||
MProductPrice pp = new MProductPrice(plv, product.getM_Product_ID(), new BigDecimal(2400), new BigDecimal(2400), Env.ZERO);
|
BigDecimal priceInYen = new BigDecimal(2400);
|
||||||
|
MProductPrice pp = new MProductPrice(plv, product.getM_Product_ID(), priceInYen, priceInYen, Env.ZERO);
|
||||||
pp.saveEx();
|
pp.saveEx();
|
||||||
|
|
||||||
|
BigDecimal yenToUsd = new BigDecimal(0.277582);
|
||||||
MConversionRate cr1 = new MConversionRate(Env.getCtx(), 0, null);
|
MConversionRate cr1 = new MConversionRate(Env.getCtx(), 0, null);
|
||||||
cr1.setC_Currency_ID(japaneseYen.getC_Currency_ID());
|
cr1.setC_Currency_ID(japaneseYen.getC_Currency_ID());
|
||||||
cr1.setC_Currency_ID_To(100); // USD
|
cr1.setC_Currency_ID_To(100); // USD
|
||||||
cr1.setC_ConversionType_ID(114); // Spot
|
cr1.setC_ConversionType_ID(114); // Spot
|
||||||
cr1.setValidFrom(currentDate);
|
cr1.setValidFrom(currentDate);
|
||||||
cr1.setValidTo(currentDate);
|
cr1.setValidTo(currentDate);
|
||||||
cr1.setMultiplyRate(new BigDecimal(0.277582));
|
cr1.setMultiplyRate(yenToUsd);
|
||||||
cr1.saveEx();
|
cr1.saveEx();
|
||||||
|
|
||||||
|
BigDecimal euroToUsd = new BigDecimal(0.236675);
|
||||||
MConversionRate cr2 = new MConversionRate(Env.getCtx(), 0, null);
|
MConversionRate cr2 = new MConversionRate(Env.getCtx(), 0, null);
|
||||||
cr2.setC_Currency_ID(japaneseYen.getC_Currency_ID());
|
cr2.setC_Currency_ID(japaneseYen.getC_Currency_ID());
|
||||||
cr2.setC_Currency_ID_To(102); // EUR
|
cr2.setC_Currency_ID_To(102); // EUR
|
||||||
cr2.setC_ConversionType_ID(114); // Spot
|
cr2.setC_ConversionType_ID(114); // Spot
|
||||||
cr2.setValidFrom(currentDate);
|
cr2.setValidFrom(currentDate);
|
||||||
cr2.setValidTo(currentDate);
|
cr2.setValidTo(currentDate);
|
||||||
cr2.setMultiplyRate(new BigDecimal(0.236675));
|
cr2.setMultiplyRate(euroToUsd);
|
||||||
cr2.saveEx();
|
cr2.saveEx();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -628,11 +631,12 @@ public class MatchInvTest extends AbstractTestCase {
|
||||||
invoice.setDocAction(DocAction.ACTION_Complete);
|
invoice.setDocAction(DocAction.ACTION_Complete);
|
||||||
invoice.saveEx();
|
invoice.saveEx();
|
||||||
|
|
||||||
|
BigDecimal qtyInvoiced = new BigDecimal(3);
|
||||||
MInvoiceLine invoiceLine = new MInvoiceLine(invoice);
|
MInvoiceLine invoiceLine = new MInvoiceLine(invoice);
|
||||||
invoiceLine.setM_InOutLine_ID(receiptLine.get_ID());
|
invoiceLine.setM_InOutLine_ID(receiptLine.get_ID());
|
||||||
invoiceLine.setLine(10);
|
invoiceLine.setLine(10);
|
||||||
invoiceLine.setProduct(product);
|
invoiceLine.setProduct(product);
|
||||||
invoiceLine.setQty(new BigDecimal(3));
|
invoiceLine.setQty(qtyInvoiced);
|
||||||
invoiceLine.saveEx();
|
invoiceLine.saveEx();
|
||||||
|
|
||||||
info = MWorkflow.runDocumentActionWorkflow(invoice, DocAction.ACTION_Complete);
|
info = MWorkflow.runDocumentActionWorkflow(invoice, DocAction.ACTION_Complete);
|
||||||
|
@ -647,9 +651,10 @@ public class MatchInvTest extends AbstractTestCase {
|
||||||
invoice.load(getTrxName());
|
invoice.load(getTrxName());
|
||||||
assertTrue(invoice.isPosted());
|
assertTrue(invoice.isPosted());
|
||||||
|
|
||||||
int C_AcctSchema_ID = MClientInfo.get(Env.getCtx()).getC_AcctSchema1_ID();
|
int C_AcctSchema_ID = MClientInfo.get(Env.getCtx()).getC_AcctSchema1_ID(); //usd schema
|
||||||
MAcctSchema as = MAcctSchema.get(Env.getCtx(), C_AcctSchema_ID);
|
MAcctSchema as = MAcctSchema.get(Env.getCtx(), C_AcctSchema_ID);
|
||||||
BigDecimal amount = new BigDecimal(1998.59).setScale(as.getC_Currency().getStdPrecision(), RoundingMode.HALF_UP);
|
BigDecimal acctAmount = priceInYen.multiply(yenToUsd).multiply(qtyInvoiced).setScale(as.getC_Currency().getStdPrecision(), RoundingMode.HALF_UP);
|
||||||
|
BigDecimal acctSource = priceInYen.multiply(qtyInvoiced).setScale(japaneseYen.getStdPrecision(), RoundingMode.HALF_UP);
|
||||||
MMatchInv[] miList = MMatchInv.getInvoiceLine(Env.getCtx(), invoiceLine.get_ID(), getTrxName());
|
MMatchInv[] miList = MMatchInv.getInvoiceLine(Env.getCtx(), invoiceLine.get_ID(), getTrxName());
|
||||||
for (MMatchInv mi : miList) {
|
for (MMatchInv mi : miList) {
|
||||||
if (!mi.isPosted()) {
|
if (!mi.isPosted()) {
|
||||||
|
@ -674,10 +679,12 @@ public class MatchInvTest extends AbstractTestCase {
|
||||||
MFactAcct fa = new MFactAcct(Env.getCtx(), id, getTrxName());
|
MFactAcct fa = new MFactAcct(Env.getCtx(), id, getTrxName());
|
||||||
if (fa.getAccount_ID() == acctNIR.getAccount_ID()) {
|
if (fa.getAccount_ID() == acctNIR.getAccount_ID()) {
|
||||||
assertTrue(fa.getAmtAcctDr().compareTo(Env.ZERO) >= 0);
|
assertTrue(fa.getAmtAcctDr().compareTo(Env.ZERO) >= 0);
|
||||||
assertTrue(fa.getAmtAcctDr().compareTo(amount) == 0);
|
assertTrue(fa.getAmtAcctDr().compareTo(acctAmount) == 0, fa.getAmtAcctDr().toPlainString() + " != " + acctAmount.toPlainString());
|
||||||
|
assertTrue(fa.getAmtSourceDr().toPlainString().compareTo(acctSource.toPlainString()) == 0, fa.getAmtSourceDr().toPlainString() + " != " + acctSource.toPlainString());
|
||||||
} else if (fa.getAccount_ID() == acctInvClr.getAccount_ID()) {
|
} else if (fa.getAccount_ID() == acctInvClr.getAccount_ID()) {
|
||||||
assertTrue(fa.getAmtAcctCr().compareTo(Env.ZERO) >= 0);
|
assertTrue(fa.getAmtAcctCr().compareTo(Env.ZERO) >= 0);
|
||||||
assertTrue(fa.getAmtAcctCr().compareTo(amount) == 0);
|
assertTrue(fa.getAmtAcctCr().compareTo(acctAmount) == 0, fa.getAmtAcctCr().toPlainString() + " != " + acctAmount.toPlainString());
|
||||||
|
assertTrue(fa.getAmtSourceCr().toPlainString().compareTo(acctSource.toPlainString()) == 0, fa.getAmtSourceCr().toPlainString() + " != " + acctSource.toPlainString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue