diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_ValidatorFactory.java b/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_ValidatorFactory.java index bfcc804..8709fa6 100644 --- a/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_ValidatorFactory.java +++ b/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_ValidatorFactory.java @@ -9,9 +9,12 @@ import org.compiere.model.MInventory; import org.compiere.model.MInventoryLine; import org.compiere.model.MInventoryLineMA; import org.compiere.model.MOrder; +import org.compiere.model.MOrderLine; import org.compiere.model.MPaymentAllocate; import org.compiere.model.MPriceList; import org.compiere.model.MProductPrice; +import org.compiere.model.MProduction; +import org.compiere.model.MProductionLine; import org.compiere.model.MRMA; import org.compiere.model.PO; import org.compiere.util.CLogger; @@ -36,6 +39,12 @@ public class MID_ValidatorFactory extends AbstractEventHandler { // msg = SMT_LandedCostAllocationValidator.executeEvent(event, getPO(event)); if (getPO(event).get_TableName().equals(MOrder.Table_Name)) msg = MID_OrderValidator.executeEvent(event, getPO(event)); + if (getPO(event).get_TableName().equals(MOrderLine.Table_Name)) + msg = MID_OrderValidator.executeEvent(event, getPO(event)); + if (getPO(event).get_TableName().equals(MProduction.Table_Name)) + msg = MID_OrderValidator.executeEvent(event, getPO(event)); + if (getPO(event).get_TableName().equals(MProductionLine.Table_Name)) + msg = MID_OrderValidator.executeEvent(event, getPO(event)); // if (getPO(event).get_TableName().equals(MRMA.Table_Name)) // msg = MID_RMAValidator.executeEvent(event, getPO(event)); if (getPO(event).get_TableName().equals(MInOut.Table_Name)) @@ -72,6 +81,10 @@ public class MID_ValidatorFactory extends AbstractEventHandler { registerTableEvent(IEventTopics.PO_BEFORE_CHANGE, MOrder.Table_Name); registerTableEvent(IEventTopics.DOC_BEFORE_PREPARE, MOrder.Table_Name); + //OrderLine + registerTableEvent(IEventTopics.PO_BEFORE_NEW, MOrderLine.Table_Name); + registerTableEvent(IEventTopics.PO_BEFORE_CHANGE, MOrderLine.Table_Name); + // Shipment / Receipt registerTableEvent(IEventTopics.DOC_BEFORE_PREPARE, MInOut.Table_Name); @@ -105,6 +118,10 @@ public class MID_ValidatorFactory extends AbstractEventHandler { registerTableEvent(IEventTopics.DOC_BEFORE_PREPARE, MInventory.Table_Name); registerTableEvent(IEventTopics.DOC_BEFORE_REVERSEACCRUAL,MInventory.Table_Name); registerTableEvent(IEventTopics.DOC_BEFORE_REVERSECORRECT,MInventory.Table_Name); + + registerTableEvent(IEventTopics.PO_BEFORE_NEW, MProduction.Table_Name); + registerTableEvent(IEventTopics.DOC_BEFORE_COMPLETE, MProduction.Table_Name); + registerTableEvent(IEventTopics.PO_BEFORE_NEW, MProductionLine.Table_Name); // registerTableEvent(IEventTopics.PO_AFTER_NEW,MInvoice.Table_Name); } diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/process/MID_UploadTPB.java b/andromeida.midsuit.project/src/andromedia/midsuit/process/MID_UploadTPB.java index d54cc79..49d4215 100644 --- a/andromeida.midsuit.project/src/andromedia/midsuit/process/MID_UploadTPB.java +++ b/andromeida.midsuit.project/src/andromedia/midsuit/process/MID_UploadTPB.java @@ -66,6 +66,9 @@ public class MID_UploadTPB extends SvrProcess{ order.set_ValueNoCheck("NoAju1", row.getCell(0).getStringCellValue()); String AJU_DocType_Value = row.getCell(5).getStringCellValue(); int MID_AJUDocType_ID = DB.getSQLValue(get_TrxName(), "SELECT MID_AJUDocumentType_ID FROM MID_AjuDocumentType WHERE Value =?", new Object[] { AJU_DocType_Value }); + if(MID_AJUDocType_ID <=0) + throw new AdempiereException("AJU Document For "+AJU_DocType_Value+" !!!"); + order.set_ValueNoCheck("MID_AJUDocumentType_ID", MID_AJUDocType_ID); int C_BPartner_ID = DB.getSQLValue(get_TrxName(), "SELECT C_BPartner_ID FROM C_Bpartner WHERE Name =? AND AD_Client_ID =? AND IsVendor ='Y'", new Object[] { row.getCell(3).getStringCellValue(), getAD_Client_ID()}); diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_OrderLineValidator.java b/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_OrderLineValidator.java new file mode 100644 index 0000000..59505c5 --- /dev/null +++ b/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_OrderLineValidator.java @@ -0,0 +1,43 @@ +package andromedia.midsuit.validator; + +import org.adempiere.base.event.IEventTopics; +import org.compiere.model.MOrder; +import org.compiere.model.MOrderLine; +import org.compiere.model.PO; +import org.compiere.util.DB; +import org.osgi.service.event.Event; + +public class MID_OrderLineValidator { + public static String executeEvent(Event e, PO po) { + MOrderLine OrderLine = (MOrderLine) po; + MOrder order = new MOrder(OrderLine.getCtx(), OrderLine.getC_Order_ID(), OrderLine.get_TrxName()); + + if (e.getTopic().equals(IEventTopics.PO_BEFORE_NEW)) + return beforeNew(OrderLine, order); + else if (e.getTopic().equals(IEventTopics.PO_BEFORE_CHANGE)) + return beforeChange(OrderLine, order); + return ""; + } + + private static String beforeChange(MOrderLine orderLine, MOrder order) { + if(order.get_ValueAsString("NoAju1").equals("")) { + orderLine.set_ValueNoCheck("NoAju", ""); + } + else { + String noAju = order.get_ValueAsString("NoAju1"); + orderLine.set_ValueNoCheck("NoAju", noAju); + } + return ""; + } + + public static String beforeNew(MOrderLine line, MOrder order) { + if(order.get_ValueAsString("NoAju1").equals("")) { + line.set_ValueOfColumn("NoAju", ""); + } + else if(line.get_ValueAsString("NoAju").equals("")) { + String noAju = order.get_ValueAsString("NoAju1"); + line.set_ValueNoCheck("NoAju", noAju); + } + return ""; + } +} diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_ProductionLineValidator.java b/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_ProductionLineValidator.java new file mode 100644 index 0000000..752e594 --- /dev/null +++ b/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_ProductionLineValidator.java @@ -0,0 +1,44 @@ +package andromedia.midsuit.validator; + +import org.adempiere.base.event.IEventTopics; +import org.compiere.model.MProduction; +import org.compiere.model.MProductionLine; +import org.compiere.model.PO; +import org.compiere.util.DB; +import org.osgi.service.event.Event; + +public class MID_ProductionLineValidator { + public static String executeEvent(Event e, PO po) { + MProductionLine pl = (MProductionLine) po; + if (e.getTopic().equals(IEventTopics.PO_BEFORE_NEW)) + return beforeNew(pl); + return ""; + } + + private static String beforeNew(MProductionLine pl) { + MProduction production = new MProduction(pl.getCtx(), pl.getM_Production_ID(), pl.get_TrxName()); + int PS_PPO_ID = production.get_ValueAsInt("ps_ppo_ID"); + if(pl.get_ValueAsInt("C_UOM_ID")==0) + pl.set_ValueNoCheck("C_UOM_ID", pl.getM_Product().getC_UOM_ID()); + + if(pl.isEndProduct() && PS_PPO_ID > 0) { +// MID_PPO PPO = new MID_PPO(pl.getCtx(), PS_PPO_ID, pl.get_TrxName()); +// pl.setM_AttributeSetInstance_ID(PPO.get_ValueAsInt(X_M_ProductionLine.COLUMNNAME_M_AttributeSetInstance_ID)); + String sqlExec = "SELECT M_AttributeSetInstance_ID " + + " FROM PS_PPO WHERE PS_PPO_ID =?"; + int M_AttributeSetInstance_ID = DB.getSQLValueEx(pl.get_TrxName(), sqlExec, new Object[] { PS_PPO_ID }); + if(M_AttributeSetInstance_ID>0) + pl.setM_AttributeSetInstance_ID(M_AttributeSetInstance_ID); + }else { + String sqlExec = "SELECT M_AttributeSetInstance_ID " + + " FROM M_Storage S " + + " WHERE M_Product_ID = ? AND " + + " DateMaterialPolicy = (SELECT MIN(DateMaterialPolicy) FROM M_StorageOnHand SOH " + + " WHERE SOH.QtyOnHand>0 AND M_AttributeSetInstance_ID > 0 AND M_Product_ID = S.M_Product_ID)"; + int M_AttributeSetInstance_ID = DB.getSQLValueEx(pl.get_TrxName(), sqlExec, new Object[] { pl.getM_Product_ID() }); + if(M_AttributeSetInstance_ID>0) + pl.setM_AttributeSetInstance_ID(M_AttributeSetInstance_ID); + } + return ""; + } +} diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_ProductionValidator.java b/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_ProductionValidator.java new file mode 100644 index 0000000..7cd9851 --- /dev/null +++ b/andromeida.midsuit.project/src/andromedia/midsuit/validator/MID_ProductionValidator.java @@ -0,0 +1,36 @@ +package andromedia.midsuit.validator; + +import org.adempiere.base.event.IEventTopics; +import org.adempiere.exceptions.AdempiereException; +import org.compiere.model.MProduction; +import org.compiere.model.MProductionLine; +import org.compiere.model.PO; +import org.osgi.service.event.Event; + +public class MID_ProductionValidator { + public static String executeEvent(Event e, PO po) { + MProduction pl = (MProduction) po; + if (e.getTopic().equals(IEventTopics.DOC_BEFORE_COMPLETE)) + return beforeComplete(pl); + else if (e.getTopic().equals(IEventTopics.PO_BEFORE_NEW)) + return beforeNew(pl); + return ""; + } + + private static String beforeNew(MProduction p) { + if(p.getProductionQty().signum()==0) + throw new AdempiereException("Qty Production Wajib Lebih Besar dari 0 !"); + return ""; + } + + private static String beforeComplete(MProduction p) { + for(MProductionLine line : p.getLines()) { + if(line.getMovementQty().signum()==0) + throw new AdempiereException("Qty "+line.getM_Product().getName() + +"Wajib Lebih Besar dari 0 !"); + } + return ""; + } + +} +