More regarding costing valuations
authorJoe Hunt <joe.hunt.consulting@gmail.com>
Sat, 19 Mar 2011 08:34:56 +0000 (09:34 +0100)
committerJoe Hunt <joe.hunt.consulting@gmail.com>
Sat, 19 Mar 2011 08:34:56 +0000 (09:34 +0100)
includes/db/inventory_db.inc
inventory/includes/db/items_adjust_db.inc
purchasing/includes/db/invoice_db.inc
sales/includes/db/sales_credit_db.inc

index 56e9419679d035adf4e148db8052ed1c581a4dd9..6a1a7f52c1298c9986a6990412e3455af97d98c1 100644 (file)
@@ -399,18 +399,29 @@ function void_stock_move($type, $type_no)
     while ($row = db_fetch($result))
     {
         add_stock_move($type, $row["stock_id"], $type_no, $row["loc_code"],
-               sql2date($row["tran_date"]), $row["reference"], -$row["qty"], $row["standard_cost"], $row["person_id"], $row["visible"],
-               $row["price"], $row["discount_percent"]);
+            sql2date($row["tran_date"]), $row["reference"], -$row["qty"], $row["standard_cost"], $row["person_id"], $row["visible"],
+            $row["price"], $row["discount_percent"]);
         
         // If there is cost difference, then cost has to be adjusted.
         // IMP : Adjusting cost is suitable instead of normal averaging as it will not work properly for manufactured items. Reason being Avg cost is suitable only for purchased items
+        
         $curr_std_cost = get_standard_cost($row["stock_id"]);
-        if ($curr_std_cost != $row["standard_cost"])
+        
+        //Chaitanya : Transaction rates are stored either as price or standard_cost depending
+        //on types
+        $types = array(ST_SUPPCREDIT);
+        if (in_array($type,$types))
+            $trans_rate = $row["price"];
+        else
+            $trans_rate = $row["standard_cost"];
+        
+        if ($curr_std_cost != $trans_rate)
         {
-            $cost_diff = $row["standard_cost"] - $curr_std_cost;
+            $cost_diff = $trans_rate - $curr_std_cost;
             update_average_material_cost(0, $row["stock_id"],
                 $cost_diff, -$row["qty"], sql2date($row["tran_date"]), true);
         }
+
     }
 }
 
index 1ca7d1edf739dd0ee1dddc99e680f59a9bc09c85..d0b87fc62e8d88994b1cc894992deb0bed0f3f31 100644 (file)
@@ -82,6 +82,35 @@ function add_stock_adjustment_item($adj_id, $stock_id, $location, $date_, $type,
        display_db_error("Cannot do inventory adjustment for Service item : $stock_id", "");
     }
 
