From 88d302f2b0ee23ead0aa9ddb2fa14da3c9533265 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 19 Aug 2009 17:09:45 +0000 Subject: [PATCH] Implement FR [2840458] - Credit checking problem https://sourceforge.net/tracker/?func=detail&aid=2840458&group_id=176962&atid=879335 --- base/src/org/compiere/model/MInOut.java | 50 +++++++++------- base/src/org/compiere/model/MOrder.java | 58 +++++++++++-------- .../oracle/533_FR2840458_CreditCheck.sql | 10 ++++ .../postgresql/533_FR2840458_CreditCheck.sql | 10 ++++ 4 files changed, 81 insertions(+), 47 deletions(-) create mode 100644 migration/353a-trunk/oracle/533_FR2840458_CreditCheck.sql create mode 100644 migration/353a-trunk/postgresql/533_FR2840458_CreditCheck.sql diff --git a/base/src/org/compiere/model/MInOut.java b/base/src/org/compiere/model/MInOut.java index 2e3b512193..0dce6885b1 100644 --- a/base/src/org/compiere/model/MInOut.java +++ b/base/src/org/compiere/model/MInOut.java @@ -1050,28 +1050,34 @@ public class MInOut extends X_M_InOut implements DocAction // Credit Check if (isSOTrx() && !isReversal()) { - MBPartner bp = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName()); - if (MBPartner.SOCREDITSTATUS_CreditStop.equals(bp.getSOCreditStatus())) - { - m_processMsg = "@BPartnerCreditStop@ - @TotalOpenBalance@=" - + bp.getTotalOpenBalance() - + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); - return DocAction.STATUS_Invalid; - } - if (MBPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus())) - { - m_processMsg = "@BPartnerCreditHold@ - @TotalOpenBalance@=" - + bp.getTotalOpenBalance() - + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); - return DocAction.STATUS_Invalid; - } - BigDecimal notInvoicedAmt = MBPartner.getNotInvoicedAmt(getC_BPartner_ID()); - if (MBPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus(notInvoicedAmt))) - { - m_processMsg = "@BPartnerOverSCreditHold@ - @TotalOpenBalance@=" - + bp.getTotalOpenBalance() + ", @NotInvoicedAmt@=" + notInvoicedAmt - + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); - return DocAction.STATUS_Invalid; + I_C_Order order = getC_Order(); + if (order != null && MDocType.DOCSUBTYPESO_PrepayOrder.equals(order.getC_DocType().getDocSubTypeSO()) + && !MSysConfig.getBooleanValue("CHECK_CREDIT_ON_PREPAY_ORDER", true, getAD_Client_ID(), getAD_Org_ID())) { + // ignore -- don't validate Prepay Orders depending on sysconfig parameter + } else { + MBPartner bp = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName()); + if (MBPartner.SOCREDITSTATUS_CreditStop.equals(bp.getSOCreditStatus())) + { + m_processMsg = "@BPartnerCreditStop@ - @TotalOpenBalance@=" + + bp.getTotalOpenBalance() + + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); + return DocAction.STATUS_Invalid; + } + if (MBPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus())) + { + m_processMsg = "@BPartnerCreditHold@ - @TotalOpenBalance@=" + + bp.getTotalOpenBalance() + + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); + return DocAction.STATUS_Invalid; + } + BigDecimal notInvoicedAmt = MBPartner.getNotInvoicedAmt(getC_BPartner_ID()); + if (MBPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus(notInvoicedAmt))) + { + m_processMsg = "@BPartnerOverSCreditHold@ - @TotalOpenBalance@=" + + bp.getTotalOpenBalance() + ", @NotInvoicedAmt@=" + notInvoicedAmt + + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); + return DocAction.STATUS_Invalid; + } } } diff --git a/base/src/org/compiere/model/MOrder.java b/base/src/org/compiere/model/MOrder.java index 65cf91718f..b84980ef69 100644 --- a/base/src/org/compiere/model/MOrder.java +++ b/base/src/org/compiere/model/MOrder.java @@ -32,7 +32,6 @@ import org.adempiere.exceptions.FillMandatoryException; import org.compiere.print.ReportEngine; import org.compiere.process.DocAction; import org.compiere.process.DocumentEngine; -import org.compiere.report.MReportTree; import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -1219,30 +1218,39 @@ public class MOrder extends X_C_Order implements DocAction // Credit Check if (isSOTrx()) { - MBPartner bp = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName()); - if (MBPartner.SOCREDITSTATUS_CreditStop.equals(bp.getSOCreditStatus())) - { - m_processMsg = "@BPartnerCreditStop@ - @TotalOpenBalance@=" - + bp.getTotalOpenBalance() - + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); - return DocAction.STATUS_Invalid; - } - if (MBPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus())) - { - m_processMsg = "@BPartnerCreditHold@ - @TotalOpenBalance@=" - + bp.getTotalOpenBalance() - + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); - return DocAction.STATUS_Invalid; - } - BigDecimal grandTotal = MConversionRate.convertBase(getCtx(), - getGrandTotal(), getC_Currency_ID(), getDateOrdered(), - getC_ConversionType_ID(), getAD_Client_ID(), getAD_Org_ID()); - if (MBPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus(grandTotal))) - { - m_processMsg = "@BPartnerOverOCreditHold@ - @TotalOpenBalance@=" - + bp.getTotalOpenBalance() + ", @GrandTotal@=" + grandTotal - + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); - return DocAction.STATUS_Invalid; + if ( MDocType.DOCSUBTYPESO_POSOrder.equals(dt.getDocSubTypeSO()) + && PAYMENTRULE_Cash.equals(getPaymentRule()) + && !MSysConfig.getBooleanValue("CHECK_CREDIT_ON_CASH_POS_ORDER", true, getAD_Client_ID(), getAD_Org_ID())) { + // ignore -- don't validate for Cash POS Orders depending on sysconfig parameter + } else if (MDocType.DOCSUBTYPESO_PrepayOrder.equals(dt.getDocSubTypeSO()) + && !MSysConfig.getBooleanValue("CHECK_CREDIT_ON_PREPAY_ORDER", true, getAD_Client_ID(), getAD_Org_ID())) { + // ignore -- don't validate Prepay Orders depending on sysconfig parameter + } else { + MBPartner bp = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName()); + if (MBPartner.SOCREDITSTATUS_CreditStop.equals(bp.getSOCreditStatus())) + { + m_processMsg = "@BPartnerCreditStop@ - @TotalOpenBalance@=" + + bp.getTotalOpenBalance() + + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); + return DocAction.STATUS_Invalid; + } + if (MBPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus())) + { + m_processMsg = "@BPartnerCreditHold@ - @TotalOpenBalance@=" + + bp.getTotalOpenBalance() + + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); + return DocAction.STATUS_Invalid; + } + BigDecimal grandTotal = MConversionRate.convertBase(getCtx(), + getGrandTotal(), getC_Currency_ID(), getDateOrdered(), + getC_ConversionType_ID(), getAD_Client_ID(), getAD_Org_ID()); + if (MBPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus(grandTotal))) + { + m_processMsg = "@BPartnerOverOCreditHold@ - @TotalOpenBalance@=" + + bp.getTotalOpenBalance() + ", @GrandTotal@=" + grandTotal + + ", @SO_CreditLimit@=" + bp.getSO_CreditLimit(); + return DocAction.STATUS_Invalid; + } } } diff --git a/migration/353a-trunk/oracle/533_FR2840458_CreditCheck.sql b/migration/353a-trunk/oracle/533_FR2840458_CreditCheck.sql new file mode 100644 index 0000000000..32c2bcef9a --- /dev/null +++ b/migration/353a-trunk/oracle/533_FR2840458_CreditCheck.sql @@ -0,0 +1,10 @@ +-- Aug 19, 2009 12:05:23 PM COT +-- FR 2840458 - Credit checking problem +INSERT INTO AD_SysConfig (AD_Client_ID,AD_Org_ID,AD_SysConfig_ID,ConfigurationLevel,Created,CreatedBy,Description,EntityType,IsActive,Name,Updated,UpdatedBy,Value) VALUES (0,0,50029,'O',TO_DATE('2009-08-19 12:05:21','YYYY-MM-DD HH24:MI:SS'),100,'Check credit on Cash POS Order','D','Y','CHECK_CREDIT_ON_CASH_POS_ORDER',TO_DATE('2009-08-19 12:05:21','YYYY-MM-DD HH24:MI:SS'),100,'Y') +; + +-- Aug 19, 2009 12:05:38 PM COT +-- FR 2840458 - Credit checking problem +INSERT INTO AD_SysConfig (AD_Client_ID,AD_Org_ID,AD_SysConfig_ID,ConfigurationLevel,Created,CreatedBy,Description,EntityType,IsActive,Name,Updated,UpdatedBy,Value) VALUES (0,0,50030,'O',TO_DATE('2009-08-19 12:05:37','YYYY-MM-DD HH24:MI:SS'),100,'Check credit on Prepay Order','D','Y','CHECK_CREDIT_ON_PREPAY_ORDER',TO_DATE('2009-08-19 12:05:37','YYYY-MM-DD HH24:MI:SS'),100,'Y') +; + diff --git a/migration/353a-trunk/postgresql/533_FR2840458_CreditCheck.sql b/migration/353a-trunk/postgresql/533_FR2840458_CreditCheck.sql new file mode 100644 index 0000000000..64cbc61273 --- /dev/null +++ b/migration/353a-trunk/postgresql/533_FR2840458_CreditCheck.sql @@ -0,0 +1,10 @@ +-- Aug 19, 2009 12:05:23 PM COT +-- FR 2840458 - Credit checking problem +INSERT INTO AD_SysConfig (AD_Client_ID,AD_Org_ID,AD_SysConfig_ID,ConfigurationLevel,Created,CreatedBy,Description,EntityType,IsActive,Name,Updated,UpdatedBy,Value) VALUES (0,0,50029,'O',TO_TIMESTAMP('2009-08-19 12:05:21','YYYY-MM-DD HH24:MI:SS'),100,'Check credit on Cash POS Order','D','Y','CHECK_CREDIT_ON_CASH_POS_ORDER',TO_TIMESTAMP('2009-08-19 12:05:21','YYYY-MM-DD HH24:MI:SS'),100,'Y') +; + +-- Aug 19, 2009 12:05:38 PM COT +-- FR 2840458 - Credit checking problem +INSERT INTO AD_SysConfig (AD_Client_ID,AD_Org_ID,AD_SysConfig_ID,ConfigurationLevel,Created,CreatedBy,Description,EntityType,IsActive,Name,Updated,UpdatedBy,Value) VALUES (0,0,50030,'O',TO_TIMESTAMP('2009-08-19 12:05:37','YYYY-MM-DD HH24:MI:SS'),100,'Check credit on Prepay Order','D','Y','CHECK_CREDIT_ON_PREPAY_ORDER',TO_TIMESTAMP('2009-08-19 12:05:37','YYYY-MM-DD HH24:MI:SS'),100,'Y') +; +