Global variabel, $def_print_destination, config.php can be set to 0 or 1
[fa-stable.git] / purchasing / includes / db / grn_db.inc
index 48d941b206b082f7e178a9f5c312a0535860cb83..5d91b697a93b9900764b1359b291ab94d3e09cd1 100644 (file)
@@ -17,32 +17,47 @@ function update_average_material_cost($supplier, $stock_id, $price, $qty, $date,
                $currency = get_supplier_currency($supplier);
        else
                $currency = null;
+       $dec = user_price_dec();
+       price_decimal_format($price, $dec);
+       $price = round2($price, $dec);
        if ($currency != null)
-               $price_in_home_currency = to_home_currency($price, $currency, $date);
+       {
+               $ex_rate = get_exchange_rate_to_home_currency($currency, $date);
+               $price_in_home_currency = $price / $ex_rate;
+       }       
        else
                $price_in_home_currency = $price;
        $sql = "SELECT material_cost FROM ".TB_PREF."stock_master WHERE stock_id=".db_escape($stock_id);
        $result = db_query($sql);
        $myrow = db_fetch($result);
        $material_cost = $myrow['material_cost'];
+       if ($price > -0.0001 && $price < 0.0001)
+               return $material_cost;
        if ($adj_only)
-               $exclude = 13;
+               $exclude = ST_CUSTDELIVERY;
        else
                $exclude = 0;
+       $cost_adjust = false;
        $qoh = get_qoh_on_date($stock_id, null, $date, $exclude);
-
        if ($adj_only)
        {
-               if ($qoh <= 0)
-                       $material_cost = 0;
-               else
+               if ($qoh > 0)
                        $material_cost = ($qoh * $material_cost + $qty * $price_in_home_currency) /     $qoh;
        }
-       elseif ($qoh + $qty <= 0)
-               $material_cost = 0;
        else
-               $material_cost = ($qoh * $material_cost + $qty * $price_in_home_currency) /     ($qoh + $qty);
-
+       {
+               if ($qoh < 0)
+               {
+                       if ($qoh + $qty > 0)
+                               $cost_adjust = true;
+                       $qoh = 0;
+               }
+               if ($qoh + $qty != 0)
+                       $material_cost = ($qoh * $material_cost + $qty * $price_in_home_currency) /     ($qoh + $qty);
+       }       
+       $material_cost = round2($material_cost, $dec);
+       if ($cost_adjust) // new 2010-02-10
+               adjust_deliveries($stock_id, $material_cost, $date);
        $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=".db_escape($material_cost)."
                WHERE stock_id=".db_escape($stock_id);
        db_query($sql,"The cost details for the inventory item could not be updated");
@@ -53,6 +68,8 @@ function update_average_material_cost($supplier, $stock_id, $price, $qty, $date,
 
 function add_grn(&$po, $date_, $reference, $location)
 {
+       global $Refs;
+
        begin_transaction();
 
        $grn = add_grn_batch($po->order_no, $po->supplier_id, $reference, $location, $date_);
@@ -64,7 +81,6 @@ function add_grn(&$po, $date_, $reference, $location)
                {
 
                        /*Update sales_order_details for the new quantity received and the standard cost used for postings to GL and recorded in the stock movements for FIFO/LIFO stocks valuations*/
-
                        //------------------- update average material cost ------------------------------------------ Joe Hunt Mar-03-2008
                        update_average_material_cost($po->supplier_id, $order_line->stock_id, $order_line->price,
                                $order_line->receive_qty, $date_);
@@ -86,14 +102,16 @@ function add_grn(&$po, $date_, $reference, $location)
                                $order_line->standard_cost,     $order_line->receive_qty, $order_line->price);
 
                        /* Update location stock records - NB  a po cannot be entered for a service/kit parts */
-            add_stock_move(25, $order_line->stock_id, $grn, $location, $date_, "",
+            add_stock_move(ST_SUPPRECEIVE, $order_line->stock_id, $grn, $location, $date_, "",
                $order_line->receive_qty, $order_line->standard_cost,
                $po->supplier_id, 1, $order_line->price);
 
                } /*quantity received is != 0 */
        } /*end of order_line loop */
 
-       references::save_last($reference, 25);
+       $Refs->save(ST_SUPPRECEIVE, $grn, $reference);
+
+       add_audit_trail(ST_SUPPRECEIVE, $grn, $date_);
 
        commit_transaction();
 
@@ -184,7 +202,7 @@ function set_grn_item_credited(&$entered_grn, $supplier, $transno, $date)
        ." WHERE id=".db_escape($entered_grn->id);
        db_query($sql);
 
-    add_stock_move(21, $entered_grn->item_code, $transno, $myrow['loc_code'], $date, "",
+    add_stock_move(ST_SUPPCREDIT, $entered_grn->item_code, $transno, $myrow['loc_code'], $date, "",
                $entered_grn->this_quantity_inv, $mcost, $supplier, 1, $entered_grn->chg_price);
 }
 
@@ -201,7 +219,7 @@ function get_grn_items($grn_batch_id=0, $supplier_id="", $outstanding_only=false
     $sql .= " WHERE ".TB_PREF."grn_items.grn_batch_id=".TB_PREF."grn_batch.id
                AND ".TB_PREF."grn_items.po_detail_item=".TB_PREF."purch_order_details.po_detail_item";
        if ($invoice_no != 0)
-               $sql .= " AND ".TB_PREF."supp_invoice_items.supp_trans_type=20 AND 
+               $sql .= " AND ".TB_PREF."supp_invoice_items.supp_trans_type=".ST_SUPPINVOICE." AND 
                        ".TB_PREF."supp_invoice_items.supp_trans_no=$invoice_no AND
                        ".TB_PREF."grn_items.id=".TB_PREF."supp_invoice_items.grn_item_id";
        $sql .= " AND ".TB_PREF."stock_master.stock_id=".TB_PREF."grn_items.item_code ";
@@ -348,8 +366,8 @@ function void_grn($grn_batch)
 
        begin_transaction();
 
-       void_bank_trans(25, $grn_batch, true);
-       void_gl_trans(25, $grn_batch, true);
+       void_bank_trans(ST_SUPPRECEIVE, $grn_batch, true);
+       void_gl_trans(ST_SUPPRECEIVE, $grn_batch, true);
 
        // clear the quantities of the grn items in the POs and invoices
        $result = get_grn_items($grn_batch);
@@ -375,7 +393,7 @@ function void_grn($grn_batch)
        db_query($sql, "A grn detail item could not be voided.");
 
     // clear the stock move items
-    void_stock_move(25, $grn_batch);
+    void_stock_move(ST_SUPPRECEIVE, $grn_batch);
 
        commit_transaction();