details:   https://code.openbravo.com/erp/devel/pi/rev/4206e68ea96b
changeset: 33089:4206e68ea96b
user:      Nono Carballo <nonofce <at> gmail.com>
date:      Thu Nov 30 10:44:40 2017 +0100
summary:   Fixes issue 37317: Costing Background Process stopped if the same 
product is
produced and consumed in different production run of same work effort

If the product is not consumed by the same work effort, the costing server will
create/update the cost, otherwise, the cost is updated, to be taken into account
for the production run that consumes it.

This fix is a contribution of Support Team.

diffstat:

 src-db/database/model/functions/MA_PRODUCTION_COST.xml |  33 ++++++++++++-----
 1 files changed, 23 insertions(+), 10 deletions(-)

diffs (86 lines):

diff -r f952b45f0c6c -r 4206e68ea96b 
src-db/database/model/functions/MA_PRODUCTION_COST.xml
--- a/src-db/database/model/functions/MA_PRODUCTION_COST.xml    Thu Nov 30 
12:08:20 2017 +0100
+++ b/src-db/database/model/functions/MA_PRODUCTION_COST.xml    Thu Nov 30 
10:44:40 2017 +0100
@@ -360,7 +360,12 @@
         v_ProductionCost := v_ProductionCost + 
COALESCE(v_ProductionCost_Tmp,0);
         v_ProductionCost_Tmp := 0;
 
-        FOR Cur_ProductionLine IN (SELECT pl.*, p.VALUE
+        FOR Cur_ProductionLine IN (SELECT pl.*, p.VALUE,
+                                     (SELECT count(1)
+                                      FROM m_productionline pl2 JOIN 
m_productionplan pp on pl2.m_productionplan_id = pp.m_productionplan_id
+                                      WHERE productiontype = '-'
+                                        AND pl2.m_product_id = pl.m_product_id
+                                        AND pp.m_production_id = 
p_production_id) AS isWip
                                    FROM M_PRODUCTIONLINE pl, M_PRODUCT p
                                    WHERE M_ProductionPlan_ID = 
Cur_ProductionPlan.M_ProductionPlan_ID
                                      AND pl.M_Product_ID = p.M_Product_ID
@@ -438,23 +443,27 @@
               AND ISPRODUCTION='Y';
 
             --Insert cost per unit.
-            IF (v_iscostmigrated = 'Y') THEN
-              --Do nothing
+            IF (v_iscostmigrated = 'Y' AND Cur_ProductionLine.isWip = 0) THEN
+              -- The product is not consumed in the same work effort so 
m_costing will be updated/created by the costing server
+              -- If it is WIP then we need to update the cost of the product 
so the production run that consumes it it is
+              -- Taking into account the new production cost.
               v_ResultStr := 'new engine in use';
             ELSIF (v_count2 = 0) THEN
               v_ResultStr := 'new cost';
-              Ad_Sequence_Next('M_Costing', Cur_ProductionLine.AD_ORG_ID, 
v_NextNo);
+              v_nextNo := get_Uuid();
               --First time
               INSERT INTO M_COSTING (M_COSTING_ID, CREATED, CREATEDBY, 
UPDATED, UPDATEDBY, AD_CLIENT_ID,
                             AD_ORG_ID, M_PRODUCT_ID, DATETO, DATEFROM, 
ISMANUAL,
                             M_PRODUCTIONLINE_ID, QTY,
                             PRICE,
-                            COST, ISPERMANENT, ISPRODUCTION, COSTTYPE)
+                            COST, ISPERMANENT, ISPRODUCTION,
+                            COSTTYPE)
                      VALUES (v_NextNo,now(), p_User_ID, now(), p_User_ID, 
Cur_ProductionLine.AD_CLIENT_ID,
                             Cur_ProductionLine.AD_ORG_ID, 
Cur_ProductionLine.M_PRODUCT_ID, TO_DATE('31-12-9999','DD-MM-YYYY'), 
v_CostingDate, 'N',
                             Cur_ProductionLine.M_PRODUCTIONLINE_ID, 
Cur_ProductionLine.MOVEMENTQTY,
                             ROUND(v_Cost/Cur_ProductionLine.MOVEMENTQTY,4),
-                            (CASE (Cur_ProductionLine.MOVEMENTQTY) WHEN 0 THEN 
0 ELSE ROUND(v_Cost/Cur_ProductionLine.MOVEMENTQTY,4) END), 'N', 'Y', 'AV');
+                            (CASE (Cur_ProductionLine.MOVEMENTQTY) WHEN 0 THEN 
0 ELSE ROUND(v_Cost/Cur_ProductionLine.MOVEMENTQTY,4) END), 'N', 'Y',
+                            CASE v_iscostmigrated WHEN 'Y' THEN 'AVA' ELSE 
'AV' END);
             ELSE
               v_ResultStr := 'update cost';
               --Check if costing is correct, there must be only one cost
