IDEMPIERE-3628 Wrong invoice reversal for a price changed from zero to non-zero
This commit is contained in:
parent
339f171f65
commit
0636192a5e
|
@ -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";
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue