Topic: Sales invoice with VAT Rate column for UK

I've modified rep107.php to include a VAT rate column for UK sales invoice.
By changing the text in reporting/includes/doctext.inc to this at around line 30.

    // default item column headers
    $this->headers = array(_("Item Code"), _("Item Description"), _("Quantity"),
        _("Unit"), _("Price"), _("Disc %"), _("VAT %"), _("Total"));


and then changing the reporting/rep107.php to the file below the tax rate for each individual item is included.




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

    $cols = array(4, 60, 225, 300, 325, 375, 425, 465, 515);

    // $headers in doctext.inc
    $aligns = array('left',    'left',    'right', 'left', 'right', '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);
    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']));
            $DisplayTaxRate = number_format2($myrow2["unit_tax"] * 100 / $myrow2["unit_price"],user_percent_dec()) . "%";
                $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,    $DisplayTaxRate, -2);
                    $rep->TextCol(7, 8,    $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');
            $rep->TextCol(3, 6, _("TOTAL INVOICE"), - 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();
            if ($email == 1)
            {
                $rep->End($email);
            }
    }
    if ($email == 0)
        $rep->End();
}

?>

Re: Sales invoice with VAT Rate column for UK

@joe: Should there be a flag in rep107.php to incorporate this feature?

Also can we move the copyright header from all the FA files and keep them in one single licence file in the webroot?

3 (edited by apmuthu 02/14/2015 05:54:24 am)

Re: Sales invoice with VAT Rate column for UK

In view of the recent changes in rep107.php and after synching the white space diffs, I have attached the patch file for this commit. Further changes may need to be done in accommodating the Subtotal, total and other columns to be (6,8) instead of (6,7) and some flag inclusion for switching between the UK and normal invoice report formats.

Attached file has screenshots of 2 different invoices created with the patch that shows what further changes may be necessary.

Post's attachments

rep107_uk_diffs_patch.zip 76.8 kb, 11 downloads since 2015-02-14 

You don't have the permssions to download the attachments of this post.

Re: Sales invoice with VAT Rate column for UK

The complete UK rep107.php and doctext.inc patch with screenshots are attached herein. Please check how you wish to code in the summary tax (or omit it fully) and the correctness of the "included" tax in the line items. Please test for multiple items with different rates of tax in invoices before submitting full patch.

Post's attachments

rep107_uk_diffs_patch_2.zip 58.9 kb, 18 downloads since 2015-02-14 

You don't have the permssions to download the attachments of this post.

Re: Sales invoice with VAT Rate column for UK

Hello guys,

Janusz has already a similar variant ready for his Polish Version. He will incorporate this in release 2.4.

/Joe

Re: Sales invoice with VAT Rate column for UK

Where is the Polish version hosted? Any screenshots?

Re: Sales invoice with VAT Rate column for UK

Take it easy. The Polish version that Janusz has been working on is somewhat different than the open source version. He will reveale the line Vat solution in a while, just give him some time.

Joe

Re: Sales invoice with VAT Rate column for UK

apmuthu wrote:

The complete UK rep107.php and doctext.inc patch with screenshots are attached herein. Please check how you wish to code in the summary tax (or omit it fully) and the correctness of the "included" tax in the line items. Please test for multiple items with different rates of tax in invoices before submitting full patch.

Hello.
I have tried the report but, at least as far as Italian (and presumably EU) rules are concerned there are some glitches.

Let me start with the most annoying one:

Let's assume, for the sake of the example, that you are selling 5 items, each with a different VAT situation.

Items 1 is VAT taxed at 22%
Items 2 is VAT taxed at 10%
Items 3 is VAT taxed at 4%
Items 4 is VAT taxed at 0% although it's a domestic sale for some tax reasons
Items 5 is VAT taxed at 0% although it's a domestic sale for some other tax reasons

I am not making thing complicated. I tried to keep it simple but this is what really happens in reality (at least here in Italy).

I made a little modification so that I could get the total of the taxable amounts per each VAT%. Simple and easy.

When I print the invoice (using the above mentioned patch), is shows (at the end of the invoice) the correct amounts for all VAT% which are above zero.

For some unknown reason, it does not show the taxable amount for the zero rated VAT lines and, instead of showing zero in the newly added VAT% column, it shows 32%. (none of the VAT rates in the system is set to 32%, only 22,10,4,0 and 0).

Any idea why?
Best,
Carlo

Re: Sales invoice with VAT Rate column for UK

If only the 32% display on the label side is erroneous, it can be just clubbed together into a string like "All VAT" if the sum of the taxes is correctly displayed on the right hand side in the summary.