IDEMPIERE-3628 Wrong invoice reversal for a price changed from zero to non-zero

This commit is contained in:
Carlos Ruiz 2018-01-23 00:59:28 +01:00
parent 339f171f65
commit 0636192a5e
2 changed files with 20 additions and 9 deletions

View File

@ -679,7 +679,7 @@ public class MInvoice extends X_C_Invoice implements DocAction
whereClauseFinal += whereClause; whereClauseFinal += whereClause;
List<MInvoiceLine> list = new Query(getCtx(), I_C_InvoiceLine.Table_Name, whereClauseFinal, get_TrxName()) List<MInvoiceLine> list = new Query(getCtx(), I_C_InvoiceLine.Table_Name, whereClauseFinal, get_TrxName())
.setParameters(getC_Invoice_ID()) .setParameters(getC_Invoice_ID())
.setOrderBy(I_C_InvoiceLine.COLUMNNAME_Line) .setOrderBy("Line, C_InvoiceLine_ID")
.list(); .list();
return list.toArray(new MInvoiceLine[list.size()]); return list.toArray(new MInvoiceLine[list.size()]);
} // getLines } // getLines
@ -2450,17 +2450,23 @@ public class MInvoice extends X_C_Invoice implements DocAction
reversal.setReversal(true); reversal.setReversal(true);
// Reverse Line Qty // Reverse Line Qty
MInvoiceLine[] oLines = getLines(false);
MInvoiceLine[] rLines = reversal.getLines(true); MInvoiceLine[] rLines = reversal.getLines(true);
for (int i = 0; i < rLines.length; i++) for (int i = 0; i < rLines.length; i++)
{ {
MInvoiceLine rLine = rLines[i]; MInvoiceLine rLine = rLines[i];
rLine.setQtyEntered(rLine.getQtyEntered().negate()); rLine.getParent().setReversal(true);
rLine.setQtyInvoiced(rLine.getQtyInvoiced().negate()); MInvoiceLine oLine = oLines[i];
rLine.setLineNetAmt(rLine.getLineNetAmt().negate()); rLine.setQtyEntered(oLine.getQtyEntered().negate());
if (rLine.getTaxAmt() != null && rLine.getTaxAmt().compareTo(Env.ZERO) != 0) rLine.setQtyInvoiced(oLine.getQtyInvoiced().negate());
rLine.setTaxAmt(rLine.getTaxAmt().negate()); rLine.setLineNetAmt(oLine.getLineNetAmt().negate());
if (rLine.getLineTotalAmt() != null && rLine.getLineTotalAmt().compareTo(Env.ZERO) != 0) rLine.setTaxAmt(oLine.getTaxAmt().negate());
rLine.setLineTotalAmt(rLine.getLineTotalAmt().negate()); rLine.setLineTotalAmt(oLine.getLineTotalAmt().negate());
rLine.setPriceActual(oLine.getPriceActual());
rLine.setPriceList(oLine.getPriceList());
rLine.setPriceLimit(oLine.getPriceLimit());
rLine.setPriceEntered(oLine.getPriceEntered());
rLine.setC_UOM_ID(oLine.getC_UOM_ID());
if (!rLine.save(get_TrxName())) if (!rLine.save(get_TrxName()))
{ {
m_processMsg = "Could not correct Invoice Reversal Line"; m_processMsg = "Could not correct Invoice Reversal Line";

View File

@ -842,12 +842,16 @@ public class MInvoiceLine extends X_C_InvoiceLine
protected boolean beforeSave (boolean newRecord) protected boolean beforeSave (boolean newRecord)
{ {
if (log.isLoggable(Level.FINE)) log.fine("New=" + newRecord); if (log.isLoggable(Level.FINE)) log.fine("New=" + newRecord);
if (newRecord && getParent().isComplete()) { boolean parentComplete = getParent().isComplete();
boolean isReversal = getParent().isReversal();
if (newRecord && parentComplete) {
log.saveError("ParentComplete", Msg.translate(getCtx(), "C_InvoiceLine")); log.saveError("ParentComplete", Msg.translate(getCtx(), "C_InvoiceLine"));
return false; return false;
} }
// Re-set invoice header (need to update m_IsSOTrx flag) - phib [ 1686773 ] // Re-set invoice header (need to update m_IsSOTrx flag) - phib [ 1686773 ]
setInvoice(getParent()); setInvoice(getParent());
if (!parentComplete && !isReversal) { // do not change things when parent is complete
// Charge // Charge
if (getC_Charge_ID() != 0) if (getC_Charge_ID() != 0)
{ {
@ -916,6 +920,7 @@ public class MInvoiceLine extends X_C_InvoiceLine
return false; return false;
} }
} }
}
return true; return true;
} // beforeSave } // beforeSave