How can I show the CUSTOMER_ID on the invoice form. Like in a text box under the Customer Combo box. I need to see the customer ID on the form already.

I managed to add a textbox on the form that shows the customer_id, but it does not update when I change the customer.

Please help?

Ok, I looked into the buffer solution you advised. Assuming you are talking about the built-into-PHP object buffer, I am afraid using it would require a serious rewrite of rep107.php (invoice). The buffer captures what is echo'd by PHP after the ob_start command is given. TCPDF does not echo that way if I understand correctly.

I am completely at loss for a solution. ( The current work-around is not to display the page numbers at all, but that is not nice.)

If I would really have to rewrite rep107.php completely, I'd still rather use $rep->WriteHTML( $html _text ) , because generating HTML with php is way easier than learning TCPDF for a newbie to this class. But I sure as hell would hate rewriting that much, since the current solution works, except for the page numbering. I think I have to use a 'StartPageGroup' somewhere, but have not succeeded yet.

I will post a worked out solution if I find it, hopefully it will save someone a few hours if they ever need something like this. Cause I see almost all my potential customers wanting something like this. So I'm still looking forward to some better ideas on how to solve this.

Also, if my post does not meet standards, please forgive me for that. This is my first post to this forum, since almost any other question I had concerning FA was already asked and answered before.

Hi Apmuthu, thanks for the reply. I should probably know how to do that, but I have no idea how to implement that. Will I need another library to merge the pdf files?

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...

I looked around but could not find too much on this. I need to have 4 copies of an invoice in the final pdf file, with a changing piece of text on each.

I already tried putting the report generating part of the print_invoices() function in rep107.pdf in a loop. I did manage to get 4 reports in the company pdf folder, with the intended changing text on each.

Ending the loop before $rep->End() did not solve this.

My question is, how can I generate these 4 copies in 1 single pdf file.