# HG changeset patch
# User Pandeeswari Ramakrishnan <pandeeswari.ramakrishnan@openbravo.com>
# Date 1375206102 -19800
# Node ID 2f1076f7658abe7afe6c531af8f86586bb74c68d
# Parent  ade9887c69071e1e4a4a31e95088a5953499b2cd
Fixes Issue 24427: Releasing reservations, if there are errors, they don't give enough information to the user

diff -r ade9887c6907 -r 2f1076f7658a src-db/database/model/functions/M_RESERVATION_CONSUMPTION.xml
--- a/src-db/database/model/functions/M_RESERVATION_CONSUMPTION.xml	Tue Jul 30 14:45:59 2013 +0530
+++ b/src-db/database/model/functions/M_RESERVATION_CONSUMPTION.xml	Tue Jul 30 23:11:42 2013 +0530
@@ -34,7 +34,7 @@
 * under the License.
 * The Original Code is Openbravo ERP.
 * The Initial Developer of the Original Code is Openbravo SLU
-* All portions are Copyright (C) 2012 Openbravo SLU
+* All portions are Copyright (C) 2012-2013 Openbravo SLU
 * All Rights Reserved.
 * Contributor(s):  ______________________________________.
 ************************************************************************/
@@ -68,7 +68,10 @@
   v_newreservedqty      NUMBER;
   v_availablestock      NUMBER;
   v_dummy               VARCHAR2(2000);
-  
+  v_attr_description    VARCHAR2(255);
+  v_product_value       VARCHAR2(40);
+  v_locator_value       VARCHAR2(40);
+  v_uom_value           VARCHAR2(3);
 
   TYPE RECORD IS REF CURSOR;
   cur_reserved_stock       RECORD;
@@ -87,8 +90,32 @@
       r.m_warehouse_id, r.m_locator_id, r.m_attributesetinstance_id, r.res_status;
   v_this_noalloc := v_this_reservedqty - v_this_allocated;
 
+  SELECT value
+    INTO v_product_value
+  FROM M_Product
+  WHERE M_Product_ID = v_product_id;
+
+  IF(p_attributesetinstance_id IS NOT NULL) THEN
+    SELECT description
+      INTO v_attr_description
+    FROM M_AttributeSetInstance
+    WHERE M_AttributeSetInstance_ID = p_attributesetinstance_id;
+  END IF;
+
+  SELECT uomsymbol
+    INTO v_uom_value
+  FROM C_Uom
+  WHERE C_Uom_ID = v_uom_id;
+
+  IF (p_locator_id IS NOT NULL) THEN
+    SELECT value
+      INTO v_locator_value
+    FROM M_Locator
+    WHERE M_Locator_ID = p_locator_id;
+  END IF;
+    
   IF (v_res_status = 'HO') THEN
-    RAISE_APPLICATION_ERROR(-20000, '@CannotConsumeHoldReservation@');
+    RAISE_APPLICATION_ERROR(-20000, '@CannotConsumeHoldReservation@'||' @of@'||' @Product@: '||v_product_value||', @AttributeSetInstance@: '||COALESCE(v_attr_description, '-')||', @UOM@: '||v_uom_value||' @And@'||' @Locator@: '||COALESCE(v_locator_value, '-'));
   END IF;
 
   SELECT sd.qtyonhand, sd.m_storage_detail_id, loc.m_warehouse_id
@@ -116,25 +143,25 @@
   IF (COALESCE(v_dim_warehouse_id, v_warehouse_id) != v_warehouse_id
       OR COALESCE(v_dim_locator_id, p_locator_id) != p_locator_id
       OR COALESCE(v_dim_asi_id, p_attributesetinstance_id) != p_attributesetinstance_id) THEN
-    RAISE_APPLICATION_ERROR(-20000, '@WrongStockDimensionMismatch@');
+    RAISE_APPLICATION_ERROR(-20000, '@WrongStockDimensionMismatch@'||' @of@'||' @Product@: '||v_product_value||', @AttributeSetInstance@: '||COALESCE(v_attr_description, '-')||', @UOM@: '||v_uom_value||' @And@'||' @Locator@: '||COALESCE(v_locator_value, '-'));
   END IF;
 
   v_pendingtorelease := p_qty;
   IF (v_pendingtorelease > v_this_reservedqty - v_this_releasedqty) THEN
     v_pendingtorelease := v_this_reservedqty - v_this_releasedqty;
     p_result := 2;
