From 7c106e3ddacc03a45879a118d5078e9dc5c81d23 Mon Sep 17 00:00:00 2001 From: Deepak Pansheriya Date: Mon, 17 Nov 2014 20:25:53 +0530 Subject: [PATCH] IDEMPIERE-2318: Handling NPE and providing meaning full error message --- migration/i2.1/oracle/201411170824_IDEMPIERE-2318.sql | 10 ++++++++++ .../i2.1/postgresql/201411170824_IDEMPIERE-2318.sql | 7 +++++++ org.adempiere.base/src/org/compiere/model/MInOut.java | 5 +++++ .../src/org/compiere/model/MInventoryLine.java | 4 ++++ .../src/org/compiere/model/MMovementLine.java | 4 ++++ org.adempiere.base/src/org/compiere/model/MOrder.java | 5 +++++ 6 files changed, 35 insertions(+) create mode 100644 migration/i2.1/oracle/201411170824_IDEMPIERE-2318.sql create mode 100644 migration/i2.1/postgresql/201411170824_IDEMPIERE-2318.sql diff --git a/migration/i2.1/oracle/201411170824_IDEMPIERE-2318.sql b/migration/i2.1/oracle/201411170824_IDEMPIERE-2318.sql new file mode 100644 index 0000000000..d70e47fcea --- /dev/null +++ b/migration/i2.1/oracle/201411170824_IDEMPIERE-2318.sql @@ -0,0 +1,10 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- Nov 17, 2014 6:27:47 PM IST +-- IDEMPIERE-2318: Handling NPE for Attribute not set on product and Batch level costing used +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created,Updated) VALUES ('E','No attribute set configured on product ',200328,'D','b8793354-b3b6-4106-8d8a-32d511d5b5d9','NoAttributeSet','Y',100,100,0,0,TO_DATE('2014-11-17 18:27:46','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2014-11-17 18:27:46','YYYY-MM-DD HH24:MI:SS')) +; + +SELECT register_migration_script('201411170824_IDEMPIERE-2318.sql') FROM dual +; \ No newline at end of file diff --git a/migration/i2.1/postgresql/201411170824_IDEMPIERE-2318.sql b/migration/i2.1/postgresql/201411170824_IDEMPIERE-2318.sql new file mode 100644 index 0000000000..46fcbe6d12 --- /dev/null +++ b/migration/i2.1/postgresql/201411170824_IDEMPIERE-2318.sql @@ -0,0 +1,7 @@ +-- Nov 17, 2014 6:27:47 PM IST +-- IDEMPIERE-2318: Handling NPE for Attribute not set on product and Batch level costing used +INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created,Updated) VALUES ('E','No attribute set configured on product ',200328,'D','b8793354-b3b6-4106-8d8a-32d511d5b5d9','NoAttributeSet','Y',100,100,0,0,TO_TIMESTAMP('2014-11-17 18:27:46','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2014-11-17 18:27:46','YYYY-MM-DD HH24:MI:SS')) +; + +SELECT register_migration_script('201411170824_IDEMPIERE-2318.sql') FROM dual +; \ No newline at end of file diff --git a/org.adempiere.base/src/org/compiere/model/MInOut.java b/org.adempiere.base/src/org/compiere/model/MInOut.java index f5f1418829..ab1be4ae26 100644 --- a/org.adempiere.base/src/org/compiere/model/MInOut.java +++ b/org.adempiere.base/src/org/compiere/model/MInOut.java @@ -1190,6 +1190,11 @@ public class MInOut extends X_M_InOut implements DocAction continue; if (product != null && product.isASIMandatory(isSOTrx())) { + if(product.getAttributeSet()==null){ + m_processMsg = "@NoAttributeSet@=" + product.getValue(); + return DocAction.STATUS_Invalid; + + } if (! product.getAttributeSet().excludeTableEntry(MInOutLine.Table_ID, isSOTrx())) { m_processMsg = "@M_AttributeSet_ID@ @IsMandatory@ (@Line@ #" + lines[i].getLine() + ", @M_Product_ID@=" + product.getValue() + ")"; diff --git a/org.adempiere.base/src/org/compiere/model/MInventoryLine.java b/org.adempiere.base/src/org/compiere/model/MInventoryLine.java index 0f70e8131c..e6bf530dd9 100644 --- a/org.adempiere.base/src/org/compiere/model/MInventoryLine.java +++ b/org.adempiere.base/src/org/compiere/model/MInventoryLine.java @@ -268,6 +268,10 @@ public class MInventoryLine extends X_M_InventoryLine MProduct product = MProduct.get(getCtx(), getM_Product_ID()); if (product != null && product.isASIMandatory(isSOTrx())) { + if(product.getAttributeSet()==null){ + log.saveError("NoAttributeSet", product.getValue()); + return false; + } if (! product.getAttributeSet().excludeTableEntry(MInventoryLine.Table_ID, isSOTrx())) { log.saveError("FillMandatory", Msg.getElement(getCtx(), COLUMNNAME_M_AttributeSetInstance_ID)); return false; diff --git a/org.adempiere.base/src/org/compiere/model/MMovementLine.java b/org.adempiere.base/src/org/compiere/model/MMovementLine.java index 05c063fc08..0b704e8a2e 100644 --- a/org.adempiere.base/src/org/compiere/model/MMovementLine.java +++ b/org.adempiere.base/src/org/compiere/model/MMovementLine.java @@ -211,6 +211,10 @@ public class MMovementLine extends X_M_MovementLine // Mandatory Instance MProduct product = getProduct(); if (getM_AttributeSetInstance_ID() == 0) { + if(product.getAttributeSet()==null){ + log.saveError("NoAttributeSet", product.getValue()); + return false; + } if (product != null && product.isASIMandatory(true)) { if (! product.getAttributeSet().excludeTableEntry(MMovementLine.Table_ID, true /*outgoing*/)) { log.saveError("FillMandatory", Msg.getElement(getCtx(), COLUMNNAME_M_AttributeSetInstance_ID)); diff --git a/org.adempiere.base/src/org/compiere/model/MOrder.java b/org.adempiere.base/src/org/compiere/model/MOrder.java index 2d4b64a396..ecedb713ce 100644 --- a/org.adempiere.base/src/org/compiere/model/MOrder.java +++ b/org.adempiere.base/src/org/compiere/model/MOrder.java @@ -1338,6 +1338,11 @@ public class MOrder extends X_C_Order implements DocAction if (line.getM_Product_ID() > 0 && line.getM_AttributeSetInstance_ID() == 0) { MProduct product = line.getProduct(); if (product.isASIMandatory(isSOTrx())) { + if(product.getAttributeSet()==null){ + m_processMsg = "@NoAttributeSet@=" + product.getValue(); + return DocAction.STATUS_Invalid; + + } if (! product.getAttributeSet().excludeTableEntry(MOrderLine.Table_ID, isSOTrx())) { StringBuilder msg = new StringBuilder("@M_AttributeSet_ID@ @IsMandatory@ (@Line@ #") .append(line.getLine())