Adempiere 3.1.2

This commit is contained in:
vpj-cd 2006-12-07 03:20:51 +00:00
parent 39a4889c05
commit 6c5fa90281
33 changed files with 13926 additions and 12423 deletions

View File

@ -103,25 +103,25 @@ public class CalloutOrder extends CalloutEngine
// Delivery Rule
if (DocSubTypeSO.equals(MOrder.DocSubTypeSO_POS))
mTab.setValue ("DeliveryRule", MOrder.DELIVERYRULE_Force);
mTab.setValue ("DeliveryRule", X_C_Order.DELIVERYRULE_Force);
else if (DocSubTypeSO.equals(MOrder.DocSubTypeSO_Prepay))
mTab.setValue ("DeliveryRule", MOrder.DELIVERYRULE_AfterReceipt);
mTab.setValue ("DeliveryRule", X_C_Order.DELIVERYRULE_AfterReceipt);
else
mTab.setValue ("DeliveryRule", MOrder.DELIVERYRULE_Availability);
mTab.setValue ("DeliveryRule", X_C_Order.DELIVERYRULE_Availability);
// Invoice Rule
if (DocSubTypeSO.equals(MOrder.DocSubTypeSO_POS)
|| DocSubTypeSO.equals(MOrder.DocSubTypeSO_Prepay)
|| DocSubTypeSO.equals(MOrder.DocSubTypeSO_OnCredit) )
mTab.setValue ("InvoiceRule", MOrder.INVOICERULE_Immediate);
mTab.setValue ("InvoiceRule", X_C_Order.INVOICERULE_Immediate);
else
mTab.setValue ("InvoiceRule", MOrder.INVOICERULE_AfterDelivery);
mTab.setValue ("InvoiceRule", X_C_Order.INVOICERULE_AfterDelivery);
// Payment Rule - POS Order
if (DocSubTypeSO.equals(MOrder.DocSubTypeSO_POS))
mTab.setValue("PaymentRule", MOrder.PAYMENTRULE_Cash);
mTab.setValue("PaymentRule", X_C_Order.PAYMENTRULE_Cash);
else
mTab.setValue("PaymentRule", MOrder.PAYMENTRULE_OnCredit);
mTab.setValue("PaymentRule", X_C_Order.PAYMENTRULE_OnCredit);
// IsSOTrx
if ("N".equals(rs.getString(8)))
@ -344,16 +344,16 @@ public class CalloutOrder extends CalloutEngine
// Defaults, if not Walkin Receipt or Walkin Invoice
String OrderType = Env.getContext(ctx, WindowNo, "OrderType");
mTab.setValue("InvoiceRule", MOrder.INVOICERULE_AfterDelivery);
mTab.setValue("DeliveryRule", MOrder.DELIVERYRULE_Availability);
mTab.setValue("PaymentRule", MOrder.PAYMENTRULE_OnCredit);
mTab.setValue("InvoiceRule", X_C_Order.INVOICERULE_AfterDelivery);
mTab.setValue("DeliveryRule", X_C_Order.DELIVERYRULE_Availability);
mTab.setValue("PaymentRule", X_C_Order.PAYMENTRULE_OnCredit);
if (OrderType.equals(MOrder.DocSubTypeSO_Prepay))
{
mTab.setValue("InvoiceRule", MOrder.INVOICERULE_Immediate);
mTab.setValue("DeliveryRule", MOrder.DELIVERYRULE_AfterReceipt);
mTab.setValue("InvoiceRule", X_C_Order.INVOICERULE_Immediate);
mTab.setValue("DeliveryRule", X_C_Order.DELIVERYRULE_AfterReceipt);
}
else if (OrderType.equals(MOrder.DocSubTypeSO_POS)) // for POS
mTab.setValue("PaymentRule", MOrder.PAYMENTRULE_Cash);
mTab.setValue("PaymentRule", X_C_Order.PAYMENTRULE_Cash);
else
{
// PaymentRule
@ -519,12 +519,12 @@ public class CalloutOrder extends CalloutEngine
// Defaults, if not Walkin Receipt or Walkin Invoice
String OrderType = Env.getContext(ctx, WindowNo, "OrderType");
mTab.setValue("InvoiceRule", MOrder.INVOICERULE_AfterDelivery);
mTab.setValue("PaymentRule", MOrder.PAYMENTRULE_OnCredit);
mTab.setValue("InvoiceRule", X_C_Order.INVOICERULE_AfterDelivery);
mTab.setValue("PaymentRule", X_C_Order.PAYMENTRULE_OnCredit);
if (OrderType.equals(MOrder.DocSubTypeSO_Prepay))
mTab.setValue("InvoiceRule", MOrder.INVOICERULE_Immediate);
mTab.setValue("InvoiceRule", X_C_Order.INVOICERULE_Immediate);
else if (OrderType.equals(MOrder.DocSubTypeSO_POS)) // for POS
mTab.setValue("PaymentRule", MOrder.PAYMENTRULE_Cash);
mTab.setValue("PaymentRule", X_C_Order.PAYMENTRULE_Cash);
else
{
// PaymentRule

View File

@ -2137,15 +2137,6 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable
} // setCurrentRow
/**
* Set current row - used for deleteSelection
* @return current row
*/
public void setCurrentRow(int row){
setCurrentRow(row, false);
}
/**************************************************************************
* Get RowCount
* @return row count
@ -2469,5 +2460,4 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable
m_listenerList.add(DataStatusListener.class, l);
}
} // MTab

View File

@ -18,6 +18,10 @@ package org.compiere.model;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
/**
* BP Bank Account Model
@ -27,7 +31,53 @@ import java.util.*;
*/
public class MBPBankAccount extends X_C_BP_BankAccount
{
/**
* Get Accounst Of BPartner
* @param ctx context
* @param C_BPartner_ID bpartner
* @return
*/
public static MBPBankAccount[] getOfBPartner (Properties ctx, int C_BPartner_ID)
{
String sql = "SELECT * FROM C_BP_BankAccount WHERE C_BPartner_ID=? AND IsActive='Y'";
ArrayList<MBPBankAccount> list = new ArrayList<MBPBankAccount>();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, C_BPartner_ID);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
list.add(new MBPBankAccount(ctx, rs, null));
}
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try {
if (pstmt != null)
pstmt.close();
pstmt = null;
} catch (Exception e) {
pstmt = null;
}
MBPBankAccount[] retValue = new MBPBankAccount[list.size()];
list.toArray(retValue);
return retValue;
} // getOfBPartner
/** Logger */
private static CLogger s_log = CLogger.getCLogger(MBPBankAccount.class);
/**************************************************************************
* Constructor
* @param ctx context
* @param C_BP_BankAccount_ID BP bank account
@ -40,6 +90,7 @@ public class MBPBankAccount extends X_C_BP_BankAccount
{
// setC_BPartner_ID (0);
setIsACH (false);
setBPBankAcctUse(BPBANKACCTUSE_Both);
}
} // MBP_BankAccount
@ -63,7 +114,7 @@ public class MBPBankAccount extends X_C_BP_BankAccount
*/
public MBPBankAccount (Properties ctx, MBPartner bp, MUser bpc, MLocation location)
{
super(ctx, 0, bp.get_TrxName());
this(ctx, 0, bp.get_TrxName());
setIsACH (false);
//
setC_BPartner_ID(bp.getC_BPartner_ID());
@ -78,8 +129,78 @@ public class MBPBankAccount extends X_C_BP_BankAccount
setA_Country(location.getCountryName());
} // MBP_BankAccount
/** Bank Link */
private MBank m_bank = null;
/*************************************************************************/
/**
* Is Direct Deposit
* @return true if dd
*/
public boolean isDirectDeposit()
{
if (!isACH())
return false;
String s = getBPBankAcctUse();
if (s == null)
return true;
return (s.equals(BPBANKACCTUSE_Both) || s.equals(BPBANKACCTUSE_DirectDeposit));
} // isDirectDeposit
/**
* Is Direct Debit
* @return true if dd
*/
public boolean isDirectDebit()
{
if (!isACH())
return false;
String s = getBPBankAcctUse();
if (s == null)
return true;
return (s.equals(BPBANKACCTUSE_Both) || s.equals(BPBANKACCTUSE_DirectDebit));
} // isDirectDebit
/**
* Get Bank
* @return bank
*/
public MBank getBank()
{
int C_BP_BankAccount_ID = getC_BP_BankAccount_ID();
if (C_BP_BankAccount_ID == 0)
return null;
if (m_bank == null)
m_bank = new MBank (getCtx(), C_BP_BankAccount_ID, get_TrxName());
return m_bank;
} // getBank
/**
* Get Routing No
* @return routing No
*/
public String getRoutingNo()
{
MBank bank = getBank();
String rt = super.getRoutingNo();
if (bank != null)
rt = bank.getRoutingNo();
return rt;
} // getRoutingNo
/**
* Before Save
* @param newRecord new
* @return true
*/
protected boolean beforeSave(boolean newRecord)
{
// maintain routing on bank level
if (isACH() && getBank() != null)
setRoutingNo(null);
//
return true;
} // beforeSave
/**
* String Representation

View File

@ -97,6 +97,7 @@ public class MChat extends X_CM_Chat
// setAD_Table_ID (0);
// setRecord_ID (0);
setConfidentialType (CONFIDENTIALTYPE_PublicInformation);
setModerationType (MODERATIONTYPE_NotModerated);
// setDescription (null);
}
} // MChat

View File

@ -18,7 +18,6 @@ package org.compiere.model;
import java.sql.*;
import java.util.*;
import org.compiere.util.*;
/**
* Chat Entry Model
@ -37,6 +36,11 @@ public class MChatEntry extends X_CM_ChatEntry
public MChatEntry (Properties ctx, int CM_ChatEntry_ID, String trxName)
{
super (ctx, CM_ChatEntry_ID, trxName);
if (CM_ChatEntry_ID == 0)
{
setChatEntryType (CHATENTRYTYPE_NoteFlat); // N
setConfidentialType (CONFIDENTIALTYPE_PublicInformation);
}
} // MChatEntry
/**
@ -50,6 +54,27 @@ public class MChatEntry extends X_CM_ChatEntry
setCM_Chat_ID(chat.getCM_Chat_ID());
setConfidentialType(chat.getConfidentialType());
setCharacterData(data);
setChatEntryType (CHATENTRYTYPE_NoteFlat); // N
} // MChatEntry
/**
* Thread Constructor
* @param entry peer
* @param data text
*/
public MChatEntry (MChatEntry peer, String data)
{
this (peer.getCtx(), 0, peer.get_TrxName());
setCM_Chat_ID(peer.getCM_Chat_ID());
setCM_ChatEntryParent_ID (peer.getCM_ChatEntryParent_ID());
// Set GrandParent
int id = peer.getCM_ChatEntryGrandParent_ID();
if (id == 0)
id = peer.getCM_ChatEntryParent_ID();
setCM_ChatEntryGrandParent_ID (id);
setConfidentialType(peer.getConfidentialType());
setCharacterData(data);
setChatEntryType (CHATENTRYTYPE_ForumThreaded);
} // MChatEntry
/**

View File

@ -59,6 +59,8 @@ public class MChatType extends X_CM_ChatType
public MChatType (Properties ctx, int CM_ChatType_ID, String trxName)
{
super (ctx, CM_ChatType_ID, trxName);
if (CM_ChatType_ID == 0)
setModerationType (MODERATIONTYPE_NotModerated);
} // MChatType
/**

View File

@ -29,6 +29,92 @@ import org.compiere.util.*;
*/
public class MContainer extends X_CM_Container
{
/** serialVersionUID */
private static final long serialVersionUID = 395679572291279730L;
/**
* get Container by Relative URL
* @param ctx
* @param relURL
* @param CM_WebProject_Id
* @param trxName
* @return Container or null if not found
*/
public static MContainer get(Properties ctx, String relURL, int CM_WebProject_Id, String trxName) {
MContainer thisContainer = null;
String sql = "SELECT * FROM CM_Container WHERE (RelativeURL LIKE ? OR RelativeURL LIKE ?) AND CM_WebProject_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, trxName);
pstmt.setString (1,relURL);
pstmt.setString (2,relURL+"/");
pstmt.setInt(3, CM_WebProject_Id);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
thisContainer = (new MContainer(ctx, rs, trxName));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return thisContainer;
}
/**
* get Container
* @param ctx
* @param CM_Container_ID
* @param CM_WebProject_Id
* @param trxName
* @return Container or null if not found
*/
public static MContainer get(Properties ctx, int CM_Container_ID, int CM_WebProject_Id, String trxName) {
MContainer thisContainer = null;
String sql = "SELECT * FROM CM_Container WHERE CM_Container_ID=? AND CM_WebProject_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, trxName);
pstmt.setInt(1, CM_Container_ID);
pstmt.setInt(2, CM_WebProject_Id);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
thisContainer = (new MContainer(ctx, rs, trxName));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return thisContainer;
}
/**
* Copy Stage into Container

View File

@ -29,6 +29,51 @@ import org.compiere.util.*;
*/
public class MContainerElement extends X_CM_Container_Element
{
/** serialVersionUID */
private static final long serialVersionUID = 7230036377422361941L;
/** Logger */
private static CLogger s_log = CLogger.getCLogger (MContainer.class);
/**
* get Container Element by ID
* @param ctx
* @param CM_ContainerElement_ID
* @param trxName
* @return ContainerElement
*/
public static MContainerElement get(Properties ctx, int CM_ContainerElement_ID, String trxName) {
MContainerElement thisContainerElement = null;
String sql = "SELECT * FROM CM_Container_Element WHERE CM_Container_Element_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, trxName);
pstmt.setInt(1, CM_ContainerElement_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
thisContainerElement = (new MContainerElement(ctx, rs, trxName));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return thisContainerElement;
}
/***************************************************************************
* Standard Constructor
*

View File

@ -18,6 +18,9 @@ package org.compiere.model;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
/**
@ -28,6 +31,9 @@ import java.util.*;
*/
public class MDunningLevel extends X_C_DunningLevel
{
/** Logger */
private static CLogger s_log = CLogger.getCLogger (MPayment.class);
/**
* Standard Constructor
* @param ctx context
@ -50,4 +56,62 @@ public class MDunningLevel extends X_C_DunningLevel
super(ctx, rs, trxName);
} // MDunningLevel
private MDunning m_dunning = null;
/**
* get Parent
* @return Parent Dunning
*/
public MDunning getParent()
{
if (m_dunning==null)
m_dunning = new MDunning(getCtx(), getC_Dunning_ID(), get_TrxName());
return m_dunning;
}
/**
* get Previous Levels
* @return Array of previous DunningLevels
*/
public MDunningLevel[] getPreviousLevels()
{
// Prevent generation if not Sequentially
if (!getParent().isCreateLevelsSequentially ())
return null;
ArrayList<MDunningLevel> list = new ArrayList<MDunningLevel>();
String sql = "SELECT * FROM C_DunningLevel WHERE C_Dunning_ID=? AND DaysAfterDue+DaysBetweenDunning<?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getParent().get_ID ());
int totalDays = getDaysAfterDue ().intValue ()+getDaysBetweenDunning ();
pstmt.setInt(2, totalDays);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new MDunningLevel(getCtx(), rs, get_TrxName()));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
//
MDunningLevel[] retValue = new MDunningLevel[list.size()];
list.toArray(retValue);
return retValue;
}
} // MDunningLevel

View File

@ -18,6 +18,7 @@ package org.compiere.model;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import org.compiere.util.*;
/**
@ -28,6 +29,9 @@ import org.compiere.util.*;
*/
public class MDunningRunEntry extends X_C_DunningRunEntry
{
/** Logger */
private static CLogger s_log = CLogger.getCLogger (MPayment.class);
/**
* Standard Constructor
* @param ctx context
@ -133,4 +137,72 @@ public class MDunningRunEntry extends X_C_DunningRunEntry
setSalesRep_ID (SalesRep_ID);
} // setBPartner
/**
* get Lines
* @return Array of all lines for this Run
*/
public MDunningRunLine[] getLines()
{
ArrayList<MDunningRunLine> list = new ArrayList<MDunningRunLine>();
String sql = "SELECT * FROM C_DunningRunLine WHERE C_DunningRunEntry_ID=?";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, get_ID ());
ResultSet rs = pstmt.executeQuery();
while (rs.next())
list.add(new MDunningRunLine(getCtx(), rs, get_TrxName()));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
//
MDunningRunLine[] retValue = new MDunningRunLine[list.size()];
list.toArray(retValue);
return retValue;
}
protected boolean beforeSave (boolean newRecord)
{
// Set Amt
if (isProcessed ())
{
MDunningRunLine[] theseLines = getLines();
for (int i=0;i<theseLines.length;i++)
{
theseLines[i].setProcessed (true);
theseLines[i].save (get_TrxName());
}
if (m_parent.getLevel ().isSetCreditStop () || m_parent.getLevel ().isSetPaymentTerm ())
{
MBPartner thisBPartner = MBPartner.get (getCtx(), getC_BPartner_ID());
if (m_parent.getLevel ().isSetCreditStop ())
thisBPartner.setSOCreditStatus (X_C_BPartner.SOCREDITSTATUS_CreditStop);
if (m_parent.getLevel ().isSetPaymentTerm ())
thisBPartner.setC_PaymentTerm_ID (m_parent.getLevel().getC_PaymentTerm_ID ());
thisBPartner.save ();
}
}
return true;
} // beforeSave
} // MDunningRunEntry

View File

@ -138,6 +138,7 @@ public class MDunningRunLine extends X_C_DunningRunLine
* @param C_Currency_ID
* @param GrandTotal
* @param Open
* @param FeeAmount
* @param DaysDue
* @param IsInDispute
* @param TimesDunned
@ -145,6 +146,7 @@ public class MDunningRunLine extends X_C_DunningRunLine
*/
public void setInvoice (int C_Invoice_ID, int C_Currency_ID,
BigDecimal GrandTotal, BigDecimal Open,
BigDecimal FeeAmount,
int DaysDue, boolean IsInDispute,
int TimesDunned, int DaysAfterLast)
{
@ -152,6 +154,7 @@ public class MDunningRunLine extends X_C_DunningRunLine
m_C_CurrencyFrom_ID = C_Currency_ID;
setAmt (GrandTotal);
setOpenAmt (Open);
setFeeAmt (FeeAmount);
setConvertedAmt (MConversionRate.convert(getCtx(), getOpenAmt(),
C_Currency_ID, getC_CurrencyTo_ID(), getAD_Client_ID(), getAD_Org_ID()));
setIsInDispute(IsInDispute);
@ -160,6 +163,22 @@ public class MDunningRunLine extends X_C_DunningRunLine
} // setInvoice
/**
* Set Fee
* @param C_Currency_ID
* @param FeeAmount
*/
public void setFee (int C_Currency_ID,
BigDecimal FeeAmount)
{
m_C_CurrencyFrom_ID = C_Currency_ID;
setAmt (FeeAmount);
setOpenAmt (FeeAmount);
setFeeAmt (FeeAmount);
setConvertedAmt (MConversionRate.convert(getCtx(), getOpenAmt(),
C_Currency_ID, getC_CurrencyTo_ID(), getAD_Client_ID(), getAD_Org_ID()));
} // setInvoice
/**
* Get Payment
* @return Returns the payment.
@ -262,6 +281,15 @@ public class MDunningRunLine extends X_C_DunningRunLine
getC_CurrencyFrom_ID(), getC_CurrencyTo_ID(), getAD_Client_ID(), getAD_Org_ID()));
// Total
setTotalAmt(getConvertedAmt().add(getFeeAmt()).add(getInterestAmt()));
// Reset Collection Status only if null
if (getInvoice().getInvoiceCollectionType ()==null)
{
if (m_invoice!=null)
{
m_invoice.setInvoiceCollectionType (X_C_Invoice.INVOICECOLLECTIONTYPE_Dunning);
m_invoice.save ();
}
}
//
return true;
} // beforeSave
@ -296,10 +324,17 @@ public class MDunningRunLine extends X_C_DunningRunLine
*/
private void updateEntry()
{
// we do not count the fee line as an item, but it sum it up.
String sql = "UPDATE C_DunningRunEntry e "
+ "SET (Amt,Qty)=(SELECT SUM(Amt),COUNT(*) FROM C_DunningRunLine l "
+ "WHERE e.C_DunningRunEntry_ID=l.C_DunningRunEntry_ID) "
+ "WHERE C_DunningRunEntry_ID=" + getC_DunningRunEntry_ID();
+ "SET Amt=(SELECT SUM(ConvertedAmt)+SUM(FeeAmt)"
+ " FROM C_DunningRunLine l "
+ "WHERE e.C_DunningRunEntry_ID=l.C_DunningRunEntry_ID), "
+ "QTY=(SELECT COUNT(*)"
+ " FROM C_DunningRunLine l "
+ "WHERE e.C_DunningRunEntry_ID=l.C_DunningRunEntry_ID "
+ " AND (NOT C_Invoice_ID IS NULL OR NOT C_Payment_ID IS NULL))"
+ " WHERE C_DunningRunEntry_ID=" + getC_DunningRunEntry_ID();
DB.executeUpdate(sql, get_TrxName());
} // updateEntry

View File

@ -18,6 +18,7 @@ package org.compiere.model;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.util.*;
@ -32,6 +33,49 @@ import org.compiere.util.*;
*/
public class MInterestArea extends X_R_InterestArea
{
/**
* Get all active interest areas
* @param ctx context
* @return interest areas
*/
public static MInterestArea[] getAll (Properties ctx)
{
ArrayList<MInterestArea> list = new ArrayList<MInterestArea>();
String sql = "SELECT * FROM R_InterestArea WHERE IsActive='Y'";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
MInterestArea ia = new MInterestArea (ctx, rs, null);
list.add (ia);
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
MInterestArea[] retValue = new MInterestArea[list.size ()];
list.toArray (retValue);
return retValue;
} // getAll
/**
* Get MInterestArea from Cache
* @param ctx context
@ -51,7 +95,10 @@ public class MInterestArea extends X_R_InterestArea
} // get
/** Cache */
private static CCache<Integer,MInterestArea> s_cache = new CCache<Integer,MInterestArea>("R_InterestArea", 5);
private static CCache<Integer,MInterestArea> s_cache =
new CCache<Integer,MInterestArea>("R_InterestArea", 5);
/** Logger */
private static CLogger s_log = CLogger.getCLogger (MInterestArea.class);
/**
@ -67,6 +114,7 @@ public class MInterestArea extends X_R_InterestArea
{
// setName (null);
// setR_InterestArea_ID (0);
setIsSelfService (false);
}
} // MInterestArea
@ -82,6 +130,18 @@ public class MInterestArea extends X_R_InterestArea
} // MInterestArea
/**
* Get Value
* @return value
*/
public String getValue()
{
String s = super.getValue ();
if (s != null && s.length () > 0)
return s;
return super.getName();
} // getValue
/**
* String representation
* @return info
@ -92,7 +152,7 @@ public class MInterestArea extends X_R_InterestArea
.append (get_ID()).append(" - ").append(getName())
.append ("]");
return sb.toString ();
}
} // toString
/*************************************************************************/

View File

@ -260,7 +260,7 @@ public class MInventoryLine extends X_M_InventoryLine
* Get Parent
* @return parent
*/
private MInventory getParent()
public MInventory getParent()
{
if (m_parent == null)
m_parent = new MInventory (getCtx(), getM_Inventory_ID(), get_TrxName());

View File

@ -0,0 +1,56 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved.
* This program is free software; you can redistribute it and/or modify it
* under the terms version 2 of the GNU General Public License as published
* by the Free Software Foundation. This program is distributed in the hope
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
* You may reach us at: ComPiere, Inc. - http://www.compiere.org/license.html
* 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA or info@compiere.org
*****************************************************************************/
package org.compiere.model;
import java.sql.*;
import java.util.*;
/**
* Ldap Access Log
*
* @author Jorg Janke
* @version $Id$
*/
public class MLdapAccess extends X_AD_LdapAccess
{
/**
* Standard Constructor
* @param ctx context
* @param AD_LdapAccess_ID id
* @param trxName trx
*/
public MLdapAccess(Properties ctx, int AD_LdapAccess_ID, String trxName)
{
super (ctx, AD_LdapAccess_ID, trxName);
} // MLdapAccess
/**
* Load Constructor
* @param ctx context
* @param rs result set
* @param trxName transaction
*/
public MLdapAccess(Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
} // MLdapAccess
} // MLdapAccess

View File

@ -0,0 +1,545 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved.
* This program is free software; you can redistribute it and/or modify it
* under the terms version 2 of the GNU General Public License as published
* by the Free Software Foundation. This program is distributed in the hope
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
* You may reach us at: ComPiere, Inc. - http://www.compiere.org/license.html
* 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA or info@compiere.org
*****************************************************************************/
package org.compiere.model;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import org.compiere.util.*;
/**
* LDAP Server Model
*
* @author Jorg Janke
* @version $Id$
*/
public class MLdapProcessor extends X_AD_LdapProcessor implements AdempiereProcessor
{
/**
* Get Active LDAP Server
* @return array of Servers
*/
public static MLdapProcessor[] getActive(Properties ctx)
{
ArrayList<MLdapProcessor> list = new ArrayList<MLdapProcessor>();
String sql = "SELECT * FROM AD_LdapProcessor WHERE IsActive='Y'";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MLdapProcessor (ctx, rs, null));
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;
}
MLdapProcessor[] retValue = new MLdapProcessor[list.size()];
list.toArray(retValue);
return retValue;
} // getActive
/** Logger */
private static CLogger log = CLogger.getCLogger (MLdapProcessor.class);
/**************************************************************************
* Ldap Processor
* @param ctx context
* @param AD_LdapProcessor_ID id
* @param trxName transaction
*/
public MLdapProcessor(Properties ctx, int AD_LdapProcessor_ID, String trxName)
{
super (ctx, AD_LdapProcessor_ID, trxName);
} // MLdapProcessor
/**
* Ldap Processor
* @param ctx context
* @param rs result set
* @param trxName transaction
*/
public MLdapProcessor(Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
} // MLdapProcessor
/** Array of Clients */
private MClient[] m_clients = null;
/** Array of Interest Areas */
private MInterestArea[] m_interests = null;
private int m_auth = 0;
private int m_ok = 0;
private int m_error = 0;
/**
* Get Server ID
* @return id
*/
public String getServerID ()
{
return "Ldap" + get_ID();
} // getServerID
/**
* Get Info
* @return info
*/
public String getInfo()
{
return "Auth=" + m_auth
+ ", OK=" + m_ok + ", Error=" + m_error;
} // getInfo
/**
* Get Date Next Run
* @param requery requery
* @return date next run
*/
public Timestamp getDateNextRun (boolean requery)
{
if (requery)
load(get_TrxName());
return getDateNextRun();
} // getDateNextRun
/**
* Get Logs
* @return logs
*/
public AdempiereProcessorLog[] getLogs ()
{
ArrayList<MLdapProcessorLog> list = new ArrayList<MLdapProcessorLog>();
String sql = "SELECT * "
+ "FROM AD_LdapProcessorLog "
+ "WHERE AD_LdapProcessor_ID=? "
+ "ORDER BY Created DESC";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, get_TrxName());
pstmt.setInt (1, getAD_LdapProcessor_ID());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
list.add (new MLdapProcessorLog (getCtx(), rs, get_TrxName()));
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;
}
MLdapProcessorLog[] retValue = new MLdapProcessorLog[list.size ()];
list.toArray (retValue);
return retValue;
} // getLogs
/**
* Delete old Request Log
* @return number of records
*/
public int deleteLog()
{
if (getKeepLogDays() < 1)
return 0;
String sql = "DELETE AD_LdapProcessorLog "
+ "WHERE AD_LdapProcessor_ID=" + getAD_LdapProcessor_ID()
+ " AND (Created+" + getKeepLogDays() + ") < SysDate";
int no = DB.executeUpdate(sql, get_TrxName());
return no;
} // deleteLog
/**
* Get Frequency (n/a)
* @return 1
*/
public int getFrequency()
{
return 1;
} // getFrequency
/**
* Get Frequency Type (n/a)
* @return minute
*/
public String getFrequencyType()
{
return X_R_RequestProcessor.FREQUENCYTYPE_Minute;
} // getFrequencyType
/**
* String Representation
* @return info
*/
public String toString()
{
StringBuffer sb = new StringBuffer ("MLdapProcessor[");
sb.append (get_ID()).append ("-").append (getName())
.append (",Port=").append (getLdapPort())
.append ("]");
return sb.toString ();
} // toString
/**************************************************************************
* Authenticate and Authorize
* @param ldapUser MLdapUser object
* @param usr user name
* @param o organization = Client Name
* @param ou optional organization unit = Interest Group
* @return ldapUser MLdapUser with updated information
*/
public MLdapUser authenticate(MLdapUser ldapUser, String usr, String o, String ou)
{
// Ensure something to return
if (ldapUser == null)
ldapUser = new MLdapUser();
String error = null;
String info = null;
// User
if (usr == null || usr.trim().length () == 0)
{
error = "@NotFound@ User";
ldapUser.setErrorString(error);
m_error++;
log.warning (error);
return ldapUser;
}
usr = usr.trim();
// Client
if (o == null || o.length () == 0)
{
error = "@NotFound@ O";
ldapUser.setErrorString(error);
m_error++;
log.warning (error);
return ldapUser;
}
int AD_Client_ID = findClient(o);
if (AD_Client_ID == 0)
{
error = "@NotFound@ O=" + o;
ldapUser.setErrorString(error);
m_error++;
log.config (error);
return ldapUser;
}
// Optional Interest Area
int R_InterestArea_ID = 0;
if (ou != null && ou.length () > 0)
{
R_InterestArea_ID = findInterestArea (AD_Client_ID, ou);
if (R_InterestArea_ID == 0)
{
error = "@NotFound@ OU=" + ou;
ldapUser.setErrorString(error);
m_error++;
log.config (error);
return ldapUser;
}
}
m_auth++;
// Query 1 - Validate User
int AD_User_ID = 0;
String Value = null;
String LdapUser = null;
String EMail = null;
String Name = null;
String Password = null;
boolean IsActive = false;
String EMailVerify = null; // is timestamp
boolean isUnique = false;
//
String sql = "SELECT AD_User_ID, Value, LdapUser, EMail," // 1..4
+ " Name, Password, IsActive, EMailVerify "
+ "FROM AD_User "
+ "WHERE AD_Client_ID=? AND (EMail=? OR Value=? OR LdapUser=?)";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, AD_Client_ID);
pstmt.setString (2, usr);
pstmt.setString (3, usr);
pstmt.setString (4, usr);
ResultSet rs = pstmt.executeQuery ();
if (rs.next())
{
AD_User_ID = rs.getInt (1);
Value = rs.getString (2);
LdapUser = rs.getString (3);
EMail = rs.getString (4);
//
Name = rs.getString (5);
Password = rs.getString (6);
IsActive = "Y".equals (rs.getString (7));
EMailVerify = rs.getString (8);
isUnique = rs.next();
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log (Level.SEVERE, sql, e);
error = "System Error";
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
if (error != null)
{
m_error++;
ldapUser.setErrorString(error);
return ldapUser;
}
//
if (AD_User_ID == 0)
{
error = "@NotFound@ User=" + usr;
info = "User not found - " + usr;
}
else if (!IsActive)
{
error = "@NotFound@ User=" + usr;
info = "User not active - " + usr;
}
else if (EMailVerify == null)
{
error = "@UserNotVerified@ User=" + usr;
info = "User EMail not verified - " + usr;
}
else if (usr.equalsIgnoreCase(LdapUser))
info = "User verified - Ldap=" + usr
+ (isUnique ? "" : " - Not Unique");
else if (usr.equalsIgnoreCase(Value))
info = "User verified - Value=" + usr
+ (isUnique ? "" : " - Not Unique");
else if (usr.equalsIgnoreCase(EMail))
info = "User verified - EMail=" + usr
+ (isUnique ? "" : " - Not Unique");
else
info = "User verified ?? " + usr
+ " - Name=" + Name
+ ", Ldap=" + LdapUser + ", Value=" + Value
+ (isUnique ? "" : " - Not Unique");
// Error
if (error != null) // should use Language of the User
{
logAccess (AD_Client_ID, AD_User_ID, R_InterestArea_ID, info, error);
ldapUser.setErrorString(Msg.translate (getCtx(), error));
return ldapUser;
}
// Done
if (R_InterestArea_ID == 0)
{
logAccess (AD_Client_ID, AD_User_ID, R_InterestArea_ID, info, null);
ldapUser.setOrg(o);
ldapUser.setOrgUnit(ou);
ldapUser.setUserId(usr);
ldapUser.setPassword(Password);
return ldapUser;
}
// Query 2 - Validate Subscription
String OptOutDate = null;
boolean found = false;
sql = "SELECT IsActive, OptOutDate "
+ "FROM R_ContactInterest "
+ "WHERE R_InterestArea_ID=? AND AD_User_ID=?";
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, R_InterestArea_ID);
pstmt.setInt (2, AD_User_ID);
ResultSet rs = pstmt.executeQuery ();
if (rs.next())
{
found = true;
IsActive = "Y".equals (rs.getString (1));
OptOutDate = rs.getString (2);
isUnique = rs.next();
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log (Level.SEVERE, sql, e);
error = "System Error (2)";
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
// System Error
if (error != null)
{
m_error++;
ldapUser.setErrorString(error);
return ldapUser;
}
if (!found)
{
error = "@UserNotSubscribed@ User=" + usr;
info = "No User Interest - " + usr
+ " - R_InterestArea_ID=" + R_InterestArea_ID;
}
else if (OptOutDate != null)
{
error = "@UserNotSubscribed@ User=" + usr + " @OptOutDate@=" + OptOutDate;
info = "Opted out - " + usr + " - OptOutDate=" + OptOutDate;
}
else if (!IsActive)
{
error = "@UserNotSubscribed@ User=" + usr;
info = "User Interest Not Active - " + usr;
}
else
info = "User subscribed - " + usr;
if (error != null) // should use Language of the User
{
logAccess (AD_Client_ID, AD_User_ID, R_InterestArea_ID, info, error);
ldapUser.setErrorString(Msg.translate (getCtx(), error));
return ldapUser;
}
// Done
logAccess (AD_Client_ID, AD_User_ID, R_InterestArea_ID, info, null);
ldapUser.setOrg(o);
ldapUser.setOrgUnit(ou);
ldapUser.setUserId(usr);
ldapUser.setPassword(Password);
return ldapUser;
} // authenticate
/**
* Find Client
* @param client client name
* @return AD_Client_ID
*/
private int findClient (String client)
{
if (m_clients == null)
m_clients = MClient.getAll(getCtx());
for (int i = 0; i < m_clients.length; i++)
{
if ((client.equalsIgnoreCase (m_clients[i].getValue())))
return m_clients[i].getAD_Client_ID ();
}
return 0;
} // findClient
/**
* Find Interest Area
* @param interset Name client name
* @return AD_Client_ID
*/
private int findInterestArea (int AD_Client_ID, String interestArea)
{
if (m_interests == null)
m_interests = MInterestArea.getAll(getCtx());
for (int i = 0; i < m_interests.length; i++)
{
if (AD_Client_ID == m_interests[i].getAD_Client_ID()
&& interestArea.equalsIgnoreCase (m_interests[i].getValue ()))
return m_interests[i].getR_InterestArea_ID();
}
return 0;
} // findInterestArea
/**
* Log Access
* @param AD_Client_ID client
* @param AD_User_ID user
* @param R_InterestArea_ID interest area
* @param info info
* @param error error
*/
private void logAccess (int AD_Client_ID,
int AD_User_ID, int R_InterestArea_ID,
String info, String error)
{
if (error != null)
{
log.log (Level.CONFIG, info);
m_error++;
}
else
{
log.log (Level.INFO, info);
m_ok++;
}
//
MLdapAccess access = new MLdapAccess (getCtx(), 0, null);
access.setAD_Client_ID (AD_Client_ID);
access.setAD_User_ID (AD_User_ID);
access.setR_InterestArea_ID (R_InterestArea_ID);
access.setIsError (error != null);
access.setSummary (info);
access.save ();
} // logAccess
} // MLdapProcessor