-    p_message := '@MoreQuantityToReleaseThanPending@';
+    p_message := '@MoreQuantityToReleaseThanPending@'||' @of@'||' @Product@: '||v_product_value||', @AttributeSetInstance@: '||COALESCE(v_attr_description, '-')|| ', @UOM@: '||v_uom_value||' @And@'||' @Locator@: '||COALESCE(v_locator_value, '-');
   END IF;
 
   -- Check that quantity to release is lower than available quantity considering other reservations allocated stock.
   IF (v_pendingtorelease > v_stock_onhand - (v_stock_alloc - v_this_sd_alloc)) THEN
-    RAISE_APPLICATION_ERROR(-20000, '@CannotConsumeAllStock@');
+    RAISE_APPLICATION_ERROR(-20000, '@CannotConsumeAllStock@'||' @of@'||' @Product@: '||v_product_value||', @AttributeSetInstance@: '||COALESCE(v_attr_description, '-')|| ', @UOM@: '||v_uom_value||' @And@'||' @Locator@: '||COALESCE(v_locator_value, '-'));
   END IF;
 
   IF (v_pendingtorelease > v_this_sd_alloc + v_this_noalloc) THEN
     -- The quantity to release is higher than the currently allocated stock with given dimensions and the no allocated
     -- reserved stock.
-    RAISE_APPLICATION_ERROR(-20000, '@CannotModifyAllocatedReserve@');
+    RAISE_APPLICATION_ERROR(-20000, '@CannotModifyAllocatedReserve@'||' @of@'||' @Product@: '||v_product_value||', @AttributeSetInstance@: '||COALESCE(v_attr_description, '-')|| ', @UOM@: '||v_uom_value||' @And@'||' @Locator@: '||COALESCE(v_locator_value, '-'));
   END IF;
   
   IF (v_pendingtorelease <= v_this_sd_alloc + v_this_sd_noalloc) THEN
@@ -330,7 +357,7 @@
     AND quantity = 0;
 
   IF (v_pendingtorelease > 0) THEN
-    RAISE_APPLICATION_ERROR(-20000, '@CannotConsumeAllStock@');
+    RAISE_APPLICATION_ERROR(-20000, '@CannotConsumeAllStock@'||' @of@'||' @Product@: '||v_product_value||', @AttributeSetInstance@: '||COALESCE(v_attr_description, '-')||', @UOM@: '||v_uom_value||' @And@'||' @Locator@: '||COALESCE(v_locator_value, '-'));
   END IF;
 EXCEPTION
 WHEN OTHERS THEN
diff -r ade9887c6907 -r 2f1076f7658a src-db/database/model/functions/M_RESERVE_STOCK_MANUAL.xml
--- a/src-db/database/model/functions/M_RESERVE_STOCK_MANUAL.xml	Tue Jul 30 14:45:59 2013 +0530
+++ b/src-db/database/model/functions/M_RESERVE_STOCK_MANUAL.xml	Tue Jul 30 23:11:42 2013 +0530
@@ -34,7 +34,7 @@
 * under the License.
 * The Original Code is Openbravo ERP.
 * The Initial Developer of the Original Code is Openbravo SLU
-* All portions are Copyright (C) 2012 Openbravo SLU
+* All portions are Copyright (C) 2012-2013 Openbravo SLU
 * All Rights Reserved.
 * Contributor(s):  ______________________________________.
 ************************************************************************/
@@ -51,10 +51,18 @@
   v_locator_id              VARCHAR2(32);
   v_asi_id                  VARCHAR2(32);
   v_poline_id               VARCHAR2(32);
+  v_reserve_attr_id         VARCHAR2(32);
+  v_reserve_product_id      VARCHAR2(32);
+  v_reserve_locator_id      VARCHAR2(32);
+  v_reserve_uom_id          VARCHAR2(32);
+  v_attr_description        VARCHAR2(255);
+  v_product_value           VARCHAR2(40);
+  v_locator_value           VARCHAR2(40);
+  v_uom_value               VARCHAR2(3);
   v_count                   NUMBER;
 BEGIN
-  SELECT ad_client_id, ad_org_id
-    INTO v_client_id, v_org_id
+  SELECT ad_client_id, ad_org_id, m_product_id, c_uom_id, m_locator_id, m_attributesetinstance_id
+    INTO v_client_id, v_org_id, v_reserve_product_id, v_reserve_uom_id, v_reserve_locator_id, v_reserve_attr_id
   FROM m_reservation
   WHERE m_reservation_id = p_reservation_id;
   IF (p_type_id = 'SD') THEN