+       //Chaitanya : If negative adjustment result in negative or zero inventory \r
+       //then difference should be adjusted\r
+       $qoh = get_qoh_on_date($stock_id);\r
+       if ($qoh + $quantity <= 0 && $qoh > 0) //Positive inventory turning zero/negative\r
+       {\r
+               global $Refs;\r
+\r
+               $id = get_next_trans_no(ST_JOURNAL);\r
+               $ref = $Refs->get_next(ST_JOURNAL);\r
+               $diff = get_standard_cost($stock_id) - $standard_cost;\r
+               \r
+               $stock_gl_code = get_stock_gl_code($stock_id);\r
+               $memo = _("For zero inventory of ").$stock_id." INVADJ REF: ".$reference;\r
+               //Reverse the inventory effect if $qoh <=0\r
+               add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, \r
+                       $stock_gl_code["inventory_account"],\r
+                       $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo, \r
+                       -$qoh * $diff);\r
+               //GL Posting to inventory adjustment account\r
+               add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, \r
+                       $stock_gl_code["adjustment_account"],\r
+                       $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo,\r
+                       $qoh * $diff);\r
+                       \r
+               add_audit_trail(ST_JOURNAL, $id, $date_);\r
+               add_comments(ST_JOURNAL, $id, $date_, $memo);\r
+               $Refs->save(ST_JOURNAL, $id, $ref);                     \r
+       }       \r
+\r
        update_average_material_cost(null, $stock_id, $standard_cost, $quantity, $date_);
 
        add_stock_move(ST_INVADJUST, $stock_id, $adj_id, $location,
index 9373d888a64c3752dfb3b36549a05a45036d49e8..411a7a0b194dffa24025be9798791f2de04204de 100644 (file)
@@ -260,7 +260,54 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b
                                        $total += add_gl_trans($trans_type, $invoice_id, $date_,        $stock_gl_code["inventory_account"],
                                                $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], 'GRN Provision',
                                                $diff_amt, null, null, null,
-                                               "The general ledger transaction could not be added for the GRN of the inventory item"); 
+                                               "The general ledger transaction could not be added for the GRN of the inventory item");
+
+                                       //Chaitanya
+                                       //If QOH is 0 or negative then update_average_material_cost will be skipped
+                                       //Thus difference in PO and Supp Invoice should be handled separately
+                                       
+                                       $qoh = get_qoh_on_date($entered_grn->item_code);
+                                       if ($qoh <= 0)
+                                       {
+                                               global $Refs;
+
+                                               //Chaitanya : Post a journal entry
+                                               $id = get_next_trans_no(ST_JOURNAL);
+                                               $ref = $Refs->get_next(ST_JOURNAL);
+                                               $stock_id = $entered_grn->item_code;
+                                               $stock_gl_code = get_stock_gl_code($stock_id);
+                                               $memo = _("Supplier invoice adjustment for zero inventory of ").$stock_id." "._("Invoice")." ".$supp_trans->reference;
+                                               //Reverse the inventory effect if $qoh <=0
+                                               add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, 
+                                                       $stock_gl_code["inventory_account"],
+                                                       $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'],
+                                                       $memo, -$entered_grn->this_quantity_inv * $diff);
+                                               //GL Posting to inventory adjustment account
+                                               add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, 
+                                                       $stock_gl_code["adjustment_account"],
+                                                       $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'],
+                                                       $memo, $entered_grn->this_quantity_inv * $diff);
+                                               
+                                               add_audit_trail(ST_JOURNAL, $id, $date_);
+                                               add_comments(ST_JOURNAL, $id, $date_, $memo);
+                                               $Refs->save(ST_JOURNAL, $id, $ref);                                             
+                                       }                                       
+                                       
+                                       /*$qoh = get_qoh_on_date($entered_grn->item_code);
+                                       if ($qoh <= 0)
+                                       {
+                                               $memo = "Diff. in cost: ".$diff;
+                                               //Reverse the inventory effect if $qoh <=0
+                                               add_gl_trans_supplier($trans_type, $invoice_id, $date_, 
+                                               $stock_gl_code["inventory_account"],
+                                               $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'],
+                                               -$entered_grn->this_quantity_inv * $diff, $supp_trans->supplier_id, "", null, $memo);
+                                               //GL Posting to inventory adjustment account
+                                               add_gl_trans_supplier($trans_type, $invoice_id, $date_, 
+                                               $stock_gl_code["adjustment_account"],
+                                               $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'],
+                                               $entered_grn->this_quantity_inv * $diff, $supp_trans->supplier_id, "", null, $memo);                                            
+                                       }*/                             
                                        
                                        //add_gl_trans($trans_type, $invoice_id, $date_,        $stock_gl_code["cogs_account"],
                                        //      0, 0, 'GRN Provision', -$diff_amt, null, null, null,
@@ -497,14 +544,18 @@ function void_supp_invoice($type, $type_no)
                                $batch = get_grn_batch_from_item($details_row["grn_item_id"]);  
                                $grn = get_grn_batch($batch);
                        if ($type == ST_SUPPCREDIT) // credit note 2009-06-14 Joe Hunt Must restore the po and grn
