Fixed regression in db_pager.
[fa-stable.git] / reporting / rep209.php
index f8847fd782a15d28cd601fea4f3ff58d1d69eb25..31c82b0a9817a5a7cc226e0d4adc2e9fed697a35 100644 (file)
@@ -1,15 +1,17 @@
 <?php
 /**********************************************************************
     Copyright (C) FrontAccounting, LLC.
 <?php
 /**********************************************************************
     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 
+       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
        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.  
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
 ***********************************************************************/
     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
 ***********************************************************************/
-$page_security = 2;
+
+$page_security = $_POST['PARAM_0'] == $_POST['PARAM_1'] ?
+       'SA_SUPPTRANSVIEW' : 'SA_SUPPBULKREP';
 // ----------------------------------------------------------------
 // $ Revision: 2.0 $
 // Creator:    Joe Hunt
 // ----------------------------------------------------------------
 // $ Revision: 2.0 $
 // Creator:    Joe Hunt
@@ -21,6 +23,8 @@ $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 . "/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 . "/includes/db/crm_contacts_db.inc");
+include_once($path_to_root . "/taxes/tax_calc.inc");
 
 //----------------------------------------------------------------------------------------------------
 
 
 //----------------------------------------------------------------------------------------------------
 
@@ -29,13 +33,14 @@ print_po();
 //----------------------------------------------------------------------------------------------------
 function get_po($order_no)
 {
 //----------------------------------------------------------------------------------------------------
 function get_po($order_no)
 {
-       $sql = "SELECT ".TB_PREF."purch_orders.*, ".TB_PREF."suppliers.supp_name,  ".TB_PREF."suppliers.supp_account_no,
+       $sql = "SELECT ".TB_PREF."purch_orders.*, ".TB_PREF."suppliers.supp_name,  "
+               .TB_PREF."suppliers.supp_account_no,".TB_PREF."suppliers.tax_included,".TB_PREF."suppliers.gst_no AS tax_id,
                ".TB_PREF."suppliers.curr_code, ".TB_PREF."suppliers.payment_terms, ".TB_PREF."locations.location_name,
                ".TB_PREF."suppliers.curr_code, ".TB_PREF."suppliers.payment_terms, ".TB_PREF."locations.location_name,
-               ".TB_PREF."suppliers.email, ".TB_PREF."suppliers.address
+               ".TB_PREF."suppliers.address, ".TB_PREF."suppliers.contact, ".TB_PREF."suppliers.tax_group_id
                FROM ".TB_PREF."purch_orders, ".TB_PREF."suppliers, ".TB_PREF."locations
                WHERE ".TB_PREF."purch_orders.supplier_id = ".TB_PREF."suppliers.supplier_id
                AND ".TB_PREF."locations.loc_code = into_stock_location
                FROM ".TB_PREF."purch_orders, ".TB_PREF."suppliers, ".TB_PREF."locations
                WHERE ".TB_PREF."purch_orders.supplier_id = ".TB_PREF."suppliers.supplier_id
                AND ".TB_PREF."locations.loc_code = into_stock_location
-               AND ".TB_PREF."purch_orders.order_no = " . $order_no;
+               AND ".TB_PREF."purch_orders.order_no = ".db_escape($order_no);
        $result = db_query($sql, "The order cannot be retrieved");
     return db_fetch($result);
 }
        $result = db_query($sql, "The order cannot be retrieved");
     return db_fetch($result);
 }
@@ -46,28 +51,27 @@ function get_po_details($order_no)
                FROM ".TB_PREF."purch_order_details
                LEFT JOIN ".TB_PREF."stock_master
                ON ".TB_PREF."purch_order_details.item_code=".TB_PREF."stock_master.stock_id
                FROM ".TB_PREF."purch_order_details
                LEFT JOIN ".TB_PREF."stock_master
                ON ".TB_PREF."purch_order_details.item_code=".TB_PREF."stock_master.stock_id
-               WHERE order_no =$order_no ";
+               WHERE order_no =".db_escape($order_no)." ";
        $sql .= " ORDER BY po_detail_item";
        return db_query($sql, "Retreive order Line Items");
 }
 
 function print_po()
 {
        $sql .= " ORDER BY po_detail_item";
        return db_query($sql, "Retreive order Line Items");
 }
 
 function print_po()
 {
-       global $path_to_root;
+       global $path_to_root, $show_po_item_codes;
 
        include_once($path_to_root . "/reporting/includes/pdf_report.inc");
 
        $from = $_POST['PARAM_0'];
        $to = $_POST['PARAM_1'];
        $currency = $_POST['PARAM_2'];
 
        include_once($path_to_root . "/reporting/includes/pdf_report.inc");
 
        $from = $_POST['PARAM_0'];
        $to = $_POST['PARAM_1'];
        $currency = $_POST['PARAM_2'];
-       $bankaccount = $_POST['PARAM_3'];
-       $email = $_POST['PARAM_4'];
-       $comments = $_POST['PARAM_5'];
-
-       if ($from == null)
-               $from = 0;
-       if ($to == null)
-               $to = 0;
+       $email = $_POST['PARAM_3'];
+       $comments = $_POST['PARAM_4'];
+       $orientation = $_POST['PARAM_5'];
+
+       if (!$from || !$to) return;
+
+       $orientation = ($orientation ? 'L' : 'P');
        $dec = user_price_dec();
 
        $cols = array(4, 60, 225, 300, 340, 385, 450, 515);
        $dec = user_price_dec();
 
        $cols = array(4, 60, 225, 300, 340, 385, 450, 515);
@@ -75,39 +79,42 @@ function print_po()
        // $headers in doctext.inc
        $aligns = array('left', 'left', 'left', 'right', 'left', 'right', 'right');
 
        // $headers in doctext.inc
        $aligns = array('left', 'left', 'left', 'right', 'left', 'right', 'right');
 
-       $params = array('comments' => $comments,
-                                       'bankaccount' => $bankaccount);
+       $params = array('comments' => $comments);
 
 
-       $baccount = get_bank_account($params['bankaccount']);
        $cur = get_company_Pref('curr_default');
 
        if ($email == 0)
        $cur = get_company_Pref('curr_default');
 
        if ($email == 0)
-       {
-               $rep = new FrontReport(_('PURCHASE ORDER'), "PurchaseOrderBulk", user_pagesize());
-               $rep->currency = $cur;
-               $rep->Font();
-               $rep->Info($params, $cols, null, $aligns);
-       }
+               $rep = new FrontReport(_('PURCHASE ORDER'), "PurchaseOrderBulk", user_pagesize(), 9, $orientation);
+    if ($orientation == 'L')
+       recalculate_cols($cols);
 
        for ($i = $from; $i <= $to; $i++)
        {
                $myrow = get_po($i);
 
        for ($i = $from; $i <= $to; $i++)
        {
                $myrow = get_po($i);
+               if ($currency != ALL_TEXT && $myrow['curr_code'] != $currency) {
+                       continue;
+               }
+               $baccount = get_default_bank_account($myrow['curr_code']);
+               $params['bankaccount'] = $baccount['id'];
 
                if ($email == 1)
                {
 
                if ($email == 1)
                {
-                       $rep = new FrontReport("", "", user_pagesize());
-                       $rep->currency = $cur;
-                       $rep->Font();
+                       $rep = new FrontReport("", "", user_pagesize(), 9, $orientation);
                        $rep->title = _('PURCHASE ORDER');
                        $rep->filename = "PurchaseOrder" . $i . ".pdf";
                        $rep->title = _('PURCHASE ORDER');
                        $rep->filename = "PurchaseOrder" . $i . ".pdf";
-                       $rep->Info($params, $cols, null, $aligns);
-               }
-               else
-                       $rep->title = _('PURCHASE ORDER');
-               $rep->Header2($myrow, null, $myrow, $baccount, 8);
+               }       
+               $rep->SetHeaderType('Header2');
+               $rep->currency = $cur;
+               $rep->Font();
+               $rep->Info($params, $cols, null, $aligns);
+
+               $contacts = get_supplier_contacts($myrow['supplier_id'], 'order');
+               $rep->SetCommonData($myrow, null, $myrow, $baccount, ST_PURCHORDER, $contacts);
+               $rep->NewPage();
 
                $result = get_po_details($i);
                $SubTotal = 0;
 
                $result = get_po_details($i);
                $SubTotal = 0;
+               $items = $prices = array();
                while ($myrow2=db_fetch($result))
                {
                        $data = get_purchase_data($myrow['supplier_id'], $myrow2['item_code']);
                while ($myrow2=db_fetch($result))
                {
                        $data = get_purchase_data($myrow['supplier_id'], $myrow2['item_code']);
@@ -119,18 +126,23 @@ function print_po()
                                        $myrow2['units'] = $data['suppliers_uom'];
                                if ($data['conversion_factor'] != 1)
                                {
                                        $myrow2['units'] = $data['suppliers_uom'];
                                if ($data['conversion_factor'] != 1)
                                {
-                                       $myrow2['unit_price'] = round($myrow2['unit_price'] / $data['conversion_factor'], user_price_dec());
-                                       $myrow2['quantiry_ordered'] = round($myrow2['quantiry_ordered'] / $data['conversion_factor'], user_qty_dec());
+                                       $myrow2['unit_price'] = round2($myrow2['unit_price'] * $data['conversion_factor'], user_price_dec());
+                                       $myrow2['quantity_ordered'] = round2($myrow2['quantity_ordered'] / $data['conversion_factor'], user_qty_dec());
                                }
                                }
-                       }       
-                       $Net = round2(($myrow2["unit_price"] * $myrow2["quantity_ordered"]),
-                         user_price_dec());
+                       }
+                       $Net = round2(($myrow2["unit_price"] * $myrow2["quantity_ordered"]), user_price_dec());
+                       $prices[] = $Net;
+                       $items[] = $myrow2['item_code'];
                        $SubTotal += $Net;
                        $SubTotal += $Net;
-                       $DisplayPrice = number_format2($myrow2["unit_price"],$dec);
+                       $dec2 = 0;
+                       $DisplayPrice = price_decimal_format($myrow2["unit_price"],$dec2);
                        $DisplayQty = number_format2($myrow2["quantity_ordered"],get_qty_dec($myrow2['item_code']));
                        $DisplayNet = number_format2($Net,$dec);
                        $DisplayQty = number_format2($myrow2["quantity_ordered"],get_qty_dec($myrow2['item_code']));
                        $DisplayNet = number_format2($Net,$dec);
-                       //$rep->TextCol(0, 1,   $myrow2['item_code'], -2);
-                       $rep->TextCol(0, 2,     $myrow2['description'], -2);
+                       if ($show_po_item_codes) {
+                               $rep->TextCol(0, 1,     $myrow2['item_code'], -2);
+                               $rep->TextCol(1, 2,     $myrow2['description'], -2);
+                       } else
+                               $rep->TextCol(0, 2,     $myrow2['description'], -2);
                        $rep->TextCol(2, 3,     sql2date($myrow2['delivery_date']), -2);
                        $rep->TextCol(3, 4,     $DisplayQty, -2);
                        $rep->TextCol(4, 5,     $myrow2['units'], -2);
                        $rep->TextCol(2, 3,     sql2date($myrow2['delivery_date']), -2);
                        $rep->TextCol(3, 4,     $DisplayQty, -2);
                        $rep->TextCol(4, 5,     $myrow2['units'], -2);
@@ -138,7 +150,7 @@ function print_po()
                        $rep->TextCol(6, 7,     $DisplayNet, -2);
                        $rep->NewLine(1);
                        if ($rep->row < $rep->bottomMargin + (15 * $rep->lineHeight))
                        $rep->TextCol(6, 7,     $DisplayNet, -2);
                        $rep->NewLine(1);
                        if ($rep->row < $rep->bottomMargin + (15 * $rep->lineHeight))
-                               $rep->Header2($myrow, $branch, $myrow, $baccount, 8);
+                               $rep->NewPage();
                }
                if ($myrow['comments'] != "")
                {
                }
                if ($myrow['comments'] != "")
                {
@@ -148,31 +160,68 @@ function print_po()
                $DisplaySubTot = number_format2($SubTotal,$dec);
 
                $rep->row = $rep->bottomMargin + (15 * $rep->lineHeight);
                $DisplaySubTot = number_format2($SubTotal,$dec);
 
                $rep->row = $rep->bottomMargin + (15 * $rep->lineHeight);
-               $linetype = true;
-               $doctype = 8;
-               if ($rep->currency != $myrow['curr_code'])
-               {
-                       include($path_to_root . "/reporting/includes/doctext2.inc");
-               }
-               else
+               $doctype = ST_PURCHORDER;
+
+               $rep->TextCol(3, 6, _("Sub-total"), -2);
+               $rep->TextCol(6, 7,     $DisplaySubTot, -2);
+               $rep->NewLine();
+
+               $tax_items = get_tax_for_items($items, $prices, 0,
+                 $myrow['tax_group_id'], $myrow['tax_included'],  null);
+               $first = true;
+               foreach($tax_items as $tax_item)
                {
                {
-                       include($path_to_root . "/reporting/includes/doctext.inc");
+                       if ($tax_item['Value'] == 0)
+                               continue;
+                       $DisplayTax = number_format2($tax_item['Value'], $dec);
+
+                       $tax_type_name = $tax_item['tax_type_name'];
+
+                       if ($myrow['tax_included'])
+                       {
+                               if (isset($alternative_tax_include_on_docs) && $alternative_tax_include_on_docs == 1)
+                               {
+                                       if ($first)
+                                       {
+                                               $rep->TextCol(3, 6, _("Total Tax Excluded"), -2);
+                                               $rep->TextCol(6, 7,     number_format2($sign*$tax_item['net_amount'], $dec), -2);
+                                               $rep->NewLine();
+                                       }
+                                       $rep->TextCol(3, 6, $tax_type_name, -2);
+                                       $rep->TextCol(6, 7,     $DisplayTax, -2);
+                                       $first = false;
+                               }
+                               else
+                                       $rep->TextCol(3, 7, _("Included") . " " . $tax_type_name . _("Amount") . ": " . $DisplayTax, -2);
+                       }
+                       else
+                       {
+                               $SubTotal += $tax_item['Value'];
+                               $rep->TextCol(3, 6, $tax_type_name, -2);
+                               $rep->TextCol(6, 7,     $DisplayTax, -2);
+                       }
+                       $rep->NewLine();
                }
 
                }
 
-               $rep->TextCol(3, 6, $doc_Sub_total, -2);
-               $rep->TextCol(6, 7,     $DisplaySubTot, -2);
                $rep->NewLine();
                $DisplayTotal = number_format2($SubTotal, $dec);
                $rep->Font('bold');
                $rep->NewLine();
                $DisplayTotal = number_format2($SubTotal, $dec);
                $rep->Font('bold');
-               $rep->TextCol(3, 6, $doc_TOTAL_PO, - 2);
+               $rep->TextCol(3, 6, _("TOTAL PO"), - 2);
                $rep->TextCol(6, 7,     $DisplayTotal, -2);
                $rep->TextCol(6, 7,     $DisplayTotal, -2);
+               $words = price_in_words($SubTotal, ST_PURCHORDER);
+               if ($words != "")
+               {
+                       $rep->NewLine(1);
+                       $rep->TextCol(1, 7, $myrow['curr_code'] . ": " . $words, - 2);
+               }
                $rep->Font();
                if ($email == 1)
                {
                $rep->Font();
                if ($email == 1)
                {
-                       $myrow['contact_email'] = $myrow['email'];
                        $myrow['DebtorName'] = $myrow['supp_name'];
                        $myrow['DebtorName'] = $myrow['supp_name'];
-                       $myrow['reference'] = $myrow['order_no'];
-                       $rep->End($email, $doc_Order_no . " " . $myrow['reference'], $myrow);
+
+                       if ($myrow['reference'] == "")
+                               $myrow['reference'] = $myrow['order_no'];
+                       $rep->End($email);
                }
        }
        if ($email == 0)
                }
        }
        if ($email == 0)