Security update merged from 2.1.
[fa-stable.git] / manufacturing / includes / db / work_orders_db.inc
index 4c7f1855ae7b3a5bcba903d50b6e531413f7d06c..f97f87a5e3813e39d97d6d014029a852850a89b4 100644 (file)
@@ -17,12 +17,11 @@ function add_material_cost($stock_id, $qty, $date_)
     $result = get_bom($stock_id);
        while ($bom_item = db_fetch($result))
        {
-               $sql = "SELECT material_cost FROM ".TB_PREF."stock_master WHERE stock_id = '".$bom_item['component']."'";
-               $res = db_query($sql);
-               $myrow = db_fetch($res);
-               $m_cost += ($bom_item['quantity'] * $myrow['material_cost']);
+               $standard_cost = get_standard_cost($bom_item['component']);
+               $m_cost += ($bom_item['quantity'] * $standard_cost);
        }
-       $sql = "SELECT material_cost FROM ".TB_PREF."stock_master WHERE stock_id = '$stock_id'";
+       $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'];
@@ -32,15 +31,75 @@ function add_material_cost($stock_id, $qty, $date_)
        else
                $material_cost = ($qoh * $material_cost + $qty * $m_cost) /     ($qoh + $qty);
        $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=$material_cost
-               WHERE stock_id='$stock_id'";
+               WHERE stock_id=".db_escape($stock_id);
+       db_query($sql,"The cost details for the inventory item could not be updated");
+}
+
+function add_overhead_cost($stock_id, $qty, $date_, $costs)
+{
+       if ($qty != 0)
+               $costs /= $qty;
+       $sql = "SELECT overhead_cost FROM ".TB_PREF."stock_master WHERE stock_id = "
+               .db_escape($stock_id);
+       $result = db_query($sql);
+       $myrow = db_fetch($result);
+       $overhead_cost =  $myrow['overhead_cost'];
+       $qoh = get_qoh_on_date($stock_id, null, $date_);
+       if ($qoh + $qty <= 0)
+               $overhead_cost = 0;
+       else
+               $overhead_cost = ($qoh * $overhead_cost + $qty * $costs) /      ($qoh + $qty);
+       $sql = "UPDATE ".TB_PREF."stock_master SET overhead_cost=".db_escape($overhead_cost)."
+               WHERE stock_id=".db_escape($stock_id);
+       db_query($sql,"The cost details for the inventory item could not be updated");
+}
+
+function add_labour_cost($stock_id, $qty, $date_, $costs)
+{
+       if ($qty != 0)
+               $costs /= $qty;
+       $sql = "SELECT labour_cost FROM ".TB_PREF."stock_master WHERE stock_id = "
+               .db_escape($stock_id);
+       $result = db_query($sql);
+       $myrow = db_fetch($result);
+       $labour_cost =  $myrow['labour_cost'];
+       $qoh = get_qoh_on_date($stock_id, null, $date_);
+       if ($qoh + $qty <= 0)
+               $labour_cost = 0;
+       else
+               $labour_cost = ($qoh * $labour_cost + $qty * $costs) /  ($qoh + $qty);
+       $sql = "UPDATE ".TB_PREF."stock_master SET labour_cost=".db_escape($labour_cost)."
+               WHERE stock_id=".db_escape($stock_id);
+       db_query($sql,"The cost details for the inventory item could not be updated");
+}
+
+function add_issue_cost($stock_id, $qty, $date_, $costs)
+{
+       if ($qty != 0)
+               $costs /= $qty;
+       $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'];
+       $qoh = get_qoh_on_date($stock_id, null, $date_);
+       if ($qoh + $qty  <= 0)
+               $material_cost = 0;
+       else
+               $material_cost = ($qty * $costs) /      ($qoh + $qty);
+       $sql = "UPDATE ".TB_PREF."stock_master SET material_cost=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");
 }
 
 function add_work_order($wo_ref, $loc_code, $units_reqd, $stock_id,
-       $type, $date_, $required_by, $costs, $memo_)
+       $type, $date_, $required_by, $memo_, $costs, $cr_acc, $labour, $cr_lab_acc)
 {
-       if (!($type == wo_types::advanced()))
-               return add_work_order_quick($wo_ref, $loc_code, $units_reqd, $stock_id, $type, $date_, $costs, $memo_);
+       global $Refs;
+
+       if (!($type == WO_ADVANCED))
+               return add_work_order_quick($wo_ref, $loc_code, $units_reqd, $stock_id, $type, $date_, $memo_, $costs, $cr_acc, $labour, $cr_lab_acc);
 
        begin_transaction();
 
@@ -51,16 +110,17 @@ function add_work_order($wo_ref, $loc_code, $units_reqd, $stock_id,
 
        $sql = "INSERT INTO ".TB_PREF."workorders (wo_ref, loc_code, units_reqd, stock_id,
                type, date_, required_by)
-       VALUES (".db_escape($wo_ref).", ".db_escape($loc_code).", $units_reqd, '$stock_id',
-               $type, '$date', '$required')";
+       VALUES (".db_escape($wo_ref).", ".db_escape($loc_code).", "
+       .db_escape($units_reqd).", ".db_escape($stock_id).",
+               ".db_escape($type).", '$date', ".db_escape($required).")";
        db_query($sql, "could not add work order");
 
        $woid = db_insert_id();
 
-       add_comments(systypes::work_order(), $woid, $required_by, $memo_);
+       add_comments(ST_WORKORDER, $woid, $required_by, $memo_);
 
-       references::save(systypes::work_order(), $woid, $wo_ref);
-       add_audit_trail(systypes::work_order(), $woid, $date_);
+       $Refs->save(ST_WORKORDER, $woid, $wo_ref);
+       add_audit_trail(ST_WORKORDER, $woid, $date_);
 
        commit_transaction();
 
@@ -81,15 +141,15 @@ function update_work_order($woid, $loc_code, $units_reqd, $stock_id,
        $required = date2sql($required_by);
 
        $sql = "UPDATE ".TB_PREF."workorders SET loc_code=".db_escape($loc_code).",
-               units_reqd=$units_reqd, stock_id='$stock_id',
-               required_by='$required',
+               units_reqd=".db_escape($units_reqd).", stock_id=".db_escape($stock_id).",
+               required_by=".db_escape($required).",
                date_='$date'
-               WHERE id = $woid";
+               WHERE id = ".db_escape($woid);
 
        db_query($sql, "could not update work order");
 
-       update_comments(systypes::work_order(), $woid, null, $memo_);
-       add_audit_trail(systypes::work_order(), $woid, $date_, _("Updated."));
+       update_comments(ST_WORKORDER, $woid, null, $memo_);
+       add_audit_trail(ST_WORKORDER, $woid, $date_, _("Updated."));
 
        commit_transaction();
 }
@@ -104,11 +164,11 @@ function delete_work_order($woid)
        delete_wo_requirements($woid);
 
        // delete the actual work order
-       $sql = "DELETE FROM ".TB_PREF."workorders WHERE id=$woid";
+       $sql = "DELETE FROM ".TB_PREF."workorders WHERE id=".db_escape($woid);
        db_query($sql,"The work order could not be deleted");
 
-       delete_comments(systypes::work_order(), $woid);
-       add_audit_trail(systypes::work_order(), $woid, $_POST['date_'], _("Canceled."));
+       delete_comments(ST_WORKORDER, $woid);
+       add_audit_trail(ST_WORKORDER, $woid, $_POST['date_'], _("Canceled."));
 
        commit_transaction();
 }
