details:   /erp/stable/2.50/rev/692c9a694d11
changeset: 9392:692c9a694d11
user:      Adrián Romero <adrianromero <at> openbravo.com>
date:      Wed Apr 27 18:14:09 2011 +0200
summary:   Issue 0016056: A sales order with discount cannot be reactivated nor 
closed
It has been fixed the process of closing sales orders. Discounts are 
recalculated reusing previous discount lines if it is not possible to delete 
these discount lines because there already exist records linked to these 
discount lines

details:   /erp/stable/2.50/rev/b89aedcaf3d2
changeset: 9393:b89aedcaf3d2
user:      Adrián Romero <adrianromero <at> openbravo.com>
date:      Mon May 02 10:14:57 2011 +0200
summary:   Fixes issue 0015943: The date of documents created by a process 
includes the time, but when creating manually they don't include time
It has been removed the time in the fields movementdate and dateacct when 
creating a new shipment in the function M_INOUT_CREATE

diffstat:

 src-db/database/model/functions/C_ORDER_POST1.xml  |  105 +++++++++++++-------
 src-db/database/model/functions/M_INOUT_CREATE.xml |    4 +-
 2 files changed, 71 insertions(+), 38 deletions(-)

diffs (164 lines):

diff -r 2e20ee3790ed -r b89aedcaf3d2 
src-db/database/model/functions/C_ORDER_POST1.xml
--- a/src-db/database/model/functions/C_ORDER_POST1.xml Fri Apr 29 19:25:33 
2011 +0200
+++ b/src-db/database/model/functions/C_ORDER_POST1.xml Mon May 02 10:14:57 
2011 +0200
@@ -104,6 +104,7 @@
     v_Discount NUMBER;
     v_precision NUMBER;
     Cur_OrderLine RECORD;
+    v_DiscountExist NUMBER;
   BEGIN
     IF(p_PInstance_ID IS NOT NULL) THEN
       --  Update AD_PInstance
@@ -616,19 +617,43 @@
         END IF;
       END IF;
     END IF;--END_PROCESSING
+
     IF(NOT FINISH_PROCESS AND NOT END_PROCESSING) THEN
      
/**************************************************************************
-        * Calculate Discounts only when processing the document.
+        * Calculate Discounts
         
*************************************************************************/
 
-      -- AProove, COmplete, PRocess
-      IF(v_DocAction IN('AP', 'CO', 'PR')) THEN
+        -- Delete first previous discounts (if possible) and then recalculate 
them
 
-        -- Delete first previous discounts if any and then recalculate them
+        UPDATE C_ORDER
+            SET DocStatus='IP', -- In progress
+            Processing='N',
+            Processed='N',
+            Updated=now(),
+            UpdatedBy=v_User
+        WHERE C_Order_ID=v_Record_ID;
+
         DELETE
         FROM C_ORDERLINE
         WHERE C_ORDER_DISCOUNT_ID IS NOT NULL
+        AND C_ORDER_ID = v_Record_ID
+        AND NOT EXISTS (SELECT C_INVOICELINE_ID FROM C_INVOICELINE WHERE 
C_INVOICELINE.C_ORDERLINE_ID = C_ORDERLINE.C_ORDERLINE_ID)
+        AND NOT EXISTS (SELECT M_INOUTLINE_ID FROM M_INOUTLINE WHERE 
M_INOUTLINE.C_ORDERLINE_ID = C_ORDERLINE.C_ORDERLINE_ID)
+        AND NOT EXISTS (SELECT M_MATCHPO_ID FROM M_MATCHPO WHERE 
M_MATCHPO.C_ORDERLINE_ID = C_ORDERLINE.C_ORDERLINE_ID);
+
+        UPDATE C_ORDERLINE
+        SET pricelist = 0, priceactual = 0, pricelimit = 0, linenetamt = 0, 
pricestd = 0
+        WHERE C_ORDER_DISCOUNT_ID IS NOT NULL
         AND C_ORDER_ID=v_Record_ID;
+
+        UPDATE C_ORDER
+            SET DocStatus=v_DocStatus, -- restore
+            Processing=v_IsProcessing,
+            Processed=v_IsProcessed,
+            Updated=now(),
+            UpdatedBy=v_User
+        WHERE C_Order_ID=v_Record_ID;
+
         v_CumDiscount:=0;
         v_OldCumDiscount:=0;
         v_Line:=10;
@@ -674,43 +699,51 @@
             ELSE
               v_Discount:=(-1) * Cur_TaxDiscount.LINENETAMT * 
Cur_COrderDiscount.Discount/100;
             END IF;
-            v_OrderLineSeqNo:=10 + v_OrderLineSeqNo;
-            v_OrderLine:=get_uuid() ;
+
+            SELECT COUNT(*) INTO v_DiscountExist FROM C_ORDERLINE
+            WHERE C_ORDERLINE.C_ORDER_DISCOUNT_ID = 
Cur_COrderDiscount.C_ORDER_DISCOUNT_ID
+            AND C_ORDERLINE.C_TAX_ID = Cur_TaxDiscount.C_TAX_ID;
             
-            INSERT INTO c_orderline
-              (
-                c_orderline_id, ad_client_id, ad_org_id, isactive, created, 
createdby, 
-                updated, updatedby, c_order_id, line, c_bpartner_id, 
c_bpartner_location_id, 
-                dateordered, datepromised, datedelivered, dateinvoiced, 
description, 
-                m_product_id, m_warehouse_id, directship, c_uom_id, 
qtyordered, 
-                qtyreserved, qtydelivered, qtyinvoiced, m_shipper_id, 
c_currency_id, 
-                pricelist, priceactual, pricelimit, linenetamt, discount, 
freightamt, 
-                c_charge_id, chargeamt, c_tax_id, s_resourceassignment_id, 
ref_orderline_id, 
-                m_attributesetinstance_id, isdescription, quantityorder, 
m_product_uom_id, 
-                m_offer_id, pricestd, C_ORDER_DISCOUNT_ID
-              )
-            VALUES 
-              (
-                v_OrderLine, v_Client_ID, v_Org_ID, 'Y', now(), v_UpdatedBy,
-                now(), v_UpdatedBy, v_Record_ID, v_OrderLineSeqNo, NULL, NULL, 
-                now(), now(), now(), now(), Cur_COrderDiscount.NAME, 
-                Cur_COrderDiscount.M_PRODUCT_ID, v_M_Warehouse_ID, 'N', 
Cur_COrderDiscount.C_UOM_ID, 1, 
-                0, 0, 0, NULL, v_c_currency_id, 
-                ROUND(v_Discount,v_precision), ROUND(v_Discount,v_precision), 
ROUND(v_Discount,v_precision), ROUND(v_Discount,v_precision), 0, 0, 
-                NULL, NULL, Cur_TaxDiscount.C_TAX_ID, NULL, NULL, 
-                NULL, 'N', NULL, NULL, 
-                NULL, ROUND(v_Discount,v_precision), NULL
-              );
-           
-            UPDATE C_ORDERLINE
-            SET C_ORDER_DISCOUNT_ID=Cur_COrderDiscount.C_ORDER_DISCOUNT_ID
-            WHERE C_ORDERLINE_ID=v_OrderLine;
-            
+           IF (v_DiscountExist = 0) THEN
+                   v_OrderLineSeqNo:=10 + v_OrderLineSeqNo;
+                   v_OrderLine:=get_uuid();
+                   INSERT INTO c_orderline
+                     (
+                       c_orderline_id, ad_client_id, ad_org_id, isactive, 
created, createdby,
+                       updated, updatedby, c_order_id, line, c_bpartner_id, 
c_bpartner_location_id,
+                       dateordered, datepromised, datedelivered, dateinvoiced, 
description,
+                       m_product_id, m_warehouse_id, directship, c_uom_id, 
qtyordered,
+                       qtyreserved, qtydelivered, qtyinvoiced, m_shipper_id, 
c_currency_id,
+                       pricelist, priceactual, pricelimit, linenetamt, 
discount, freightamt,
+                       c_charge_id, chargeamt, c_tax_id, 
s_resourceassignment_id, ref_orderline_id,
+                       m_attributesetinstance_id, isdescription, 
quantityorder, m_product_uom_id,
+                       m_offer_id, pricestd, C_ORDER_DISCOUNT_ID
+                     )
+                   VALUES
+                     (
+                       v_OrderLine, v_Client_ID, v_Org_ID, 'Y', now(), 
v_UpdatedBy,
+                       now(), v_UpdatedBy, v_Record_ID, v_OrderLineSeqNo, 
NULL, NULL,
+                       now(), now(), now(), now(), Cur_COrderDiscount.NAME,
+                       Cur_COrderDiscount.M_PRODUCT_ID, v_M_Warehouse_ID, 'N', 
Cur_COrderDiscount.C_UOM_ID, 1,
+                       0, 0, 0, NULL, v_c_currency_id,
+                       ROUND(v_Discount,v_precision), 
ROUND(v_Discount,v_precision), ROUND(v_Discount,v_precision), 
ROUND(v_Discount,v_precision), 0, 0,
+                       NULL, NULL, Cur_TaxDiscount.C_TAX_ID, NULL, NULL,
+                       NULL, 'N', NULL, NULL,
+                       NULL, ROUND(v_Discount,v_precision), NULL
+                     );
 
