Fixed bug in adding wo costs journal
[fa-stable.git] / manufacturing / includes / db / work_order_costing_db.inc
index 8d8e1517f812bb88141c856cca74c3491d709b68..6ad3a3c9f319a3513216d30eaf422f6c73e82865 100644 (file)
@@ -37,7 +37,7 @@ function delete_wo_costing($trans_type, $trans_no)
 }
 //--------------------------------------------------------------------------------------
 
-function add_material_cost($stock_id, $qty, $date_, $advanced=false)
+function add_material_cost($stock_id, $qty, $date_, $advanced=false, $woid=0)
 {
        $m_cost = 0;
     $result = get_bom($stock_id);
@@ -47,19 +47,31 @@ function add_material_cost($stock_id, $qty, $date_, $advanced=false)
                $m_cost += ($bom_item['quantity'] * $standard_cost);
        }
        $bom_cost = $m_cost;
-       
+       // new 2015.10.15       
+       // additilnal costs.
+       $i_cost = 0;
+       if ($woid != 0 && work_order_has_issues($woid))
+       {
+               $res = get_additional_issues($woid);
+               while ($issue = db_fetch($res))
+               {
+                       $standard_cost = get_standard_cost($issue['stock_id']);
+                       $i_cost += ($issue['qty_issued'] * $standard_cost) / $qty;
+               }
+       }
        $sql = "SELECT material_cost, labour_cost, overhead_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'];
-       
+       $m_cost += $i_cost;
+       /*      
        if ($advanced)
        {
                //reduce overhead_cost and labour_cost from price as those will remain as is
                $m_cost = $m_cost - $myrow['labour_cost'] - $myrow['overhead_cost'];
        }
-       
+       */      
        $qoh = get_qoh_on_date($stock_id);
        $cost_adjust = false;
        if ($qoh < 0)
@@ -71,7 +83,7 @@ function add_material_cost($stock_id, $qty, $date_, $advanced=false)
        if ($qoh + $qty != 0)
        {
                if ($qoh == 0)
-                       $material_cost += $m_cost;
+                       $material_cost = $m_cost; // corrected 27.10.2014
                else
                        $material_cost = ($qoh * $material_cost + $qty * $m_cost) /     ($qoh + $qty);
        }
@@ -98,17 +110,20 @@ function add_overhead_cost($stock_id, $qty, $date_, $costs, $adj_only=false)
                $qoh = 0;
        if ($adj_only)
        {
-               if ($qty != 0)
-                       $costs = $qty * $costs;
                if ($qoh>0)
-                       $overhead_cost = ($qoh * $overhead_cost + $costs) / $qoh;
+               {
+                       if ($qoh + $qty != 0)   
+                               $overhead_cost = ($qoh * $overhead_cost + $qty * $costs) /      ($qoh + $qty);
+                       elseif ($qty == 0)
+                               $overhead_cost = ($qoh * $overhead_cost + $costs) / $qoh;
+               }                       
                else // Journal Entry if QOH is 0/negative 
                {
                        global $Refs;
 
                        $id = get_next_trans_no(ST_JOURNAL);
-                       $ref = $Refs->get_next(ST_JOURNAL);
-                       
+                       $ref = $Refs->get_next(ST_JOURNAL, null, $date_);
+
                        $stock_gl_code = get_stock_gl_code($stock_id);
                        add_journal(ST_JOURNAL, $id, $costs, $date_, get_company_currency(), $ref);
                        $memo = "WO Overhead cost settlement JV for zero/negative respository of ".$stock_id;
@@ -119,7 +134,7 @@ function add_overhead_cost($stock_id, $qty, $date_, $costs, $adj_only=false)
                                -$costs);
                        //GL Posting to inventory adjustment account
                        add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, 
-                               $stock_gl_code["adjustment_account"],
+                               $stock_gl_code["assembly_account"],
                                $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo,
                                $costs);
                                
