📄 projectgenpo.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.process;
import java.math.*;
import java.util.*;
import org.compiere.model.*;
import java.util.logging.*;
import org.compiere.util.*;
/**
* Generate Purchase Order from Project.
*
* @author Jorg Janke
* @version $Id: ProjectGenPO.java,v 1.13 2005/10/08 02:02:30 jjanke Exp $
*/
public class ProjectGenPO extends SvrProcess
{
/** Project Parameter */
private int m_C_Project_ID = 0;
/** Opt Project Line Parameter */
private int m_C_ProjectLine_ID = 0;
/** Consolidate Document */
private boolean m_ConsolidateDocument = true;
/** List of POs for Consolidation */
private ArrayList<MOrder> m_pos = new ArrayList<MOrder>();
/**
* 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 (para[i].getParameter() == null)
;
else if (name.equals("C_Project_ID"))
m_C_Project_ID = ((BigDecimal)para[i].getParameter()).intValue();
else if (name.equals("C_ProjectLine_ID"))
m_C_ProjectLine_ID = ((BigDecimal)para[i].getParameter()).intValue();
else if (name.equals("ConsolidateDocument"))
m_ConsolidateDocument = "Y".equals(para[i].getParameter());
else
log.log(Level.SEVERE, "prepare - Unknown Parameter: " + name);
}
} // prepare
/**
* Perrform process.
* @return Message
* @throws Exception if not successful
*/
protected String doIt() throws Exception
{
log.info("doIt - C_Project_ID=" + m_C_Project_ID + " - C_ProjectLine_ID=" + m_C_ProjectLine_ID + " - Consolidate=" + m_ConsolidateDocument);
if (m_C_ProjectLine_ID != 0)
{
MProjectLine projectLine = new MProjectLine(getCtx(), m_C_ProjectLine_ID, get_TrxName());
MProject project = new MProject (getCtx(), projectLine.getC_Project_ID(), get_TrxName());
createPO (project, projectLine);
}
else
{
MProject project = new MProject (getCtx(), m_C_Project_ID, get_TrxName());
MProjectLine[] lines = project.getLines();
for (int i = 0; i < lines.length; i++)
createPO (project, lines[i]);
}
return "";
} // doIt
/**
* Create PO from Planned Amt/Qty
* @param projectLine project line
*/
private void createPO (MProject project, MProjectLine projectLine)
{
if (projectLine.getM_Product_ID() == 0)
{
addLog (projectLine.getLine() ,null,null, "Line has no Product");
return;
}
if (projectLine.getC_OrderPO_ID() != 0)
{
addLog (projectLine.getLine() ,null,null, "Line was ordered previously");
return;
}
// PO Record
MProductPO[] pos = MProductPO.getOfProduct(getCtx(), projectLine.getM_Product_ID(), get_TrxName());
if (pos == null || pos.length == 0)
{
addLog (projectLine.getLine() ,null,null, "Product has no PO record");
return;
}
// Create to Order
MOrder order = null;
// try to find PO to C_BPartner
for (int i = 0; i < m_pos.size(); i++)
{
MOrder test = (MOrder)m_pos.get(i);
if (test.getC_BPartner_ID() == pos[0].getC_BPartner_ID())
{
order = test;
break;
}
}
if (order == null) // create new Order
{
// Vendor
MBPartner bp = new MBPartner (getCtx(), pos[0].getC_BPartner_ID(), get_TrxName());
// New Order
order = new MOrder (project, false, null);
int AD_Org_ID = projectLine.getAD_Org_ID();
if (AD_Org_ID == 0)
{
log.warning("createPOfromProjectLine - AD_Org_ID=0");
AD_Org_ID = Env.getAD_Org_ID(getCtx());
if (AD_Org_ID != 0)
projectLine.setAD_Org_ID(AD_Org_ID);
}
order.setClientOrg (projectLine.getAD_Client_ID (), AD_Org_ID);
order.setBPartner (bp);
order.save ();
// optionally save for consolidation
if (m_ConsolidateDocument)
m_pos.add(order);
}
// Create Line
MOrderLine orderLine = new MOrderLine (order);
orderLine.setM_Product_ID(projectLine.getM_Product_ID(), true);
orderLine.setQty(projectLine.getPlannedQty());
orderLine.setDescription(projectLine.getDescription());
// (Vendor) PriceList Price
orderLine.setPrice();
if (orderLine.getPriceActual().signum() == 0)
{
// Try to find purchase price
BigDecimal poPrice = pos[0].getPricePO();
int C_Currency_ID = pos[0].getC_Currency_ID();
//
if (poPrice == null || poPrice.signum() == 0)
poPrice = pos[0].getPriceLastPO();
if (poPrice == null || poPrice.signum() == 0)
poPrice = pos[0].getPriceList();
// We have a price
if (poPrice != null && poPrice.signum() != 0)
{
if (order.getC_Currency_ID() != C_Currency_ID)
poPrice = MConversionRate.convert(getCtx(), poPrice,
C_Currency_ID, order.getC_Currency_ID(),
order.getDateAcct(), order.getC_ConversionType_ID(),
order.getAD_Client_ID(), order.getAD_Org_ID());
orderLine.setPrice(poPrice);
}
}
orderLine.setTax();
orderLine.save();
// update ProjectLine
projectLine.setC_OrderPO_ID(order.getC_Order_ID());
projectLine.save();
addLog (projectLine.getLine(), null, projectLine.getPlannedQty(), order.getDocumentNo());
} // createPOfromProjectLine
} // ProjectGenPO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -