use of org.compiere.model.MBPartner in project adempiere by adempiere.
the class DistributionCreate method doIt.
// prepare
/**
* Perform process.
* @return Message (text with variables)
* @throws Exception if not successful
*/
protected String doIt() throws Exception {
log.info("M_DistributionList_ID=" + p_M_DistributionList_ID + ", M_Product_ID=" + p_M_Product_ID + ", Qty=" + p_Qty + ", Test=" + p_IsTest);
if (p_IsCreateSingleOrder)
log.info("SingleOrder=" + p_IsCreateSingleOrder + ", BPartner_ID=" + p_Bill_BPartner_ID + ", Location_ID=" + p_Bill_Location_ID);
//
if (p_M_DistributionList_ID == 0)
throw new IllegalArgumentException("No Distribution List ID");
m_dl = new MDistributionList(getCtx(), p_M_DistributionList_ID, get_TrxName());
if (m_dl.get_ID() == 0)
throw new Exception("Distribution List not found - M_DistributionList_ID=" + p_M_DistributionList_ID);
//
if (p_M_Product_ID == 0)
throw new IllegalArgumentException("No Product");
m_product = MProduct.get(getCtx(), p_M_Product_ID);
if (m_product.get_ID() == 0)
throw new Exception("Product not found - M_Product_ID=" + p_M_Product_ID);
if (p_Qty == null || p_Qty.signum() != 1)
throw new IllegalArgumentException("No Quantity");
//
if (p_IsCreateSingleOrder && p_Bill_BPartner_ID == 0)
throw new IllegalArgumentException("Invoice Business Partner required for single Order");
// Create Single Order
if (!p_IsTest && p_IsCreateSingleOrder) {
MBPartner bp = new MBPartner(getCtx(), p_Bill_BPartner_ID, get_TrxName());
if (bp.get_ID() == 0)
throw new IllegalArgumentException("Single Business Partner not found - C_BPartner_ID=" + p_Bill_BPartner_ID);
//
m_singleOrder = new MOrder(getCtx(), 0, get_TrxName());
m_singleOrder.setIsSOTrx(true);
m_singleOrder.setC_DocTypeTarget_ID(MOrder.DocSubTypeSO_Standard);
m_singleOrder.setBPartner(bp);
if (p_Bill_Location_ID != 0)
m_singleOrder.setC_BPartner_Location_ID(p_Bill_Location_ID);
if (!m_singleOrder.save())
throw new IllegalStateException("Single Order not created");
}
MDistributionListLine[] lines = m_dl.getLines();
int counter = 0;
for (int i = 0; i < lines.length; i++) {
if (createOrder(lines[i]))
counter++;
}
// Update Qty
if (m_singleOrder != null) {
m_singleOrder.setDescription("# " + counter + " - " + m_totalQty);
m_singleOrder.saveEx();
}
return "@Created@ #" + counter + " - @Qty@=" + m_totalQty;
}
use of org.compiere.model.MBPartner in project adempiere by adempiere.
the class DistributionCreate method createOrder.
// doIt
/**
* Create Order for Distribution Line
* @param dll Distribution Line
* @return true if created
*/
private boolean createOrder(MDistributionListLine dll) {
MBPartner bp = new MBPartner(getCtx(), dll.getC_BPartner_ID(), get_TrxName());
if (bp.get_ID() == 0)
throw new IllegalArgumentException("Business Partner not found - C_BPartner_ID=" + dll.getC_BPartner_ID());
// Create Order
MOrder order = m_singleOrder;
if (!p_IsTest && order == null) {
order = new MOrder(getCtx(), 0, get_TrxName());
order.setIsSOTrx(true);
order.setC_DocTypeTarget_ID(MOrder.DocSubTypeSO_Standard);
order.setBPartner(bp);
if (dll.getC_BPartner_Location_ID() != 0)
order.setC_BPartner_Location_ID(dll.getC_BPartner_Location_ID());
if (!order.save()) {
log.log(Level.SEVERE, "Order not saved");
return false;
}
}
// Calculate Qty
BigDecimal ratio = dll.getRatio();
BigDecimal qty = p_Qty.multiply(ratio);
if (qty.compareTo(Env.ZERO) != 0)
qty = qty.divide(m_dl.getRatioTotal(), m_product.getUOMPrecision(), BigDecimal.ROUND_HALF_UP);
BigDecimal minQty = dll.getMinQty();
if (qty.compareTo(minQty) < 0)
qty = minQty;
m_totalQty = m_totalQty.add(qty);
//
if (p_IsTest) {
addLog(0, null, qty, bp.getName());
return false;
}
// Create Order Line
MOrderLine line = new MOrderLine(order);
line.setC_BPartner_ID(dll.getC_BPartner_ID());
if (dll.getC_BPartner_Location_ID() != 0)
line.setC_BPartner_Location_ID(dll.getC_BPartner_Location_ID());
//
line.setM_Product_ID(p_M_Product_ID, true);
line.setQty(qty);
line.setPrice();
if (!line.save()) {
log.log(Level.SEVERE, "OrderLine not saved");
return false;
}
addLog(0, null, qty, order.getDocumentNo() + ": " + bp.getName());
return true;
}
use of org.compiere.model.MBPartner in project adempiere by adempiere.
the class DistributionRun method distributionOrders.
// insertDetails
/**************************************************************************
* Create Orders
* @return true if created
*/
private boolean distributionOrders() {
//The Quantity Available is distribute with respect to Distribution Order Demand
if (p_BasedInDamnd) {
int M_Warehouse_ID = 0;
if (p_M_Warehouse_ID <= 0) {
MOrgInfo oi_source = MOrgInfo.get(getCtx(), m_run.getAD_Org_ID(), get_TrxName());
MWarehouse m_source = MWarehouse.get(getCtx(), oi_source.getM_Warehouse_ID());
if (m_source == null)
throw new AdempiereException("Do not exist Defautl Warehouse Source");
M_Warehouse_ID = m_source.getM_Warehouse_ID();
} else
M_Warehouse_ID = p_M_Warehouse_ID;
// For all lines
for (int i = 0; i < m_details.length; i++) {
MDistributionRunDetail detail = m_details[i];
StringBuffer sql = new StringBuffer("SELECT * FROM DD_OrderLine ol INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) INNER JOIN M_Locator l ON (l.M_Locator_ID=ol.M_Locator_ID) ");
//sql.append(" WHERE o.DocStatus IN ('DR','IN') AND o.C_BPartner_ID = ? AND M_Product_ID=? AND l.M_Warehouse_ID=? AND ol.DatePromised BETWEEN ? AND ? ");
sql.append(" WHERE o.DocStatus IN ('DR','IN') AND o.C_BPartner_ID = ? AND M_Product_ID=? AND l.M_Warehouse_ID=? AND ol.DatePromised <=?");
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = DB.prepareStatement(sql.toString(), get_TrxName());
pstmt.setInt(1, detail.getC_BPartner_ID());
pstmt.setInt(2, detail.getM_Product_ID());
pstmt.setInt(3, M_Warehouse_ID);
pstmt.setTimestamp(4, p_DatePromised);
//pstmt.setTimestamp(5, p_DatePromised_To);
rs = pstmt.executeQuery();
while (rs.next()) {
// Create Order Line
MDDOrderLine line = new MDDOrderLine(getCtx(), rs, get_TrxName());
line.setM_Product_ID(detail.getM_Product_ID());
line.setConfirmedQty(line.getTargetQty().add(detail.getActualAllocation()));
if (p_M_Warehouse_ID > 0)
line.setDescription(Msg.translate(getCtx(), "PlannedQty"));
else
line.setDescription(m_run.getName());
line.saveEx();
break;
//addLog(0,null, detail.getActualAllocation(), order.getDocumentNo()
// + ": " + bp.getName() + " - " + product.getName());
}
} catch (Exception e) {
log.log(Level.SEVERE, "doIt - " + sql, e);
return false;
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
}
return true;
}
// Get Counter Org/BP
int runAD_Org_ID = m_run.getAD_Org_ID();
if (runAD_Org_ID == 0)
runAD_Org_ID = Env.getAD_Org_ID(getCtx());
MOrg runOrg = MOrg.get(getCtx(), runAD_Org_ID);
int runC_BPartner_ID = runOrg.getLinkedC_BPartner_ID(get_TrxName());
boolean counter = // no single Order
!m_run.isCreateSingleOrder() && // Org linked to BP
runC_BPartner_ID > 0 && // PO
!m_docType.isSOTrx();
MBPartner runBPartner = counter ? new MBPartner(getCtx(), runC_BPartner_ID, get_TrxName()) : null;
if (!counter || runBPartner == null || runBPartner.get_ID() != runC_BPartner_ID)
counter = false;
if (counter)
log.info("RunBP=" + runBPartner + " - " + m_docType);
log.info("Single=" + m_run.isCreateSingleOrder() + " - " + m_docType + ",SO=" + m_docType.isSOTrx());
log.fine("Counter=" + counter + ",C_BPartner_ID=" + runC_BPartner_ID + "," + runBPartner);
//
MBPartner bp = null;
MDDOrder singleOrder = null;
MProduct product = null;
MWarehouse m_source = null;
MLocator m_locator = null;
MWarehouse m_target = null;
MLocator m_locator_to = null;
MWarehouse[] ws = null;
MOrgInfo oi_source = MOrgInfo.get(getCtx(), m_run.getAD_Org_ID(), get_TrxName());
m_source = MWarehouse.get(getCtx(), oi_source.getM_Warehouse_ID());
if (m_source == null)
throw new AdempiereException("Do not exist Defautl Warehouse Source");
m_locator = MLocator.getDefault(m_source);
//get the warehouse in transit
ws = MWarehouse.getInTransitForOrg(getCtx(), m_source.getAD_Org_ID());
if (ws == null)
throw new AdempiereException("Warehouse Intransit do not found");
// Consolidated Single Order
if (m_run.isCreateSingleOrder()) {
bp = new MBPartner(getCtx(), m_run.getC_BPartner_ID(), get_TrxName());
if (bp.get_ID() == 0)
throw new IllegalArgumentException("Business Partner not found - C_BPartner_ID=" + m_run.getC_BPartner_ID());
//
if (!p_IsTest) {
singleOrder = new MDDOrder(getCtx(), 0, get_TrxName());
singleOrder.setC_DocType_ID(m_docType.getC_DocType_ID());
singleOrder.setIsSOTrx(m_docType.isSOTrx());
singleOrder.setBPartner(bp);
if (m_run.getC_BPartner_Location_ID() != 0)
singleOrder.setC_BPartner_Location_ID(m_run.getC_BPartner_Location_ID());
singleOrder.setDateOrdered(m_DateOrdered);
singleOrder.setDatePromised(p_DatePromised);
singleOrder.setM_Warehouse_ID(ws[0].getM_Warehouse_ID());
if (!singleOrder.save()) {
log.log(Level.SEVERE, "Order not saved");
return false;
}
m_counter++;
}
}
int lastC_BPartner_ID = 0;
int lastC_BPartner_Location_ID = 0;
MDDOrder order = null;
// For all lines
for (int i = 0; i < m_details.length; i++) {
MDistributionRunDetail detail = m_details[i];
// Create Order Header
if (m_run.isCreateSingleOrder())
order = singleOrder;
else // New Business Partner
if (lastC_BPartner_ID != detail.getC_BPartner_ID() || lastC_BPartner_Location_ID != detail.getC_BPartner_Location_ID()) {
// finish order
order = null;
}
lastC_BPartner_ID = detail.getC_BPartner_ID();
lastC_BPartner_Location_ID = detail.getC_BPartner_Location_ID();
bp = new MBPartner(getCtx(), detail.getC_BPartner_ID(), get_TrxName());
MOrgInfo oi_target = MOrgInfo.get(getCtx(), bp.getAD_OrgBP_ID_Int(), get_TrxName());
m_target = MWarehouse.get(getCtx(), oi_target.getM_Warehouse_ID());
if (m_target == null)
throw new AdempiereException("Do not exist Default Warehouse Target");
m_locator_to = MLocator.getDefault(m_target);
if (m_locator == null || m_locator_to == null) {
throw new AdempiereException("Do not exist default Locator for Warehouses");
}
if (p_ConsolidateDocument) {
String whereClause = "DocStatus IN ('DR','IN') AND AD_Org_ID=" + bp.getAD_OrgBP_ID_Int() + " AND " + MDDOrder.COLUMNNAME_C_BPartner_ID + "=? AND " + MDDOrder.COLUMNNAME_M_Warehouse_ID + "=? AND " + MDDOrder.COLUMNNAME_DatePromised + "<=? ";
order = new Query(getCtx(), MDDOrder.Table_Name, whereClause, get_TrxName()).setParameters(new Object[] { lastC_BPartner_ID, ws[0].getM_Warehouse_ID(), p_DatePromised }).setOrderBy(MDDOrder.COLUMNNAME_DatePromised + " DESC").first();
}
// New Order
if (order == null) {
if (!p_IsTest) {
order = new MDDOrder(getCtx(), 0, get_TrxName());
order.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
order.setC_DocType_ID(m_docType.getC_DocType_ID());
order.setIsSOTrx(m_docType.isSOTrx());
// Counter Doc
if (counter && bp.getAD_OrgBP_ID_Int() > 0) {
log.fine("Counter - From_BPOrg=" + bp.getAD_OrgBP_ID_Int() + "-" + bp + ", To_BP=" + runBPartner);
order.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
if (ws[0].getM_Warehouse_ID() > 0)
order.setM_Warehouse_ID(ws[0].getM_Warehouse_ID());
order.setBPartner(runBPartner);
} else // normal
{
log.fine("From_Org=" + runAD_Org_ID + ", To_BP=" + bp);
order.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
order.setBPartner(bp);
if (detail.getC_BPartner_Location_ID() != 0)
order.setC_BPartner_Location_ID(detail.getC_BPartner_Location_ID());
}
order.setM_Warehouse_ID(ws[0].getM_Warehouse_ID());
order.setDateOrdered(m_DateOrdered);
order.setDatePromised(p_DatePromised);
order.setIsInDispute(false);
order.setIsInTransit(false);
if (!order.save()) {
log.log(Level.SEVERE, "Order not saved");
return false;
}
}
}
// Line
if (product == null || product.getM_Product_ID() != detail.getM_Product_ID())
product = MProduct.get(getCtx(), detail.getM_Product_ID());
if (p_IsTest) {
addLog(0, null, detail.getActualAllocation(), bp.getName() + " - " + product.getName());
continue;
}
if (p_ConsolidateDocument) {
String sql = "SELECT DD_OrderLine_ID FROM DD_OrderLine ol INNER JOIN DD_Order o ON (o.DD_Order_ID=ol.DD_Order_ID) WHERE o.DocStatus IN ('DR','IN') AND o.C_BPartner_ID = ? AND M_Product_ID=? AND ol.M_Locator_ID=? AND ol.DatePromised <= ?";
int DD_OrderLine_ID = DB.getSQLValueEx(get_TrxName(), sql, new Object[] { detail.getC_BPartner_ID(), product.getM_Product_ID(), m_locator.getM_Locator_ID(), p_DatePromised });
if (DD_OrderLine_ID <= 0) {
MDDOrderLine line = new MDDOrderLine(order);
line.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
line.setM_Locator_ID(m_locator.getM_Locator_ID());
line.setM_LocatorTo_ID(m_locator_to.getM_Locator_ID());
line.setIsInvoiced(false);
line.setProduct(product);
BigDecimal QtyAllocation = detail.getActualAllocation();
if (QtyAllocation == null)
QtyAllocation = Env.ZERO;
line.setQty(QtyAllocation);
line.setQtyEntered(QtyAllocation);
//line.setTargetQty(detail.getActualAllocation());
line.setTargetQty(Env.ZERO);
String Description = "";
if (m_run.getName() != null)
Description = Description.concat(m_run.getName());
line.setDescription(Description + " " + Msg.translate(getCtx(), "Qty") + " = " + QtyAllocation + " ");
//line.setConfirmedQty(QtyAllocation);
line.saveEx();
} else {
MDDOrderLine line = new MDDOrderLine(getCtx(), DD_OrderLine_ID, get_TrxName());
BigDecimal QtyAllocation = detail.getActualAllocation();
if (QtyAllocation == null)
QtyAllocation = Env.ZERO;
String Description = line.getDescription();
if (Description == null)
Description = "";
if (m_run.getName() != null)
Description = Description.concat(m_run.getName());
line.setDescription(Description + " " + Msg.translate(getCtx(), "Qty") + " = " + QtyAllocation + " ");
line.setQty(line.getQtyEntered().add(QtyAllocation));
//line.setConfirmedQty(line.getConfirmedQty().add( QtyAllocation));
line.saveEx();
}
} else {
// Create Order Line
MDDOrderLine line = new MDDOrderLine(order);
if (counter && bp.getAD_OrgBP_ID_Int() > 0)
// don't overwrite counter doc
;
/*else // normal - optionally overwrite
{
line.setC_BPartner_ID(detail.getC_BPartner_ID());
if (detail.getC_BPartner_Location_ID() != 0)
line.setC_BPartner_Location_ID(detail.getC_BPartner_Location_ID());
}*/
//
line.setAD_Org_ID(bp.getAD_OrgBP_ID_Int());
line.setM_Locator_ID(m_locator.getM_Locator_ID());
line.setM_LocatorTo_ID(m_locator_to.getM_Locator_ID());
line.setIsInvoiced(false);
line.setProduct(product);
line.setQty(detail.getActualAllocation());
line.setQtyEntered(detail.getActualAllocation());
//line.setTargetQty(detail.getActualAllocation());
line.setTargetQty(Env.ZERO);
//line.setConfirmedQty(detail.getActualAllocation());
String Description = "";
if (m_run.getName() != null)
Description = Description.concat(m_run.getName());
line.setDescription(Description + " " + Msg.translate(getCtx(), "Qty") + " = " + detail.getActualAllocation() + " ");
line.saveEx();
}
addLog(0, null, detail.getActualAllocation(), order.getDocumentNo() + ": " + bp.getName() + " - " + product.getName());
}
// finish order
order = null;
return true;
}
use of org.compiere.model.MBPartner in project adempiere by adempiere.
the class ImportBPartner method doIt.
// prepare
/**
* Perform process.
* @return Message
* @throws Exception
*/
protected String doIt() throws java.lang.Exception {
StringBuffer sql = null;
int no = 0;
String clientCheck = getWhereClause();
// Delete Old Imported
if (m_deleteOldImported) {
sql = new StringBuffer("DELETE I_BPartner " + "WHERE I_IsImported='Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Delete Old Impored =" + no);
}
// Set Client, Org, IsActive, Created/Updated
sql = new StringBuffer("UPDATE I_BPartner " + "SET AD_Client_ID = COALESCE (AD_Client_ID, ").append(m_AD_Client_ID).append(")," + " AD_Org_ID = COALESCE (AD_Org_ID, 0)," + " IsActive = COALESCE (IsActive, 'Y')," + " Created = COALESCE (Created, SysDate)," + " CreatedBy = COALESCE (CreatedBy, 0)," + " Updated = COALESCE (Updated, SysDate)," + " UpdatedBy = COALESCE (UpdatedBy, 0)," + " I_ErrorMsg = ' '," + " I_IsImported = 'N' " + "WHERE I_IsImported<>'Y' OR I_IsImported IS NULL");
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Reset=" + no);
ModelValidationEngine.get().fireImportValidate(this, null, null, ImportValidator.TIMING_BEFORE_VALIDATE);
// Set BP_Group
sql = new StringBuffer("UPDATE I_BPartner i " + "SET GroupValue=(SELECT MAX(Value) FROM C_BP_Group g WHERE g.IsDefault='Y'" + " AND g.AD_Client_ID=i.AD_Client_ID) ");
sql.append("WHERE GroupValue IS NULL AND C_BP_Group_ID IS NULL" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Set Group Default=" + no);
//
sql = new StringBuffer("UPDATE I_BPartner i " + "SET C_BP_Group_ID=(SELECT C_BP_Group_ID FROM C_BP_Group g" + " WHERE i.GroupValue=g.Value AND g.AD_Client_ID=i.AD_Client_ID) " + "WHERE C_BP_Group_ID IS NULL" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Set Group=" + no);
//
sql = new StringBuffer("UPDATE I_BPartner " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||'ERR=Invalid Group, ' " + "WHERE C_BP_Group_ID IS NULL" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.config("Invalid Group=" + no);
// Set Country
/**
sql = new StringBuffer ("UPDATE I_BPartner i "
+ "SET CountryCode=(SELECT CountryCode FROM C_Country c WHERE c.IsDefault='Y'"
+ " AND c.AD_Client_ID IN (0, i.AD_Client_ID) AND ROWNUM=1) "
+ "WHERE CountryCode IS NULL AND C_Country_ID IS NULL"
+ " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Set Country Default=" + no);
**/
//
sql = new StringBuffer("UPDATE I_BPartner i " + "SET C_Country_ID=(SELECT C_Country_ID FROM C_Country c" + " WHERE i.CountryCode=c.CountryCode AND c.AD_Client_ID IN (0, i.AD_Client_ID)) " + "WHERE C_Country_ID IS NULL" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Set Country=" + no);
//
sql = new StringBuffer("UPDATE I_BPartner " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||'ERR=Invalid Country, ' " + "WHERE C_Country_ID IS NULL AND (City IS NOT NULL OR Address1 IS NOT NULL)" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.config("Invalid Country=" + no);
// Set Region
sql = new StringBuffer("UPDATE I_BPartner i " + "Set RegionName=(SELECT MAX(Name) FROM C_Region r" + " WHERE r.IsDefault='Y' AND r.C_Country_ID=i.C_Country_ID" + " AND r.AD_Client_ID IN (0, i.AD_Client_ID)) ");
sql.append("WHERE RegionName IS NULL AND C_Region_ID IS NULL" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Set Region Default=" + no);
//
sql = new StringBuffer("UPDATE I_BPartner i " + "Set C_Region_ID=(SELECT C_Region_ID FROM C_Region r" + " WHERE r.Name=i.RegionName AND r.C_Country_ID=i.C_Country_ID" + " AND r.AD_Client_ID IN (0, i.AD_Client_ID)) " + "WHERE C_Region_ID IS NULL" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Set Region=" + no);
//
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||'ERR=Invalid Region, ' " + "WHERE C_Region_ID IS NULL " + " AND EXISTS (SELECT * FROM C_Country c" + " WHERE c.C_Country_ID=i.C_Country_ID AND c.HasRegion='Y')" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.config("Invalid Region=" + no);
// Set Greeting
sql = new StringBuffer("UPDATE I_BPartner i " + "SET C_Greeting_ID=(SELECT C_Greeting_ID FROM C_Greeting g" + " WHERE i.BPContactGreeting=g.Name AND g.AD_Client_ID IN (0, i.AD_Client_ID)) " + "WHERE C_Greeting_ID IS NULL AND BPContactGreeting IS NOT NULL" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Set Greeting=" + no);
//
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||'ERR=Invalid Greeting, ' " + "WHERE C_Greeting_ID IS NULL AND BPContactGreeting IS NOT NULL" + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.config("Invalid Greeting=" + no);
// Existing User. Lookup by AD_User.Email - BPartner
sql = new StringBuffer("UPDATE I_BPartner i " + "SET C_BPartner_ID=" + "(SELECT C_BPartner_ID FROM AD_User u " + "WHERE i.EMail=u.EMail AND u.AD_Client_ID=i.AD_Client_ID) " + "WHERE i.EMail IS NOT NULL AND I_IsImported='N'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Found EMail User=" + no);
// Existing User. Lookup by AD_User.Email - AD_User
sql = new StringBuffer("UPDATE I_BPartner i " + "SET AD_User_ID=" + "(SELECT AD_User_ID FROM AD_User u " + "WHERE i.EMail=u.EMail AND u.AD_Client_ID=i.AD_Client_ID) " + "WHERE i.EMail IS NOT NULL AND I_IsImported='N'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Found EMail User=" + no);
// Existing BPartner ? Match Value
sql = new StringBuffer("UPDATE I_BPartner i " + "SET C_BPartner_ID=(SELECT C_BPartner_ID FROM C_BPartner p" + " WHERE i.Value=p.Value AND p.AD_Client_ID=i.AD_Client_ID) " + "WHERE C_BPartner_ID IS NULL AND Value IS NOT NULL" + " AND I_IsImported='N'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Found BPartner=" + no);
// Existing Contact ? Match Name
sql = new StringBuffer("UPDATE I_BPartner i " + "SET AD_User_ID=(SELECT AD_User_ID FROM AD_User c" + " WHERE i.ContactName=c.Name AND i.C_BPartner_ID=c.C_BPartner_ID AND c.AD_Client_ID=i.AD_Client_ID) " + "WHERE C_BPartner_ID IS NOT NULL AND AD_User_ID IS NULL AND ContactName IS NOT NULL" + " AND I_IsImported='N'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Found Contact=" + no);
// Existing Location ? Exact Match
sql = new StringBuffer("UPDATE I_BPartner i " + "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 i.C_BPartner_ID=bpl.C_BPartner_ID AND bpl.AD_Client_ID=i.AD_Client_ID" + " AND (i.Address1=l.Address1 OR (i.Address1 IS NULL AND l.Address1 IS NULL))" + " AND (i.Address2=l.Address2 OR (i.Address2 IS NULL AND l.Address2 IS NULL))" + " AND (i.City=l.City OR (i.City IS NULL AND l.City IS NULL))" + " AND (i.Postal=l.Postal OR (i.Postal IS NULL AND l.Postal IS NULL))" + " AND (i.Postal_Add=l.Postal_Add OR (l.Postal_Add IS NULL AND l.Postal_Add IS NULL))" + " AND i.C_Region_ID=l.C_Region_ID AND i.C_Country_ID=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.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Found Location=" + no);
// Interest Area
sql = new StringBuffer("UPDATE I_BPartner i " + "SET R_InterestArea_ID=(SELECT R_InterestArea_ID FROM R_InterestArea ia " + "WHERE i.InterestAreaName=ia.Name AND ia.AD_Client_ID=i.AD_Client_ID) " + "WHERE R_InterestArea_ID IS NULL AND InterestAreaName IS NOT NULL" + " AND I_IsImported='N'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.fine("Set Interest Area=" + no);
// Value is mandatory error
sql = new StringBuffer("UPDATE I_BPartner " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||'ERR=Value is mandatory, ' " + "WHERE Value IS NULL " + " AND I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
log.config("Value is mandatory=" + no);
ModelValidationEngine.get().fireImportValidate(this, null, null, ImportValidator.TIMING_AFTER_VALIDATE);
commitEx();
if (p_IsValidateOnly) {
return "Validated";
}
// -------------------------------------------------------------------
int noInsert = 0;
int noUpdate = 0;
// Go through Records
sql = new StringBuffer("SELECT * FROM I_BPartner " + "WHERE I_IsImported='N'").append(clientCheck);
// gody: 20070113 - Order so the same values are consecutive.
sql.append(" ORDER BY Value, I_BPartner_ID");
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = DB.prepareStatement(sql.toString(), get_TrxName());
rs = pstmt.executeQuery();
// Remember Previous BP Value BP is only first one, others are contacts.
// All contacts share BP location.
// bp and bpl declarations before loop, we need them for data.
String Old_BPValue = "";
MBPartner bp = null;
MBPartnerLocation bpl = null;
while (rs.next()) {
// Remember Value - only first occurance of the value is BP
String New_BPValue = rs.getString("Value");
X_I_BPartner impBP = new X_I_BPartner(getCtx(), rs, get_TrxName());
log.fine("I_BPartner_ID=" + impBP.getI_BPartner_ID() + ", C_BPartner_ID=" + impBP.getC_BPartner_ID() + ", C_BPartner_Location_ID=" + impBP.getC_BPartner_Location_ID() + ", AD_User_ID=" + impBP.getAD_User_ID());
if (!New_BPValue.equals(Old_BPValue)) {
// **** Create/Update BPartner ****
bp = null;
if (// Insert new BPartner
impBP.getC_BPartner_ID() == 0) {
bp = new MBPartner(impBP);
ModelValidationEngine.get().fireImportValidate(this, impBP, bp, ImportValidator.TIMING_AFTER_IMPORT);
setTypeOfBPartner(impBP, bp);
if (bp.save()) {
impBP.setC_BPartner_ID(bp.getC_BPartner_ID());
log.finest("Insert BPartner - " + bp.getC_BPartner_ID());
noInsert++;
} else {
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||").append("'Cannot Insert BPartner, ' ").append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdateEx(sql.toString(), get_TrxName());
continue;
}
} else // Update existing BPartner
{
bp = new MBPartner(getCtx(), impBP.getC_BPartner_ID(), get_TrxName());
// bp.setValue(impBP.getValue());
if (impBP.getName() != null) {
bp.setName(impBP.getName());
bp.setName2(impBP.getName2());
}
if (impBP.getDUNS() != null)
bp.setDUNS(impBP.getDUNS());
if (impBP.getTaxID() != null)
bp.setTaxID(impBP.getTaxID());
if (impBP.getNAICS() != null)
bp.setNAICS(impBP.getNAICS());
if (impBP.getDescription() != null)
bp.setDescription(impBP.getDescription());
if (impBP.getC_BP_Group_ID() != 0)
bp.setC_BP_Group_ID(impBP.getC_BP_Group_ID());
// Employee values
if (impBP.getBirthday() != null)
bp.setBirthday(impBP.getBirthday());
if (impBP.getFathersName() != null)
bp.setFathersName(impBP.getFathersName());
if (impBP.getBloodGroup() != null)
bp.setBloodGroup(impBP.getBloodGroup());
if (impBP.getPlaceOfBirth() != null)
bp.setPlaceOfBirth(impBP.getPlaceOfBirth());
if (impBP.getGender() != null)
bp.setGender(impBP.getGender());
//
ModelValidationEngine.get().fireImportValidate(this, impBP, bp, ImportValidator.TIMING_AFTER_IMPORT);
setTypeOfBPartner(impBP, bp);
//
if (bp.save()) {
log.finest("Update BPartner - " + bp.getC_BPartner_ID());
noUpdate++;
} else {
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||").append("'Cannot Update BPartner, ' ").append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdateEx(sql.toString(), get_TrxName());
continue;
}
}
// **** Create/Update BPartner Location ****
bpl = null;
if (// Update Location
impBP.getC_BPartner_Location_ID() != 0) {
bpl = new MBPartnerLocation(getCtx(), impBP.getC_BPartner_Location_ID(), get_TrxName());
MLocation location = new MLocation(getCtx(), bpl.getC_Location_ID(), get_TrxName());
location.setC_Country_ID(impBP.getC_Country_ID());
location.setC_Region_ID(impBP.getC_Region_ID());
location.setCity(impBP.getCity());
location.setAddress1(impBP.getAddress1());
location.setAddress2(impBP.getAddress2());
location.setPostal(impBP.getPostal());
location.setPostal_Add(impBP.getPostal_Add());
if (!location.save())
log.warning("Location not updated");
else
bpl.setC_Location_ID(location.getC_Location_ID());
if (impBP.getPhone() != null)
bpl.setPhone(impBP.getPhone());
if (impBP.getPhone2() != null)
bpl.setPhone2(impBP.getPhone2());
if (impBP.getFax() != null)
bpl.setFax(impBP.getFax());
ModelValidationEngine.get().fireImportValidate(this, impBP, bpl, ImportValidator.TIMING_AFTER_IMPORT);
bpl.saveEx();
} else // New Location
if (impBP.getC_Country_ID() != 0 && impBP.getAddress1() != null && impBP.getCity() != null) {
MLocation location = new MLocation(getCtx(), impBP.getC_Country_ID(), impBP.getC_Region_ID(), impBP.getCity(), get_TrxName());
location.setAddress1(impBP.getAddress1());
location.setAddress2(impBP.getAddress2());
location.setPostal(impBP.getPostal());
location.setPostal_Add(impBP.getPostal_Add());
if (location.save())
log.finest("Insert Location - " + location.getC_Location_ID());
else {
rollback();
noInsert--;
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||").append("'Cannot Insert Location, ' ").append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdateEx(sql.toString(), get_TrxName());
continue;
}
//
bpl = new MBPartnerLocation(bp);
bpl.setC_Location_ID(location.getC_Location_ID());
bpl.setPhone(impBP.getPhone());
bpl.setPhone2(impBP.getPhone2());
bpl.setFax(impBP.getFax());
ModelValidationEngine.get().fireImportValidate(this, impBP, bpl, ImportValidator.TIMING_AFTER_IMPORT);
if (bpl.save()) {
log.finest("Insert BP Location - " + bpl.getC_BPartner_Location_ID());
impBP.setC_BPartner_Location_ID(bpl.getC_BPartner_Location_ID());
} else {
rollback();
noInsert--;
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||").append("'Cannot Insert BPLocation, ' ").append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdateEx(sql.toString(), get_TrxName());
continue;
}
}
}
Old_BPValue = New_BPValue;
// **** Create/Update Contact ****
MUser user = null;
if (impBP.getAD_User_ID() != 0) {
user = new MUser(getCtx(), impBP.getAD_User_ID(), get_TrxName());
if (user.getC_BPartner_ID() == 0)
user.setC_BPartner_ID(bp.getC_BPartner_ID());
else if (user.getC_BPartner_ID() != bp.getC_BPartner_ID()) {
rollback();
noInsert--;
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||").append("'BP of User <> BP, ' ").append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdateEx(sql.toString(), get_TrxName());
continue;
}
if (impBP.getC_Greeting_ID() != 0)
user.setC_Greeting_ID(impBP.getC_Greeting_ID());
String name = impBP.getContactName();
if (name == null || name.length() == 0)
name = impBP.getEMail();
user.setName(name);
if (impBP.getTitle() != null)
user.setTitle(impBP.getTitle());
if (impBP.getContactDescription() != null)
user.setDescription(impBP.getContactDescription());
if (impBP.getComments() != null)
user.setComments(impBP.getComments());
if (impBP.getPhone() != null)
user.setPhone(impBP.getPhone());
if (impBP.getPhone2() != null)
user.setPhone2(impBP.getPhone2());
if (impBP.getFax() != null)
user.setFax(impBP.getFax());
if (impBP.getEMail() != null)
user.setEMail(impBP.getEMail());
if (impBP.getBirthday() != null)
user.setBirthday(impBP.getBirthday());
if (bpl != null)
user.setC_BPartner_Location_ID(bpl.getC_BPartner_Location_ID());
ModelValidationEngine.get().fireImportValidate(this, impBP, user, ImportValidator.TIMING_AFTER_IMPORT);
if (user.save()) {
log.finest("Update BP Contact - " + user.getAD_User_ID());
} else {
rollback();
noInsert--;
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||").append("'Cannot Update BP Contact, ' ").append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdateEx(sql.toString(), get_TrxName());
continue;
}
} else // New Contact
if (impBP.getContactName() != null || impBP.getEMail() != null) {
user = new MUser(bp);
if (impBP.getC_Greeting_ID() != 0)
user.setC_Greeting_ID(impBP.getC_Greeting_ID());
String name = impBP.getContactName();
if (name == null || name.length() == 0)
name = impBP.getEMail();
user.setName(name);
user.setTitle(impBP.getTitle());
user.setDescription(impBP.getContactDescription());
user.setComments(impBP.getComments());
user.setPhone(impBP.getPhone());
user.setPhone2(impBP.getPhone2());
user.setFax(impBP.getFax());
user.setEMail(impBP.getEMail());
user.setBirthday(impBP.getBirthday());
if (bpl != null)
user.setC_BPartner_Location_ID(bpl.getC_BPartner_Location_ID());
ModelValidationEngine.get().fireImportValidate(this, impBP, user, ImportValidator.TIMING_AFTER_IMPORT);
if (user.save()) {
log.finest("Insert BP Contact - " + user.getAD_User_ID());
impBP.setAD_User_ID(user.getAD_User_ID());
} else {
rollback();
noInsert--;
sql = new StringBuffer("UPDATE I_BPartner i " + "SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||").append("'Cannot Insert BPContact, ' ").append("WHERE I_BPartner_ID=").append(impBP.getI_BPartner_ID());
DB.executeUpdateEx(sql.toString(), get_TrxName());
continue;
}
}
// Interest Area
if (impBP.getR_InterestArea_ID() != 0 && user != null) {
MContactInterest ci = MContactInterest.get(getCtx(), impBP.getR_InterestArea_ID(), user.getAD_User_ID(), true, get_TrxName());
// don't subscribe or re-activate
ci.saveEx();
}
//
impBP.setI_IsImported(true);
impBP.setProcessed(true);
impBP.setProcessing(false);
impBP.saveEx();
commitEx();
}
// for all I_Product
DB.close(rs, pstmt);
} catch (SQLException e) {
rollback();
//log.log(Level.SEVERE, "", e);
throw new DBException(e, sql.toString());
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
// Set Error to indicator to not imported
sql = new StringBuffer("UPDATE I_BPartner " + "SET I_IsImported='N', Updated=SysDate " + "WHERE I_IsImported<>'Y'").append(clientCheck);
no = DB.executeUpdateEx(sql.toString(), get_TrxName());
addLog(0, null, new BigDecimal(no), "@Errors@");
addLog(0, null, new BigDecimal(noInsert), "@C_BPartner_ID@: @Inserted@");
addLog(0, null, new BigDecimal(noUpdate), "@C_BPartner_ID@: @Updated@");
}
return "";
}
use of org.compiere.model.MBPartner in project adempiere by adempiere.
the class ExpenseAPInvoice method doIt.
// prepare
/**
* Perform process.
* @return Message (clear text)
* @throws Exception if not successful
*/
protected String doIt() throws java.lang.Exception {
StringBuffer sql = new StringBuffer("SELECT * " + "FROM S_TimeExpense e " + "WHERE e.Processed='Y'" + // #1
" AND e.AD_Client_ID=?");
if (m_C_BPartner_ID != 0)
// #2
sql.append(" AND e.C_BPartner_ID=?");
if (m_DateFrom != null)
// #3
sql.append(" AND e.DateReport >= ?");
if (m_DateTo != null)
// #4
sql.append(" AND e.DateReport <= ?");
sql.append(" AND EXISTS (SELECT * FROM S_TimeExpenseLine el " + "WHERE e.S_TimeExpense_ID=el.S_TimeExpense_ID" + " AND el.C_InvoiceLine_ID IS NULL" + " AND el.ConvertedAmt<>0) " + "ORDER BY e.C_BPartner_ID, e.S_TimeExpense_ID");
//
int old_BPartner_ID = -1;
MInvoice invoice = null;
//
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = DB.prepareStatement(sql.toString(), get_TrxName());
int par = 1;
pstmt.setInt(par++, getAD_Client_ID());
if (m_C_BPartner_ID != 0)
pstmt.setInt(par++, m_C_BPartner_ID);
if (m_DateFrom != null)
pstmt.setTimestamp(par++, m_DateFrom);
if (m_DateTo != null)
pstmt.setTimestamp(par++, m_DateTo);
rs = pstmt.executeQuery();
while (// ********* Expense Line Loop
rs.next()) {
MTimeExpense te = new MTimeExpense(getCtx(), rs, get_TrxName());
// New BPartner - New Order
if (te.getC_BPartner_ID() != old_BPartner_ID) {
completeInvoice(invoice);
MBPartner bp = new MBPartner(getCtx(), te.getC_BPartner_ID(), get_TrxName());
//
log.info("New Invoice for " + bp);
invoice = new MInvoice(getCtx(), 0, null);
invoice.setClientOrg(te.getAD_Client_ID(), te.getAD_Org_ID());
// API
invoice.setC_DocTypeTarget_ID(MDocType.DOCBASETYPE_APInvoice);
invoice.setDocumentNo(te.getDocumentNo());
//
invoice.setBPartner(bp);
if (invoice.getC_BPartner_Location_ID() == 0) {
log.log(Level.SEVERE, "No BP Location: " + bp);
addLog(0, te.getDateReport(), null, "No Location: " + te.getDocumentNo() + " " + bp.getName());
invoice = null;
break;
}
invoice.setM_PriceList_ID(te.getM_PriceList_ID());
invoice.setSalesRep_ID(te.getDoc_User_ID());
String descr = Msg.translate(getCtx(), "S_TimeExpense_ID") + ": " + te.getDocumentNo() + " " + DisplayType.getDateFormat(DisplayType.Date).format(te.getDateReport());
invoice.setDescription(descr);
if (!invoice.save())
new IllegalStateException("Cannot save Invoice");
old_BPartner_ID = bp.getC_BPartner_ID();
}
MTimeExpenseLine[] tel = te.getLines(false);
for (int i = 0; i < tel.length; i++) {
MTimeExpenseLine line = tel[i];
// Already Invoiced or nothing to be reimbursed
if (line.getC_InvoiceLine_ID() != 0 || Env.ZERO.compareTo(line.getQtyReimbursed()) == 0 || Env.ZERO.compareTo(line.getPriceReimbursed()) == 0)
continue;
// Update Header info
if (line.getC_Activity_ID() != 0 && line.getC_Activity_ID() != invoice.getC_Activity_ID())
invoice.setC_Activity_ID(line.getC_Activity_ID());
if (line.getC_Campaign_ID() != 0 && line.getC_Campaign_ID() != invoice.getC_Campaign_ID())
invoice.setC_Campaign_ID(line.getC_Campaign_ID());
if (line.getC_Project_ID() != 0 && line.getC_Project_ID() != invoice.getC_Project_ID())
invoice.setC_Project_ID(line.getC_Project_ID());
if (!invoice.save())
new IllegalStateException("Cannot save Invoice");
// Create OrderLine
MInvoiceLine il = new MInvoiceLine(invoice);
//
if (line.getM_Product_ID() != 0)
il.setM_Product_ID(line.getM_Product_ID(), true);
// Entered/Invoiced
il.setQty(line.getQtyReimbursed());
il.setDescription(line.getDescription());
//
il.setC_Project_ID(line.getC_Project_ID());
il.setC_ProjectPhase_ID(line.getC_ProjectPhase_ID());
il.setC_ProjectTask_ID(line.getC_ProjectTask_ID());
il.setC_Activity_ID(line.getC_Activity_ID());
il.setC_Campaign_ID(line.getC_Campaign_ID());
//
// il.setPrice(); // not really a list/limit price for reimbursements
//
il.setPrice(line.getPriceReimbursed());
il.setTax();
if (!il.save())
new IllegalStateException("Cannot save Invoice Line");
// Update TEL
line.setC_InvoiceLine_ID(il.getC_InvoiceLine_ID());
line.saveEx();
}
// for all expense lines
}
// ********* Expense Line Loop
} catch (Exception e) {
log.log(Level.SEVERE, sql.toString(), e);
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
completeInvoice(invoice);
return "@Created@=" + m_noInvoices;
}
Aggregations