-                       {       // We must get the corresponding invoice item to check for price chg.
+                       {       
                                        $match = get_matching_invoice_item($details_row["stock_id"], $details_row["po_detail_item_id"]);
-                                       if ($match !== false)
+                                       
+                                       //Chaitanya : Skipped costing block & handle in void_stock_move
+                                       // We must get the corresponding invoice item to check for price chg.
+                                       /*if ($match !== false)
                                                $mat_cost = update_average_material_cost($grn["supplier_id"], $details_row["stock_id"],  
                                                        $match["unit_price"], -$details_row["quantity"], sql2date($match['tran_date']), $match['tran_date'] !== $trans['tran_date']);
                                        else            
                                                $mat_cost = update_average_material_cost($grn["supplier_id"], $details_row["stock_id"],  
-                                                       $details_row["FullUnitPrice"], -$details_row["quantity"], $old_date, $old[1] !== $trans['tran_date']);
+                                                       $details_row["FullUnitPrice"], -$details_row["quantity"], $old_date, $old[1] !== $trans['tran_date']);*/
+                                                       
                                        $sql = "UPDATE ".TB_PREF."purch_order_details
                                        SET quantity_ordered = quantity_ordered + ".-$details_row["quantity"].", ";
                                if ($match !== false)
@@ -523,6 +574,37 @@ function void_supp_invoice($type, $type_no)
                                        // Only adjust the avg for the diff
                                        $mat_cost = update_average_material_cost(null, $details_row["stock_id"],
                                                $diff, -$details_row["quantity"], $old_date, true);
+                                               
+                                       //Chaitanya : Reverse effect
+                                       //If QOH is 0 or negative then update_average_material_cost will be skipped
+                                       //Thus difference in PO and Supp Invoice should be handled separately
+                                       
+                                       $qoh = get_qoh_on_date($details_row["stock_id"]);
+                                       if ($diff*$details_row["quantity"] !=0 && $qoh <= 0)
+                                       {
+                                               global $Refs;
+
+                                               //Chaitanya : Post a journal entry
+                                               $id = get_next_trans_no(ST_JOURNAL);
+                                               $ref = $Refs->get_next(ST_JOURNAL);
+                                               $stock_id = $details_row["stock_id"];
+                                               $stock_gl_code = get_stock_gl_code($stock_id);
+                                               $memo = "Reversing Supplier invoice adjustment for zero inventory of ".$stock_id." Invoice: ".$trans['reference'];
+                                               //Reverse the inventory effect if $qoh <=0
+                                               add_gl_trans_std_cost(ST_JOURNAL, $id, $old_date, 
+                                                       $stock_gl_code["inventory_account"],
+                                                       $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'],
+                                                       $memo, $details_row["quantity"] * $diff);
+                                               //GL Posting to inventory adjustment account
+                                               add_gl_trans_std_cost(ST_JOURNAL, $id, $old_date, 
+                                                       $stock_gl_code["adjustment_account"],
+                                                       $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'],
+                                                       $memo, -$details_row["quantity"] * $diff);
+                                               
+                                               add_audit_trail(ST_JOURNAL, $id, $old_date);
+                                               add_comments(ST_JOURNAL, $id, $old_date, $memo);
+                                               $Refs->save(ST_JOURNAL, $id, $ref);                                             
+                                       }       
                                }
                                /*$deliveries = get_deliveries_between($details_row["stock_id"], $old_date, $date_);
                                if ($deliveries[0] != 0) // have deliveries been done during the period?
index ce1cb17f14ae5fd9097cc7ab5476eaf530a4fa37..d5be9c44b0b16a4a00d7b7e9637ac43f038d6187 100644 (file)
@@ -171,10 +171,14 @@ function write_credit_note(&$credit_note, $write_off_acc)
 // Insert a stock movement coming back in to show the credit note and
 //     a reversing stock movement to show the write off
 //
+
 function add_credit_movements_item(&$credit_note, &$credit_line,
        $credit_type, $price, $credited_invoice=0)
 {
 
+    //Chaitanya : Stamp current cost in stock moves $credit_line does not fetch cost
+    $curr_std_cost = get_standard_cost($credit_line->stock_id);
+
        if ($credit_type == "Return") {
 
                $reference = "Return ";
@@ -188,20 +192,20 @@ function add_credit_movements_item(&$credit_note, &$credit_line,
                if ($credited_invoice)
                        $reference .= "Ex Inv: " . $credited_invoice;
 
-       add_stock_move_customer(ST_CUSTCREDIT,  $credit_line->stock_id,
-               key($credit_note->trans_no), $credit_note->Location,
-               $credit_note->document_date, $reference, -$credit_line->qty_dispatched,
-               $credit_line->standard_cost,  0, $price,
-               $credit_line->discount_percent);
-
-               }
-       add_stock_move_customer(ST_CUSTCREDIT,  $credit_line->stock_id,
-               key($credit_note->trans_no), $credit_note->Location,
-               $credit_note->document_date, $reference, $credit_line->qty_dispatched,
-               $credit_line->standard_cost,  0, $price,
-               $credit_line->discount_percent);
+               add_stock_move_customer(ST_CUSTCREDIT,  $credit_line->stock_id,
+               key($credit_note->trans_no), $credit_note->Location,
+               $credit_note->document_date, $reference, -$credit_line->qty_dispatched,
+               $curr_std_cost,  0, $price,
+               $credit_line->discount_percent);
 
        }
+    add_stock_move_customer(ST_CUSTCREDIT,  $credit_line->stock_id,
+        key($credit_note->trans_no), $credit_note->Location,
+        $credit_note->document_date, $reference, $credit_line->qty_dispatched,
+        $curr_std_cost,  0, $price,
+        $credit_line->discount_percent);
+
+}
 
 //----------------------------------------------------------------------------------------