+                   UPDATE C_ORDERLINE
+                   SET 
C_ORDER_DISCOUNT_ID=Cur_COrderDiscount.C_ORDER_DISCOUNT_ID
+                   WHERE C_ORDERLINE_ID=v_OrderLine;
+            ELSE
+                   UPDATE C_ORDERLINE 
+                   SET pricelist = ROUND(v_Discount,v_precision), priceactual 
= ROUND(v_Discount,v_precision), pricelimit = ROUND(v_Discount,v_precision), 
linenetamt = ROUND(v_Discount,v_precision), pricestd = 
ROUND(v_Discount,v_precision)
+                   WHERE C_ORDERLINE.C_ORDER_DISCOUNT_ID = 
Cur_COrderDiscount.C_ORDER_DISCOUNT_ID
+                   AND C_ORDERLINE.C_TAX_ID = Cur_TaxDiscount.C_TAX_ID;
+            END IF;
           END LOOP;
           v_Line:=v_Line + 10;
         END LOOP;
-        END IF;
     END IF;
     
     IF(NOT END_PROCESSING AND NOT FINISH_PROCESS) THEN
diff -r 2e20ee3790ed -r b89aedcaf3d2 
src-db/database/model/functions/M_INOUT_CREATE.xml
--- a/src-db/database/model/functions/M_INOUT_CREATE.xml        Fri Apr 29 
19:25:33 2011 +0200
+++ b/src-db/database/model/functions/M_INOUT_CREATE.xml        Mon May 02 
10:14:57 2011 +0200
@@ -307,7 +307,7 @@
             IF Cur_Order.DocSubTypeSO = 'WR' THEN
               v_NEWORDERDATE := Cur_Order.DATEORDERED; -- IS A POS ORDER
             ELSE
-              v_NEWORDERDATE := now();
+              v_NEWORDERDATE := TRUNC(now());
             END IF;
 
             --RAISE_APPLICATION_ERROR(-20100,'el numero documento 
es:'||COALESCE(v_DocumentNo,0)||' El doctypeId es: 
'||COALESCE(v_DocType_ID,0)||' El cOrderId es: 
'||COALESCE(Cur_Order.C_Order_ID,'0'));
@@ -332,7 +332,7 @@
               Cur_Order.AD_Org_ID, 'Y', now(), v_User_ID,
               now(), v_User_ID, v_DocumentNo, v_DocType_ID,
               Cur_Order.Description, 'N', 'C-', v_NEWORDERDATE,
-              now(), Cur_Order.C_BPartner_ID, 
Cur_Order.C_BPartner_Location_ID, Cur_Order.AD_User_ID,
+              TRUNC(now()), Cur_Order.C_BPartner_ID, 
Cur_Order.C_BPartner_Location_ID, Cur_Order.AD_User_ID,
               Cur_Order.M_Warehouse_ID, Cur_Order.POReference, 
Cur_Order.DateOrdered, Cur_Order.DeliveryRule,
               Cur_Order.FreightCostRule, Cur_Order.FreightAmt, 
Cur_Order.C_Project_ID, Cur_Order.C_Activity_ID,
               Cur_Order.C_Campaign_ID, Cur_Order.AD_OrgTrx_ID, 
Cur_Order.User1_ID, Cur_Order.User2_ID,

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to