@@ -507,13 +516,15 @@
                             M_PRODUCTIONLINE_ID, QTY,
                             PRICE,
                             COST,
-                            ISPERMANENT, ISPRODUCTION, COSTTYPE)
+                            ISPERMANENT, ISPRODUCTION,
+                            COSTTYPE)
                        VALUES (v_NextNo,now(), p_User_ID, now(), p_User_ID, 
Cur_ProductionLine.AD_CLIENT_ID,
                             Cur_ProductionLine.AD_ORG_ID, 
Cur_ProductionLine.M_PRODUCT_ID, v_DateTo, v_CostingDate, 'N',
                             Cur_ProductionLine.M_PRODUCTIONLINE_ID, 
Cur_ProductionLine.MOVEMENTQTY,
                             ROUND(v_Cost/Cur_ProductionLine.MOVEMENTQTY,4),
                             (CASE (v_Qty+Cur_ProductionLine.MOVEMENTQTY) WHEN 
0 THEN 0 ELSE 
ROUND(((v_Qty*v_CostOld)+(v_Cost))/(v_Qty+Cur_ProductionLine.MOVEMENTQTY),4)END),
-                                'N', 'Y', 'AV');
+                                'N', 'Y',
+                            CASE v_iscostmigrated WHEN 'Y' THEN 'AVA' ELSE 
'AV' END);
               ELSIF (v_count2 = 0) THEN
                 SELECT COALESCE(MIN(DATEFROM), 
TO_DATE('31-12-9999','DD-MM-YYYY')) INTO v_DateTo
                 FROM M_COSTING
@@ -537,13 +548,15 @@
                             M_PRODUCTIONLINE_ID, QTY,
                             PRICE,
                             COST,
-                            ISPERMANENT, ISPRODUCTION, COSTTYPE)
+                            ISPERMANENT, ISPRODUCTION,
+                            COSTTYPE)
                        VALUES (v_NextNo,now(), p_User_ID, now(), p_User_ID, 
Cur_ProductionLine.AD_CLIENT_ID,
                             Cur_ProductionLine.AD_ORG_ID, 
Cur_ProductionLine.M_PRODUCT_ID, v_DateTo, v_CostingDate, 'N',
                             Cur_ProductionLine.M_PRODUCTIONLINE_ID, 
Cur_ProductionLine.MOVEMENTQTY,
                             ROUND(v_Cost/Cur_ProductionLine.MOVEMENTQTY,4),
                             (CASE (v_Qty+Cur_ProductionLine.MOVEMENTQTY) WHEN 
0 THEN 0 ELSE 
ROUND(((v_Qty*v_CostOld)+(v_Cost))/(v_Qty+Cur_ProductionLine.MOVEMENTQTY),4)END),
-                              'N', 'Y', 'AV');
+                              'N', 'Y',
+                            CASE v_iscostmigrated WHEN 'Y' THEN 'AVA' ELSE 
'AV' END);
 
               ELSE
                 --If for productiondate there are more than one calculated 
costs

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openbravo-commits mailing list
Openbravo-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to