Ok, I now changed my code to this:
<?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
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 = $_POST['PARAM_0'] == $_POST['PARAM_1'] ?
'SA_SALESTRANSVIEW' : 'SA_SALESBULKREP';
// ----------------------------------------------------------------
// $ Revision: 2.0 $
// Creator: Joe Hunt
// date_: 2005-05-19
// Title: Print Invoices
// ----------------------------------------------------------------
$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");
//----------------------------------------------------------------------------------------------------
print_invoices();
//----------------------------------------------------------------------------------------------------
function print_invoices()
{
global $path_to_root, $alternative_tax_include_on_docs, $suppress_tax_rates, $no_zero_lines_amount ;
include_once($path_to_root . "/reporting/includes/pdf_report.inc");
/////////////////////////////
$from = $_POST['PARAM_0'];
$to = $_POST['PARAM_1'];
$currency = $_POST['PARAM_2'];
$email = $_POST['PARAM_3'];
$pay_service = $_POST['PARAM_4'];
$comments = $_POST['PARAM_5'];
$customer = $_POST['PARAM_6'];
$orientation = 'L' ; // $_POST['PARAM_7'];
if (!$from || !$to) return;
$orientation = ($orientation ? 'L' : 'P');
$dec = user_price_dec();
$fno = explode("-", $from);
$tno = explode("-", $to);
$from = min($fno[0], $tno[0]);
$to = max($fno[0], $tno[0]);
$cols = array(4, 60, 225, 300, 325, 385, 450, 515);
// $headers in doctext.inc
$aligns = array('left', 'left', 'right', 'left', 'right', 'right', 'right');
$params = array('comments' => $comments);
$cur = get_company_Pref('curr_default');
if ($email == 0)
$rep = new FrontReport(_('INVOICE'), "InvoiceBulk", user_pagesize(), 9, $orientation);
if ($orientation == 'L')
recalculate_cols($cols);
// start loop
$ajo_array = array('Customer', 'Administration', 'Salesman', 'Storagekeeper');
foreach( $ajo_array as $ajo_counter )
{
for ($i = $from; $i <= $to; $i++)
{
if (!exists_customer_trans(ST_SALESINVOICE, $i))
continue;
$sign = 1;
$myrow = get_customer_trans($i, ST_SALESINVOICE);
if($customer && $myrow['debtor_no'] != $customer) {
continue;
}
$baccount = get_default_bank_account($myrow['curr_code']);
$params['bankaccount'] = $baccount['id'];
$branch = get_branch($myrow["branch_code"]);
$sales_order = get_sales_order_header($myrow["order_"], ST_SALESORDER);
if ($email == 1)
{
$rep = new FrontReport("", "", user_pagesize(), 9, $orientation);
$rep->title = _('INVOICE');
$rep->filename = "Invoice" . $myrow['reference'] . ".pdf";
}
$rep->SetHeaderType('Header2');
$rep->currency = $cur;
$rep->Font();
$rep->Info($params, $cols, null, $aligns);
$contacts = get_branch_contacts($branch['branch_code'], 'invoice', $branch['debtor_no'], true);
$baccount['payment_service'] = $pay_service;
$rep->SetCommonData($myrow, $branch, $sales_order, $baccount, ST_SALESINVOICE, $contacts);
$rep->NewPage();
$result = get_customer_trans_details(ST_SALESINVOICE, $i);
$SubTotal = 0;
while ($myrow2=db_fetch($result))
{
if ($myrow2["quantity"] == 0)
continue;
$Net = round2($sign * ((1 - $myrow2["discount_percent"]) * $myrow2["unit_price"] * $myrow2["quantity"]),
user_price_dec());
$SubTotal += $Net;
$DisplayPrice = number_format2($myrow2["unit_price"],$dec);
$DisplayQty = number_format2($sign*$myrow2["quantity"],get_qty_dec($myrow2['stock_id']));
$DisplayNet = number_format2($Net,$dec);
if ($myrow2["discount_percent"]==0)
$DisplayDiscount ="";
else
$DisplayDiscount = number_format2($myrow2["discount_percent"]*100,user_percent_dec()) . "%";
$rep->TextCol(0, 1, $myrow2['stock_id'], -2);
$oldrow = $rep->row;
$rep->TextColLines(1, 2, $myrow2['StockDescription'], -2);
$newrow = $rep->row;
$rep->row = $oldrow;
if ($Net != 0.0 || !is_service($myrow2['mb_flag']) || !isset($no_zero_lines_amount) || $no_zero_lines_amount == 0)
{
$rep->TextCol(2, 3, $DisplayQty, -2);
$rep->TextCol(3, 4, $myrow2['units'], -2);
$rep->TextCol(4, 5, $DisplayPrice, -2);
$rep->TextCol(5, 6, $DisplayDiscount, -2);
$rep->TextCol(6, 7, $DisplayNet, -2);
}
$rep->row = $newrow;
//$rep->NewLine(1);
if ($rep->row < $rep->bottomMargin + (15 * $rep->lineHeight))
$rep->NewPage();
}
$memo = get_comments_string(ST_SALESINVOICE, $i);
if ($memo != "")
{
$rep->NewLine();
$rep->TextColLines(1, 5, $memo, -2);
}
$DisplaySubTot = number_format2($SubTotal,$dec);
$DisplayFreight = number_format2($sign*$myrow["ov_freight"],$dec);
$rep->row = $rep->bottomMargin + (15 * $rep->lineHeight);
$doctype = ST_SALESINVOICE;
//$rep->TextCol(3, 6, _("Sub-total"), -2);
//$rep->TextCol(6, 7, $DisplaySubTot, -2);
//$rep->NewLine();
//$rep->TextCol(3, 6, _("Shipping"), -2);
//$rep->TextCol(6, 7, $DisplayFreight, -2);
//$rep->NewLine();
$tax_items = get_trans_tax_details(ST_SALESINVOICE, $i);
$first = true;
while ($tax_item = db_fetch($tax_items))
{
if ($tax_item['amount'] == 0)
continue;
$DisplayTax = number_format2($sign*$tax_item['amount'], $dec);
if (isset($suppress_tax_rates) && $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 ($tax_item['included_in_price'])
{
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
{
$rep->TextCol(3, 6, $tax_type_name, -2);
$rep->TextCol(6, 7, $DisplayTax, -2);
}
$rep->NewLine();
}
$rep->NewLine();
$DisplayTotal = number_format2($sign*($myrow["ov_freight"] + $myrow["ov_gst"] +
$myrow["ov_amount"]+$myrow["ov_freight_tax"]),$dec);
$rep->Font('bold');
// here is my other edit
$rep->TextCol(3, 6, _("TOTAL INVOICE" . ' - ' . $ajo_counter), - 2);
$rep->TextCol(6, 7, $DisplayTotal, -2);
$words = price_in_words($myrow['Total'], ST_SALESINVOICE);
if ($words != "")
{
$rep->NewLine(1);
$rep->TextCol(1, 7, $myrow['curr_code'] . ": " . $words , - 2);
}
$rep->Font();
}
////////////
// loop end
}
if ($email == 1)
{
$rep->End($email);
}
if ($email == 0) {
$rep->End();
}
}
?>
I'm almost getting what I need now, all 4 copies of the invoice in 1 pdf file. I'm now trying to find a way to change the default page numbering behavior. This would allow the pages belonging to each invoice, when multiple invoices are being printed at once, to show the right page number within the pages of that invoice. Like
INVOICE 25 CUSTOMER page 1, INVOICE 25 CUSTOMER page 2,
INVOICE 25 ADMINISTRATION page 1, INVOICE 25 ADMINISTRATION page 2,
INVOICE 26 CUSTOMER page 1, INVOICE 26 CUSTOMER page 2,
INVOICE 26 ADMINISTRATION page 1, INVOICE 26 ADMINISTRATION page 2, ..... etc
What this code is currently doing is this:
INVOICE 25 CUSTOMER page 1 , INVOICE 26 CUSTOMER page 2 ,
INVOICE 25 ADMINISTRATION page 3 , INVOICE 26 ADMINISTRATION page 4,
INVOICE 25 CUSTOMER page 5, INVOICE 26 CUSTOMER page 6,
INVOICE 25 ADMINISTRATION page 7, INVOICE 26 ADMINISTRATION page 8, ..... etc
The reason for this, maybe, strange requirement, is actually to mimic double or triple CC paper like in the days of dot-matrix, when you had 1 white(original) , 1 yellow, 1 pink etc copy of each print action. This way we also can get multiple copies of the same print actions, but with a clear distinctive difference on each copy.
I would appreciate any help with this.
This is a marvelous very well thought out piece of software, so universally applicable ...I am amazed every time...