diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/callout/MID_CalloutRequisitionLine.java b/andromeida.midsuit.project/src/andromedia/midsuit/callout/MID_CalloutRequisitionLine.java new file mode 100644 index 0000000..9012b86 --- /dev/null +++ b/andromeida.midsuit.project/src/andromedia/midsuit/callout/MID_CalloutRequisitionLine.java @@ -0,0 +1,36 @@ +package andromedia.midsuit.callout; + +import java.math.BigDecimal; +import java.util.Properties; + +import org.adempiere.base.IColumnCallout; +import org.compiere.model.CalloutEngine; +import org.compiere.model.GridField; +import org.compiere.model.GridTab; +import org.compiere.model.MRequisitionLine; +import org.compiere.model.MTax; +import org.compiere.util.Env; + +public class MID_CalloutRequisitionLine extends CalloutEngine implements IColumnCallout{ + + @Override + public String start(Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value, Object oldValue) { + if(mField.getColumnName().equals(MRequisitionLine.COLUMNNAME_Qty) + || mField.getColumnName().equals(MRequisitionLine.COLUMNNAME_PriceActual)) + setTax(ctx, WindowNo, mTab, mField, value, oldValue); + return ""; + } + + private String setTax(Properties ctx, int windowNo, GridTab mTab, GridField mField, Object value, Object oldValue) { + int C_Tax_ID = (int) mTab.getValue("C_Tax_ID"); + if(C_Tax_ID==0) return ""; + MTax tax = MTax.get(ctx, C_Tax_ID); + + BigDecimal calculatedTax = (BigDecimal) mTab.getValue(MRequisitionLine.COLUMNNAME_LineNetAmt); + calculatedTax = calculatedTax.multiply(tax.getRate()).divide(Env.ONEHUNDRED, 2, BigDecimal.ROUND_HALF_UP); + + mTab.setValue("TaxAmt", calculatedTax); + return ""; + } + +} diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_CalloutFactory.java b/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_CalloutFactory.java index 9f2b022..e69bba1 100644 --- a/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_CalloutFactory.java +++ b/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_CalloutFactory.java @@ -14,6 +14,7 @@ import org.compiere.model.MOrder; import org.compiere.model.MProduction; import org.compiere.model.MProductionLine; import org.compiere.model.X_C_OrderLine; +import org.compiere.model.X_M_RequisitionLine; import andromedia.midsuit.callout.MID_CalloutAnalysisQC; import andromedia.midsuit.callout.MID_CalloutInOut; @@ -25,6 +26,7 @@ import andromedia.midsuit.callout.MID_CalloutOrder; import andromedia.midsuit.callout.MID_CalloutOrderLineMA; import andromedia.midsuit.callout.MID_CalloutProduction; import andromedia.midsuit.callout.MID_CalloutProductionLine; +import andromedia.midsuit.callout.MID_CalloutRequisitionLine; import andromedia.midsuit.callout.MID_CalloutRequisitionTrxLine; import andromedia.midsuit.model.MID_Analysis; import andromedia.midsuit.model.X_C_OrderLineMA; @@ -58,6 +60,8 @@ public class MID_CalloutFactory implements IColumnCalloutFactory{ list.add(new MID_CalloutInventoryLineMA()); if(tableName.equals(X_C_OrderLineMA.Table_Name)) list.add(new MID_CalloutOrderLineMA()); + if(tableName.equals(X_M_RequisitionLine.Table_Name)) + list.add(new MID_CalloutRequisitionLine()); return list != null ? list.toArray(new IColumnCallout[0]) : new IColumnCallout[0]; } diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_ModelFactory.java b/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_ModelFactory.java index 28fbe73..e2f9033 100644 --- a/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_ModelFactory.java +++ b/andromeida.midsuit.project/src/andromedia/midsuit/factory/MID_ModelFactory.java @@ -17,8 +17,10 @@ import andromedia.midsuit.model.MID_MBillingList; import andromedia.midsuit.model.MID_MBillingListLine; import andromedia.midsuit.model.MID_MDDOrder; import andromedia.midsuit.model.MID_MDDOrderLine; +import andromedia.midsuit.model.MID_MDepreciationEntry; import andromedia.midsuit.model.MID_MProductionConfirm; import andromedia.midsuit.model.MID_MRequisition; +import andromedia.midsuit.model.MID_MRequisitionLine; import andromedia.midsuit.model.MID_MRequisitionTrx; import andromedia.midsuit.model.MID_MRequisitionTrxLine; import andromedia.midsuit.model.MID_PPO; @@ -46,6 +48,8 @@ public class MID_ModelFactory implements IModelFactory{ mapTableModels.put(MID_PPOLine.Table_Name, "andromedia.midsuit.model.MID_PPOLine"); mapTableModels.put(X_C_OrderLineMA.Table_Name, "andromedia.midsuit.model.X_C_OrderLineMA"); mapTableModels.put(MID_MRequisition.Table_Name, "andromedia.midsuit.model.MID_MRequisition"); + mapTableModels.put(MID_MRequisitionLine.Table_Name, "andromedia.midsuit.model.MID_MRequisitionLine"); + mapTableModels.put(MID_MDepreciationEntry.Table_Name, "andromedia.midsuit.model.MID_MDepreciationEntry"); } @Override diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MDepreciationEntry.java b/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MDepreciationEntry.java new file mode 100644 index 0000000..e87b574 --- /dev/null +++ b/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MDepreciationEntry.java @@ -0,0 +1,64 @@ +package andromedia.midsuit.model; + +import java.sql.ResultSet; +import java.util.Properties; + +import org.compiere.model.MDepreciationEntry; +import org.compiere.process.DocAction; +import org.compiere.process.DocOptions; + +public class MID_MDepreciationEntry extends MDepreciationEntry implements DocOptions{ + + /** + * + */ + private static final long serialVersionUID = -1013070483426302942L; + + public MID_MDepreciationEntry(Properties ctx, int A_Depreciation_Entry_ID, String trxName) { + super(ctx, A_Depreciation_Entry_ID, trxName); + // TODO Auto-generated constructor stub + } + public MID_MDepreciationEntry(Properties ctx, ResultSet rs, String trxName) { + super(ctx, rs, trxName); + // TODO Auto-generated constructor stub + } + + @Override + public boolean voidIt() { + if(getDocStatus().equals(DocAction.STATUS_Completed)){ + reActivateIt(); + } + + setProcessed(true); + setDocStatus(DocAction.STATUS_Voided); + setDocAction(DocAction.ACTION_None); + return true; + } + + @Override + public int customizeValidActions(String docStatus, Object processing, + String orderType, String isSOTrx, int AD_Table_ID, + String[] docAction, String[] options, int index) { + for (int i = 0; i < options.length; i++) { + options[i] = null; + } + index = 0; + if (docStatus.equals(DocAction.STATUS_Drafted)) { + options[index++] = DocAction.ACTION_Complete; + options[index++] = DocAction.ACTION_Void; + } else if (docStatus.equals(DocAction.STATUS_InProgress)) { + options[index++] = DocAction.ACTION_Complete; + options[index++] = DocAction.ACTION_Void; + } else if (docStatus.equals(DocAction.STATUS_Completed)) { + options[index++] = DocAction.ACTION_ReActivate; + options[index++] = DocAction.ACTION_Void; + } else if (docStatus.equals(DocAction.STATUS_Invalid)) { + options[index++] = DocAction.ACTION_Complete; + options[index++] = DocAction.ACTION_Void; + } + return index; + } + + + +} diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MRequisition.java b/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MRequisition.java index 63808f2..79d2afc 100644 --- a/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MRequisition.java +++ b/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MRequisition.java @@ -1,11 +1,13 @@ package andromedia.midsuit.model; +import java.math.BigDecimal; import java.sql.ResultSet; import java.util.Properties; import org.compiere.model.MRequisition; import org.compiere.process.DocAction; import org.compiere.process.DocOptions; +import org.compiere.util.DB; public class MID_MRequisition extends MRequisition implements DocOptions{ @@ -23,6 +25,16 @@ public class MID_MRequisition extends MRequisition implements DocOptions{ // TODO Auto-generated constructor stub } + public boolean recalculateTax() { + BigDecimal totalTaxAmt = DB.getSQLValueBD(get_TrxName(), "SELECT COALESCE(SUM(TaxAmt),0) FROM M_RequisitionLine WHERE M_Requisition_ID =?", new Object[] { getM_Requisition_ID() }); + BigDecimal totalLines = DB.getSQLValueBD(get_TrxName(), "SELECT COALESCE(SUM(LineNetAmt),0) FROM M_RequisitionLine WHERE M_Requisition_ID =?", new Object[] { getM_Requisition_ID() }); + setTotalLines(totalLines); + set_Value("TaxAmt", totalTaxAmt); + set_Value("GrandTotal", totalLines.add(totalTaxAmt)); + saveEx(); + return true; + } + @Override public boolean reActivateIt() { setDocStatus(DocAction.STATUS_InProgress); diff --git a/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MRequisitionLine.java b/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MRequisitionLine.java new file mode 100644 index 0000000..e480427 --- /dev/null +++ b/andromeida.midsuit.project/src/andromedia/midsuit/model/MID_MRequisitionLine.java @@ -0,0 +1,34 @@ +package andromedia.midsuit.model; + +import java.sql.ResultSet; +import java.util.Properties; + +import org.compiere.model.MRequisition; +import org.compiere.model.MRequisitionLine; + +public class MID_MRequisitionLine extends MRequisitionLine{ + + /** + * + */ + private static final long serialVersionUID = 978479235069420619L; + public MID_MRequisitionLine(MRequisition req) { + super(req); + // TODO Auto-generated constructor stub + } + public MID_MRequisitionLine(Properties ctx, int M_RequisitionLine_ID, String trxName) { + super(ctx, M_RequisitionLine_ID, trxName); + // TODO Auto-generated constructor stub + } + public MID_MRequisitionLine(Properties ctx, ResultSet rs, String trxName) { + super(ctx, rs, trxName); + // TODO Auto-generated constructor stub + } + + @Override + protected boolean afterSave(boolean newRecord, boolean success) { + MID_MRequisition requisition = new MID_MRequisition(getCtx(), getM_Requisition_ID(), get_TrxName()); +// super.afterSave(newRecord, success); + return requisition.recalculateTax(); + } +}