Incorrect Journal Balance (sales invoice) when many decimals in tax and price.
[fa-stable.git] / reporting / rep105.php
index e25b89aae94034ca24de57b4f91d4fdff55eaaca..584791ac52b6877602e51c694a9a239d50fc7358 100644 (file)
@@ -1,23 +1,31 @@
 <?php
-
-$page_security = 2;
+/**********************************************************************
+    Copyright (C) FrontAccounting, LLC.
+       Released under the terms of the GNU General Public License, GPL, 
+       as published by the Free Software Foundation, either version 3 
+       of the License, or (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
+$page_security = 'SA_SALESBULKREP';
 // ----------------------------------------------------------------
 // $ Revision: 2.0 $
 // Creator:    Joe Hunt
 // date_:      2005-05-19
 // Title:      Order Status List
 // ----------------------------------------------------------------
-$path_to_root="../";
+$path_to_root="..";
 
-include_once($path_to_root . "includes/session.inc");
-include_once($path_to_root . "includes/date_functions.inc");
-include_once($path_to_root . "includes/data_checks.inc");
-include_once($path_to_root . "sales/includes/sales_db.inc");
-include_once($path_to_root . "inventory/includes/db/items_category_db.inc");
+include_once($path_to_root . "/includes/session.inc");
+include_once($path_to_root . "/includes/date_functions.inc");
+include_once($path_to_root . "/includes/data_checks.inc");
+include_once($path_to_root . "/sales/includes/sales_db.inc");
+include_once($path_to_root . "/inventory/includes/db/items_category_db.inc");
 
 //----------------------------------------------------------------------------------------------------
 
-// trial_inquiry_controls();
 print_order_status_list();
 
 //----------------------------------------------------------------------------------------------------
@@ -27,32 +35,35 @@ function GetSalesOrders($from, $to, $category=0, $location=null, $backorder=0)
        $fromdate = date2sql($from);
        $todate = date2sql($to);
 
-       $sql= "SELECT ".TB_PREF."sales_orders.order_no,
-                               ".TB_PREF."sales_orders.debtor_no,
-                ".TB_PREF."sales_orders.branch_code,
-                ".TB_PREF."sales_orders.customer_ref,
-                ".TB_PREF."sales_orders.ord_date,
-                ".TB_PREF."sales_orders.from_stk_loc,
-                ".TB_PREF."sales_orders.delivery_date,
-                ".TB_PREF."sales_order_details.stk_code,
-                ".TB_PREF."stock_master.description,
-                ".TB_PREF."stock_master.units,
-                ".TB_PREF."sales_order_details.quantity,
-                ".TB_PREF."sales_order_details.qty_sent
-            FROM ".TB_PREF."sales_orders
-               INNER JOIN ".TB_PREF."sales_order_details
-                   ON ".TB_PREF."sales_orders.order_no = ".TB_PREF."sales_order_details.order_no
-               INNER JOIN ".TB_PREF."stock_master
-                   ON ".TB_PREF."sales_order_details.stk_code = ".TB_PREF."stock_master.stock_id
-            WHERE ".TB_PREF."sales_orders.ord_date >='$fromdate'
-                AND ".TB_PREF."sales_orders.ord_date <='$todate'";
+       $sql= "SELECT sorder.order_no,
+                               sorder.debtor_no,
+                sorder.branch_code,
+                sorder.customer_ref,
+                sorder.ord_date,
+                sorder.from_stk_loc,
+                sorder.delivery_date,
+                sorder.total,
+                line.stk_code,
+                item.description,
+                item.units,
+                line.quantity,
+                line.qty_sent
+            FROM ".TB_PREF."sales_orders sorder
+                       INNER JOIN ".TB_PREF."sales_order_details line
+                   ON sorder.order_no = line.order_no
+                   AND sorder.trans_type = line.trans_type
+                   AND sorder.trans_type = ".ST_SALESORDER."
+               INNER JOIN ".TB_PREF."stock_master item
+                   ON line.stk_code = item.stock_id
+            WHERE sorder.ord_date >='$fromdate'
+                AND sorder.ord_date <='$todate'";
        if ($category > 0)
-               $sql .= " AND ".TB_PREF."stock_master.category_id=$category";
+               $sql .= " AND item.category_id=".db_escape($category);
        if ($location != null)
-               $sql .= " AND ".TB_PREF."sales_orders.from_stk_loc='$location'";
+               $sql .= " AND sorder.from_stk_loc=".db_escape($location);
        if ($backorder)
-               $sql .= "AND ".TB_PREF."sales_order_details.quantity - ".TB_PREF."sales_order_details.qty_sent > 0";
-       $sql .= " ORDER BY ".TB_PREF."sales_orders.order_no";
+               $sql .= " AND line.quantity - line.qty_sent > 0";
+       $sql .= " ORDER BY sorder.order_no";
 
        return db_query($sql, "Error getting order details");
 }
@@ -63,18 +74,23 @@ function print_order_status_list()
 {
        global $path_to_root;
 
-       include_once($path_to_root . "reporting/includes/pdf_report.inc");
-
        $from = $_POST['PARAM_0'];
        $to = $_POST['PARAM_1'];
        $category = $_POST['PARAM_2'];
        $location = $_POST['PARAM_3'];
        $backorder = $_POST['PARAM_4'];
        $comments = $_POST['PARAM_5'];
+       $orientation = $_POST['PARAM_6'];
+       $destination = $_POST['PARAM_7'];
+       if ($destination)
+               include_once($path_to_root . "/reporting/includes/excel_report.inc");
+       else
+               include_once($path_to_root . "/reporting/includes/pdf_report.inc");
+       $orientation = ($orientation ? 'L' : 'P');
 
-       if ($category == reserved_words::get_all_numeric())
+       if ($category == ALL_NUMERIC)
                $category = 0;
-       if ($location == reserved_words::get_all())
+       if ($location == ALL_TEXT)
                $location = null;
        if ($category == 0)
                $cat = _('All');
@@ -83,7 +99,7 @@ function print_order_status_list()
        if ($location == null)
                $loc = _('All');
        else
-               $loc = $location;
+               $loc = get_location_name($location);
        if ($backorder == 0)
                $back = _('All Orders');
        else
@@ -96,8 +112,8 @@ function print_order_status_list()
 
        $aligns = array('left', 'left', 'right', 'right', 'right', 'right',     'right');
 
-       $headers = array(_('Code'),     _('Description'), _('Ordered'), _('Invoiced'),
-               _('Outstanding'), '');
+       $headers = array(_('Code'),     _('Description'), _('Ordered'), _('Delivered'),
+               _('Outstanding'), '', _('Total Amount'));
 
     $params =   array(         0 => $comments,
                                        1 => array(  'text' => _('Period'), 'from' => $from, 'to' => $to),
@@ -105,25 +121,22 @@ function print_order_status_list()
                                        3 => array(  'text' => _('Location'), 'from' => $loc, 'to' => ''),
                                        4 => array(  'text' => _('Selection'),'from' => $back,'to' => ''));
 
-       $cols2 = $cols;
        $aligns2 = $aligns;
 
-       $rep = new FrontReport(_('Order Status Listing'), "OrderStatusListing.pdf", user_pagesize());
+       $rep = new FrontReport(_('Order Status Listing'), "OrderStatusListing", user_pagesize(), 9, $orientation);
+    if ($orientation == 'L')
+       recalculate_cols($cols);
+       $cols2 = $cols;
        $rep->Font();
        $rep->Info($params, $cols, $headers, $aligns, $cols2, $headers2, $aligns2);
 
-       $rep->Header();
+       $rep->NewPage();
        $orderno = 0;
+       $grand_total = 0;
 
        $result = GetSalesOrders($from, $to, $category, $location, $backorder);
-
        while ($myrow=db_fetch($result))
        {
-               if ($rep->row < $rep->bottomMargin + (2 * $rep->lineHeight))
-               {
-                       $orderno = 0;
-                       $rep->Header();
-               }
                $rep->NewLine(0, 2, false, $orderno);
                if ($orderno != $myrow['order_no'])
                {
@@ -136,18 +149,21 @@ function print_order_status_list()
                        $rep->TextCol(1, 2,     get_customer_name($myrow['debtor_no']));
                        $rep->TextCol(2, 3,     get_branch_name($myrow['branch_code']));
                        $rep->TextCol(3, 4,     $myrow['customer_ref']);
-                       $rep->TextCol(4, 5,     sql2date($myrow['ord_date']));
-                       $rep->TextCol(5, 6,     sql2date($myrow['delivery_date']));
+                       $rep->DateCol(4, 5,     $myrow['ord_date'], true);
+                       $rep->DateCol(5, 6,     $myrow['delivery_date'], true);
                        $rep->TextCol(6, 7,     $myrow['from_stk_loc']);
-                       $rep->NewLine(2);
+                       $rep->NewLine(1);
+                       $rep->AmountCol(6, 7, $myrow['total']);
+                       $rep->NewLine(1);
+                       $grand_total += $myrow['total'];                
                        $orderno = $myrow['order_no'];
                }
                $rep->TextCol(0, 1,     $myrow['stk_code']);
                $rep->TextCol(1, 2,     $myrow['description']);
                $dec = get_qty_dec($myrow['stk_code']);
-               $rep->TextCol(2, 3,     number_format2($myrow['quantity'], $dec));
-               $rep->TextCol(3, 4,     number_format2($myrow['qty_sent'], $dec));
-               $rep->TextCol(4, 5,     number_format2($myrow['quantity'] - $myrow['qty_sent'], $dec));
+               $rep->AmountCol(2, 3, $myrow['quantity'], $dec);
+               $rep->AmountCol(3, 4, $myrow['qty_sent'], $dec);
+               $rep->AmountCol(4, 5, $myrow['quantity'] - $myrow['qty_sent'], $dec);
                if ($myrow['quantity'] - $myrow['qty_sent'] > 0)
                {
                        $rep->Font('italic');
@@ -155,14 +171,12 @@ function print_order_status_list()
                        $rep->Font();
                }
                $rep->NewLine();
-               if ($rep->row < $rep->bottomMargin + (2 * $rep->lineHeight))
-               {
-                       $orderno = 0;
-                       $rep->Header();
-               }
        }
        $rep->Line($rep->row);
+       $rep->NewLine();
+       $rep->TextCol(1, 6, _("Grand Total")); 
+       $rep->AmountCol(6, 7, $grand_total);
+       $rep->Line($rep->row - 5);
        $rep->End();
 }
 
-?>
\ No newline at end of file