Topic: How to design invoice form

Hello,

I want to design my own invoice format, since the standard invoice form is not suitable for our bussines, what should I do.

Thanks a lot.
Ken Surya

Re: How to design invoice form

Look into the file /reporting/header2.inc. This is the file used for the forms. You can change it to suit your needs. If you think you are creating a nice form, you are welcome to share it with us.

/Joe

Re: How to design invoice form

Hello Joe,

Thanks for your info.
It was difficult for me since I'm not a technician. I just want to add some other information in that standard invoice i.e. giving a name of our President Director name in the bottom of the form, could you help me in easier way?.

Thanks in advance.

Ken Surya

Re: How to design invoice form

The easiest way of doing this, is to use the Legal Text on invoices. This is on the Company Setup, Setup tab. If you already have a legal text, then just extend the text.

/Joe

Re: How to design invoice form

hi joe

i can't find the legal text under setup tab, company setup. i am using 2.3

Re: How to design invoice form

Sorry, spacewalker, I should have answered 'System and General GL Setup' under the same tab.

/Joe

7 (edited by spacewalker 12/27/2010 04:21:29 pm)

Re: How to design invoice form

thanks joe. found it

i need to draw a line whereby i can sign off the invoice. is it possible to do that?

Re: How to design invoice form

Yes. Instead of physically drawing a line, you can just add an underscore line in the 'Legal Text' in Systems and GL Setup, like:

'Previous text .........

_______________________'

If there is not enoght room for the line, you can decrease the bottom margin.

/Joe

9 (edited by spacewalker 12/28/2010 06:05:35 pm)

Re: How to design invoice form

hi joe

I have added the below into php107
            $rep->NewLine(12);   
            $rep->TextCol(4, 7, $doc_InvoiceSignature, -2);
           
            $rep->TextCol(4, 5, $doc_DatedS, -2);
is there any other way to specify the column and row where the wordings should appear.

also, how to i insert the line above the invoice signature and date.



I also notice that the customer address is not reflected under sales order and quotation. how do i activate it.

Re: How to design invoice form

The NewLine produces 12 cr/nl.
The TextCol uses the column definition for 4 and 7/5. If you want to print exactly you can use other routines in /reporting/includes/pdf_report.inc..

Normally we don't have resources to help with design of reports, so you are on your own here. Maybe some from the community can help you.

/Joe

Re: How to design invoice form

joe wrote:

The NewLine produces 12 cr/nl.
The TextCol uses the column definition for 4 and 7/5. If you want to print exactly you can use other routines in /reporting/includes/pdf_report.inc..

Normally we don't have resources to help with design of reports, so you are on your own here. Maybe some from the community can help you.

/Joe

thank you joe. i am a noob in programming, so i am trying to learn and understand and hopefully contribute back to the community

Re: How to design invoice form

Hi Joe,

It is a government requirement to place the GST Number of the Customer in the Invoice format.
Please help how do I insert the information right under the "Charge To" details.

Re: How to design invoice form

GST number is displayed above Charge To details in horizontal table under 'Your VAT no.' title.
Janusz

Re: How to design invoice form

Hello Guys,
         I am a intermediate php programmer, i have created a INVOICE  form design which suitable for indian users,

My form contains S.NO , Item Des ,  Qty , Rate, Gross , Dis% , DisAmt , Vat% , VatAmt, Total,

I designed this form for my business.If u are interested in this design then go and edit reporting/rep107.php.

Note : Better take a backup of this file before altering it.

Here is the complete coding for my design