View File

@ -0,0 +1,72 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved.
* This program is free software; you can redistribute it and/or modify it
* under the terms version 2 of the GNU General Public License as published
* by the Free Software Foundation. This program is distributed in the hope
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
* You may reach us at: ComPiere, Inc. - http://www.compiere.org/license.html
* 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA or info@compiere.org
*****************************************************************************/
package org.compiere.model;
import java.sql.*;
import java.util.*;
/**
* LDAP Server Log
* @author Jorg Janke
* @version $Id$
*/
public class MLdapProcessorLog extends X_AD_LdapProcessorLog implements AdempiereProcessorLog
{
/**
* Standard Constructor
* @param ctx context
* @param AD_LdapProcessorLog_ID id
* @param trxName trx
*/
public MLdapProcessorLog(Properties ctx, int AD_LdapProcessorLog_ID,
String trxName)
{
super (ctx, AD_LdapProcessorLog_ID, trxName);
if (AD_LdapProcessorLog_ID == 0)
{
// setAD_LdapProcessorLog_ID (0);
// setAD_LdapProcessor_ID (0);
setIsError (false);
}
} // MLdapProcessorLog
/**
* Load Constructor
* @param ctx context
* @param rs result set
* @param trxName transaction
*/
public MLdapProcessorLog(Properties ctx, ResultSet rs, String trxName)
{
super (ctx, rs, trxName);
} // MLdapProcessorLog
/**
* Parent Constructor
* @param parent parent
* @param summary summary
*/
public MLdapProcessorLog(MLdapProcessor parent, String summary)
{
this (parent.getCtx (), 0, null);
setClientOrg (parent);
setAD_LdapProcessor_ID (parent.getAD_LdapProcessor_ID());
setSummary (summary);
} // MLdapProcessorLog
} // MLdapProcessorLog

View File

@ -0,0 +1,140 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved.
* This program is free software; you can redistribute it and/or modify it
* under the terms version 2 of the GNU General Public License as published
* by the Free Software Foundation. This program is distributed in the hope
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
* You may reach us at: ComPiere, Inc. - http://www.compiere.org/license.html
* 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA or info@compiere.org
*****************************************************************************/
package org.compiere.model;
/*
* MLdapUser, data object stores the user information such as userid,
* password, organization and so on.
*/
public class MLdapUser
{
/** organization */
private String org = null;
/** organization unit */
private String orgUnit = null;
/** user password */
private String passwd = null;
/** user id */
private String userId = null;
/** error string */
private String errStr = null;
public MLdapUser()
{
}
/*
* Reset attributes
*/
public void reset()
{
org = null;
orgUnit = null;
passwd = null;
userId = null;
errStr = null;
} // reset()
/**
* Set the organization
* @param org organization
*/
public void setOrg(String org)
{
this.org = org;
} // setOrg()
/**
* Set the organization unit
* @param orgUnit organization unit
*/
public void setOrgUnit(String orgUnit)
{
this.orgUnit = orgUnit;
} // setOrg()
/**
* Set the user password
* @param passwd User password string
*/
public void setPassword(String passwd)
{
this.passwd = passwd;
} // setPassword()
/**
* Set the user id
* @param passwd User id string
*/
public void setUserId(String userId)
{
this.userId = userId;
} // setUserId()
/**
* Set the error String
* @param errStr Error String
*/
public void setErrorString(String errStr)
{
this.errStr = errStr;
} // setErrorStr()
/**
* Get the organization
* @return org organization
*/
public String getOrg()
{
return org;
} // getOrg()
/**
* Get the organization unit
* @return orgUnit organization unit
*/
public String getOrgUnit()
{
return orgUnit;
} // getOrgUnit()
/**
* Get the user password
* @return passwd User password string
*/
public String getPassword()
{
return passwd;
} // getPassword()
/**
* Get the user id
* @return User id string
*/
public String getUserId()
{
return userId;
} // getUserId()
/**
* Get the error string
* @return errStr Error String
*/
public String getErrorMsg()
{
return errStr;
} // getErrorString()
} // MLdapUser

View File

@ -130,6 +130,20 @@ public class MMovementLine extends X_M_MovementLine
super.setMovementQty(MovementQty);
} // setMovementQty
/** Parent */
private MMovement m_parent = null;
/**
* get Parent
* @return Parent Movement
*/
public MMovement getParent()
{
if (m_parent == null)
m_parent = new MMovement (getCtx(), getM_Movement_ID(), get_TrxName());
return m_parent;
} // getParent
/**
* Before Save
@ -141,7 +155,7 @@ public class MMovementLine extends X_M_MovementLine
// Set Line No
if (getLine() == 0)
{
String sql = "SELECT COALESCE(MAX(Line),0)+10 AS DefaultValue FROM M_MovementLine WHERE M_Movement_ID=?";
String sql = "SELECT COALESCE(MAX(Line),0)+10 AS DefaultValue FROM C_M_MovementLine WHERE M_Movement_ID=?";
int ii = DB.getSQLValue (get_TrxName(), sql, getM_Movement_ID());
setLine (ii);
}

View File

@ -120,7 +120,6 @@ public class MNewsItem extends X_CM_NewsItem
/**
* reIndex
* @param newRecord
* @throws SQLException
*/
public void reIndex(boolean newRecord)
{

View File

@ -771,6 +771,8 @@ public class MOrderLine extends X_C_OrderLine
|| is_ValueChanged("M_Warehouse_ID")))
{
MProduct product = getProduct();
if (product.isStocked())
{
int M_AttributeSet_ID = product.getM_AttributeSet_ID();
boolean isInstance = M_AttributeSet_ID != 0;
if (isInstance)
@ -797,7 +799,8 @@ public class MOrderLine extends X_C_OrderLine
return false;
}
}
}
} // stocked
} // SO instance
// FreightAmt Not used
if (Env.ZERO.compareTo(getFreightAmt()) != 0)

View File

@ -200,7 +200,7 @@ public final class MPaySelectionCheck extends X_C_PaySelectionCheck
MPaySelectionCheck[] retValue = new MPaySelectionCheck[list.size()];
list.toArray(retValue);
return retValue;
} // createPayments
} // get
/**************************************************************************
@ -216,7 +216,7 @@ public final class MPaySelectionCheck extends X_C_PaySelectionCheck
// Must be a file
if (file.isDirectory())
{
s_log.log(Level.SEVERE, "exportToFile - file is directory - " + file.getAbsolutePath());
s_log.log(Level.WARNING, "File is directory - " + file.getAbsolutePath());
return 0;
}
// delete if exists
@ -227,7 +227,7 @@ public final class MPaySelectionCheck extends X_C_PaySelectionCheck
}
catch (Exception e)
{
s_log.log(Level.SEVERE, "exportToFile - could not delete - " + file.getAbsolutePath(), e);
s_log.log(Level.WARNING, "Could not delete - " + file.getAbsolutePath(), e);
}
char x = '"'; // ease
@ -375,7 +375,7 @@ public final class MPaySelectionCheck extends X_C_PaySelectionCheck
}
catch (SQLException e)
{
s_log.log(Level.SEVERE, "getBPartnerInfo", e);
s_log.log(Level.SEVERE, sql, e);
}
return bp;
} // getBPartnerInfo
@ -416,8 +416,8 @@ public final class MPaySelectionCheck extends X_C_PaySelectionCheck
else if (check.getPaymentRule().equals(PAYMENTRULE_CreditCard))
payment.setTenderType(X_C_Payment.TENDERTYPE_CreditCard);
else if (check.getPaymentRule().equals(PAYMENTRULE_DirectDeposit)
|| check.getPaymentRule().equals(PAYMENTRULE_DirectDeposit))
payment.setBankACH(check.getParent().getC_BankAccount_ID(), false);
|| check.getPaymentRule().equals(PAYMENTRULE_DirectDebit))
payment.setBankACH(check);
else
{
s_log.log(Level.SEVERE, "Unsupported Payment Rule=" + check.getPaymentRule());
@ -559,7 +559,35 @@ public final class MPaySelectionCheck extends X_C_PaySelectionCheck
this (line.getCtx(), 0, line.get_TrxName());
setClientOrg(line);
setC_PaySelection_ID (line.getC_PaySelection_ID());
setC_BPartner_ID (line.getInvoice().getC_BPartner_ID());
int C_BPartner_ID = line.getInvoice().getC_BPartner_ID();
setC_BPartner_ID (C_BPartner_ID);
//
if (X_C_Order.PAYMENTRULE_DirectDebit.equals(PaymentRule))
{
MBPBankAccount[] bas = MBPBankAccount.getOfBPartner (line.getCtx(), C_BPartner_ID);
for (int i = 0; i < bas.length; i++)
{
MBPBankAccount account = bas[i];
if (account.isDirectDebit())
{
setC_BP_BankAccount_ID(account.getC_BP_BankAccount_ID());
break;
}
}
}
else if (X_C_Order.PAYMENTRULE_DirectDeposit.equals(PaymentRule))
{
MBPBankAccount[] bas = MBPBankAccount.getOfBPartner (line.getCtx(), C_BPartner_ID);
for (int i = 0; i < bas.length; i++)
{
MBPBankAccount account = bas[i];
if (account.isDirectDeposit())
{
setC_BP_BankAccount_ID(account.getC_BP_BankAccount_ID());
break;
}
}
}
setPaymentRule (PaymentRule);
//
setIsReceipt(line.isSOTrx());
@ -621,6 +649,27 @@ public final class MPaySelectionCheck extends X_C_PaySelectionCheck
return m_parent;
} // getParent
/**
* Is this a valid Prepared Payment
* @return true if valid
*/
public boolean isValid()
{
if (getC_BP_BankAccount_ID() != 0)
return true;
return !isDirect();
} // isValid
/**
* Is this a direct Debit or Deposit
* @return true if direct
*/
public boolean isDirect()
{
return (X_C_Order.PAYMENTRULE_DirectDeposit.equals(getPaymentRule())
|| X_C_Order.PAYMENTRULE_DirectDebit.equals(getPaymentRule()));
} // isDirect
/**
* String Representation
* @return info

View File

@ -112,7 +112,6 @@ public class MPaySelectionLine extends X_C_PaySelectionLine
return m_invoice;
} // getInvoice
/**
* Before Save
* @param newRecord new

View File

@ -258,10 +258,17 @@ public final class MPayment extends X_C_Payment
* @param isReceipt true if receipt
* @return true if valid
*/
public boolean setBankACH (int C_BankAccount_ID, boolean isReceipt)
public boolean setBankACH (MPaySelectionCheck preparedPayment)
{
setBankAccountDetails(C_BankAccount_ID);
setIsReceipt (isReceipt);
// Our Bank
setC_BankAccount_ID(preparedPayment.getParent().getC_BankAccount_ID());
// Target Bank
int C_BP_BankAccount_ID = preparedPayment.getC_BP_BankAccount_ID();
MBPBankAccount ba = new MBPBankAccount (preparedPayment.getCtx(), C_BP_BankAccount_ID, null);
setRoutingNo(ba.getRoutingNo());
setAccountNo(ba.getAccountNo());
setIsReceipt (X_C_Order.PAYMENTRULE_DirectDebit.equals // AR only
(preparedPayment.getPaymentRule()));
//
int check = MPaymentValidate.validateRoutingNo(getRoutingNo()).length()
+ MPaymentValidate.validateAccountNo(getAccountNo()).length();
@ -1216,9 +1223,9 @@ public final class MPayment extends X_C_Payment
PreparedStatement pstmt = DB.prepareStatement(sql, get_TrxName());
pstmt.setInt(1, getAD_Client_ID());
if (isReceipt)
pstmt.setString(2, MDocType.DOCBASETYPE_ARReceipt);
pstmt.setString(2, X_C_DocType.DOCBASETYPE_ARReceipt);
else
pstmt.setString(2, MDocType.DOCBASETYPE_APPayment);
pstmt.setString(2, X_C_DocType.DOCBASETYPE_APPayment);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
setC_DocType_ID(rs.getInt(1));
@ -1447,7 +1454,7 @@ public final class MPayment extends X_C_Payment
*/
public boolean unlockIt()
{
log.info("unlockIt - " + toString());
log.info(toString());
setProcessing(false);
return true;
} // unlockIt
@ -1458,7 +1465,7 @@ public final class MPayment extends X_C_Payment
*/
public boolean invalidateIt()
{
log.info("invalidateIt - " + toString());
log.info(toString());
setDocAction(DOCACTION_Prepare);
return true;
} // invalidateIt
@ -1477,7 +1484,7 @@ public final class MPayment extends X_C_Payment
// Std Period open?
if (!MPeriod.isOpen(getCtx(), getDateAcct(),
isReceipt() ? MDocType.DOCBASETYPE_ARReceipt : MDocType.DOCBASETYPE_APPayment))
isReceipt() ? X_C_DocType.DOCBASETYPE_ARReceipt : X_C_DocType.DOCBASETYPE_APPayment))
{
m_processMsg = "@PeriodClosed@";
return DocAction.STATUS_Invalid;
@ -1500,9 +1507,10 @@ public final class MPayment extends X_C_Payment
if (DOCSTATUS_WaitingPayment.equals(order.getDocStatus()))
{
order.setC_Payment_ID(getC_Payment_ID());
order.setDocAction(MOrder.DOCACTION_WaitComplete);
order.setDocAction(X_C_Order.DOCACTION_WaitComplete);
order.set_TrxName(get_TrxName());
boolean ok = order.processIt (MOrder.DOCACTION_WaitComplete);
// boolean ok =
order.processIt (X_C_Order.DOCACTION_WaitComplete);
m_processMsg = order.getProcessMsg();
order.save(get_TrxName());
// Set Invoice
@ -1530,14 +1538,14 @@ public final class MPayment extends X_C_Payment
if (!isReceipt())
{
MBPartner bp = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName());
if (MBPartner.SOCREDITSTATUS_CreditStop.equals(bp.getSOCreditStatus()))
if (X_C_BPartner.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()))
if (X_C_BPartner.SOCREDITSTATUS_CreditHold.equals(bp.getSOCreditStatus()))
{
m_processMsg = "@BPartnerCreditHold@ - @TotalOpenBalance@="
+ bp.getTotalOpenBalance()
@ -1657,7 +1665,7 @@ public final class MPayment extends X_C_Payment
return null;
MBPartner counterBP = new MBPartner (getCtx(), counterC_BPartner_ID, null);
MOrgInfo counterOrgInfo = MOrgInfo.get(getCtx(), counterAD_Org_ID);
// MOrgInfo counterOrgInfo = MOrgInfo.get(getCtx(), counterAD_Org_ID);
log.info("Counter BP=" + counterBP.getName());
// Document Type
@ -2045,7 +2053,7 @@ public final class MPayment extends X_C_Payment
// Std Period open?
Timestamp dateAcct = getDateAcct();
if (!MPeriod.isOpen(getCtx(), dateAcct,
isReceipt() ? MDocType.DOCBASETYPE_ARReceipt : MDocType.DOCBASETYPE_APPayment))
isReceipt() ? X_C_DocType.DOCBASETYPE_ARReceipt : X_C_DocType.DOCBASETYPE_APPayment))
dateAcct = new Timestamp(System.currentTimeMillis());
// Auto Reconcile if not on Bank Statement

View File

@ -206,27 +206,27 @@ public class MPaymentValidate
String ccStartList = ""; // comma separated list of starting numbers
String ccLengthList = ""; // comma separated list of lengths
//
if (creditCardType.equals(MPayment.CREDITCARDTYPE_MasterCard))
if (creditCardType.equals(X_C_Payment.CREDITCARDTYPE_MasterCard))
{
ccStartList = "51,52,53,54,55";
ccLengthList = "16";
}
else if (creditCardType.equals(MPayment.CREDITCARDTYPE_Visa))
else if (creditCardType.equals(X_C_Payment.CREDITCARDTYPE_Visa))
{
ccStartList = "4";
ccLengthList = "13,16";
}
else if (creditCardType.equals(MPayment.CREDITCARDTYPE_Amex))
else if (creditCardType.equals(X_C_Payment.CREDITCARDTYPE_Amex))
{
ccStartList = "34,37";
ccLengthList = "15";
}
else if (creditCardType.equals(MPayment.CREDITCARDTYPE_Discover))
else if (creditCardType.equals(X_C_Payment.CREDITCARDTYPE_Discover))
{
ccStartList = "6011";
ccLengthList = "16";
}
else if (creditCardType.equals(MPayment.CREDITCARDTYPE_Diners))
else if (creditCardType.equals(X_C_Payment.CREDITCARDTYPE_Diners))
{
ccStartList = "300,301,302,303,304,305,36,38";
ccLengthList = "14";
@ -331,7 +331,7 @@ public class MPaymentValidate
int length = checkNumeric(creditCardVV).length();
// Amex = 4 digits
if (creditCardType.equals(MPayment.CREDITCARDTYPE_Amex))
if (creditCardType.equals(X_C_Payment.CREDITCARDTYPE_Amex))
{
if (length == 4)
{
@ -349,8 +349,8 @@ public class MPaymentValidate
return "CreditCardVVError";
}
// Visa & MasterCard - 3 digits
if (creditCardType.equals(MPayment.CREDITCARDTYPE_Visa)
|| creditCardType.equals(MPayment.CREDITCARDTYPE_MasterCard))
if (creditCardType.equals(X_C_Payment.CREDITCARDTYPE_Visa)
|| creditCardType.equals(X_C_Payment.CREDITCARDTYPE_MasterCard))
{
if (length == 3)
{
@ -384,7 +384,9 @@ public class MPaymentValidate
// US - length 9
// Germany - length 8
// Japan - 7
if (length == 7 || length == 8 || length == 9)
// CH - 5
// Issue: Bank account country
if (length > 0)
return "";
return "PaymentBankRoutingNotValid";
} // validateBankRoutingNo

View File

@ -102,7 +102,6 @@ public class MProduct extends X_M_Product
*/
public static boolean isProductStocked (Properties ctx, int M_Product_ID)
{
boolean retValue = false;
MProduct product = get (ctx, M_Product_ID);
return product.isStocked();
} // isProductStocked
@ -164,7 +163,7 @@ public class MProduct extends X_M_Product
public MProduct (MExpenseType et)
{
this (et.getCtx(), 0, et.get_TrxName());
setProductType(MProduct.PRODUCTTYPE_ExpenseType);
setProductType(X_M_Product.PRODUCTTYPE_ExpenseType);
setExpenseType(et);
} // MProduct
@ -176,7 +175,7 @@ public class MProduct extends X_M_Product
public MProduct (MResource resource, MResourceType resourceType)
{
this (resource.getCtx(), 0, resource.get_TrxName());
setProductType(MProduct.PRODUCTTYPE_Resource);
setProductType(X_M_Product.PRODUCTTYPE_Resource);
setResource(resource);
setResource(resourceType);
} // MProduct
@ -614,7 +613,7 @@ public class MProduct extends X_M_Product
{
insert_Accounting("M_Product_Acct", "M_Product_Category_Acct",
"p.M_Product_Category_ID=" + getM_Product_Category_ID());
insert_Tree(MTree_Base.TREETYPE_Product);
insert_Tree(X_AD_Tree.TREETYPE_Product);
//
MAcctSchema[] mass = MAcctSchema.getClientAcctSchema(getCtx(), getAD_Client_ID(), get_TrxName());
for (int i = 0; i < mass.length; i++)
@ -626,7 +625,7 @@ public class MProduct extends X_M_Product
}
// New Costing
if (newRecord || is_ValueChanged("M_Product_Category"))
if (newRecord || is_ValueChanged("M_Product_Category_ID"))
MCost.create(this);
return success;
@ -681,7 +680,7 @@ public class MProduct extends X_M_Product
protected boolean afterDelete (boolean success)
{
if (success)
delete_Tree(MTree_Base.TREETYPE_Product);
delete_Tree(X_AD_Tree.TREETYPE_Product);
return success;
} // afterDelete

View File

@ -38,6 +38,8 @@ public class MSchedulerLog extends X_AD_SchedulerLog
public MSchedulerLog (Properties ctx, int AD_SchedulerLog_ID, String trxName)
{
super (ctx, AD_SchedulerLog_ID, trxName);
if (AD_SchedulerLog_ID == 0)
setIsError(false);
} // MSchedulerLog
/**

View File

@ -18,6 +18,9 @@ package org.compiere.model;
import java.sql.*;
import java.util.*;
import java.util.logging.Level;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
/**
* Web Project Domain
@ -27,6 +30,12 @@ import java.util.*;
*/
public class MWebProjectDomain extends X_CM_WebProject_Domain
{
/** serialVersionUID */
private static final long serialVersionUID = 5134789895039452551L;
/** Logger */
private static CLogger s_log = CLogger.getCLogger (MContainer.class);
/**
* Web Project Domain Constructor
* @param ctx context
@ -49,4 +58,44 @@ public class MWebProjectDomain extends X_CM_WebProject_Domain
super (ctx, rs, trxName);
} // MWebProjectDomain
/**
* get WebProjectDomain by Name
* @param ctx
* @param ServerName
* @param trxName
* @return ContainerElement
*/
public static MWebProjectDomain get(Properties ctx, String ServerName, String trxName) {
MWebProjectDomain thisWebProjectDomain = null;
String sql = "SELECT * FROM CM_WebProject_Domain WHERE lower(FQDN) LIKE ? ORDER by CM_WebProject_Domain_ID DESC";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, trxName);
pstmt.setString(1, ServerName);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
thisWebProjectDomain = (new MWebProjectDomain(ctx, rs, trxName));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
s_log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return thisWebProjectDomain;
}
} // MWebProjectDomain

View File

@ -206,6 +206,11 @@ public class DunningPrint extends SvrProcess
count++;
printed = true;
}
if (printed)
{
entry.setProcessed (true);
entry.save ();
}
} // for all dunning letters
if (p_EMailPDF)

View File

@ -33,6 +33,7 @@ public class DunningRunCreate extends SvrProcess
{
private boolean p_IncludeInDispute = false;
private boolean p_OnlySOTrx = false;
private boolean p_IsAllCurrencies = false;
private int p_SalesRep_ID = 0;
private int p_C_Currency_ID = 0;
private int p_C_BPartner_ID = 0;
@ -40,6 +41,7 @@ public class DunningRunCreate extends SvrProcess
private int p_C_DunningRun_ID = 0;
private MDunningRun m_run = null;
private MDunningLevel m_level = null;
/**
* Prepare - e.g., get Parameters.
@ -56,6 +58,8 @@ public class DunningRunCreate extends SvrProcess
p_IncludeInDispute = "Y".equals(para[i].getParameter());
else if (name.equals("OnlySOTrx"))
p_OnlySOTrx = "Y".equals(para[i].getParameter());
else if (name.equals("IsAllCurrencies"))
p_IsAllCurrencies = "Y".equals(para[i].getParameter());
else if (name.equals("SalesRep_ID"))
p_SalesRep_ID = para[i].getParameterAsInt();
else if (name.equals("C_Currency_ID"))
@ -91,9 +95,14 @@ public class DunningRunCreate extends SvrProcess
if (p_C_Currency_ID == 0)
throw new IllegalArgumentException ("No Currency");
//
m_level = m_run.getLevel ();
int inv = addInvoices();
int pay = addPayments();
if (m_level.isChargeFee ())
addFees();
return "@C_Invoice_ID@ #" + inv + " - @C_Payment_ID@=" + pay;
} // doIt
@ -129,15 +138,36 @@ public class DunningRunCreate extends SvrProcess
+ "WHERE i.C_BPartner_ID=bp.C_BPartner_ID AND bp.C_BP_Group_ID=?)"; // ##5
if (p_OnlySOTrx)
sql += " AND i.IsSOTrx='Y'";
if (!p_IsAllCurrencies)
sql += " AND i.C_Currency_ID=" + p_C_Currency_ID;
// log.info(sql);
// Sub Query
String sql2 = "SELECT COUNT(*), COALESCE(TRUNC(SysDate-MAX(dr.DunningDate)),0) "
String sql2=null;
// if sequentially we must check for other levels with smaller days for
// which this invoice is not yet included!
if (m_level.getParent ().isCreateLevelsSequentially ()) {
// Build a list of all topmost Dunning Levels
MDunningLevel[] previousLevels = m_level.getPreviousLevels();
if (previousLevels!=null && previousLevels.length>0) {
String sqlAppend = "";
for (int i=0; i<previousLevels.length; i++)
{
sqlAppend += " AND i.C_Invoice_ID IN (SELECT C_Invoice_ID FROM C_DunningRunLine WHERE " +
"C_DunningRunEntry_ID IN (SELECT C_DunningRunEntry_ID FROM C_DunningRunEntry WHERE " +
"C_DunningRun_ID IN (SELECT C_DunningRun_ID FROM C_DunningRun WHERE " +
"C_DunningLevel_ID=" + previousLevels[i].get_ID () + ")) AND Processed<>'N')";
}
sql += sqlAppend;
}
}
sql2 = "SELECT COUNT(*), COALESCE(TRUNC(SysDate-MAX(dr.DunningDate)),0) "
+ "FROM C_DunningRun dr"
+ " INNER JOIN C_DunningRunEntry dre ON (dr.C_DunningRun_ID=dre.C_DunningRun_ID)"
+ " INNER JOIN C_DunningRunLine drl ON (dre.C_DunningRunEntry_ID=drl.C_DunningRunEntry_ID) "
+ "WHERE drl.Processed='Y' AND drl.C_Invoice_ID=?";
BigDecimal DaysAfterDue = m_run.getLevel().getDaysAfterDue();
int DaysBetweenDunning = m_run.getLevel().getDaysBetweenDunning();
@ -170,7 +200,7 @@ public class DunningRunCreate extends SvrProcess
//
if (!p_IncludeInDispute && IsInDispute)
continue;
if (DaysDue < DaysAfterDue.intValue())
if (DaysDue < DaysAfterDue.intValue() && !m_level.isShowAllDue ())
continue;
if (Env.ZERO.compareTo(Open) == 0)
continue;
@ -187,7 +217,8 @@ public class DunningRunCreate extends SvrProcess
}
rs2.close();
// SubQuery
if (DaysBetweenDunning != 0 && DaysAfterLast < DaysBetweenDunning)
if (DaysBetweenDunning != 0 && DaysAfterLast < DaysBetweenDunning && !m_level.isShowAllDue () && !m_level.isShowNotDue ())
continue;
//
createInvoiceLine (C_Invoice_ID, C_Currency_ID, GrandTotal, Open,
@ -246,7 +277,8 @@ public class DunningRunCreate extends SvrProcess
//
MDunningRunLine line = new MDunningRunLine (entry);
line.setInvoice(C_Invoice_ID, C_Currency_ID, GrandTotal, Open,
DaysDue, IsInDispute, TimesDunned, DaysAfterLast);
new BigDecimal(0), DaysDue, IsInDispute, TimesDunned,
DaysAfterLast);
if (!line.save())
throw new IllegalStateException("Cannot save MDunningRunLine");
} // createInvoiceLine
@ -348,5 +380,18 @@ public class DunningRunCreate extends SvrProcess
throw new IllegalStateException("Cannot save MDunningRunLine");
} // createPaymentLine
private void addFees()
{
MDunningRunEntry [] entries = m_run.getEntries (true);
if (entries!=null && entries.length>0) {
for (int i=0;i<entries.length;i++) {
MDunningRunLine line = new MDunningRunLine (entries[i]);
line.setFee (p_C_Currency_ID, m_level.getFeeAmt ());
if (!line.save())
throw new IllegalStateException("Cannot save MDunningRunLine");
entries[i].setQty (entries[i].getQty ().subtract (new BigDecimal(1)));
}
}
}
} // DunningRunCreate

View File

@ -279,7 +279,7 @@ public class ImportBPartner extends SvrProcess
{
sql = new StringBuffer ("UPDATE I_BPartner i "
+ "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||")
.append("'Cannot Insert BPartner, ' ")
.append("Cannot Insert BPartner")
.append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdate(sql.toString(), get_TrxName());
continue;
@ -313,7 +313,7 @@ public class ImportBPartner extends SvrProcess
{
sql = new StringBuffer ("UPDATE I_BPartner i "
+ "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||")
.append("'Cannot Update BPartner, ' ")
.append("Cannot Update BPartner")
.append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdate(sql.toString(), get_TrxName());
continue;
@ -364,7 +364,7 @@ public class ImportBPartner extends SvrProcess
noInsert--;
sql = new StringBuffer ("UPDATE I_BPartner i "
+ "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||")
.append("'Cannot Insert Location, ' ")
.append("Cannot Insert Location")
.append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdate(sql.toString(), get_TrxName());
continue;
@ -386,7 +386,7 @@ public class ImportBPartner extends SvrProcess
noInsert--;
sql = new StringBuffer ("UPDATE I_BPartner i "
+ "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||")
.append("'Cannot Insert BPLocation, ' ")
.append("Cannot Insert BPLocation")
.append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdate(sql.toString(), get_TrxName());
continue;
@ -406,7 +406,7 @@ public class ImportBPartner extends SvrProcess
noInsert--;
sql = new StringBuffer ("UPDATE I_BPartner i "
+ "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||")
.append("'BP of User <> BP, ' ")
.append("BP of User <> BP")
.append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdate(sql.toString(), get_TrxName());
continue;
@ -445,7 +445,7 @@ public class ImportBPartner extends SvrProcess
noInsert--;
sql = new StringBuffer ("UPDATE I_BPartner i "
+ "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||")
.append("'Cannot Update BP Contact, ' ")
.append("Cannot Update BP Contact")
.append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdate(sql.toString(), get_TrxName());
continue;
@ -482,7 +482,7 @@ public class ImportBPartner extends SvrProcess
noInsert--;
sql = new StringBuffer ("UPDATE I_BPartner i "
+ "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||")
.append("'Cannot Insert BPContact, ' ")
.append("Cannot Insert BPContact")
.append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdate(sql.toString(), get_TrxName());
continue;

View File

@ -167,7 +167,7 @@ public class InvoiceNGL extends SvrProcess
if (no > 0)
log.info("Not Paid #" + no);
sql = "UPDATE T_InvoiceGL SET Percent = ROUND(OpenAmt*100/GrandTotal,4) "
sql = "UPDATE T_InvoiceGL SET Percent = ROUND(OpenAmt*100/GrandTotal,6) "
+ "WHERE GrandTotal<>OpenAmt AND GrandTotal <> 0 AND AD_PInstance_ID=" + getAD_PInstance_ID();
no = DB.executeUpdate(sql, get_TrxName());
if (no > 0)

View File

@ -19,6 +19,7 @@ package org.compiere.process;
import java.util.*;
import java.util.logging.*;
import org.compiere.model.*;
import org.compiere.util.AdempiereUserError;
/**
@ -50,9 +51,11 @@ public class PaySelectionCreateCheck extends SvrProcess
else if (name.equals("PaymentRule"))
p_PaymentRule = (String)para[i].getParameter();
else
log.log(Level.SEVERE, "prepare - Unknown Parameter: " + name);
log.log(Level.SEVERE, "Unknown Parameter: " + name);
}
p_C_PaySelection_ID = getRecord_ID();
if (p_PaymentRule != null & p_PaymentRule.equals(X_C_Order.PAYMENTRULE_DirectDebit))
p_PaymentRule = null;
} // prepare
/**
@ -62,7 +65,7 @@ public class PaySelectionCreateCheck extends SvrProcess
*/
protected String doIt () throws Exception
{
log.info ("doIt - C_PaySelection_ID=" + p_C_PaySelection_ID
log.info ("C_PaySelection_ID=" + p_C_PaySelection_ID
+ ", PaymentRule=" + p_PaymentRule);
MPaySelection psel = new MPaySelection (getCtx(), p_C_PaySelection_ID, get_TrxName());
@ -70,8 +73,6 @@ public class PaySelectionCreateCheck extends SvrProcess
throw new IllegalArgumentException("Not found C_PaySelection_ID=" + p_C_PaySelection_ID);
if (psel.isProcessed())
throw new IllegalArgumentException("@Processed@");
if (p_PaymentRule == null)
throw new IllegalArgumentException("No PaymentRule");
//
MPaySelectionLine[] lines = psel.getLines(false);
for (int i = 0; i < lines.length; i++)
@ -91,8 +92,9 @@ public class PaySelectionCreateCheck extends SvrProcess
/**
* Create Check from line
* @param line
* @throws Exception for invalid bank accounts
*/
private void createCheck (MPaySelectionLine line)
private void createCheck (MPaySelectionLine line) throws Exception
{
// Try to find one
for (int i = 0; i < m_list.size(); i++)
@ -103,22 +105,35 @@ public class PaySelectionCreateCheck extends SvrProcess
{
check.addLine(line);
if (!check.save())
throw new IllegalStateException("Cannot Save MPaySelectionCheck");
throw new IllegalStateException("Cannot save MPaySelectionCheck");
line.setC_PaySelectionCheck_ID(check.getC_PaySelectionCheck_ID());
line.setProcessed(true);
if (!line.save())
throw new IllegalStateException("Cannot Save MPaySelectionLine");
throw new IllegalStateException("Cannot save MPaySelectionLine");
return;
}
}
// Create new
MPaySelectionCheck check = new MPaySelectionCheck(line, p_PaymentRule);
String PaymentRule = line.getPaymentRule();
if (p_PaymentRule != null)
{
if (!X_C_Order.PAYMENTRULE_DirectDebit.equals(PaymentRule))
PaymentRule = p_PaymentRule;
}
MPaySelectionCheck check = new MPaySelectionCheck(line, PaymentRule);
if (!check.isValid())
{
int C_BPartner_ID = check.getC_BPartner_ID();
MBPartner bp = MBPartner.get(getCtx(), C_BPartner_ID);
String msg = "@NotFound@ @C_BP_BankAccount@: " + bp.getName();
throw new AdempiereUserError(msg);
}
if (!check.save())
throw new IllegalStateException("Cannot Save MPaySelectionCheck");
throw new IllegalStateException("Cannot save MPaySelectionCheck");
line.setC_PaySelectionCheck_ID(check.getC_PaySelectionCheck_ID());
line.setProcessed(true);
if (!line.save())
throw new IllegalStateException("Cannot Save MPaySelectionLine");
throw new IllegalStateException("Cannot save MPaySelectionLine");
m_list.add(check);
} // createCheck

View File

@ -107,7 +107,7 @@ public class PaySelectionCreateFrom extends SvrProcess
// Discount
+ " currencyConvert(paymentTermDiscount(i.GrandTotal,i.C_Currency_ID,i.C_PaymentTerm_ID,i.DateInvoiced, ?)" // ##3 PayDate
+ ",i.C_Currency_ID, ?,?,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID)," // ##4/5 Currency_To,PayDate
+ " PaymentRule, IsSOTrx "
+ " PaymentRule, IsSOTrx " // 4..6
+ "FROM C_Invoice i "
+ "WHERE IsSOTrx='N' AND IsPaid='N' AND DocStatus IN ('CO','CL')"
+ " AND AD_Client_ID=?" // ##6
@ -219,7 +219,7 @@ public class PaySelectionCreateFrom extends SvrProcess
}
catch (Exception e)
{
log.log(Level.SEVERE, "doIt - " + sql, e);
log.log(Level.SEVERE, sql, e);
}
try
{