@@ -154,16 +169,19 @@ function add_labour_cost($stock_id, $qty, $date_, $costs, $adj_only=false)
                $qoh = 0;
        if ($adj_only)
        {
-               if ($qty != 0)
-                       $costs = $qty * $costs;
                if ($qoh>0)
-                       $labour_cost = ($qoh * $labour_cost + $costs) / $qoh;   
+               {
+                       if ($qoh + $qty != 0)   
+                               $labour_cost = ($qoh * $labour_cost + $qty * $costs) /  ($qoh + $qty);
+                       elseif ($qty == 0)
+                               $labour_cost = ($qoh * $labour_cost + $costs) / $qoh;
+               }               
                else // Journal Entry if QOH is 0/negative 
                {
                        global $Refs;
 
                        $id = get_next_trans_no(ST_JOURNAL);
-                       $ref = $Refs->get_next(ST_JOURNAL);
+                       $ref = $Refs->get_next(ST_JOURNAL, null, $date_);
                        add_journal(ST_JOURNAL, $id, $costs, $date_, get_company_currency(), $ref);
 
                        $stock_gl_code = get_stock_gl_code($stock_id);
@@ -175,7 +193,7 @@ function add_labour_cost($stock_id, $qty, $date_, $costs, $adj_only=false)
                                -$costs);
                        //GL Posting to inventory adjustment account
                        add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, 
-                               $stock_gl_code["adjustment_account"],
+                               $stock_gl_code["assembly_account"],
                                $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo,
                                $costs);
 
@@ -210,16 +228,14 @@ function add_issue_cost($stock_id, $qty, $date_, $costs, $adj_only=false)
                $qoh = 0;
        if ($adj_only)
        {
-               if ($qty != 0)
-                       $costs = $qty * $costs;
                if ($qoh>0)
-                       $material_cost = $costs / $qoh;
+                       $material_cost = ($qoh * $material_cost + $costs) / $qoh;
                else // Journal Entry if QOH is 0/negative
                {
                        global $Refs;
 
                        $id = get_next_trans_no(ST_JOURNAL);
-                       $ref = $Refs->get_next(ST_JOURNAL);
+                       $ref = $Refs->get_next(ST_JOURNAL, null, $date_);
                        add_journal(ST_JOURNAL, $id, $costs, $date_, get_company_currency(), $ref);
                        
                        $stock_gl_code = get_stock_gl_code($stock_id);
@@ -231,7 +247,7 @@ function add_issue_cost($stock_id, $qty, $date_, $costs, $adj_only=false)
                                -$costs);
                        //GL Posting to inventory adjustment account
                        add_gl_trans_std_cost(ST_JOURNAL, $id, $date_, 
-                               $stock_gl_code["adjustment_account"],
+                               $stock_gl_code["assembly_account"],
                                $stock_gl_code['dimension_id'], $stock_gl_code['dimension2_id'], $memo,
                                $costs);
                                
@@ -245,7 +261,7 @@ function add_issue_cost($stock_id, $qty, $date_, $costs, $adj_only=false)
        else
        {
                if ($qoh + $qty != 0)   
-                       $material_cost = ($qty * $costs) /      ($qoh + $qty);
+                       $material_cost = ($qoh * $material_cost + $qty * $costs) /      ($qoh + $qty);
        }       
        $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=material_cost+"
                .db_escape($material_cost)
@@ -265,7 +281,8 @@ function add_wo_costs_journal($wo_id, $amount, $cost_type, $cr_acc, $db_acc, $da
        begin_transaction();
 
     $journal_id = get_next_trans_no(ST_JOURNAL);
-    if (!$ref) $ref = $Refs->get_next(ST_JOURNAL);
+
+    if (!$ref) $ref = $Refs->get_next(ST_JOURNAL, null, $date);
 
        add_gl_trans_std_cost(ST_JOURNAL, $journal_id, $date, $cr_acc,
                0, 0, $wo_cost_types[$cost_type], -$amount);
@@ -275,8 +292,8 @@ function add_wo_costs_journal($wo_id, $amount, $cost_type, $cr_acc, $db_acc, $da
                add_bank_trans(ST_JOURNAL, $journal_id, $is_bank_to, "",
                        $date, -$amount, PT_WORKORDER, $wo_id, get_company_currency(),
                        "Cannot insert a destination bank transaction");
-       } else
-               add_journal(ST_JOURNAL, $journal_id, $amount, $date, get_company_currency(), $ref);
+       } 
+       add_journal(ST_JOURNAL, $journal_id, $amount, $date, get_company_currency(), $ref);
 
        add_gl_trans_std_cost(ST_JOURNAL, $journal_id, $date, $db_acc,
                $dim1, $dim2,  $wo_cost_types[$cost_type], $amount);