@@ -68,7 +76,30 @@
       AND sd.m_locator_id = COALESCE(res.m_locator_id, sd.m_locator_id)
       AND loc.m_warehouse_id = COALESCE(res.m_warehouse_id, loc.m_warehouse_id);
     IF (v_count = 0) THEN
-      RAISE_APPLICATION_ERROR(-20000, '@GivenStorageDetailDoesNotMatchReservationRequirements@');
+      SELECT value
+        INTO v_product_value
+      FROM M_Product
+      WHERE M_Product_ID = v_reserve_product_id;
+
+      IF(v_reserve_attr_id IS NOT NULL) THEN
+        SELECT description
+          INTO v_attr_description
+        FROM M_AttributeSetInstance
+        WHERE M_AttributeSetInstance_ID = v_reserve_attr_id;
+      END IF;
+
+      SELECT uomsymbol
+        INTO v_uom_value
+      FROM C_Uom
+      WHERE C_Uom_ID = v_reserve_uom_id;
+
+      IF (v_reserve_locator_id IS NOT NULL) THEN
+        SELECT value
+          INTO v_locator_value
+        FROM M_Locator
+        WHERE M_Locator_ID = v_reserve_locator_id;
+      END IF;
+      RAISE_APPLICATION_ERROR(-20000, '@GivenStorageDetailDoesNotMatchReservationRequirements@' || ' @of@' || ' @Product@: ' || v_product_value || ', @AttributeSetInstance@: ' || COALESCE(v_attr_description, '-') || ', @UOM@: ' || v_uom_value || ' @And@'||' @Locator@: ' || COALESCE(v_locator_value, '-'));
     END IF;
 
     SELECT m_locator_id, m_attributesetinstance_id
diff -r ade9887c6907 -r 2f1076f7658a src-db/database/model/triggers/M_TRANSACTION_TRG2.xml
--- a/src-db/database/model/triggers/M_TRANSACTION_TRG2.xml	Tue Jul 30 14:45:59 2013 +0530
+++ b/src-db/database/model/triggers/M_TRANSACTION_TRG2.xml	Tue Jul 30 23:11:42 2013 +0530
@@ -15,13 +15,18 @@
 * under the License.
 * The Original Code is Openbravo ERP.
 * The Initial Developer of the Original Code is Openbravo SLU
-* All portions are Copyright (C) 2012 Openbravo SLU
+* All portions are Copyright (C) 2012-2013 Openbravo SLU
 * All Rights Reserved.
 * Contributor(s):  ______________________________________.
 ************************************************************************/
   v_onhand      NUMBER;
   v_reserved    NUMBER;
   v_count       NUMBER;
+  v_product     VARCHAR(60);
+  v_attr_description    VARCHAR2(255);
+  v_product_value       VARCHAR2(40);
+  v_locator_value       VARCHAR2(40);
+  v_uom_value           VARCHAR2(3);
 
 BEGIN
   IF (AD_isTriggerEnabled() = 'N') THEN RETURN;
@@ -57,7 +62,30 @@
           AND rs.m_locator_id = :NEW.m_locator_id
         GROUP BY sd.qtyonhand, sd.m_storage_detail_id;
         IF (v_onhand - v_reserved < ABS(:NEW.movementqty)) THEN
-          RAISE_APPLICATION_ERROR(-20000, '@CannotTakeOutReservedStock@');
+	  SELECT value
+            INTO v_product_value
+          FROM M_Product
+          WHERE M_Product_ID = :NEW.m_product_id;
+
+          IF(:NEW.m_attributesetinstance_id IS NOT NULL) THEN
+            SELECT description
+              INTO v_attr_description
+            FROM M_AttributeSetInstance
+            WHERE M_AttributeSetInstance_ID = :NEW.m_attributesetinstance_id;
+          END IF;
+
+          SELECT uomsymbol
+            INTO v_uom_value
+          FROM C_Uom
+          WHERE C_Uom_ID = :NEW.c_uom_id;
+
+          IF (:NEW.m_locator_id IS NOT NULL) THEN
+            SELECT value
+              INTO v_locator_value
+            FROM M_Locator
+            WHERE M_Locator_ID = :NEW.m_locator_id;
+          END IF;
+          RAISE_APPLICATION_ERROR(-20000, '@CannotTakeOutReservedStock@' || ' @of@' || ' @Product@: ' || v_product_value || ', @AttributeSetInstance@: ' || COALESCE(v_attr_description, '-') || ', @UOM@: ' || v_uom_value || ' @And@'||' @Locator@: ' || COALESCE(v_locator_value, '-'));
         END IF;
       END IF;
     END IF;
