From 055c6143363f66c3b57311ae6dd2fa783d213f55 Mon Sep 17 00:00:00 2001 From: hengsin Date: Tue, 7 Dec 2021 20:12:52 +0800 Subject: [PATCH] IDEMPIERE-5069 Completion of Shipment for Close Order produce inconsistent order line data (#1030) --- .../oracle/202112060845_IDEMPIERE-5069.sql | 23 +++++++++++++++++ .../202112060845_IDEMPIERE-5069.sql | 20 +++++++++++++++ .../src/org/compiere/model/MInOut.java | 25 +++++++++++++++++++ .../src/org/compiere/model/MOrder.java | 21 ++++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 migration/i8.2z/oracle/202112060845_IDEMPIERE-5069.sql create mode 100644 migration/i8.2z/postgresql/202112060845_IDEMPIERE-5069.sql diff --git a/migration/i8.2z/oracle/202112060845_IDEMPIERE-5069.sql b/migration/i8.2z/oracle/202112060845_IDEMPIERE-5069.sql new file mode 100644 index 0000000000..45f773613d --- /dev/null +++ b/migration/i8.2z/oracle/202112060845_IDEMPIERE-5069.sql @@ -0,0 +1,23 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-5069 Completion of Shipment for Close Order produce inconsistent order line data +-- Dec 6, 2021, 1:06:27 PM MYT +INSERT INTO AD_Message (MsgType,MsgText,MsgTip,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Shipment/Material Receipt is in progress','Please process all shipment/material receipt documents for an order before closing it',0,0,'Y',TO_DATE('2021-12-06 13:06:26','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2021-12-06 13:06:26','YYYY-MM-DD HH24:MI:SS'),100,200722,'MInOutInProgress','D','c4e61fb0-1ac6-4a51-bb83-1435ce66bf4f') +; + +-- Dec 6, 2021, 1:14:37 PM MYT +INSERT INTO AD_Message (MsgType,MsgText,MsgTip,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Order has been closed','You can not ship or receive on a closed order',0,0,'Y',TO_DATE('2021-12-06 13:14:36','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2021-12-06 13:14:36','YYYY-MM-DD HH24:MI:SS'),100,200723,'OrderClosed','D','13f415ff-8347-4751-8480-f7165ace0a63') +; + +-- Dec 6, 2021, 4:14:25 PM MYT +UPDATE AD_Message SET MsgText='Order has been closed.', MsgTip=NULL,Updated=TO_DATE('2021-12-06 16:14:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200723 +; + +-- Dec 6, 2021, 4:14:32 PM MYT +UPDATE AD_Message SET MsgText='Shipment/Material Receipt is in progress.', MsgTip=NULL,Updated=TO_DATE('2021-12-06 16:14:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200722 +; + +SELECT register_migration_script('202112060845_IDEMPIERE-5069.sql') FROM dual +; + diff --git a/migration/i8.2z/postgresql/202112060845_IDEMPIERE-5069.sql b/migration/i8.2z/postgresql/202112060845_IDEMPIERE-5069.sql new file mode 100644 index 0000000000..f5ba52ed0f --- /dev/null +++ b/migration/i8.2z/postgresql/202112060845_IDEMPIERE-5069.sql @@ -0,0 +1,20 @@ +-- IDEMPIERE-5069 Completion of Shipment for Close Order produce inconsistent order line data +-- Dec 6, 2021, 1:06:27 PM MYT +INSERT INTO AD_Message (MsgType,MsgText,MsgTip,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Shipment/Material Receipt is in progress','Please process all shipment/material receipt documents for an order before closing it',0,0,'Y',TO_TIMESTAMP('2021-12-06 13:06:26','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2021-12-06 13:06:26','YYYY-MM-DD HH24:MI:SS'),100,200722,'MInOutInProgress','D','c4e61fb0-1ac6-4a51-bb83-1435ce66bf4f') +; + +-- Dec 6, 2021, 1:14:37 PM MYT +INSERT INTO AD_Message (MsgType,MsgText,MsgTip,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,EntityType,AD_Message_UU) VALUES ('E','Order has been closed','You can not ship or receive on a closed order',0,0,'Y',TO_TIMESTAMP('2021-12-06 13:14:36','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2021-12-06 13:14:36','YYYY-MM-DD HH24:MI:SS'),100,200723,'OrderClosed','D','13f415ff-8347-4751-8480-f7165ace0a63') +; + +-- Dec 6, 2021, 4:14:25 PM MYT +UPDATE AD_Message SET MsgText='Order has been closed.', MsgTip=NULL,Updated=TO_TIMESTAMP('2021-12-06 16:14:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200723 +; + +-- Dec 6, 2021, 4:14:32 PM MYT +UPDATE AD_Message SET MsgText='Shipment/Material Receipt is in progress.', MsgTip=NULL,Updated=TO_TIMESTAMP('2021-12-06 16:14:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200722 +; + +SELECT register_migration_script('202112060845_IDEMPIERE-5069.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/compiere/model/MInOut.java b/org.adempiere.base/src/org/compiere/model/MInOut.java index 49136f9a05..07e8cacc50 100644 --- a/org.adempiere.base/src/org/compiere/model/MInOut.java +++ b/org.adempiere.base/src/org/compiere/model/MInOut.java @@ -1132,6 +1132,31 @@ public class MInOut extends X_M_InOut implements DocAction, IDocsPostProcess return DocAction.STATUS_Invalid; } + // Validate Close Order + if (!isReversal()) + { + StringBuilder sql = new StringBuilder("SELECT DISTINCT o.DocumentNo FROM M_InOut io ") + .append("JOIN M_InOutLine iol ON (io.M_InOut_ID=iol.M_InOut_ID) ") + .append("JOIN C_OrderLine ol ON (iol.C_OrderLine_ID=ol.C_OrderLine_ID) ") + .append("JOIN C_Order o ON (ol.C_Order_ID=o.C_Order_ID) ") + .append("WHERE o.DocStatus='CL' AND (ol.M_Product_ID > 0 OR ol.C_Charge_ID > 0) AND iol.MovementQty != 0 ") + .append("AND ol.IsActive='Y' AND iol.IsActive='Y' ") + .append("AND io.M_InOut_ID=? "); + List> closeOrders = DB.getSQLArrayObjectsEx(get_TrxName(), sql.toString(), getM_InOut_ID()); + if (closeOrders != null && closeOrders.size() > 0) + { + m_processMsg = Msg.getMsg(p_ctx,"OrderClosed")+" ("; + for(int i = 0; i< closeOrders.size(); i++) + { + if (i > 0) + m_processMsg += ", "; + m_processMsg += closeOrders.get(i).get(0).toString(); + } + m_processMsg += ")"; + return DocAction.STATUS_Invalid; + } + } + // Credit Check if (isSOTrx() && !isReversal() && !isCustomerReturn()) { diff --git a/org.adempiere.base/src/org/compiere/model/MOrder.java b/org.adempiere.base/src/org/compiere/model/MOrder.java index c972e27080..7ae190b5b8 100644 --- a/org.adempiere.base/src/org/compiere/model/MOrder.java +++ b/org.adempiere.base/src/org/compiere/model/MOrder.java @@ -2594,6 +2594,27 @@ public class MOrder extends X_C_Order implements DocAction if (m_processMsg != null) return false; + // Validate In Progress MInOUt + StringBuilder sql = new StringBuilder("SELECT DISTINCT io.DocumentNo FROM M_InOut io ") + .append("JOIN M_InOutLine iol ON (io.M_InOut_ID=iol.M_InOut_ID) ") + .append("JOIN C_OrderLine ol ON (iol.C_OrderLine_ID=ol.C_OrderLine_ID) ") + .append("WHERE io.DocStatus='IP' AND ol.QtyOrdered != 0 AND (ol.M_Product_ID > 0 OR ol.C_Charge_ID > 0) ") + .append("AND ol.IsActive='Y' AND iol.IsActive='Y' ") + .append("AND ol.C_Order_ID=? "); + List> openShipments = DB.getSQLArrayObjectsEx(get_TrxName(), sql.toString(), getC_Order_ID()); + if (openShipments != null && openShipments.size() > 0) + { + m_processMsg = Msg.getMsg(p_ctx,"MInOutInProgress")+" ("; + for(int i = 0; i< openShipments.size(); i++) + { + if (i > 0) + m_processMsg += ", "; + m_processMsg += openShipments.get(i).get(0).toString(); + } + m_processMsg += ")"; + return false; + } + // Close Not delivered Qty - SO/PO MOrderLine[] lines = getLines(true, MOrderLine.COLUMNNAME_M_Product_ID); for (int i = 0; i < lines.length; i++)