IDEMPIERE-2412 Generate Production from Project with Phase - New Process

This commit is contained in:
Chuck Boecking 2015-02-04 09:57:37 -05:00
parent 1429f7eb25
commit ed11e5c626
2 changed files with 199 additions and 0 deletions

View File

@ -0,0 +1,167 @@
/******************************************************************************
* 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. *
* For the text or an alternative of this public license, you may reach us *
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
* or via info@compiere.org or http://www.compiere.org/license.html *
*****************************************************************************/
package org.compiere.process;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.logging.Level;
import org.compiere.model.MBPartner;
import org.compiere.model.MConversionRate;
import org.compiere.model.MOrder;
import org.compiere.model.MOrderLine;
import org.compiere.model.MProduct;
import org.compiere.model.MProductPO;
import org.compiere.model.MProduction;
import org.compiere.model.MProject;
import org.compiere.model.MProjectLine;
import org.compiere.util.Env;
/**
* Generate Purchase Order from Project.
*
* @author Jorg Janke
* @version $Id: ProjectGenPO.java,v 1.2 2006/07/30 00:51:01 jjanke Exp $
*/
public class ProjectGenProduction extends SvrProcess
{
/** Project Parameter */
private int m_C_Project_ID = 0;
/** Opt Project Line Parameter */
private int m_C_ProjectPhase_ID = 0;
/** Opt Project Line Parameter */
private int m_C_ProjectLine_ID = 0;
/**
* 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_ProjectPhase_ID"))
m_C_ProjectPhase_ID = ((BigDecimal)para[i].getParameter()).intValue();
else if (name.equals("C_ProjectLine_ID"))
m_C_ProjectLine_ID = ((BigDecimal)para[i].getParameter()).intValue();
else
log.log(Level.SEVERE, "prepare - Unknown Parameter: " + name);
}
} // prepare
/**
* Perform process.
* @return Message
* @throws Exception if not successful
*/
protected String doIt() throws Exception
{
if (log.isLoggable(Level.INFO)) log.info("doIt - C_Project_ID=" + m_C_Project_ID + " - C_ProjectLine_ID=" + m_C_ProjectLine_ID);
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());
createProduction (project, projectLine);
}
else if (m_C_ProjectPhase_ID != 0)
{
MProject project = new MProject (getCtx(), m_C_Project_ID, get_TrxName());
MProjectLine[] lines = project.getPhaseLines(m_C_ProjectPhase_ID);
for (int i = 0; i < lines.length; i++)
createProduction (project, lines[i]);
}
else
{
MProject project = new MProject (getCtx(), m_C_Project_ID, get_TrxName());
MProjectLine[] lines = project.getLines();
for (int i = 0; i < lines.length; i++)
createProduction (project, lines[i]);
}
return "";
} // doIt
/**
* Create PO from Planned Amt/Qty
* @param projectLine project line
*/
private void createProduction (MProject project, MProjectLine projectLine)
{
if (projectLine.getM_Product_ID() == 0)
{
addLog (project.getC_Project_ID(),
project.getCreated(),
new BigDecimal(0),
"ISSUE: Line has no Product - ProjectLine:"+projectLine.getLine()+" Desc:"+projectLine.getDescription(),
projectLine.get_Table_ID(),
projectLine.getC_ProjectLine_ID());
return;
}
MProduct M_Product = new MProduct(getCtx(), projectLine.getM_Product_ID(), get_TrxName());
if (!M_Product.isManufactured())
{
addLog (project.getC_Project_ID(),
project.getCreated(),
new BigDecimal(0),
"ISSUE: Product is not manufactured - ProjectLine:"+projectLine.getLine()+" Desc:"+projectLine.getDescription(),
projectLine.get_Table_ID(),
projectLine.getC_ProjectLine_ID());
return;
}
// TODO - need to add C_ProjectLine.M_Production_ID
// if (projectLine.getM_Production_ID() != 0)
// {
// addLog (projectLine.getLine() ,null,null, "Line was produced previously");
// return;
// }
// Create to Production
MProduction production = null;
// New Production Header
production = new MProduction (projectLine);
int AD_Org_ID = projectLine.getAD_Org_ID();
if (AD_Org_ID == 0)
{
log.warning("createProductionfromProjectLine - AD_Org_ID=0");
AD_Org_ID = Env.getAD_Org_ID(getCtx());
if (AD_Org_ID != 0)
projectLine.setAD_Org_ID(AD_Org_ID);
}
production.setC_BPartner_ID(project.getC_BPartner_ID());
production.saveEx();
// update ProjectLine
//TODO - need to add C_ProjectLine.M_Production_ID
//projectLine.setM_Production_ID(production.getM_Production_ID());
//projectLine.saveEx();
addLog (production.getM_Production_ID(),
production.getMovementDate(),
new BigDecimal(0),
"Production:"+production.getDocumentNo(),
production.get_Table_ID(),
production.getM_Production_ID());
} // createProductionfromProjectLine
} // ProjectGenProduction

View File

@ -56,6 +56,38 @@ public class MProduction extends X_M_Production implements DocAction {
setMovementDate( line.getDatePromised() );
}
public MProduction( MProjectLine line ) {
super( line.getCtx(), 0, line.get_TrxName());
MProject project = new MProject(line.getCtx(), line.getC_Project_ID(), line.get_TrxName());
MWarehouse wh = new MWarehouse(line.getCtx(), project.getM_Warehouse_ID(), line.get_TrxName());
MLocator M_Locator = null;
int M_Locator_ID = 0;
if (wh != null)
{
M_Locator = wh.getDefaultLocator();
M_Locator_ID = M_Locator.getM_Locator_ID();
}
setAD_Client_ID(line.getAD_Client_ID());
setAD_Org_ID(line.getAD_Org_ID());
setM_Product_ID(line.getM_Product_ID());
setProductionQty(line.getPlannedQty());
setM_Locator_ID(M_Locator_ID);
setDescription(project.getValue()+"_"+project.getName()+" Line: "+line.getLine()+" (project)");
setC_Project_ID(line.getC_Project_ID());
setC_BPartner_ID(project.getC_BPartner_ID());
setC_Campaign_ID(project.getC_Campaign_ID());
//TODO: add AD_OrgTrx_ID to C_Project and C_ProjectLine table
//setAD_OrgTrx_ID(project.getAD_OrgTrx_ID());
//TODO: add C_Activity_ID to C_Project and C_ProjectLine table
//setC_Activity_ID(project.getC_Activity_ID);
//TODO: add C_ProjectPhase_ID and C_ProjectTask_ID to M_Production table
//setC_ProjectPhase_ID(line.getC_ProjectPhase_ID());
//setC_ProjectTask_ID(line.getC_ProjectTask_ID());
setMovementDate( Env.getContextAsDate(p_ctx, "#Date"));
}
@Override
public String completeIt()
{