Setup for implement product with Manufacturing process
This commit is contained in:
parent
dbe8117a22
commit
828d67431e
|
|
@ -16,11 +16,16 @@
|
||||||
package org.eevolution.model;
|
package org.eevolution.model;
|
||||||
|
|
||||||
import java.math.*;
|
import java.math.*;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import org.compiere.model.*;
|
import org.compiere.model.*;
|
||||||
import org.compiere.util.*;
|
import org.compiere.util.*;
|
||||||
|
import org.compiere.wf.MWFNode;
|
||||||
|
import org.compiere.wf.MWFNodeNext;
|
||||||
|
import org.compiere.wf.MWorkflow;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -71,6 +76,9 @@ public class LiberoValidator implements ModelValidator
|
||||||
engine.addModelChange(MDDOrderLine.Table_Name, this);
|
engine.addModelChange(MDDOrderLine.Table_Name, this);
|
||||||
engine.addModelChange(MPPOrder.Table_Name, this);
|
engine.addModelChange(MPPOrder.Table_Name, this);
|
||||||
engine.addModelChange(MPPOrderBOMLine.Table_Name, this);
|
engine.addModelChange(MPPOrderBOMLine.Table_Name, this);
|
||||||
|
//engine.addModelChange(MProject.Table_Name, this);
|
||||||
|
//engine.addModelChange(MProjectPhase.Table_Name, this);
|
||||||
|
//engine.addModelChange(MProjectTask.Table_Name, this);
|
||||||
} // initialize
|
} // initialize
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -158,6 +166,93 @@ public class LiberoValidator implements ModelValidator
|
||||||
log.info(po.toString());
|
log.info(po.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.info(po.get_TableName() + " Type: "+type);
|
||||||
|
if (po.get_TableName().equals(MProjectPhase.Table_Name) && ( type == TYPE_AFTER_NEW ))
|
||||||
|
{
|
||||||
|
MProjectPhase pf = (MProjectPhase)po;
|
||||||
|
|
||||||
|
X_C_Phase phase = new X_C_Phase(pf.getCtx(), pf.getC_Phase_ID(),pf.get_TrxName());
|
||||||
|
int PP_Product_BOM_ID=(Integer)phase.get_Value("PP_Product_BOM_ID");
|
||||||
|
int AD_Workflow_ID=(Integer)phase.get_Value("AD_Workflow_ID");
|
||||||
|
|
||||||
|
MProject project = new MProject(po.getCtx(), pf.getC_Project_ID(), pf.get_TrxName());
|
||||||
|
|
||||||
|
/*int PP_Product_BOM_ID=(Integer)pf.get_Value("PP_Product_BOM_ID");
|
||||||
|
int AD_Workflow_ID=(Integer)pf.get_Value("AD_Workflow_ID");*/
|
||||||
|
|
||||||
|
if(PP_Product_BOM_ID > 0 & AD_Workflow_ID > 0)
|
||||||
|
{
|
||||||
|
MPPOrder order = new MPPOrder(project,PP_Product_BOM_ID, AD_Workflow_ID );
|
||||||
|
order.save();
|
||||||
|
|
||||||
|
Query query = MTable.get(order.getCtx(),MPPOrderBOMLine.Table_ID).createQuery("PP_Order_ID=?", order.get_TrxName());
|
||||||
|
query.setParameters(new Object[]{order.getPP_Order_ID()});
|
||||||
|
List<MPPOrderBOMLine> bomline = query.list();
|
||||||
|
|
||||||
|
for (MPPOrderBOMLine line : bomline)
|
||||||
|
{
|
||||||
|
line.set_CustomColumn("C_ProjectPhase_ID", pf.getC_ProjectPhase_ID());
|
||||||
|
line.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
query = MTable.get(order.getCtx(),MPPOrderNode.Table_ID).createQuery("PP_Order_ID=?", order.get_TrxName());
|
||||||
|
query.setParameters(new Object[]{order.getPP_Order_ID()});
|
||||||
|
List<MPPOrderNode> nodes = query.list();
|
||||||
|
|
||||||
|
for (MPPOrderNode activity : nodes)
|
||||||
|
{
|
||||||
|
activity.set_CustomColumn("C_ProjectPhase_ID", pf.getC_ProjectPhase_ID());
|
||||||
|
activity.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info(po.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (po.get_TableName().equals(MProjectTask.Table_Name) && ( type == TYPE_AFTER_NEW ))
|
||||||
|
{
|
||||||
|
MProjectTask pt = (MProjectTask)po;
|
||||||
|
|
||||||
|
|
||||||
|
X_C_Task task = new X_C_Task(pt.getCtx(), pt.getC_Task_ID(),pt.get_TrxName());
|
||||||
|
int PP_Product_BOM_ID=(Integer)task.get_Value("PP_Product_BOM_ID");
|
||||||
|
int AD_Workflow_ID=(Integer)task.get_Value("AD_Workflow_ID");
|
||||||
|
|
||||||
|
|
||||||
|
MProjectPhase pf = new MProjectPhase(po.getCtx(), pt.getC_ProjectPhase_ID(), pt.get_TrxName());
|
||||||
|
MProject project = new MProject(po.getCtx(), pf.getC_Project_ID(), pf.get_TrxName());
|
||||||
|
|
||||||
|
|
||||||
|
if(PP_Product_BOM_ID > 0 & AD_Workflow_ID > 0)
|
||||||
|
{
|
||||||
|
MPPOrder order = new MPPOrder(project,PP_Product_BOM_ID, AD_Workflow_ID );
|
||||||
|
order.save();
|
||||||
|
|
||||||
|
Query query = MTable.get(order.getCtx(),MPPOrderBOMLine.Table_ID).createQuery("PP_Order_ID=?", order.get_TrxName());
|
||||||
|
query.setParameters(new Object[]{order.getPP_Order_ID()});
|
||||||
|
List<MPPOrderBOMLine> list = query.list();
|
||||||
|
|
||||||
|
for (MPPOrderBOMLine line : list)
|
||||||
|
{
|
||||||
|
line.set_CustomColumn("C_ProjectPhase_ID", pf.getC_ProjectPhase_ID());
|
||||||
|
line.set_CustomColumn("C_ProjectTask_ID", pt.getC_ProjectTask_ID());
|
||||||
|
line.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
query = MTable.get(order.getCtx(),MPPOrderNode.Table_ID).createQuery("PP_Order_ID=?", order.get_TrxName());
|
||||||
|
query.setParameters(new Object[]{order.getPP_Order_ID()});
|
||||||
|
List<MPPOrderNode> nodes = query.list();
|
||||||
|
|
||||||
|
for (MPPOrderNode activity : nodes)
|
||||||
|
{
|
||||||
|
activity.set_CustomColumn("C_ProjectPhase_ID", pf.getC_ProjectPhase_ID());
|
||||||
|
activity.set_CustomColumn("C_ProjectTask_ID", pt.getC_ProjectTask_ID());
|
||||||
|
activity.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info(po.toString());
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
} // modelChange
|
} // modelChange
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,9 @@ import org.compiere.model.MCost;
|
||||||
import org.compiere.model.MDocType;
|
import org.compiere.model.MDocType;
|
||||||
import org.compiere.model.MProduct;
|
import org.compiere.model.MProduct;
|
||||||
import org.compiere.model.MProject;
|
import org.compiere.model.MProject;
|
||||||
|
import org.compiere.model.MResource;
|
||||||
import org.compiere.model.MStorage;
|
import org.compiere.model.MStorage;
|
||||||
|
import org.compiere.model.MTable;
|
||||||
import org.compiere.model.MWarehouse;
|
import org.compiere.model.MWarehouse;
|
||||||
import org.compiere.model.ModelValidationEngine;
|
import org.compiere.model.ModelValidationEngine;
|
||||||
import org.compiere.model.ModelValidator;
|
import org.compiere.model.ModelValidator;
|
||||||
|
|
@ -121,18 +123,25 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
super(ctx, PP_Order_ID, trxName);
|
super(ctx, PP_Order_ID, trxName);
|
||||||
// New
|
// New
|
||||||
if (PP_Order_ID == 0) {
|
if (PP_Order_ID == 0) {
|
||||||
setDocStatus(DOCSTATUS_Drafted);
|
|
||||||
setDocAction(DOCACTION_Prepare);
|
|
||||||
setC_DocType_ID(0);
|
|
||||||
set_ValueNoCheck("DocumentNo", null);
|
|
||||||
setIsSelected(false);
|
setIsSelected(false);
|
||||||
setIsSOTrx(false);
|
setIsSOTrx(false);
|
||||||
setIsApproved(false);
|
setIsApproved(false);
|
||||||
setIsPrinted(false);
|
setIsPrinted(false);
|
||||||
setProcessed(false);
|
setProcessed(false);
|
||||||
setProcessing(false);
|
setProcessing(false);
|
||||||
setC_DocType_ID(0);
|
|
||||||
setPosted(false);
|
setPosted(false);
|
||||||
|
MDocType[] doc = MDocType.getOfDocBaseType(getCtx(), MDocType.DOCBASETYPE_ManufacturingOrder);
|
||||||
|
if(doc == null)
|
||||||
|
throw new IllegalArgumentException ("C_DocType_ID is mandatory.");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setC_DocType_ID(doc[0].getC_DocType_ID());
|
||||||
|
setC_DocTypeTarget_ID(doc[0].getC_DocType_ID());
|
||||||
|
}
|
||||||
|
|
||||||
|
//set_ValueNoCheck("DocumentNo", null);
|
||||||
|
setDocStatus(DOCSTATUS_Drafted);
|
||||||
|
setDocAction(DOCACTION_Prepare);
|
||||||
}
|
}
|
||||||
} // PP_Order
|
} // PP_Order
|
||||||
|
|
||||||
|
|
@ -141,41 +150,46 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
* @param project Project to create Order from
|
* @param project Project to create Order from
|
||||||
* @param DocSubTypeSO if SO DocType Target (default DocSubTypeSO_OnCredit)
|
* @param DocSubTypeSO if SO DocType Target (default DocSubTypeSO_OnCredit)
|
||||||
*/
|
*/
|
||||||
public MPPOrder(MProject project, boolean IsSOTrx, String DocSubTypeSO) {
|
public MPPOrder(MProject project, int PP_Product_BOM_ID,int AD_Workflow_ID) {
|
||||||
this(project.getCtx(), 0, "PP_Order");
|
this(project.getCtx(), 0, project.get_TrxName());
|
||||||
setAD_Client_ID(project.getAD_Client_ID());
|
setAD_Client_ID(project.getAD_Client_ID());
|
||||||
setAD_Org_ID(project.getAD_Org_ID());
|
setAD_Org_ID(project.getAD_Org_ID());
|
||||||
setC_Campaign_ID(project.getC_Campaign_ID());
|
setC_Campaign_ID(project.getC_Campaign_ID());
|
||||||
//setC_DocTypeTarget_ID(1000005);
|
|
||||||
//setSalesRep_ID(project.getSalesRep_ID());
|
|
||||||
//
|
|
||||||
setC_Project_ID(project.getC_Project_ID());
|
setC_Project_ID(project.getC_Project_ID());
|
||||||
setDescription(project.getName());
|
setDescription(project.getName());
|
||||||
|
setLine(10);
|
||||||
|
setPriorityRule(MPPOrder.PRIORITYRULE_Medium);
|
||||||
|
if (project.getDateContract() == null)
|
||||||
|
throw new IllegalStateException("Date Contract is mandatory for Manufacturing Order.");
|
||||||
|
if (project.getDateFinish() == null)
|
||||||
|
throw new IllegalStateException("Date Finish is mandatory for Manufacturing Order.");
|
||||||
|
|
||||||
Timestamp ts = project.getDateContract();
|
Timestamp ts = project.getDateContract();
|
||||||
|
Timestamp df= project.getDateContract();
|
||||||
|
|
||||||
if (ts != null) setDateOrdered(ts);
|
if (ts != null) setDateOrdered(ts);
|
||||||
|
if (ts != null) this.setDateStartSchedule(ts);
|
||||||
ts = project.getDateFinish();
|
ts = project.getDateFinish();
|
||||||
if (ts != null) setDatePromised(ts);
|
if (df != null) setDatePromised(df);
|
||||||
//
|
setM_Warehouse_ID(project.getM_Warehouse_ID());
|
||||||
//setC_BPartner_ID(project.getC_BPartner_ID());
|
setPP_Product_BOM_ID(PP_Product_BOM_ID);
|
||||||
//setC_BPartner_Location_ID(project.getC_BPartner_Location_ID());
|
setAD_Workflow_ID(AD_Workflow_ID);
|
||||||
//setAD_User_ID(project.getAD_User_ID());
|
setQtyEntered(Env.ONE);
|
||||||
//
|
setQtyOrdered(Env.ONE);
|
||||||
// 4Layers - Bug# 101
|
MPPProductBOM bom = new MPPProductBOM(project.getCtx(), PP_Product_BOM_ID, project.get_TrxName());
|
||||||
// Just commented the original code below
|
MProduct product = MProduct.get(project.getCtx(), bom.getM_Product_ID());
|
||||||
// setM_Warehouse_ID(project.getM_Warehouse_ID());
|
setC_UOM_ID(product.getC_UOM_ID());
|
||||||
// 4Layers - Bug# 101 - end
|
|
||||||
/*setM_PriceList_ID(project.getM_PriceList_ID());
|
setM_Product_ID(bom.getM_Product_ID());
|
||||||
setC_PaymentTerm_ID(project.getC_PaymentTerm_ID());
|
|
||||||
//*/
|
String where = MResource.COLUMNNAME_IsManufacturingResource +" = 'Y' AND "+
|
||||||
setIsSOTrx(IsSOTrx);
|
MResource.COLUMNNAME_ManufacturingResourceType +" = '" + MResource.MANUFACTURINGRESOURCETYPE_Plant + "' AND " +
|
||||||
/*if (IsSOTrx) {
|
MResource.COLUMNNAME_M_Warehouse_ID + " = " + project.getM_Warehouse_ID();
|
||||||
if (DocSubTypeSO == null || DocSubTypeSO.length() == 0)
|
MResource resoruce = (MResource) MTable.get(project.getCtx(), MResource.Table_ID).getPO( where , project.get_TrxName());
|
||||||
setC_DocTypeTarget_ID(DocSubTypeSO_OnCredit);
|
if (resoruce == null)
|
||||||
else
|
throw new IllegalStateException("Resource is mandatory.");
|
||||||
setC_DocTypeTarget_ID(DocSubTypeSO);
|
setS_Resource_ID(resoruce.getS_Resource_ID());
|
||||||
}
|
|
||||||
else]*/
|
|
||||||
//setC_DocTypeTarget_ID();
|
|
||||||
} // MOrder
|
} // MOrder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -489,7 +503,7 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
}
|
}
|
||||||
log.fine("afterSave - MPPOrder Query ok");
|
log.fine("afterSave - MPPOrder Query ok");
|
||||||
|
|
||||||
setC_DocType_ID(0);
|
//setC_DocType_ID(0);
|
||||||
|
|
||||||
// Create BOM Head
|
// Create BOM Head
|
||||||
MPPProductBOM PP_Product_BOM = new MPPProductBOM(getCtx(), getPP_Product_BOM_ID(), get_TrxName());
|
MPPProductBOM PP_Product_BOM = new MPPProductBOM(getCtx(), getPP_Product_BOM_ID(), get_TrxName());
|
||||||
|
|
@ -521,7 +535,7 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
PP_Order_BOM.setValue(PP_Product_BOM.getValue());
|
PP_Order_BOM.setValue(PP_Product_BOM.getValue());
|
||||||
PP_Order_BOM.setDocumentNo(PP_Product_BOM.getDocumentNo());
|
PP_Order_BOM.setDocumentNo(PP_Product_BOM.getDocumentNo());
|
||||||
PP_Order_BOM.setC_UOM_ID(PP_Product_BOM.getC_UOM_ID());
|
PP_Order_BOM.setC_UOM_ID(PP_Product_BOM.getC_UOM_ID());
|
||||||
PP_Order_BOM.save(get_TrxName());
|
PP_Order_BOM.save();
|
||||||
|
|
||||||
MPPProductBOMLine[] PP_Product_BOMline = PP_Product_BOM.getLines();
|
MPPProductBOMLine[] PP_Product_BOMline = PP_Product_BOM.getLines();
|
||||||
|
|
||||||
|
|
@ -592,7 +606,7 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
BigDecimal.ROUND_HALF_UP));
|
BigDecimal.ROUND_HALF_UP));
|
||||||
}
|
}
|
||||||
|
|
||||||
PP_Order_BOMLine.save(get_TrxName());
|
PP_Order_BOMLine.save();
|
||||||
|
|
||||||
} // end if From / To component
|
} // end if From / To component
|
||||||
|
|
||||||
|
|
@ -652,7 +666,7 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
PP_Order_Workflow.setDescription(AD_Workflow.getDescription());
|
PP_Order_Workflow.setDescription(AD_Workflow.getDescription());
|
||||||
PP_Order_Workflow.setValidFrom(AD_Workflow.getValidFrom());
|
PP_Order_Workflow.setValidFrom(AD_Workflow.getValidFrom());
|
||||||
PP_Order_Workflow.setValidTo(AD_Workflow.getValidTo());
|
PP_Order_Workflow.setValidTo(AD_Workflow.getValidTo());
|
||||||
PP_Order_Workflow.save(get_TrxName());
|
PP_Order_Workflow.save();
|
||||||
|
|
||||||
MWFNode[] AD_WF_Node = AD_Workflow.getNodes(false, getAD_Client_ID());
|
MWFNode[] AD_WF_Node = AD_Workflow.getNodes(false, getAD_Client_ID());
|
||||||
|
|
||||||
|
|
@ -695,7 +709,6 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
PP_Order_Node.setMovingTime(AD_WF_Node[g].getMovingTime());
|
PP_Order_Node.setMovingTime(AD_WF_Node[g].getMovingTime());
|
||||||
PP_Order_Node.setWaitingTime(AD_WF_Node[g].getWaitingTime());
|
PP_Order_Node.setWaitingTime(AD_WF_Node[g].getWaitingTime());
|
||||||
PP_Order_Node.setWorkingTime(AD_WF_Node[g].getWorkingTime());
|
PP_Order_Node.setWorkingTime(AD_WF_Node[g].getWorkingTime());
|
||||||
;
|
|
||||||
PP_Order_Node.setQueuingTime(AD_WF_Node[g].getQueuingTime());
|
PP_Order_Node.setQueuingTime(AD_WF_Node[g].getQueuingTime());
|
||||||
PP_Order_Node.setXPosition(AD_WF_Node[g].getXPosition());
|
PP_Order_Node.setXPosition(AD_WF_Node[g].getXPosition());
|
||||||
PP_Order_Node.setYPosition(AD_WF_Node[g].getYPosition());
|
PP_Order_Node.setYPosition(AD_WF_Node[g].getYPosition());
|
||||||
|
|
@ -712,8 +725,7 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
PP_Order_Node.setFinishMode(AD_WF_Node[g].getFinishMode());
|
PP_Order_Node.setFinishMode(AD_WF_Node[g].getFinishMode());
|
||||||
PP_Order_Node.setValidFrom(AD_WF_Node[g].getValidFrom());
|
PP_Order_Node.setValidFrom(AD_WF_Node[g].getValidFrom());
|
||||||
PP_Order_Node.setValidTo(AD_WF_Node[g].getValidTo());
|
PP_Order_Node.setValidTo(AD_WF_Node[g].getValidTo());
|
||||||
|
PP_Order_Node.save();
|
||||||
PP_Order_Node.save(get_TrxName());
|
|
||||||
|
|
||||||
MWFNodeNext[] AD_WF_NodeNext = AD_WF_Node[g].getTransitions(getAD_Client_ID());
|
MWFNodeNext[] AD_WF_NodeNext = AD_WF_Node[g].getTransitions(getAD_Client_ID());
|
||||||
log.log(Level.INFO, "AD_WF_NodeNext" + AD_WF_NodeNext.length);
|
log.log(Level.INFO, "AD_WF_NodeNext" + AD_WF_NodeNext.length);
|
||||||
|
|
@ -730,7 +742,7 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
PP_Order_NodeNext.setPP_Order_ID(getPP_Order_ID());
|
PP_Order_NodeNext.setPP_Order_ID(getPP_Order_ID());
|
||||||
PP_Order_NodeNext.setSeqNo(AD_WF_NodeNext[n].getSeqNo());
|
PP_Order_NodeNext.setSeqNo(AD_WF_NodeNext[n].getSeqNo());
|
||||||
PP_Order_NodeNext.setTransitionCode(AD_WF_NodeNext[n].getTransitionCode());
|
PP_Order_NodeNext.setTransitionCode(AD_WF_NodeNext[n].getTransitionCode());
|
||||||
PP_Order_NodeNext.save(get_TrxName());
|
PP_Order_NodeNext.save();
|
||||||
}// for NodeNext
|
}// for NodeNext
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -767,7 +779,7 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
rs = pstmt.executeQuery();
|
rs = pstmt.executeQuery();
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
nexts[x].setPP_Order_Next_ID(rs.getInt(1));
|
nexts[x].setPP_Order_Next_ID(rs.getInt(1));
|
||||||
nexts[x].save(get_TrxName());
|
nexts[x].save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
|
|
@ -784,7 +796,7 @@ public class MPPOrder extends X_PP_Order implements DocAction {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OrderWorkflow.save(get_TrxName());
|
OrderWorkflow.save();
|
||||||
|
|
||||||
} // workflow valid from/to
|
} // workflow valid from/to
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue