diff --git a/migration/i9/oracle/202202092350_IDEMPIERE-5184.sql b/migration/i9/oracle/202202092350_IDEMPIERE-5184.sql new file mode 100644 index 0000000000..2984faf05c --- /dev/null +++ b/migration/i9/oracle/202202092350_IDEMPIERE-5184.sql @@ -0,0 +1,10 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-5184 cost adjustment - make currency mandatory +-- Feb 9, 2022, 11:52:39 PM AEDT +UPDATE AD_Field SET IsMandatory='Y', DefaultValue='@$C_Currency_ID@', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2022-02-09 23:52:39','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204145 +; + +SELECT Register_Migration_Script ('202202092350_IDEMPIERE-5184.sql') FROM DUAL +; diff --git a/migration/i9/postgresql/202202092350_IDEMPIERE-5184.sql b/migration/i9/postgresql/202202092350_IDEMPIERE-5184.sql new file mode 100644 index 0000000000..8491c9176c --- /dev/null +++ b/migration/i9/postgresql/202202092350_IDEMPIERE-5184.sql @@ -0,0 +1,7 @@ +-- IDEMPIERE-5184 cost adjustment - make currency mandatory +-- Feb 9, 2022, 11:52:39 PM AEDT +UPDATE AD_Field SET IsMandatory='Y', DefaultValue='@$C_Currency_ID@', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2022-02-09 23:52:39','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=204145 +; + +SELECT Register_Migration_Script ('202202092350_IDEMPIERE-5184.sql') FROM DUAL +; diff --git a/org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java b/org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java index cf09b43379..9a41416bda 100644 --- a/org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java +++ b/org.adempiere.base/src/org/compiere/acct/Doc_Inventory.java @@ -24,6 +24,7 @@ import java.util.logging.Level; import org.compiere.model.MAccount; import org.compiere.model.MAcctSchema; +import org.compiere.model.MClient; import org.compiere.model.MConversionRate; import org.compiere.model.MCost; import org.compiere.model.MCostDetail; @@ -84,7 +85,11 @@ public class Doc_Inventory extends Doc parentDocSubTypeInv = dt.getDocSubTypeInv(); // IDEMPIERE-3046 Add Currency Field to Cost Adjustment Window - if (!MDocType.DOCSUBTYPEINV_CostAdjustment.equals(parentDocSubTypeInv)) + if (MDocType.DOCSUBTYPEINV_CostAdjustment.equals(parentDocSubTypeInv)) + { + if (inventory.getC_Currency_ID() == 0) + setC_Currency_ID(MClient.get(getCtx()).getAcctSchema().getC_Currency_ID()); + } else { setC_Currency_ID (NO_CURRENCY); } diff --git a/org.adempiere.base/src/org/compiere/model/MInventory.java b/org.adempiere.base/src/org/compiere/model/MInventory.java index bd296dca52..325fb7401d 100644 --- a/org.adempiere.base/src/org/compiere/model/MInventory.java +++ b/org.adempiere.base/src/org/compiere/model/MInventory.java @@ -293,6 +293,14 @@ public class MInventory extends X_M_Inventory implements DocAction return false; } } + + String docSubTypeInv = MDocType.get(getC_DocType_ID()).getDocSubTypeInv(); + if (MDocType.DOCSUBTYPEINV_CostAdjustment.equals(docSubTypeInv)) + { + if (getC_Currency_ID() == 0) + setC_Currency_ID(MClient.get(getCtx()).getAcctSchema().getC_Currency_ID()); + } + return true; } // beforeSave diff --git a/org.idempiere.test/src/org/idempiere/test/base/MatchInvTest.java b/org.idempiere.test/src/org/idempiere/test/base/MatchInvTest.java index 1ba3c1c7b3..a8e487d30e 100644 --- a/org.idempiere.test/src/org/idempiere/test/base/MatchInvTest.java +++ b/org.idempiere.test/src/org/idempiere/test/base/MatchInvTest.java @@ -415,6 +415,17 @@ public class MatchInvTest extends AbstractTestCase { mulchCost = MCost.getCurrentCost(mulch, 0, getTrxName()).setScale(as.getCostingPrecision(), RoundingMode.HALF_UP); assertEquals(endProductCost, mulchCost, "Cost not adjusted: " + mulchCost.toPlainString()); + //test converted cost for all schemas + MAcctSchema[] schemas = MAcctSchema.getClientAcctSchema(Env.getCtx(), getAD_Client_ID()); + for (int i = 0; i < schemas.length; i++) { + BigDecimal expected = MConversionRate.convert (Env.getCtx(), + mulchCost, as.getC_Currency_ID(), schemas[i].getC_Currency_ID(), + inventory.getMovementDate(), 0, getAD_Client_ID(), getAD_Org_ID(), true); + BigDecimal mulchCostConv = MCost.getCurrentCost(mulch, 0, schemas[i], schemas[i].getAD_Org_ID(), MAcctSchema.COSTINGMETHOD_StandardCosting, + BigDecimal.ONE, 0, true, getTrxName()).setScale(schemas[i].getCostingPrecision(), RoundingMode.HALF_UP); + assertEquals(expected, mulchCostConv, "Converted Cost for schema incorrect: " + schemas[i].toString()+ " - " + mulchCostConv.toPlainString()); + } + MOrder order = new MOrder(Env.getCtx(), 0, getTrxName()); order.setBPartner(bpartner); order.setIsSOTrx(false);