diff -r ade9887c6907 -r 2f1076f7658a src-db/database/sourcedata/AD_MESSAGE.xml
--- a/src-db/database/sourcedata/AD_MESSAGE.xml	Tue Jul 30 14:45:59 2013 +0530
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml	Tue Jul 30 23:11:42 2013 +0530
@@ -15958,6 +15958,18 @@
 <!--064ADCDC0E794F6C9608ECFDC511A1F9-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--064ADCDC0E794F6C9608ECFDC511A1F9--></AD_MESSAGE>
 
+<!--078F6ABDBDBA48F2887C3108397A2262--><AD_MESSAGE>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <AD_MESSAGE_ID><![CDATA[078F6ABDBDBA48F2887C3108397A2262]]></AD_MESSAGE_ID>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <VALUE><![CDATA[UOM]]></VALUE>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <MSGTEXT><![CDATA[UOM]]></MSGTEXT>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <MSGTYPE><![CDATA[I]]></MSGTYPE>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--078F6ABDBDBA48F2887C3108397A2262-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--078F6ABDBDBA48F2887C3108397A2262--></AD_MESSAGE>
+
 <!--07E963D65B7F47BE81150448C5019E0D--><AD_MESSAGE>
 <!--07E963D65B7F47BE81150448C5019E0D-->  <AD_MESSAGE_ID><![CDATA[07E963D65B7F47BE81150448C5019E0D]]></AD_MESSAGE_ID>
 <!--07E963D65B7F47BE81150448C5019E0D-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -23168,6 +23180,18 @@
 <!--CEF696AFAED34A0A916D825BEA97C2B5-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--CEF696AFAED34A0A916D825BEA97C2B5--></AD_MESSAGE>
 
+<!--CF204B61D0D44842B7F21039770B83ED--><AD_MESSAGE>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <AD_MESSAGE_ID><![CDATA[CF204B61D0D44842B7F21039770B83ED]]></AD_MESSAGE_ID>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <VALUE><![CDATA[Locator]]></VALUE>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <MSGTEXT><![CDATA[Locator]]></MSGTEXT>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <MSGTYPE><![CDATA[I]]></MSGTYPE>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--CF204B61D0D44842B7F21039770B83ED-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--CF204B61D0D44842B7F21039770B83ED--></AD_MESSAGE>
+
 <!--CF72BCDFFF044C1D8007B907D8B64DF3--><AD_MESSAGE>
 <!--CF72BCDFFF044C1D8007B907D8B64DF3-->  <AD_MESSAGE_ID><![CDATA[CF72BCDFFF044C1D8007B907D8B64DF3]]></AD_MESSAGE_ID>
 <!--CF72BCDFFF044C1D8007B907D8B64DF3-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -23674,6 +23698,18 @@
 <!--DC799265A3BA4F738EBCF717ADE340DD-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--DC799265A3BA4F738EBCF717ADE340DD--></AD_MESSAGE>
 
+<!--DC8ED25E9CB74C86AA086B5231AEF421--><AD_MESSAGE>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <AD_MESSAGE_ID><![CDATA[DC8ED25E9CB74C86AA086B5231AEF421]]></AD_MESSAGE_ID>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <VALUE><![CDATA[AttributeSetInstance]]></VALUE>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <MSGTEXT><![CDATA[Attribute Set Instance]]></MSGTEXT>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <MSGTYPE><![CDATA[I]]></MSGTYPE>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--DC8ED25E9CB74C86AA086B5231AEF421-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--DC8ED25E9CB74C86AA086B5231AEF421--></AD_MESSAGE>
+
 <!--DCAD0145663548E6A67D5B2E2A54B01E--><AD_MESSAGE>
 <!--DCAD0145663548E6A67D5B2E2A54B01E-->  <AD_MESSAGE_ID><![CDATA[DCAD0145663548E6A67D5B2E2A54B01E]]></AD_MESSAGE_ID>
 <!--DCAD0145663548E6A67D5B2E2A54B01E-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
