Prevented wanings for sqls without 'inactive' field.
[fa-stable.git] / includes / db / manufacturing_db.inc
index 6a4a023b2a7c4f76a6353f1692b30089441dbc83..31fb3eceaf8d306d9243a3b1a9cc9dade80ac87e 100644 (file)
 //----------------------------------------------------------------------------------------
 function get_demand_qty($stock_id, $location)
 {
-       $sql = "SELECT SUM(".TB_PREF."sales_order_details.quantity - ".TB_PREF."sales_order_details.qty_sent) AS QtyDemand
-                               FROM ".TB_PREF."sales_order_details,
+       $sql = "SELECT SUM(".TB_PREF."sales_order_details.quantity - "
+               .TB_PREF."sales_order_details.qty_sent) AS QtyDemand
+                       FROM ".TB_PREF."sales_order_details,
                                        ".TB_PREF."sales_orders
-                               WHERE ".TB_PREF."sales_order_details.order_no=".TB_PREF."sales_orders.order_no AND ";
+                               WHERE ".TB_PREF."sales_order_details.order_no="
+                               .TB_PREF."sales_orders.order_no AND ";
        if ($location != "")
-               $sql .= TB_PREF."sales_orders.from_stk_loc ='$location' AND ";
-       $sql .= TB_PREF."sales_order_details.stk_code = '$stock_id'";
+               $sql .= TB_PREF."sales_orders.from_stk_loc =".db_escape($location)." AND ";
+       $sql .= TB_PREF."sales_order_details.stk_code = ".db_escape($stock_id);
 
     $result = db_query($sql,"No transactions were returned");
        $row = db_fetch($result);
+       if ($row === false)
+               return 0;
        return $row['QtyDemand'];
 }
 
 $bom_list = array(); 
+$qoh_stock = NULL;
+
+function load_stock_levels($location)
+{
+       global $qoh_stock;
+       $date = date2sql(Today());
+
+       $sql = "SELECT stock_id, SUM(qty) FROM ".TB_PREF."stock_moves WHERE tran_date <= '$date'";
+       if ($location != '') $sql .= " AND loc_code = ".db_escape($location);
+       $sql .= " GROUP BY stock_id";
+       $result = db_query($sql, "QOH calulcation failed");
+       while ($row = db_fetch($result)) {
+               $qoh_stock[$row[0]] = $row[1];
+       }
+}
 
 // recursion fixed by Tom Moulton. Max 10 recursion levels.
-function stock_demand_manufacture($stock_id, $qty, $demand_id, $level=0) 
+function stock_demand_manufacture($stock_id, $qty, $demand_id, $location, $level=0) 
 {
-       global $bom_list;
+       global $bom_list, $qoh_stock;
        $demand = 0.0;
        if ($level > 10) {
                display_warning("BOM Too many Manufacturing levels deep $level");
                return $demand;
        }
+       // Load all stock levels (stock moves) into $qoh_stock
+       if ($qoh_stock == NULL) {
+               $qoh_stock = array();
+               load_stock_levels($location);
+       }
+       $stock_qty = $qoh_stock[$stock_id];
+       if ($stock_qty == NULL) $stock_qty = 0;
+       if ($qty <= $stock_qty) return $demand;
        $bom = $bom_list[$stock_id];
        if ($bom == NULL) {
-               $sql = "SELECT parent, component, quantity FROM ".TB_PREF."bom WHERE parent = '$stock_id'";
+               $sql = "SELECT parent, component, quantity FROM "
+                       .TB_PREF."bom WHERE parent = ".db_escape($stock_id);
+               if ($location != "") $sql .= " AND loc_code = ".db_escape($location);
                $result = db_query($sql, "Could not search bom");
                $bom = array();
                // Even if we get no results, remember that fact 
@@ -58,7 +87,7 @@ function stock_demand_manufacture($stock_id, $qty, $demand_id, $level=0)
                if ($row[1] == '') continue;
                $q = $qty * $row[2];
                if ($row[1] == $demand_id) $demand += $q;
-               $demand += stock_demand_manufacture($row[1], $q, $demand_id, $level+1);
+               $demand += stock_demand_manufacture($row[1], $q, $demand_id, $location, $level+1);
        }
        return $demand;
 }
@@ -74,26 +103,28 @@ function get_demand_asm_qty($stock_id, $location)
                                                ".TB_PREF."stock_master
                                   WHERE ".TB_PREF."sales_orders.order_no = ".TB_PREF."sales_order_details.order_no AND ";
        if ($location != "")