@@ -118,11 +178,11 @@ function delete_work_order($woid)
 function get_work_order($woid, $allow_null=false)
 {
     $sql = "SELECT ".TB_PREF."workorders.*, ".TB_PREF."stock_master.description As StockItemName,
-               ".TB_PREF."locations.location_name
+               ".TB_PREF."locations.location_name, ".TB_PREF."locations.delivery_address 
                FROM ".TB_PREF."workorders, ".TB_PREF."stock_master, ".TB_PREF."locations
                WHERE ".TB_PREF."stock_master.stock_id=".TB_PREF."workorders.stock_id
                AND     ".TB_PREF."locations.loc_code=".TB_PREF."workorders.loc_code
-               AND ".TB_PREF."workorders.id=$woid
+               AND ".TB_PREF."workorders.id=".db_escape($woid)."
                GROUP BY ".TB_PREF."workorders.id";
 
        $result = db_query($sql, "The work order issues could not be retrieved");
@@ -137,7 +197,7 @@ function get_work_order($woid, $allow_null=false)
 
 function work_order_has_productions($woid)
 {
-       $sql = "SELECT COUNT(*) FROM ".TB_PREF."wo_manufacture WHERE workorder_id=$woid";
+       $sql = "SELECT COUNT(*) FROM ".TB_PREF."wo_manufacture WHERE workorder_id=".db_escape($woid);
        $result = db_query($sql, "query work order for productions");
 
        $myrow = db_fetch_row($result);
@@ -149,7 +209,7 @@ function work_order_has_productions($woid)
 
 function work_order_has_issues($woid)
 {
-       $sql = "SELECT COUNT(*) FROM ".TB_PREF."wo_issues WHERE workorder_id=$woid";
+       $sql = "SELECT COUNT(*) FROM ".TB_PREF."wo_issues WHERE workorder_id=".db_escape($woid);
        $result = db_query($sql, "query work order for issues");
 
        $myrow = db_fetch_row($result);
@@ -160,7 +220,7 @@ function work_order_has_issues($woid)
 
 function work_order_has_payments($woid)
 {
-    $result = get_bank_trans(null, null, payment_person_types::WorkOrder(), $woid);
+       $result = get_gl_wo_cost_trans($woid);
 
     return (db_num_rows($result) != 0);
 }
@@ -177,14 +237,14 @@ function release_work_order($woid, $releaseDate, $memo_)
        $date = date2sql($releaseDate);
 
        $sql = "UPDATE ".TB_PREF."workorders SET released_date='$date',
-               released=1 WHERE id = $woid";
+               released=1 WHERE id = ".db_escape($woid);
        db_query($sql, "could not release work order");
 
        // create Work Order Requirements based on the bom
        create_wo_requirements($woid, $stock_id);
 
-       add_comments(systypes::work_order(), $woid, $releaseDate, $memo_);
-       add_audit_trail(systypes::work_order(), $woid, $releaseDate,_("Released."));
+       add_comments(ST_WORKORDER, $woid, $releaseDate, $memo_);
+       add_audit_trail(ST_WORKORDER, $woid, $releaseDate,_("Released."));
 
        commit_transaction();
 }
@@ -193,7 +253,7 @@ function release_work_order($woid, $releaseDate, $memo_)
 
 function close_work_order($woid)
 {
-       $sql = "UPDATE ".TB_PREF."workorders SET closed=1 WHERE id = $woid";
+       $sql = "UPDATE ".TB_PREF."workorders SET closed=1 WHERE id = ".db_escape($woid);
        db_query($sql, "could not close work order");
 }
 
@@ -201,7 +261,7 @@ function close_work_order($woid)
 
 function work_order_is_closed($woid)
 {
-       $sql = "SELECT closed FROM ".TB_PREF."workorders WHERE id = $woid";
+       $sql = "SELECT closed FROM ".TB_PREF."workorders WHERE id = ".db_escape($woid);
        $result = db_query($sql, "could not query work order");
        $row = db_fetch_row($result);
        return ($row[0] > 0);
@@ -211,9 +271,9 @@ function work_order_is_closed($woid)
 
 function work_order_update_finished_quantity($woid, $quantity, $force_close=0)
 {
-       $sql = "UPDATE ".TB_PREF."workorders SET units_issued = units_issued + $quantity,
-               closed = ((units_issued >= units_reqd) OR $force_close)
-               WHERE id = $woid";
+       $sql = "UPDATE ".TB_PREF."workorders SET units_issued = units_issued + ".db_escape($quantity).",
+               closed = ((units_issued >= units_reqd) OR ".db_escape($force_close).")
+               WHERE id = ".db_escape($woid);
 
        db_query($sql, "The work order issued quantity couldn't be updated");
 }
@@ -224,18 +284,19 @@ function void_work_order($woid)
 {
        $work_order = get_work_order($woid);
 
-       if (!($work_order["type"] == wo_types::advanced()))
+       if (!($work_order["type"] == WO_ADVANCED))
        {
                begin_transaction();
 
-               $sql = "UPDATE ".TB_PREF."workorders SET closed=1,units_issued=0 WHERE id = $woid";
+               $sql = "UPDATE ".TB_PREF."workorders SET closed=1,units_issued=0 WHERE id = "
+                       .db_escape($woid);
                db_query($sql, "The work order couldn't be voided");
 
                // void all related stock moves
-               void_stock_move(systypes::work_order(), $woid);
+               void_stock_move(ST_WORKORDER, $woid);
 
                // void any related gl trans
-               void_gl_trans(systypes::work_order(), $woid, true);
+               void_gl_trans(ST_WORKORDER, $woid, true);
 
                // clear the requirements units received
                void_wo_requirements($woid);