📄 mbpartner.java
字号:
return retValue;
} // getLocation
/**
* Get Bank Accounts
* @param requery requery
* @return Bank Accounts
*/
public MBPBankAccount[] getBankAccounts (boolean requery)
{
if (m_accounts != null && m_accounts.length >= 0 && !requery) // re-load
return m_accounts;
//
ArrayList<MBPBankAccount> list = new ArrayList<MBPBankAccount>();
String sql = "SELECT * FROM C_BP_BankAccount WHERE C_BPartner_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getC_BPartner_ID());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new MBPBankAccount (getCtx(), rs, get_TrxName()));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
finally
{
try
{
if (pstmt != null)
pstmt.close ();
}
catch (Exception e)
{}
pstmt = null;
}
m_accounts = new MBPBankAccount[list.size()];
list.toArray(m_accounts);
return m_accounts;
} // getBankAccounts
/**************************************************************************
* String Representation
* @return info
*/
public String toString ()
{
StringBuffer sb = new StringBuffer ("MBPartner[ID=")
.append(get_ID())
.append(",Value=").append(getValue())
.append(",Name=").append(getName())
.append(",Open=").append(getTotalOpenBalance())
.append ("]");
return sb.toString ();
} // toString
/**
* Set Client/Org
* @param AD_Client_ID client
* @param AD_Org_ID org
*/
public void setClientOrg (int AD_Client_ID, int AD_Org_ID)
{
super.setClientOrg(AD_Client_ID, AD_Org_ID);
} // setClientOrg
/**
* Set Linked Organization.
* (is Button)
* @param AD_OrgBP_ID
*/
public void setAD_OrgBP_ID (int AD_OrgBP_ID)
{
if (AD_OrgBP_ID == 0)
super.setAD_OrgBP_ID (null);
else
super.setAD_OrgBP_ID (String.valueOf(AD_OrgBP_ID));
} // setAD_OrgBP_ID
/**
* Get Linked Organization.
* (is Button)
* The Business Partner is another Organization
* for explicit Inter-Org transactions
*/
public int getAD_OrgBP_ID_Int()
{
String org = super.getAD_OrgBP_ID();
if (org == null)
return 0;
int AD_OrgBP_ID = 0;
try
{
AD_OrgBP_ID = Integer.parseInt (org);
}
catch (Exception ex)
{
log.log(Level.SEVERE, org, ex);
}
return AD_OrgBP_ID;
} // getAD_OrgBP_ID_Int
/**
* Get Primary C_BPartner_Location_ID
* @return C_BPartner_Location_ID
*/
public int getPrimaryC_BPartner_Location_ID()
{
if (m_primaryC_BPartner_Location_ID == null)
{
MBPartnerLocation[] locs = getLocations(false);
for (int i = 0; m_primaryC_BPartner_Location_ID == null && i < locs.length; i++)
{
if (locs[i].isBillTo())
{
setPrimaryC_BPartner_Location_ID (locs[i].getC_BPartner_Location_ID());
break;
}
}
// get first
if (m_primaryC_BPartner_Location_ID == null && locs.length > 0)
setPrimaryC_BPartner_Location_ID (locs[0].getC_BPartner_Location_ID());
}
if (m_primaryC_BPartner_Location_ID == null)
return 0;
return m_primaryC_BPartner_Location_ID.intValue();
} // getPrimaryC_BPartner_Location_ID
/**
* Get Primary AD_User_ID
* @return AD_User_ID
*/
public int getPrimaryAD_User_ID()
{
if (m_primaryAD_User_ID == null)
{
MUser[] users = getContacts(false);
// for (int i = 0; i < users.length; i++)
// {
// }
if (m_primaryAD_User_ID == null && users.length > 0)
setPrimaryAD_User_ID(users[0].getAD_User_ID());
}
if (m_primaryAD_User_ID == null)
return 0;
return m_primaryAD_User_ID.intValue();
} // getPrimaryAD_User_ID
/**
* Set Primary C_BPartner_Location_ID
* @param C_BPartner_Location_ID id
*/
public void setPrimaryC_BPartner_Location_ID(int C_BPartner_Location_ID)
{
m_primaryC_BPartner_Location_ID = new Integer (C_BPartner_Location_ID);
} // setPrimaryC_BPartner_Location_ID
/**
* Set Primary AD_User_ID
* @param AD_User_ID id
*/
public void setPrimaryAD_User_ID(int AD_User_ID)
{
m_primaryAD_User_ID = new Integer (AD_User_ID);
} // setPrimaryAD_User_ID
/**
* Calculate Total Open Balance and SO_CreditUsed.
* (includes drafted invoices)
*/
public void setTotalOpenBalance ()
{
BigDecimal SO_CreditUsed = null;
BigDecimal TotalOpenBalance = null;
String sql = "SELECT "
// SO Credit Used
+ "COALESCE((SELECT SUM(currencyBase(invoiceOpen(i.C_Invoice_ID,i.C_InvoicePaySchedule_ID),i.C_Currency_ID,i.DateOrdered, i.AD_Client_ID,i.AD_Org_ID)) FROM C_Invoice_v i "
+ "WHERE i.C_BPartner_ID=bp.C_BPartner_ID AND i.IsSOTrx='Y' AND i.IsPaid='N'),0), "
// Balance (incl. unallocated payments)
+ "COALESCE((SELECT SUM(currencyBase(invoiceOpen(i.C_Invoice_ID,i.C_InvoicePaySchedule_ID),i.C_Currency_ID,i.DateOrdered, i.AD_Client_ID,i.AD_Org_ID)*i.MultiplierAP) FROM C_Invoice_v i "
+ "WHERE i.C_BPartner_ID=bp.C_BPartner_ID AND i.IsPaid='N'),0) - "
+ "COALESCE((SELECT SUM(currencyBase(p.PayAmt,p.C_Currency_ID,p.DateTrx,p.AD_Client_ID,p.AD_Org_ID)) FROM C_Payment_v p "
+ "WHERE p.C_BPartner_ID=bp.C_BPartner_ID AND p.IsAllocated='N'"
+ " AND p.C_Charge_ID IS NULL AND NOT EXISTS (SELECT * FROM C_AllocationLine al WHERE p.C_Payment_ID=al.C_Payment_ID)),0) "
+ "FROM C_BPartner bp "
+ "WHERE C_BPartner_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, getC_BPartner_ID());
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
{
SO_CreditUsed = rs.getBigDecimal(1);
TotalOpenBalance = rs.getBigDecimal(2);
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
//
m_TotalOpenBalanceSet = true;
if (SO_CreditUsed != null)
super.setSO_CreditUsed (SO_CreditUsed);
if (TotalOpenBalance != null)
super.setTotalOpenBalance(TotalOpenBalance);
setSOCreditStatus();
} // setTotalOpenBalance
/**
* Set Actual Life Time Value from DB
*/
public void setActualLifeTimeValue()
{
BigDecimal ActualLifeTimeValue = null;
String sql = "SELECT "
+ "COALESCE ((SELECT SUM(currencyBase(i.GrandTotal,i.C_Currency_ID,i.DateOrdered, i.AD_Client_ID,i.AD_Org_ID)) FROM C_Invoice_v i "
+ "WHERE i.C_BPartner_ID=bp.C_BPartner_ID AND i.IsSOTrx='Y'),0) "
+ "FROM C_BPartner bp "
+ "WHERE C_BPartner_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, getC_BPartner_ID());
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
ActualLifeTimeValue = rs.getBigDecimal(1);
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
if (ActualLifeTimeValue != null)
super.setActualLifeTimeValue (ActualLifeTimeValue);
} // setActualLifeTimeValue
/**
* Get Total Open Balance
* @param calculate if null calculate it
* @return Open Balance
*/
public BigDecimal getTotalOpenBalance (boolean calculate)
{
if (getTotalOpenBalance().signum() == 0 && calculate)
setTotalOpenBalance();
return super.getTotalOpenBalance ();
} // getTotalOpenBalance
/**
* Set Credit Status
*/
public void setSOCreditStatus ()
{
BigDecimal creditLimit = getSO_CreditLimit();
// Nothing to do
if (SOCREDITSTATUS_NoCreditCheck.equals(getSOCreditStatus())
|| SOCREDITSTATUS_CreditStop.equals(getSOCreditStatus())
|| Env.ZERO.compareTo(creditLimit) == 0)
return;
// Above Credit Limit
if (creditLimit.compareTo(getTotalOpenBalance(!m_TotalOpenBalanceSet)) < 0)
setSOCreditStatus(SOCREDITSTATUS_CreditHold);
else
{
// Above Watch Limit
BigDecimal watchAmt = creditLimit.multiply(getCreditWatchRatio());
if (watchAmt.compareTo(getTotalOpenBalance()) < 0)
setSOCreditStatus(SOCREDITSTATUS_CreditWatch);
else // is OK
setSOCreditStatus (SOCREDITSTATUS_CreditOK);
}
} // setSOCreditStatus
/**
* Get SO CreditStatus with additional amount
* @param additionalAmt additional amount in Accounting Currency
* @return sinulated credit status
*/
public String getSOCreditStatus (BigDecimal additionalAmt)
{
if (additionalAmt == null || additionalAmt.signum() == 0)
return getSOCreditStatus();
//
BigDecimal creditLimit = getSO_CreditLimit();
// Nothing to do
if (SOCREDITSTATUS_NoCreditCheck.equals(getSOCreditStatus())
|| SOCREDITSTATUS_CreditStop.equals(getSOCreditStatus())
|| Env.ZERO.compareTo(creditLimit) == 0)
return getSOCreditStatus();
// Above (reduced) Credit Limit
creditLimit = creditLimit.subtract(additionalAmt);
if (creditLimit.compareTo(getTotalOpenBalance(!m_TotalOpenBalanceSet)) < 0)
return SOCREDITSTATUS_CreditHold;
// Above Watch Limit
BigDecimal watchAmt = creditLimit.multiply(getCreditWatchRatio());
if (watchAmt.compareTo(getTotalOpenBalance()) < 0)
return SOCREDITSTATUS_CreditWatch;
// is OK
return SOCREDITSTATUS_CreditOK;
} // getSOCreditStatus
/**
* Get Credit Watch Ratio
* @return BP Group ratio or 0.9
*/
public BigDecimal getCreditWatchRatio()
{
return getGroup().getCreditWatchRatio();
} // getCreditWatchRatio
/**
* Credit Status is Stop or Hold.
* @return true if Stop/Hold
*/
public boolean isCreditStopHold()
{
String status = getSOCreditStatus();
return SOCREDITSTATUS_CreditStop.equals(status)
|| SOCREDITSTATUS_CreditHold.equals(status);
} // isCreditStopHold
/**
* Set Total Open Balance
* @param TotalOpenBalance
*/
public void setTotalOpenBalance (BigDecimal TotalOpenBalance)
{
m_TotalOpenBalanceSet = false;
super.setTotalOpenBalance (TotalOpenBalance);
} // setTotalOpenBalance
/**
* Get Group
* @return group
*/
public MBPGroup getGroup()
{
if (m_group == null)
m_group = MBPGroup.get(getCtx(), getC_BP_Group_ID());
return m_group;
} // getGroup
/**
* Get PriceList
* @return price List
*/
public int getM_PriceList_ID ()
{
int ii = super.getM_PriceList_ID();
if (ii == 0)
ii = getGroup().getM_PriceList_ID();
return ii;
} // getM_PriceList_ID
/**
* Get PO PriceList
* @return price list
*/
public int getPO_PriceList_ID ()
{
int ii = super.getPO_PriceList_ID();
if (ii == 0)
ii = getGroup().getPO_PriceList_ID();
return ii;
} //
/**
* Get DiscountSchema
* @return Discount Schema
*/
public int getM_DiscountSchema_ID ()
{
int ii = super.getM_DiscountSchema_ID ();
if (ii == 0)
ii = getGroup().getM_DiscountSchema_ID();
return ii;
} // getM_DiscountSchema_ID
/**
* Get PO DiscountSchema
* @return po discount
*/
public int getPO_DiscountSchema_ID ()
{
int ii = super.getPO_DiscountSchema_ID ();
if (ii == 0)
ii = getGroup().getPO_DiscountSchema_ID();
return ii;
} // getPO_DiscountSchema_ID
/**************************************************************************
* After Save
* @param newRecord new
* @param success success
* @return success
*/
protected boolean afterSave (boolean newRecord, boolean success)
{
if (success) {
//
String sql = "UPDATE C_BPartner"
+ " SET SourceRecord_ID ="
+ getC_BPartner_ID()
+ " WHERE C_BPartner_ID=" + getC_BPartner_ID();
int no = DB.executeUpdate(sql, get_TrxName());
}
if (newRecord & success)
{
// Trees
insert_Tree(MTree_Base.TREETYPE_BPartner);
// Accounting
insert_Accounting("C_BP_Customer_Acct", "C_BP_Group_Acct",
"p.C_BP_Group_ID=" + getC_BP_Group_ID());
insert_Accounting("C_BP_Vendor_Acct", "C_BP_Group_Acct",
"p.C_BP_Group_ID=" + getC_BP_Group_ID());
insert_Accounting("C_BP_Employee_Acct", "C_AcctSchema_Default", null);
}
// Value/Name change
if (success && !newRecord
&& (is_ValueChanged("Value") || is_ValueChanged("Name")))
MAccount.updateValueDescription(getCtx(), "C_BPartner_ID=" + getC_BPartner_ID(), get_TrxName());
return success;
} // afterSave
/**
* Before Delete
* @return true
*/
protected boolean beforeDelete ()
{
return delete_Accounting("C_BP_Customer_Acct")
&& delete_Accounting("C_BP_Vendor_Acct")
&& delete_Accounting("C_BP_Employee_Acct");
} // beforeDelete
/**
* After Delete
* @param success
* @return deleted
*/
protected boolean afterDelete (boolean success)
{
if (success)
delete_Tree(MTree_Base.TREETYPE_BPartner);
return success;
} // afterDelete
} // MBPartner
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -