ImportInvoice.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
org.compiere.process |
![]() |
![]() |
Compiere |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/******************************************************************************
* Product: Compiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2007 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. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 3600 Bridge Parkway #102, Redwood City, CA 94065, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
*****************************************************************************/
package org.compiere.process;
import java.math.*;
import java.sql.*;
import java.util.logging.*;
import org.compiere.model.*;
import org.compiere.util.*;
/**
* Import Invoice from I_Invoice
*
* @author Jorg Janke
* @version $Id: ImportInvoice.java,v 1.2 2006/07/30 00:51:01 jjanke Exp $
*/
public class ImportInvoice extends SvrProcess
{
/** Client to be imported to */
private int m_AD_Client_ID = 0;
/** Organization to be imported to */
private int m_AD_Org_ID = 0;
/** Delete old Imported */
private boolean m_deleteOldImported = false;
/** Document Action */
private String m_docAction = X_C_Invoice.DOCACTION_Prepare;
/** Effective */
private Timestamp m_DateValue = null;
/**
* Prepare - e.g., get Parameters.
*/
protected void prepare()
{
ProcessInfoParameter[] para = getParameter();
for (int i = 0; i < para.length; i++)
{
String name = para[i].getParameterName();
if (name.equals("AD_Client_ID"))
m_AD_Client_ID = ((BigDecimal)para[i].getParameter()).intValue();
else if (name.equals("AD_Org_ID"))
m_AD_Org_ID = ((BigDecimal)para[i].getParameter()).intValue();
else if (name.equals("DeleteOldImported"))
m_deleteOldImported = "Y".equals(para[i].getParameter());
else if (name.equals("DocAction"))
m_docAction = (String)para[i].getParameter();
else
log.log(Level.SEVERE, "Unknown Parameter: " + name);
}
if (m_DateValue == null)
m_DateValue = new Timestamp (System.currentTimeMillis());
} // prepare
/**
* Perrform process.
* @return clear Message
* @throws Exception
*/
protected String doIt() throws java.lang.Exception
{
StringBuffer sql = null;
int no = 0;
String clientCheck = " AND AD_Client_ID=" + m_AD_Client_ID;
// **** Prepare ****
// Delete Old Imported
if (m_deleteOldImported)
{
sql = new StringBuffer ("DELETE FROM I_Invoice "
+ "WHERE I_IsImported='Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Delete Old Impored =" + no);
}
// Set Client, Org, IsActive, Created/Updated
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET AD_Client_ID = COALESCE (AD_Client_ID,").append (m_AD_Client_ID).append ("),"
+ " AD_Org_ID = COALESCE (AD_Org_ID,").append (m_AD_Org_ID).append ("),"
+ " IsActive = COALESCE (IsActive, 'Y'),"
+ " Created = COALESCE (Created, SysDate),"
+ " CreatedBy = COALESCE (CreatedBy, 0),"
+ " Updated = COALESCE (Updated, SysDate),"
+ " UpdatedBy = COALESCE (UpdatedBy, 0),"
+ " I_ErrorMsg = NULL,"
+ " I_IsImported = 'N' "
+ "WHERE I_IsImported<>'Y' OR I_IsImported IS NULL");
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.info ("Reset=" + no);
String ts = DB.isPostgreSQL()?"COALESCE(I_ErrorMsg,'')":"I_ErrorMsg"; //java bug, it could not be used directly
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Invalid Org, '"
+ "WHERE (AD_Org_ID IS NULL OR AD_Org_ID=0"
+ " OR EXISTS (SELECT * FROM AD_Org oo WHERE o.AD_Org_ID=oo.AD_Org_ID AND (oo.IsSummary='Y' OR oo.IsActive='N')))"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Invalid Org=" + no);
// Document Type - PO - SO
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_DocType_ID=(SELECT C_DocType_ID FROM C_DocType d WHERE d.Name=o.DocTypeName"
+ " AND d.DocBaseType IN ('API','APC') AND o.AD_Client_ID=d.AD_Client_ID) "
+ "WHERE C_DocType_ID IS NULL AND IsSOTrx='N' AND DocTypeName IS NOT NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.fine("Set PO DocType=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_DocType_ID=(SELECT C_DocType_ID FROM C_DocType d WHERE d.Name=o.DocTypeName"
+ " AND d.DocBaseType IN ('ARI','ARC') AND o.AD_Client_ID=d.AD_Client_ID) "
+ "WHERE C_DocType_ID IS NULL AND IsSOTrx='Y' AND DocTypeName IS NOT NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.fine("Set SO DocType=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_DocType_ID=(SELECT C_DocType_ID FROM C_DocType d WHERE d.Name=o.DocTypeName"
+ " AND d.DocBaseType IN ('API','ARI','APC','ARC') AND o.AD_Client_ID=d.AD_Client_ID) "
//+ "WHERE C_DocType_ID IS NULL AND IsSOTrx IS NULL AND DocTypeName IS NOT NULL AND I_IsImported<>'Y'").append (clientCheck);
+ "WHERE C_DocType_ID IS NULL AND DocTypeName IS NOT NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.fine("Set DocType=" + no);
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Invalid DocTypeName, ' "
+ "WHERE C_DocType_ID IS NULL AND DocTypeName IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Invalid DocTypeName=" + no);
// DocType Default
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_DocType_ID=(SELECT MAX(C_DocType_ID) FROM C_DocType d WHERE d.IsDefault='Y'"
+ " AND d.DocBaseType='API' AND o.AD_Client_ID=d.AD_Client_ID) "
+ "WHERE C_DocType_ID IS NULL AND IsSOTrx='N' AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.fine("Set PO Default DocType=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_DocType_ID=(SELECT MAX(C_DocType_ID) FROM C_DocType d WHERE d.IsDefault='Y'"
+ " AND d.DocBaseType='ARI' AND o.AD_Client_ID=d.AD_Client_ID) "
+ "WHERE C_DocType_ID IS NULL AND IsSOTrx='Y' AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.fine("Set SO Default DocType=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_DocType_ID=(SELECT MAX(C_DocType_ID) FROM C_DocType d WHERE d.IsDefault='Y'"
+ " AND d.DocBaseType IN('ARI','API') AND o.AD_Client_ID=d.AD_Client_ID) "
+ "WHERE C_DocType_ID IS NULL AND IsSOTrx IS NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.fine("Set Default DocType=" + no);
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=No DocType, ' "
+ "WHERE C_DocType_ID IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("No DocType=" + no);
// Set IsSOTrx
sql = new StringBuffer ("UPDATE I_Invoice o SET IsSOTrx='Y' "
+ "WHERE EXISTS (SELECT * FROM C_DocType d WHERE o.C_DocType_ID=d.C_DocType_ID AND d.DocBaseType='ARI' AND o.AD_Client_ID=d.AD_Client_ID)"
+ " AND C_DocType_ID IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set IsSOTrx=Y=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o SET IsSOTrx='N' "
+ "WHERE EXISTS (SELECT * FROM C_DocType d WHERE o.C_DocType_ID=d.C_DocType_ID AND d.DocBaseType='API' AND o.AD_Client_ID=d.AD_Client_ID)"
+ " AND C_DocType_ID IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set IsSOTrx=N=" + no);
// Price List
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET M_PriceList_ID=(SELECT MAX(M_PriceList_ID) FROM M_PriceList p WHERE p.IsDefault='Y'"
+ " AND p.C_Currency_ID=o.C_Currency_ID AND p.IsSOPriceList=o.IsSOTrx AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE M_PriceList_ID IS NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Default Currency PriceList=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET M_PriceList_ID=(SELECT MAX(M_PriceList_ID) FROM M_PriceList p WHERE p.IsDefault='Y'"
+ " AND p.IsSOPriceList=o.IsSOTrx AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE M_PriceList_ID IS NULL AND C_Currency_ID IS NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Default PriceList=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET M_PriceList_ID=(SELECT MAX(M_PriceList_ID) FROM M_PriceList p "
+ " WHERE p.C_Currency_ID=o.C_Currency_ID AND p.IsSOPriceList=o.IsSOTrx AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE M_PriceList_ID IS NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Currency PriceList=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET M_PriceList_ID=(SELECT MAX(M_PriceList_ID) FROM M_PriceList p "
+ " WHERE p.IsSOPriceList=o.IsSOTrx AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE M_PriceList_ID IS NULL AND C_Currency_ID IS NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set PriceList=" + no);
//
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=No PriceList, ' "
+ "WHERE M_PriceList_ID IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning("No PriceList=" + no);
// Payment Rule
// We support Payment Rule being input in the login language
Language language = Language.getLoginLanguage(); // Base Language
String AD_Language = language.getAD_Language();
sql = new StringBuffer ("UPDATE I_Invoice O " +
"SET PaymentRule= " +
"(SELECT R.Value "+
" FROM AD_Ref_List R " +
" left outer join AD_Ref_List_Trl RT " +
" on RT.AD_Ref_List_ID = R.AD_Ref_List_ID and RT.AD_Language = ? " +
" WHERE R.AD_Reference_ID = 195 and coalesce( RT.Name, R.Name ) = O.PaymentRuleName ) " +
"WHERE PaymentRule is null AND PaymentRuleName IS NOT NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), new Object[]{ AD_Language }, false, get_TrxName());
log.fine("Set PaymentRule=" + no);
// do not set a default; if null, the import logic will derive from the business partner
// do not error in absence of a default
// Payment Term
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_PaymentTerm_ID=(SELECT C_PaymentTerm_ID FROM C_PaymentTerm p"
+ " WHERE o.PaymentTermValue=p.Value AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE C_PaymentTerm_ID IS NULL AND PaymentTermValue IS NOT NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set PaymentTerm=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_PaymentTerm_ID=(SELECT MAX(C_PaymentTerm_ID) FROM C_PaymentTerm p"
+ " WHERE p.IsDefault='Y' AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE C_PaymentTerm_ID IS NULL AND o.PaymentTermValue IS NULL AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Default PaymentTerm=" + no);
//
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=No PaymentTerm, ' "
+ "WHERE C_PaymentTerm_ID IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("No PaymentTerm=" + no);
// BP from EMail
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET (C_BPartner_ID,AD_User_ID)=(SELECT C_BPartner_ID,AD_User_ID FROM AD_User u"
+ " WHERE o.EMail=u.EMail AND o.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL) "
+ "WHERE C_BPartner_ID IS NULL AND EMail IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set BP from EMail=" + no);
// BP from ContactName
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET (C_BPartner_ID,AD_User_ID)=(SELECT C_BPartner_ID,AD_User_ID FROM AD_User u"
+ " WHERE o.ContactName=u.Name AND o.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL) "
+ "WHERE C_BPartner_ID IS NULL AND ContactName IS NOT NULL"
+ " AND EXISTS (SELECT Name FROM AD_User u WHERE o.ContactName=u.Name AND o.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL GROUP BY Name HAVING COUNT(*)=1)"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set BP from ContactName=" + no);
// BP from Value
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_BPartner_ID=(SELECT MAX(C_BPartner_ID) FROM C_BPartner bp"
+ " WHERE o.BPartnerValue=bp.Value AND o.AD_Client_ID=bp.AD_Client_ID) "
+ "WHERE C_BPartner_ID IS NULL AND BPartnerValue IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set BP from Value=" + no);
// Default BP
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_BPartner_ID=(SELECT C_BPartnerCashTrx_ID FROM AD_ClientInfo c"
+ " WHERE o.AD_Client_ID=c.AD_Client_ID) "
+ "WHERE C_BPartner_ID IS NULL AND BPartnerValue IS NULL AND Name IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Default BP=" + no);
// Existing Location ? Exact Match
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_BPartner_Location_ID=(SELECT C_BPartner_Location_ID"
+ " FROM C_BPartner_Location bpl INNER JOIN C_Location l ON (bpl.C_Location_ID=l.C_Location_ID)"
+ " WHERE o.C_BPartner_ID=bpl.C_BPartner_ID AND bpl.AD_Client_ID=o.AD_Client_ID"
+ " AND DUMP(o.Address1)=DUMP(l.Address1) AND DUMP(o.Address2)=DUMP(l.Address2)"
+ " AND DUMP(o.City)=DUMP(l.City) AND DUMP(o.Postal)=DUMP(l.Postal)"
+ " AND DUMP(o.C_Region_ID)=DUMP(l.C_Region_ID) AND DUMP(o.C_Country_ID)=DUMP(l.C_Country_ID)) "
+ "WHERE C_BPartner_ID IS NOT NULL AND C_BPartner_Location_ID IS NULL"
+ " AND I_IsImported='N'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Found Location=" + no);
// Set Location from BPartner
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_BPartner_Location_ID=(SELECT MAX(C_BPartner_Location_ID) FROM C_BPartner_Location l"
+ " WHERE l.C_BPartner_ID=o.C_BPartner_ID AND o.AD_Client_ID=l.AD_Client_ID"
+ " AND ((l.IsBillTo='Y' AND o.IsSOTrx='Y') OR o.IsSOTrx='N')"
+ ") "
+ "WHERE C_BPartner_ID IS NOT NULL AND C_BPartner_Location_ID IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set BP Location from BP=" + no);
//
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=No BP Location, ' "
+ "WHERE C_BPartner_ID IS NOT NULL AND C_BPartner_Location_ID IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("No BP Location=" + no);
// Check for Duplicate Document Number/BP/Doc Type Combinations
sql = new StringBuffer ("UPDATE I_Invoice i "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Duplicate Document No, ' "
+ "WHERE EXISTS (SELECT 1 FROM C_Invoice inv WHERE inv.C_BPartner_ID=i.C_BPartner_ID "
+ " AND inv.C_DocTypeTarget_ID = i.C_DocType_ID"
+ " AND inv.DocumentNo = i.DocumentNo)"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Duplicate Document Number=" + no);
// Set Country
/**
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET CountryCode=(SELECT CountryCode FROM C_Country c WHERE c.IsDefault='Y'"
+ " AND c.AD_Client_ID IN (0, o.AD_Client_ID) AND ROWNUM=1) "
+ "WHERE C_BPartner_ID IS NULL AND CountryCode IS NULL AND C_Country_ID IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Country Default=" + no);
**/
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_Country_ID=(SELECT C_Country_ID FROM C_Country c"
+ " WHERE o.CountryCode=c.CountryCode AND c.IsSummary='N' AND c.AD_Client_ID IN (0, o.AD_Client_ID)) "
+ "WHERE C_BPartner_ID IS NULL AND C_Country_ID IS NULL AND CountryCode IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Country=" + no);
//
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Invalid Country, ' "
+ "WHERE C_BPartner_ID IS NULL AND C_Country_ID IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Invalid Country=" + no);
// Set Region
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "Set RegionName=(SELECT MAX(Name) FROM C_Region r"
+ " WHERE r.IsDefault='Y' AND r.C_Country_ID=o.C_Country_ID"
+ " AND r.AD_Client_ID IN (0, o.AD_Client_ID)) "
+ "WHERE C_BPartner_ID IS NULL AND C_Region_ID IS NULL AND RegionName IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Region Default=" + no);
//
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "Set C_Region_ID=(SELECT C_Region_ID FROM C_Region r"
+ " WHERE r.Name=o.RegionName AND r.C_Country_ID=o.C_Country_ID"
+ " AND r.AD_Client_ID IN (0, o.AD_Client_ID)) "
+ "WHERE C_BPartner_ID IS NULL AND C_Region_ID IS NULL AND RegionName IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Region=" + no);
//
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Invalid Region, ' "
+ "WHERE C_BPartner_ID IS NULL AND C_Region_ID IS NULL "
+ " AND EXISTS (SELECT * FROM C_Country c"
+ " WHERE c.C_Country_ID=o.C_Country_ID AND c.HasRegion='Y')"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Invalid Region=" + no);
// Product
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET M_Product_ID=(SELECT MAX(M_Product_ID) FROM M_Product p"
+ " WHERE o.ProductValue=p.Value AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE M_Product_ID IS NULL AND ProductValue IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Product from Value=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET M_Product_ID=(SELECT MAX(M_Product_ID) FROM M_Product p"
+ " WHERE o.UPC=p.UPC AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE M_Product_ID IS NULL AND UPC IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Product from UPC=" + no);
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET M_Product_ID=(SELECT MAX(M_Product_ID) FROM M_Product p"
+ " WHERE o.SKU=p.SKU AND o.AD_Client_ID=p.AD_Client_ID) "
+ "WHERE M_Product_ID IS NULL AND SKU IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Product fom SKU=" + no);
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Invalid Product, ' "
+ "WHERE M_Product_ID IS NULL AND (ProductValue IS NOT NULL OR UPC IS NOT NULL OR SKU IS NOT NULL)"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Invalid Product=" + no);
// Charge
sql = new StringBuffer ("UPDATE I_Invoice i "
+ "SET C_Charge_ID=(SELECT MAX(C_Charge_ID) FROM C_Charge c"
+ " WHERE i.ChargeName=c.Name AND i.AD_Client_ID=c.AD_Client_ID) "
+ "WHERE C_Charge_ID IS NULL AND ChargeName IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Charge from Name=" + no);
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Invalid Charge, ' "
+ "WHERE C_Charge_ID IS NULL AND (ChargeName IS NOT NULL)"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Invalid Charge=" + no);
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Both Charge and Product are specified, ' "
+ "WHERE C_Charge_ID IS NOT NULL AND M_Product_ID IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Charge and Product are specified=" + no);
// Tax
sql = new StringBuffer ("UPDATE I_Invoice o "
+ "SET C_Tax_ID=(SELECT MAX(C_Tax_ID) FROM C_Tax t"
+ " WHERE o.TaxIndicator=t.TaxIndicator AND o.AD_Client_ID=t.AD_Client_ID) "
+ "WHERE C_Tax_ID IS NULL AND TaxIndicator IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
log.fine("Set Tax=" + no);
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=Invalid Tax, ' "
+ "WHERE C_Tax_ID IS NULL AND TaxIndicator IS NOT NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("Invalid Tax=" + no);
commit();
// -- New BPartner ---------------------------------------------------
// Go through Invoice Records w/o C_BPartner_ID
sql = new StringBuffer ("SELECT * FROM I_Invoice "
+ "WHERE I_IsImported='N' AND C_BPartner_ID IS NULL").append (clientCheck);
try
{
PreparedStatement pstmt = DB.prepareStatement (sql.toString(), get_TrxName());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
X_I_Invoice imp = new X_I_Invoice (getCtx(), rs, get_TrxName());
if (imp.getBPartnerValue () == null)
{
if (imp.getEMail () != null)
imp.setBPartnerValue (imp.getEMail ());
else if (imp.getName () != null)
imp.setBPartnerValue (imp.getName ());
else
continue;
}
if (imp.getName () == null)
{
if (imp.getContactName () != null)
imp.setName (imp.getContactName ());
else
imp.setName (imp.getBPartnerValue ());
}
// BPartner
MBPartner bp = MBPartner.get (getCtx(), imp.getBPartnerValue());
if (bp == null)
{
bp = new MBPartner (getCtx (), -1, get_TrxName());
bp.setClientOrg (imp.getAD_Client_ID (), imp.getAD_Org_ID ());
bp.setValue (imp.getBPartnerValue ());
bp.setName (imp.getName ());
if (!bp.save ())
continue;
}
imp.setC_BPartner_ID (bp.getC_BPartner_ID ());
// BP Location
MBPartnerLocation bpl = null;
MBPartnerLocation[] bpls = bp.getLocations(true);
for (int i = 0; bpl == null && i < bpls.length; i++)
{
if (imp.getC_BPartner_Location_ID() == bpls[i].getC_BPartner_Location_ID())
bpl = bpls[i];
// Same Location ID
else if (imp.getC_Location_ID() == bpls[i].getC_Location_ID())
bpl = bpls[i];
// Same Location Info
else if (imp.getC_Location_ID() == 0)
{
MLocation loc = bpl.getLocation(false);
if (loc.equals(imp.getC_Country_ID(), imp.getC_Region_ID(),
imp.getPostal(), "", imp.getCity(),
imp.getAddress1(), imp.getAddress2()))
bpl = bpls[i];
}
}
if (bpl == null)
{
// New Location
MLocation loc = new MLocation (getCtx (), 0, get_TrxName());
loc.setAddress1 (imp.getAddress1 ());
loc.setAddress2 (imp.getAddress2 ());
loc.setCity (imp.getCity ());
loc.setPostal (imp.getPostal ());
if (imp.getC_Region_ID () != 0)
loc.setC_Region_ID (imp.getC_Region_ID ());
loc.setC_Country_ID (imp.getC_Country_ID ());
if (!loc.save ())
continue;
//
bpl = new MBPartnerLocation (bp);
bpl.setC_Location_ID (imp.getC_Location_ID ());
if (!bpl.save ())
continue;
}
imp.setC_Location_ID (bpl.getC_Location_ID ());
imp.setC_BPartner_Location_ID (bpl.getC_BPartner_Location_ID ());
// User/Contact
if (imp.getContactName () != null
|| imp.getEMail () != null
|| imp.getPhone () != null)
{
MUser[] users = bp.getContacts(true);
MUser user = null;
for (int i = 0; user == null && i < users.length; i++)
{
String name = users[i].getName();
if (name.equals(imp.getContactName())
|| name.equals(imp.getName()))
{
user = users[i];
imp.setAD_User_ID (user.getAD_User_ID ());
}
}
if (user == null)
{
user = new MUser (bp);
if (imp.getContactName () == null)
user.setName (imp.getName ());
else
user.setName (imp.getContactName ());
user.setEMail (imp.getEMail ());
user.setPhone (imp.getPhone ());
if (user.save ())
imp.setAD_User_ID (user.getAD_User_ID ());
}
}
imp.save ();
} // for all new BPartners
rs.close ();
pstmt.close ();
//
}
catch (SQLException e)
{
log.log(Level.SEVERE, "CreateBP", e);
}
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='E', I_ErrorMsg="+ts +"||'ERR=No BPartner, ' "
+ "WHERE C_BPartner_ID IS NULL"
+ " AND I_IsImported<>'Y'").append (clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (no != 0)
log.warning ("No BPartner=" + no);
commit();
// -- New Invoices -----------------------------------------------------
int noInsert = 0;
int noInsertLine = 0;
// Go through Invoice Records w/o
sql = new StringBuffer ("SELECT * FROM I_Invoice "
+ "WHERE I_IsImported='N'").append (clientCheck)
.append(" ORDER BY C_BPartner_ID, C_BPartner_Location_ID, I_Invoice_ID");
try
{
PreparedStatement pstmt = DB.prepareStatement (sql.toString(), get_TrxName());
ResultSet rs = pstmt.executeQuery ();
// Group Change
int oldC_BPartner_ID = 0;
int oldC_BPartner_Location_ID = 0;
String oldDocumentNo = "";
//
MInvoice invoice = null;
int lineNo = 0;
while (rs.next ())
{
X_I_Invoice imp = new X_I_Invoice (getCtx (), rs, null);
String cmpDocumentNo = imp.getDocumentNo();
if (cmpDocumentNo == null)
cmpDocumentNo = "";
// New Invoice
if (oldC_BPartner_ID != imp.getC_BPartner_ID()
|| oldC_BPartner_Location_ID != imp.getC_BPartner_Location_ID()
|| !oldDocumentNo.equals(cmpDocumentNo) )
{
if (invoice != null)
{
invoice.processIt(m_docAction);
invoice.save();
}
// Group Change
oldC_BPartner_ID = imp.getC_BPartner_ID();
oldC_BPartner_Location_ID = imp.getC_BPartner_Location_ID();
oldDocumentNo = imp.getDocumentNo();
if (oldDocumentNo == null)
oldDocumentNo = "";
//
invoice = new MInvoice (getCtx(), 0, null);
invoice.setClientOrg (imp.getAD_Client_ID(), imp.getAD_Org_ID());
invoice.setC_DocTypeTarget_ID(imp.getC_DocType_ID(), true);
if (imp.getDocumentNo() != null)
invoice.setDocumentNo(imp.getDocumentNo());
//
invoice.setC_BPartner_ID(imp.getC_BPartner_ID());
invoice.setC_BPartner_Location_ID(imp.getC_BPartner_Location_ID());
if (imp.getAD_User_ID() != 0)
invoice.setAD_User_ID(imp.getAD_User_ID());
//
if (imp.getDescription() != null)
invoice.setDescription(imp.getDescription());
if( imp.getPaymentRule() != null )
invoice.setPaymentRule( imp.getPaymentRule() );
invoice.setC_PaymentTerm_ID(imp.getC_PaymentTerm_ID());
invoice.setM_PriceList_ID(imp.getM_PriceList_ID());
MPriceList pl = MPriceList.get(getCtx(), imp.getM_PriceList_ID(), get_TrxName());
invoice.setIsTaxIncluded(pl.isTaxIncluded());
// SalesRep from Import or the person running the import
if (imp.getSalesRep_ID() != 0)
invoice.setSalesRep_ID(imp.getSalesRep_ID());
if (invoice.getSalesRep_ID() == 0)
invoice.setSalesRep_ID(getAD_User_ID());
//
if (imp.getAD_OrgTrx_ID() != 0)
invoice.setAD_OrgTrx_ID(imp.getAD_OrgTrx_ID());
if (imp.getC_Activity_ID() != 0)
invoice.setC_Activity_ID(imp.getC_Activity_ID());
if (imp.getC_Campaign_ID() != 0)
invoice.setC_Campaign_ID(imp.getC_Campaign_ID());
if (imp.getC_Project_ID() != 0)
invoice.setC_Project_ID(imp.getC_Project_ID());
//
if (imp.getDateInvoiced() != null)
invoice.setDateInvoiced(imp.getDateInvoiced());
if (imp.getDateAcct() != null)
invoice.setDateAcct(imp.getDateAcct());
//
invoice.save();
noInsert++;
lineNo = 10;
}
imp.setC_Invoice_ID (invoice.getC_Invoice_ID());
// New InvoiceLine
MInvoiceLine line = new MInvoiceLine (invoice);
if (imp.getLineDescription() != null)
line.setDescription(imp.getLineDescription());
line.setLine(lineNo);
lineNo += 10;
if (imp.getM_Product_ID() != 0)
line.setM_Product_ID(imp.getM_Product_ID(), true);
if (imp.getC_Charge_ID() != 0)
line.setC_Charge_ID(imp.getC_Charge_ID());
line.setQty(imp.getQtyOrdered());
line.setPrice();
BigDecimal price = imp.getPriceActual();
if (price != null && Env.ZERO.compareTo(price) != 0)
line.setPrice(price);
if (imp.getC_Tax_ID() != 0)
line.setC_Tax_ID(imp.getC_Tax_ID());
else
{
line.setTax();
imp.setC_Tax_ID(line.getC_Tax_ID());
}
BigDecimal taxAmt = imp.getTaxAmt();
if (taxAmt != null && Env.ZERO.compareTo(taxAmt) != 0)
line.setTaxAmt(taxAmt);
line.save();
//
imp.setC_InvoiceLine_ID(line.getC_InvoiceLine_ID());
imp.setI_IsImported(X_I_Invoice.I_ISIMPORTED_Yes);
imp.setProcessed(true);
//
if (imp.save())
noInsertLine++;
}
if (invoice != null)
{
invoice.processIt (m_docAction);
invoice.save();
}
rs.close();
pstmt.close();
}
catch (Exception e)
{
log.log(Level.SEVERE, "CreateInvoice", e);
}
// Set Error to indicator to not imported
sql = new StringBuffer ("UPDATE I_Invoice "
+ "SET I_IsImported='N', Updated=SysDate "
+ "WHERE I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdate(sql.toString(), get_TrxName());
addLog (0, null, new BigDecimal (no), "@Errors@");
//
addLog (0, null, new BigDecimal (noInsert), "@C_Invoice_ID@: @Inserted@");
addLog (0, null, new BigDecimal (noInsertLine), "@C_InvoiceLine_ID@: @Inserted@");
return "";
} // doIt
} // ImportInvoice
The table below shows all metrics for ImportInvoice.java.