<?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 = $_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]);

    //Modify this valus to increase or decrease column size
    $cols = array(10, 40, 170, 200, 250,300, 340, 380, 420, 450, 0); 

    // $headers in doctext.inc
    $aligns = array('left',    'left',    'left',    'left', 'left', 'left', 'left', 'left', 'left', '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);
    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;
            // This variable $n used for SNO calculation.
            $no=1;
            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;
                               
                $DispTax = number_format2($myrow2["unit_tax"] * 100 / $myrow2["unit_price"],user_percent_dec()) . "%";
                $Dispgross = $myrow2["quantity"] * $myrow2["unit_price"];
                $Dispda = $myrow2["discount_percent"] * $myrow2["unit_price"] * $myrow2["quantity"];
               
                $DisplayPrice = number_format2($myrow2["unit_price"],$dec);
               
                $DisplayQty = number_format2($sign*$myrow2["quantity"],get_qty_dec($myrow2['stock_id']));               
                $DisplayNet = number_format2($Net,$dec);
                // str_replace(",", "", $_POST['price']);  for string removal
                       $net1 = str_replace(",", "", $DisplayNet);
               
                $Dispvm = number_format2($net1 * $DispTax / 100 ,$dec);  // To display vat Amount
               
                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);
                //  $rep->TextCol(0, 1,    $myrow2['StockDescription'], -2);
                        
           // New Altered coding
                         $rep->TextCol(0, 1,    $no, -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,    $DisplayPrice, -2);
                    $rep->TextCol(4, 5,    $Dispgross, -2);
                    $rep->TextCol(5, 6,    $DisplayDiscount, -2);
                    $rep->TextCol(6, 7,    $Dispda, -2);
                    $rep->TextCol(7, 8,    $DispTax, -2);
                    $rep->TextCol(8, 9,    $Dispvm, -2);
                    $rep->TextCol(9, 10,$DisplayNet, -2);
                    $no++;
                   
                   
                }   
                $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(6, 9, _("Sub-total"), -2);
            $rep->TextCol(9, 10,    $DisplaySubTot, -2);
            $rep->NewLine();
            $rep->TextCol(6, 9, _("Shipping"), -2);
            $rep->TextCol(9, 10,    $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(6, 9, _("Total Tax Excluded"), -2);
                            $rep->TextCol(9, 10,    number_format2($sign*$tax_item['net_amount'], $dec), -2);
                            $rep->NewLine();
                        }
                        $rep->TextCol(6, 9, $tax_type_name, -2);
                        $rep->TextCol(9, 10,    $DisplayTax, -2);
                        $first = false;
                    }
                    else
                        $rep->TextCol(3, 7, _("Included") . " " . $tax_type_name . _("Amount") . ": " . $DisplayTax, -2);
                }
                else
                {
                    $rep->TextCol(6, 9, $tax_type_name, -2);
                    $rep->TextCol(9, 10,    $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');
            $rep->TextCol(6, 9, _("TOTAL INVOICE"), - 2);
            $rep->TextCol(9, 10, $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();
            if ($email == 1)
            {
                $rep->End($email);
            }
    }
    if ($email == 0)
        $rep->End();
}

?>

Re: How to design invoice form

I have tried to increase the top margin in file header2inc: $this->row = $this->pageHeight - $this->topMargin;
to this value: $this->row = $this->pageHeight - $this->topMargin + 18;

Nothing changes.
How can I increase top margin?

Jan-Eric

Re: How to design invoice form

The values decrease from top to bottom. So I guess you should use, - 18, instead of + 18.

Joe

Re: How to design invoice form

No doesn't work, I haved tried with -45 and nothing changes

Jan-Eric

Re: How to design invoice form

Well, I am not at the source computer right now. Please have a look into the code, that the row  is not set later.

Joe

Re: How to design invoice form

It is the first row after the comments.
        $this->row = $this->pageHeight - $this->topMargin - 45;

        $upper = $this->row - 2 * $this->lineHeight;
        $lower = $this->bottomMargin + 8 * $this->lineHeight;
        $iline1 = $upper - 7.5 * $this->lineHeight;
                etc.

Jan-Eric

Re: How to design invoice form

I found the solution :-) Even though I started Kate with kdesu variable, the changes was not saved. I used Nano and I could do the adjustment.  $this->row = $this->pageHeight - $this->topMargin - 3 * $this->lineHeight;

Re: How to design invoice form

bibin141 wrote:

Hello Guys,
         I am a intermediate php programmer, i have created a INVOICE  form design which suitable for indian users,

My form contains S.NO , Item Des ,  Qty , Rate, Gross , Dis% , DisAmt , Vat% , VatAmt, Total,

I designed this form for my business.If u are interested in this design then go and edit reporting/rep107.php.

Note : Better take a backup of this file before altering it.

Here is the complete coding for my design

<?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';
// ----------------------------------------------------------------


?>

HI, hope you doing great joe,
What if I want to line in my invoice? I want to print paper from printing press, and my frontaccounting only write text there, becuase I am using dot matrix printer and that take long time for printing lines, especially that vertical lines, So please help me that how can I remove all the lines from invoice, that will be better if you can paste that complete code here of that file, I am not expert , but I can go and copy paste things in /reporting/includes/ directory. Thanks in advance, and will wait for your reply. Thanks again bro.

Re: How to design invoice form

Most, if not all lines are in the reporting/includes/header2.inc file. Try commenting out sets of lines at a time and see what disappears in the resulting invoice.... Also see what is necessary to manage the position ($x, $y co-ordinates) of the subsequent printing....

Re: How to design invoice form

Solved, but how can I forget to say T H A N K   YOU /  Salute bro.

apmuthu wrote:

Most, if not all lines are in the reporting/includes/header2.inc file. Try commenting out sets of lines at a time and see what disappears in the resulting invoice.... Also see what is necessary to manage the position ($x, $y co-ordinates) of the subsequent printing....

Re: How to design invoice form

You're most welcome and in your turn you too can help other newbies getting their feet wet in FA.

Since you have managed to make and test such a version of the header2.inc, you can submit it in 2 parts to the project - one having just the lines to make pre-printed stationery, and another for use with such pre-printed stationery.