Next fixes to db_pager usage/behaviour.
[fa-stable.git] / inventory / inquiry / stock_movements.php
index 0f4b21daaf8c2a8220596379bd7dac48ebbe5117..1731e7bfe911f55ef30794957b1f75749c966af4 100644 (file)
@@ -3,6 +3,7 @@
 
 $page_security = 2;
 $path_to_root="../..";
+include($path_to_root . "/includes/db_pager.inc");
 include_once($path_to_root . "/includes/session.inc");
 
 include_once($path_to_root . "/includes/date_functions.inc");
@@ -19,10 +20,7 @@ if ($use_date_picker)
 page(_("Inventory Item Movement"), false, false, "", $js);
 //------------------------------------------------------------------------------------------------
 
-if(get_post('ShowMoves')) 
-{
-       $Ajax->activate('doc_tbl');
-}
+check_db_has_stock_items(_("There are no items defined in the system."));
 
 if (isset($_GET['stock_id']))
 {
@@ -48,96 +46,66 @@ end_table();
 end_form();
 
 set_global_stock_item($_POST['stock_id']);
+$item_dec = get_qty_dec($_POST['stock_id']);
+//
+//     Get summary displayed in headewr and footer.
+//
+function get_summary(&$table)
+{
+       global $Ajax, $item_dec;
 
-$before_date = date2sql($_POST['BeforeDate']);
-$after_date = date2sql($_POST['AfterDate']);
-
-$sql = "SELECT type, trans_no, tran_date, person_id, qty, reference
+       $sql = "SELECT
+               Sum(qty) as sum,
+               Sum(IF(qty>0, qty, 0)) as in_qty,
+               Sum(IF(qty<0, -qty, 0)) as out_qty
        FROM ".TB_PREF."stock_moves
        WHERE loc_code='" . $_POST['StockLocation'] . "'
-       AND tran_date >= '". $after_date . "'
-       AND tran_date <= '" . $before_date . "'
-       AND stock_id = '" . $_POST['stock_id'] . "' ORDER BY tran_date,trans_id";
-$result = db_query($sql, "could not query stock moves");
-
-check_db_error("The stock movements for the selected criteria could not be retrieved",$sql);
-
-div_start('doc_tbl');
-start_table("$table_style width=70%");
-$th = array(_("Type"), _("#"), _("Reference"), _("Date"), _("Detail"),
-       _("Quantity In"), _("Quantity Out"), _("Quantity On Hand"));
-
-table_header($th);
-
-$sql = "SELECT SUM(qty) FROM ".TB_PREF."stock_moves WHERE stock_id='" . $_POST['stock_id'] . "'
-       AND loc_code='" . $_POST['StockLocation'] . "'
-       AND tran_date < '" . $after_date . "'";
-$before_qty = db_query($sql, "The starting quantity on hand could not be calculated");
-
-$before_qty_row = db_fetch_row($before_qty);
-$after_qty = $before_qty = $before_qty_row[0];
-
-if (!isset($before_qty_row[0]))
+       AND tran_date >= '". date2sql($_POST['AfterDate']) . "'
+       AND tran_date <= '" . date2sql($_POST['BeforeDate']) . "'
+       AND stock_id = '" . $_POST['stock_id'] . "'";
+       " GROUP BY rec";
+       $result = db_query($sql, "cannot retrieve stock moves");
+
+       $qty = db_fetch($result);
+
+       $sum['beg'] = get_qoh_on_date($_POST['stock_id'], $_POST['StockLocation'],
+               add_days($_POST['AfterDate'], -1));
+       $sum['in'] = $qty['in_qty'];
+       $sum['out'] = $qty['out_qty'];
+       $sum['end'] = $sum['beg'] + $qty['sum'];
+       $sum['dec'] = $item_dec = get_qty_dec($_POST['stock_id']);
+
+       $table->sum = $sum;
+ }
+//-----------------------------------------------------------------------------
+
+function systype_name($row)
 {
-       $after_qty = $before_qty = 0;
+       return systypes::name($row["type"]);
 }
 
-start_row("class='inquirybg'");
-label_cell("<b>"._("Quantity on hand before") . " " . $_POST['AfterDate']."</b>", "align=center colspan=5");
-label_cell("&nbsp;", "colspan=2");
-$dec = get_qty_dec($_POST['stock_id']);
-qty_cell($before_qty, false, $dec);
-end_row();
-
-$j = 1;
-$k = 0; //row colour counter
-
-$total_in = 0;
-$total_out = 0;
-
-while ($myrow = db_fetch($result))
+function trans_view($row)
 {
+       return  get_trans_view_str($row["type"], $row["trans_no"]);
+}
 
-       alt_table_row_color($k);
-
-       $trandate = sql2date($myrow["tran_date"]);
-
-       $type_name = systypes::name($myrow["type"]);
-
-       if ($myrow["qty"] > 0)
-       {
-               $quantity_formatted = number_format2($myrow["qty"], $dec);
-               $total_in += $myrow["qty"];
-       }
-       else
-       {
-               $quantity_formatted = number_format2(-$myrow["qty"], $dec);
-               $total_out += -$myrow["qty"];
-       }
-       $after_qty += $myrow["qty"];
-
-       label_cell($type_name);
-
-       label_cell(get_trans_view_str($myrow["type"], $myrow["trans_no"]));
-
-       label_cell(get_trans_view_str($myrow["type"], $myrow["trans_no"], $myrow["reference"]));
-       label_cell($trandate);
-
-       $person = $myrow["person_id"];
+function show_details($row)
+{
+       $person = $row["person_id"];
        $gl_posting = "";
 
-       if (($myrow["type"] == 13) || ($myrow["type"] == 11))
+       if (($row["type"] == 13) || ($row["type"] == 11))
        {
-               $cust_row = get_customer_details_from_trans($myrow["type"], $myrow["trans_no"]);
+               $cust_row = get_customer_details_from_trans($row["type"], $row["trans_no"]);
 
                if (strlen($cust_row['name']) > 0)
                        $person = $cust_row['name'] . " (" . $cust_row['br_name'] . ")";
 
        }
-       elseif ($myrow["type"] == 25)
+       elseif ($row["type"] == 25 || $row['type'] == 21)
        {
                // get the supplier name
-               $sql = "SELECT supp_name FROM ".TB_PREF."suppliers WHERE supplier_id = '" . $myrow["person_id"] . "'";
+               $sql = "SELECT supp_name FROM ".TB_PREF."suppliers WHERE supplier_id = '" . $row["person_id"] . "'";
                $supp_result = db_query($sql,"check failed");
 
                $supp_row = db_fetch($supp_result);
@@ -145,47 +113,119 @@ while ($myrow = db_fetch($result))
                if (strlen($supp_row['supp_name']) > 0)
                        $person = $supp_row['supp_name'];
        }
-       elseif ($myrow["type"] == systypes::location_transfer() || $myrow["type"] == systypes::inventory_adjustment())
+       elseif ($row["type"] == systypes::location_transfer() || $row["type"] == systypes::inventory_adjustment())
        {
                // get the adjustment type
-               $movement_type = get_movement_type($myrow["person_id"]);
+               $movement_type = get_movement_type($row["person_id"]);
                $person = $movement_type["name"];
        }
-       elseif ($myrow["type"]==systypes::work_order() || $myrow["type"] == 28  ||
-               $myrow["type"] == 29)
+       elseif ($row["type"]==systypes::work_order() || $row["type"] == 28  ||
+               $row["type"] == 29)
        {
                $person = "";
        }
+       return $person;
+}
+
+$total_out = 0;
+$total_in = 0;
 
-       label_cell($person);
+function qty_in($row)
+{
+       $q = $row["qty"];
+       return $q <= 0 ? '' : $q;
+}
 
-       label_cell((($myrow["qty"] >= 0) ? $quantity_formatted : ""), "nowrap align=right");
-       label_cell((($myrow["qty"] < 0) ? $quantity_formatted : ""), "nowrap align=right");
-       qty_cell($after_qty, false, $dec);
-       end_row();
-       $j++;
-       If ($j == 12)
-       {
-               $j = 1;
-               table_header($th);
+function qty_out($row)
+{
+       $q = -$row["qty"];
+       return $q <= 0 ? '' : $q;
+}
+/*
+function show_qoh($row)
+{
+       $qoh =& $_SESSION['qoh'];
+       $qoh += $row['qty'];
+       return $qoh;
+}
+*/
+function before_status($pager)
+{
+       $r[] =
+               array( "<b>"._("Quantity on hand before") . " " . $_POST['AfterDate']
+               .':'."</b>", "align='right' colspan=5");
+       if($pager->sum['beg']>=0) {
+               $r[] = array (number_format2($pager->sum['beg'], $pager->sum['dec']),
+                       "align='right'");
+               $r[] = array("&nbsp;");
+       } else {
+               $r[] = array("&nbsp;");
+               $r[] = array (number_format2($pager->sum['beg'], $pager->sum['dec']),
+                       "align='right'");
        }
-//end of page full new headings if
+       return $r;
 }
-//end of while loop
-
-// 2008-06-14. Always write this.
-//if ($total_in != 0 || $total_out != 0)
-//{
-       start_row("class='inquirybg'");
-    label_cell("<b>"._("Quantity on hand after") . " " . $_POST['BeforeDate']."</b>", "align=center colspan=5");
-    qty_cell($total_in, false, $dec);
-    qty_cell($total_out, false, $dec);
-    qty_cell($after_qty, false, $dec);
-    end_row();
-//}
-
-end_table(1);
-div_end();
-end_page();
 
+function after_status($pager)
+{
+       $r[] =
+               array( "<b>"._("Quantity on hand after") . " " . $_POST['BeforeDate']
+               .':'."</b>", "align='right' colspan=5");
+       if($pager->sum['end']>=0) {
+               $r[] = array (number_format2($pager->sum['end'], $pager->sum['dec']),
+                       "align='right'");
+               $r[] = array("&nbsp;");
+       } else {
+               $r[] = array("&nbsp;");
+               $r[] = array (number_format2($pager->sum['end'], $pager->sum['dec']),
+                       "align='right'");
+       }
+       return $r;
+}
+//-----------------------------------------------------------------------------
+
+$before_date = date2sql($_POST['BeforeDate']);
+$after_date = date2sql($_POST['AfterDate']);
+
+$sql = "SELECT 
+       type, 
+       trans_no, 
+       reference,
+       tran_date, 
+       person_id, 
+       qty
+       FROM ".TB_PREF."stock_moves
+       WHERE loc_code='" . $_POST['StockLocation'] . "'
+       AND tran_date >= '". $after_date . "'
+       AND tran_date <= '" . $before_date . "'
+       AND stock_id = '" . $_POST['stock_id'] . "'";
+
+$cols = array(
+       _("Type") => array('fun'=>'systype_name' ), 
+       _("#") => array('fun'=>'trans_view' ), 
+       _("Reference"), 
+       _("Date") => array('date', 'ord'=>'desc'), 
+       _("Detail") => array('fun'=>'show_details' ), 
+       _("Quantity In") => array('type'=>'qty', 'dec'=> $item_dec, 'insert'=>true,'fun'=>'qty_in' ),
+       _("Quantity Out") => array('type'=>'qty', 'dec'=> $item_dec,'insert'=>true,'fun'=>'qty_out' ), 
+//     _("Quantity On Hand") => array('insert'=>true,'type'=>'amount', 'fun'=>'show_qoh' )
+);
+
+$table =& new_db_pager('doc_tbl', $sql, $cols);
+$table->set_header('before_status');
+$table->set_footer('after_status');
+
+if (!$table->ready)  // new sql query - update summary
+       get_summary($table);
+
+if (get_post('ShowMoves')) {
+       $table->set_sql($sql);
+       $table->set_columns($cols);
+}
+start_form();
+
+display_db_pager($table);
+
+end_form();
+end_page();
 ?>