[0004216] Print Work Orders: database error fixed when voided WO is in selected range.
[fa-stable.git] / reporting / rep209.php
index e8278e60e13036c644e5742654c61c983c4b0a79..f6fabf31e16a728b2b6e344ba56987bf5c9bca39 100644 (file)
@@ -1,12 +1,12 @@
 <?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>.
 ***********************************************************************/
 
@@ -23,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");
 
 //----------------------------------------------------------------------------------------------------
 
 
 //----------------------------------------------------------------------------------------------------
 
@@ -31,23 +33,25 @@ 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,
-               ".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.contact
-               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 = ".db_escape($order_no);
+       $sql = "SELECT po.*, supplier.supp_name, supplier.supp_account_no,supplier.tax_included,
+               supplier.gst_no AS tax_id,
+               supplier.curr_code, supplier.payment_terms, loc.location_name,
+               supplier.address, supplier.contact, supplier.tax_group_id
+               FROM ".TB_PREF."purch_orders po,"
+                       .TB_PREF."suppliers supplier,"
+                       .TB_PREF."locations loc
+               WHERE po.supplier_id = supplier.supplier_id
+               AND loc.loc_code = into_stock_location
+               AND po.order_no = ".db_escape($order_no);
        $result = db_query($sql, "The order cannot be retrieved");
     return db_fetch($result);
 }
 
 function get_po_details($order_no)
 {
        $result = db_query($sql, "The order cannot be retrieved");
     return db_fetch($result);
 }
 
 function get_po_details($order_no)
 {
-       $sql = "SELECT ".TB_PREF."purch_order_details.*, units
-               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
+       $sql = "SELECT poline.*, units
+               FROM ".TB_PREF."purch_order_details poline
+                       LEFT JOIN ".TB_PREF."stock_master item ON poline.item_code=item.stock_id
                WHERE order_no =".db_escape($order_no)." ";
        $sql .= " ORDER BY po_detail_item";
        return db_query($sql, "Retreive order Line Items");
                WHERE order_no =".db_escape($order_no)." ";
        $sql .= " ORDER BY po_detail_item";
        return db_query($sql, "Retreive order Line Items");
@@ -55,7 +59,7 @@ function get_po_details($order_no)
 
 function print_po()
 {
 
 function print_po()
 {
-       global $path_to_root;
+       global $path_to_root, $SysPrefs;
 
        include_once($path_to_root . "/reporting/includes/pdf_report.inc");
 
 
        include_once($path_to_root . "/reporting/includes/pdf_report.inc");
 
@@ -64,11 +68,11 @@ function print_po()
        $currency = $_POST['PARAM_2'];
        $email = $_POST['PARAM_3'];
        $comments = $_POST['PARAM_4'];
        $currency = $_POST['PARAM_2'];
        $email = $_POST['PARAM_3'];
        $comments = $_POST['PARAM_4'];
+       $orientation = $_POST['PARAM_5'];
 
 
-       if ($from == null)
-               $from = 0;
-       if ($to == null)
-               $to = 0;
+       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);
@@ -81,34 +85,37 @@ function print_po()
        $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)
                {
                $baccount = get_default_bank_account($myrow['curr_code']);
                $params['bankaccount'] = $baccount['id'];
 
                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, ST_PURCHORDER);
+               }       
+               $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->SetHeaderType('Header2');
+               $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']);
@@ -123,15 +130,20 @@ function print_po()
                                        $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());
                                }
                                        $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;
                        $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);
                        $SubTotal += $Net;
                        $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);
-                       //$rep->TextCol(0, 1,   $myrow2['item_code'], -2);
-                       $rep->TextCol(0, 2,     $myrow2['description'], -2);
+                       if ($SysPrefs->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);
@@ -139,46 +151,84 @@ 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, ST_PURCHORDER);
+                               $rep->NewPage();
                }
                if ($myrow['comments'] != "")
                {
                        $rep->NewLine();
                }
                if ($myrow['comments'] != "")
                {
                        $rep->NewLine();
-                       $rep->TextColLines(1, 5, $myrow['comments'], -2);
+                       $rep->TextColLines(1, 4, $myrow['comments'], -2);
                }
                $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 = ST_PURCHORDER;
                $doctype = ST_PURCHORDER;
-               if ($rep->currency != $myrow['curr_code'])
-               {
-                       include($path_to_root . "/reporting/includes/doctext2.inc");
-               }
-               else
+
+               $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, TCA_LINES);
+               $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);
+
+                       if ($SysPrefs->suppress_tax_rates() == 1)
+                               $tax_type_name = $tax_item['tax_type_name'];
+                       else
+                               $tax_type_name = $tax_item['tax_type_name']." (".$tax_item['rate']."%) ";
+
+                       if ($myrow['tax_included'])
+                       {
+                               if ($SysPrefs->alternative_tax_include_on_docs() == 1)
+                               {
+                                       if ($first)
+                                       {
+                                               $rep->TextCol(3, 6, _("Total Tax Excluded"), -2);
+                                               $rep->TextCol(6, 7,     number_format2($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'];
-                       if ($myrow['contact'] != '') $myrow['DebtorName'] = $myrow['contact'];
-                       $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)
                $rep->End();
 }
 
                }
        }
        if ($email == 0)
                $rep->End();
 }
 
-?>
\ No newline at end of file