-               $sql .= TB_PREF."sales_orders.from_stk_loc ='$location' AND ";
+               $sql .= TB_PREF."sales_orders.from_stk_loc =".db_escape($location)." AND ";
        $sql .= TB_PREF."sales_order_details.quantity-".TB_PREF."sales_order_details.qty_sent > 0 AND
                                   ".TB_PREF."stock_master.stock_id=".TB_PREF."sales_order_details.stk_code AND
                                   (".TB_PREF."stock_master.mb_flag='M' OR ".TB_PREF."stock_master.mb_flag='A')
                                   GROUP BY ".TB_PREF."sales_order_details.stk_code";
     $result = db_query($sql, "No transactions were returned");
        while ($row = db_fetch_row($result)) {
-               $demand_qty += stock_demand_manufacture($row[0], $row[1], $stock_id);
+               $demand_qty += stock_demand_manufacture($row[0], $row[1], $stock_id, $location);
        }
        return $demand_qty;
 }
 
 function get_on_porder_qty($stock_id, $location)
 {
-       $sql = "SELECT SUM(".TB_PREF."purch_order_details.quantity_ordered - ".TB_PREF."purch_order_details.quantity_received) AS qoo
-               FROM ".TB_PREF."purch_order_details INNER JOIN ".TB_PREF."purch_orders ON ".TB_PREF."purch_order_details.order_no=".TB_PREF."purch_orders.order_no
-               WHERE ".TB_PREF."purch_order_details.item_code='$stock_id' ";
+       $sql = "SELECT SUM(".TB_PREF."purch_order_details.quantity_ordered - "
+               .TB_PREF."purch_order_details.quantity_received) AS qoo
+               FROM ".TB_PREF."purch_order_details INNER JOIN "
+                       .TB_PREF."purch_orders ON ".TB_PREF."purch_order_details.order_no=".TB_PREF."purch_orders.order_no
+               WHERE ".TB_PREF."purch_order_details.item_code=".db_escape($stock_id)." ";
        if ($location != "")
-               $sql .= "AND ".TB_PREF."purch_orders.into_stock_location='$location' ";
-       $sql .= "AND ".TB_PREF."purch_order_details.item_code='$stock_id'";
+               $sql .= "AND ".TB_PREF."purch_orders.into_stock_location=".db_escape($location)." ";
+       $sql .= "AND ".TB_PREF."purch_order_details.item_code=".db_escape($stock_id);
        $qoo_result = db_query($sql,"could not receive quantity on order for item");
 
        if (db_num_rows($qoo_result) == 1)
@@ -114,9 +145,9 @@ function get_on_worder_qty($stock_id, $location)
                (".TB_PREF."wo_requirements.units_req-".TB_PREF."wo_requirements.units_issued)) AS qoo
                FROM ".TB_PREF."wo_requirements INNER JOIN ".TB_PREF."workorders 
                        ON ".TB_PREF."wo_requirements.workorder_id=".TB_PREF."workorders.id
-               WHERE ".TB_PREF."wo_requirements.stock_id='$stock_id' ";
+               WHERE ".TB_PREF."wo_requirements.stock_id=".db_escape($stock_id)." ";
        if ($location != "")
-               $sql .= "AND ".TB_PREF."wo_requirements.loc_code='$location' ";
+               $sql .= "AND ".TB_PREF."wo_requirements.loc_code=".db_escape($location)." ";
        $sql .= "AND ".TB_PREF."workorders.released=1";
        $qoo_result = db_query($sql,"could not receive quantity on order for item");
        if (db_num_rows($qoo_result) == 1)
@@ -131,9 +162,9 @@ function get_on_worder_qty($stock_id, $location)
        {
                $sql = "SELECT SUM((".TB_PREF."workorders.units_reqd-".TB_PREF."workorders.units_issued)) AS qoo
                        FROM ".TB_PREF."workorders 
-                       WHERE ".TB_PREF."workorders.stock_id='$stock_id' ";
+                       WHERE ".TB_PREF."workorders.stock_id=".db_escape($stock_id)." ";
                if ($location != "")    
-                       $sql .= "AND ".TB_PREF."workorders.loc_code='$location' ";
+                       $sql .= "AND ".TB_PREF."workorders.loc_code=".db_escape($location)." ";
                $sql .= "AND ".TB_PREF."workorders.released=1";
                $qoo_result = db_query($sql,"could not receive quantity on order for item");
                if (db_num_rows($qoo_result) == 1)
@@ -147,7 +178,8 @@ function get_on_worder_qty($stock_id, $location)
 
 function get_mb_flag($stock_id)
 {
-       $sql = "SELECT mb_flag FROM ".TB_PREF."stock_master WHERE stock_id = '" . $stock_id . "'";
+       $sql = "SELECT mb_flag FROM ".TB_PREF."stock_master WHERE stock_id = "
+               .db_escape($stock_id);
        $result = db_query($sql, "retreive mb_flag from item");
        
        if (db_num_rows($result) == 0)
@@ -166,7 +198,7 @@ function get_bom($item)
        ".TB_PREF."stock_master.material_cost+ ".TB_PREF."stock_master.labour_cost+".TB_PREF."stock_master.overhead_cost AS standard_cost, units, 
        ".TB_PREF."bom.quantity * (".TB_PREF."stock_master.material_cost+ ".TB_PREF."stock_master.labour_cost+ ".TB_PREF."stock_master.overhead_cost) AS ComponentCost 
        FROM (".TB_PREF."workcentres, ".TB_PREF."locations, ".TB_PREF."bom) INNER JOIN ".TB_PREF."stock_master ON ".TB_PREF."bom.component = ".TB_PREF."stock_master.stock_id 
-       WHERE ".TB_PREF."bom.parent = '" . $item . "'
+       WHERE ".TB_PREF."bom.parent = ".db_escape($item)."
                AND ".TB_PREF."workcentres.id=".TB_PREF."bom.workcentre_added
                AND ".TB_PREF."bom.loc_code = ".TB_PREF."locations.loc_code ORDER BY ".TB_PREF."bom.id";