From 7a41c80694efa84919b8b9c8b5dd1d386e5098aa Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Sat, 26 Mar 2011 00:39:00 -0500 Subject: [PATCH] FR [3132797] - FS02 Cash Flow http://www.adempiere.com/index.php/FS02_Cash_Flow https://sourceforge.net/tracker/?func=detail&aid=3132797&group_id=176962&atid=879335 Fix problem reported by hardmax https://sourceforge.net/projects/adempiere/forums/forum/610548/topic/3880506?message=8936691 --- .../src/org/compiere/model/MInvoice.java | 16 +++++++++++++--- .../src/org/compiere/model/MOrder.java | 16 +++++++++++++--- .../src/org/compiere/model/MPaymentTerm.java | 12 +++++++++++- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/model/MInvoice.java b/org.adempiere.base/src/org/compiere/model/MInvoice.java index 8224feb545..110a8435bd 100644 --- a/org.adempiere.base/src/org/compiere/model/MInvoice.java +++ b/org.adempiere.base/src/org/compiere/model/MInvoice.java @@ -1342,10 +1342,20 @@ public class MInvoice extends X_C_Invoice implements DocAction return DocAction.STATUS_Invalid; } - if (!createPaySchedule()) + if ( getGrandTotal().signum() != 0 + && PAYMENTRULE_OnCredit.equals(getPaymentRule())) { - m_processMsg = "@ErrorPaymentSchedule@"; - return DocAction.STATUS_Invalid; + if (!createPaySchedule()) + { + m_processMsg = "@ErrorPaymentSchedule@"; + return DocAction.STATUS_Invalid; + } + } else { + if (MInvoicePaySchedule.getInvoicePaySchedule(getCtx(), getC_Invoice_ID(), 0, get_TrxName()).length > 0) + { + m_processMsg = "@ErrorPaymentSchedule@"; + return DocAction.STATUS_Invalid; + } } // Credit Status diff --git a/org.adempiere.base/src/org/compiere/model/MOrder.java b/org.adempiere.base/src/org/compiere/model/MOrder.java index 37a16d73c1..edd4001adc 100644 --- a/org.adempiere.base/src/org/compiere/model/MOrder.java +++ b/org.adempiere.base/src/org/compiere/model/MOrder.java @@ -1285,10 +1285,20 @@ public class MOrder extends X_C_Order implements DocAction return DocAction.STATUS_Invalid; } - if (!createPaySchedule()) + if ( getGrandTotal().signum() != 0 + && PAYMENTRULE_OnCredit.equals(getPaymentRule())) { - m_processMsg = "@ErrorPaymentSchedule@"; - return DocAction.STATUS_Invalid; + if (!createPaySchedule()) + { + m_processMsg = "@ErrorPaymentSchedule@"; + return DocAction.STATUS_Invalid; + } + } else { + if (MOrderPaySchedule.getOrderPaySchedule(getCtx(), getC_Order_ID(), 0, get_TrxName()).length > 0) + { + m_processMsg = "@ErrorPaymentSchedule@"; + return DocAction.STATUS_Invalid; + } } // Credit Check diff --git a/org.adempiere.base/src/org/compiere/model/MPaymentTerm.java b/org.adempiere.base/src/org/compiere/model/MPaymentTerm.java index 5fb7d75410..29fe72ff7c 100644 --- a/org.adempiere.base/src/org/compiere/model/MPaymentTerm.java +++ b/org.adempiere.base/src/org/compiere/model/MPaymentTerm.java @@ -211,6 +211,11 @@ public class MPaymentTerm extends X_C_PaymentTerm return false; } + // do not apply payment term if the invoice is not on credit or if total is zero + if ( (! MInvoice.PAYMENTRULE_OnCredit.equals(invoice.getPaymentRule()) ) + || invoice.getGrandTotal().signum() == 0) + return false; + if (!isValid()) return applyNoSchedule (invoice); // @@ -310,7 +315,12 @@ public class MPaymentTerm extends X_C_PaymentTerm log.log(Level.SEVERE, "No valid order - " + order); return false; } - + + // do not apply payment term if the order is not on credit or if total is zero + if ( (! MOrder.PAYMENTRULE_OnCredit.equals(order.getPaymentRule()) ) + || order.getGrandTotal().signum() == 0) + return false; + if (!isValid()) return applyOrderNoSchedule (order); //