Fixed bad source document quantity update and invalid qtys during derivative document
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Mon, 21 Dec 2009 22:19:38 +0000 (22:19 +0000)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Mon, 21 Dec 2009 22:19:38 +0000 (22:19 +0000)
entry [0000184].

sales/includes/cart_class.inc
sales/includes/sales_db.inc

index 17708a4747180abac953a5be73384da771185279..1ba84ea6137a3c492094a5cfb680fdbea3e5a417 100644 (file)
@@ -100,7 +100,7 @@ class cart
                global $SysPrefs, $Refs;
 
                if (!is_array($trans_no)) $trans_no = array($trans_no);
-               if ($trans_no[0]) 
+               if ($trans_no[0]) // read old transaction
                {
                        if ($type == ST_SALESORDER || $type == ST_SALESQUOTE) { // sales order || sales quotation
                                read_sales_order($trans_no[0], $this, $type);
@@ -111,7 +111,7 @@ class cart
                                                $line->qty_dispatched = $line->quantity - $line->qty_done;
                                        }
                                }
-                       } else {        // derivative transaction
+                       } else {        // other type of sales transaction
                                        read_sales_trans($type, $trans_no, $this);
                                        if ($this->order_no) { // free hand credit notes have no order_no
                                                $sodata = get_sales_order_header($this->order_no, ST_SALESORDER);
@@ -121,9 +121,9 @@ class cart
                                                $this->delivery_to = $sodata["deliver_to"];
                                                $this->delivery_address = $sodata["delivery_address"];
                                        }
+                                       // old derivative transaction edit
                                        if (!$view && ($type!=ST_CUSTCREDIT || $this->trans_link!=0)) {
                                                $src_type = get_parent_type($type);
-                                               $src_details = 0;
                                                if ($src_type == ST_SALESORDER) { // get src data from sales_orders
                                                        $this->src_docs = array( $sodata['order_no']=>$sodata['version']);
                                                        $srcdetails = get_sales_order_details($this->order_no, ST_SALESORDER);
@@ -132,7 +132,6 @@ class cart
                                                        $srcdetails = get_customer_trans_details($src_type,array_keys($this->src_docs));
                                                }
                                                // calculate & save: qtys on other docs and free qtys on src doc
-                                               $line_no = 0;
                                                for($line_no = 0; $srcline = db_fetch($srcdetails); $line_no++) {
                                                        $sign = 1; // $type==13 ?  1 : -1; // this is strange debtor_trans atavism
                                                        $line = &$this->line_items[$line_no];
@@ -141,15 +140,15 @@ class cart
                                                        $line->qty_old = $line->qty_dispatched = $line->quantity;
                                                        $line->quantity += $sign * ($srcline['quantity'] - $srcline['qty_done']); // add free qty on src doc
                                                }
-                                       } else {
+                                       } else { // prepare qtys for derivative document entry (not used in display)
                                                for($line_no = 0; $line_no < count($this->line_items); $line_no++) {
                                                        $line = &$this->line_items[$line_no];
                                                        $line->src_id = $line->id; // save src line ids for update
-                                                       $line->qty_dispatched = $line->quantity;
+                                                       $line->qty_dispatched = $line->quantity - $line->qty_done;
                                                }
                                        }
                                }
-               } else {
+               } else { // new document
                                $this->trans_type = $type;
                                $this->trans_no = 0;
                                $this->customer_currency = get_company_currency();
index 536458369b243695db5c789535d9e2897ee2442e..22c354170da06a57efd1ee4e9f059af3a38cfc3c 100644 (file)
@@ -184,12 +184,12 @@ function set_document_parent($cart)
 
        if (count($cart->src_docs) == 1) {
 
-       // if this child document has only one parent - update child link
-       $del_no = reset(array_keys($cart->src_docs));
+               // if this child document has only one parent - update child link
+               $del_no = reset(array_keys($cart->src_docs));
 
-       $sql = 'UPDATE '.TB_PREF.'debtor_trans SET trans_link = ' . $del_no .
-               ' WHERE type=".db_escape($cart->trans_type)." AND trans_no='. $inv_no ;
-       db_query($sql, 'Child document link cannot be updated');
+               $sql = 'UPDATE '.TB_PREF.'debtor_trans SET trans_link = ' . $del_no .
+                       ' WHERE type='.db_escape($cart->trans_type).' AND trans_no='. $inv_no ;
+               db_query($sql, 'Child document link cannot be updated');
 
        }
        if ($cart->trans_type != ST_SALESINVOICE)