1 (edited by boxygen 12/21/2018 09:35:28 am)

Topic: Customer Trial Balance Report

I have designed this report for one of my client. May be this is helpful for our Community

Below is the report to be added in reporting folder as rep_customer_tb.php

<?php
/**********************************************************************
    Copyright (C) Boxygen, 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 = 'SA_CUSTPAYMREP';

// ----------------------------------------------------------------
// $ Revision:    2.0 $
// Creator:    Joe Hunt
// date_:    2005-05-19
// Title:    Customer Balances
// ----------------------------------------------------------------
$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 . "/gl/includes/gl_db.inc");
include_once($path_to_root . "/sales/includes/db/customers_db.inc");

//----------------------------------------------------------------------------------------------------

print_customer_balances();

function get_open_balance($debtorno, $to)
{
    if($to)
        $to = date2sql($to);

        $sql = "SELECT SUM(IF(t.type = ".ST_SALESINVOICE." OR (t.type IN (".ST_JOURNAL." , ".ST_BANKPAYMENT.") AND t.ov_amount>0),
                        -abs(t.ov_amount + t.ov_gst + t.ov_freight + t.ov_freight_tax + t.ov_discount), 0)) AS charges,";

 $sql .= "SUM(IF(t.type != ".ST_SALESINVOICE." AND NOT(t.type IN (".ST_JOURNAL." , ".ST_BANKPAYMENT.") AND t.ov_amount>0),
                        abs(t.ov_amount + t.ov_gst + t.ov_freight + t.ov_freight_tax + t.ov_discount) * -1, 0)) AS credits,";

     $sql .= "SUM(IF(t.type != ".ST_SALESINVOICE." AND NOT(t.type IN (".ST_JOURNAL." , ".ST_BANKPAYMENT.")), t.alloc * -1, t.alloc)) AS Allocated,";

     $sql .=    "SUM(IF(t.type = ".ST_SALESINVOICE.", 1, -1) *
             (abs(t.ov_amount + t.ov_gst + t.ov_freight + t.ov_freight_tax + t.ov_discount) - abs(t.alloc))) AS OutStanding
        FROM ".TB_PREF."debtor_trans t
        WHERE t.debtor_no = ".db_escape($debtorno)
        ." AND t.type <> ".ST_CUSTDELIVERY;
    if ($to)
        $sql .= " AND t.tran_date < '$to'";
    $sql .= " GROUP BY debtor_no";

    $result = db_query($sql,"No transactions were returned");
    return db_fetch($result);
}

function get_transactions($debtorno, $from, $to, $only_rec)
{
    $from = date2sql($from);
    $to = date2sql($to);

     $allocated_from =
             "(SELECT trans_type_from as trans_type, trans_no_from as trans_no, date_alloc, sum(amt) amount
             FROM ".TB_PREF."cust_allocations alloc
                 WHERE person_id=".db_escape($debtorno)."
                     AND date_alloc <= '$to'
                 GROUP BY trans_type_from, trans_no_from) alloc_from";
     $allocated_to =
             "(SELECT trans_type_to as trans_type, trans_no_to as trans_no, date_alloc, sum(amt) amount
             FROM ".TB_PREF."cust_allocations alloc
                 WHERE person_id=".db_escape($debtorno)."
                     AND date_alloc <= '$to'
                 GROUP BY trans_type_to, trans_no_to) alloc_to";

     $sql = "SELECT trans.*, comments.memo_,
         (trans.ov_amount + trans.ov_gst + trans.ov_freight + trans.ov_freight_tax + trans.ov_discount) AS TotalAmount,
         IFNULL(alloc_from.amount, alloc_to.amount) AS Allocated,
         ((trans.type = ".ST_SALESINVOICE.")    AND trans.due_date < '$to') AS OverDue
         FROM ".TB_PREF."debtor_trans trans
             LEFT JOIN ".TB_PREF."voided voided ON trans.type=voided.type AND trans.trans_no=voided.id
            LEFT JOIN ".TB_PREF."comments comments ON trans.type=comments.type AND trans.trans_no=comments.id
             LEFT JOIN $allocated_from ON alloc_from.trans_type = trans.type AND alloc_from.trans_no = trans.trans_no
             LEFT JOIN $allocated_to ON alloc_to.trans_type = trans.type AND alloc_to.trans_no = trans.trans_no

         WHERE trans.tran_date >= '$from'
             AND trans.tran_date <= '$to'
             AND trans.debtor_no = ".db_escape($debtorno);

            $sql .= " AND trans.type <> ".ST_CUSTDELIVERY;

             $sql .= " AND ISNULL(voided.id)
         ORDER BY trans.tran_date ";
    return db_query($sql,"No transactions were returned");
}

function get_customer_reference ($order_number)
{

    $sql = "SELECT customer_ref FROM ".TB_PREF."sales_orders WHERE order_no ='$order_number' AND trans_type=".ST_SALESORDER."";

    $result = db_query($sql,"No Transcation were returned");

    $val = db_fetch($result);

    return $val['customer_ref'];


}
//----------------------------------------------------------------------------------------------------

function print_customer_balances()
{
        global $path_to_root, $systypes_array;

            $from = $_POST['PARAM_0'];
        $to = $_POST['PARAM_1'];
        $fromcust = $_POST['PARAM_2'];
        $area = $_POST['PARAM_3']; //added by Faisal to filter by area
        $folk = $_POST['PARAM_4'];  // added by Faisal to filter by sales person
        $currency = $_POST['PARAM_5'];
        $no_zeros = $_POST['PARAM_6'];
        $hide_trans = 1;
        $comments = $_POST['PARAM_7'];
    $orientation = $_POST['PARAM_8'];
    $destination = $_POST['PARAM_9'];
    if ($destination)
        include_once($path_to_root . "/reporting/includes/excel_report.inc");
    else
        include_once($path_to_root . "/reporting/includes/pdf_report.inc");

    $orientation = ($orientation ? 'L' : 'P');
    if ($fromcust == ALL_TEXT)
        $cust = _('All');
    else
        $cust = get_customer_name($fromcust);
        $dec = user_price_dec();

    if ($area == ALL_NUMERIC)
             $area = 0;

     if ($area == 0)
             $sarea = _('All Areas');
     else
             $sarea = get_area_name($area);

     if ($folk == ALL_NUMERIC)
             $folk = 0;
     if ($folk == 0)
             $salesfolk = _('All Sales Man');
     else
             $salesfolk = get_salesman_name($folk);

    if ($currency == ALL_TEXT)
    {
        $convert = true;
        $currency = _('Balances in Home Currency');
    }
    else
        $convert = false;

    if ($no_zeros) $nozeros = _('Yes');
    else $nozeros = _('No');

    $cols = array(0, 70, 140, 180, 230,    270, 350, 445, 495,    555);

    $headers = array(_('Name'), _(''), _(''), _('Opening Bal'), _(''), _('Debits'), _('Credits'),
        _(''),     _('Balance'));

    $aligns = array('left','left',    'left',    'right',    'left',    'right', 'right', 'right', 'right');

    $params =   array(     0 => $comments,
                        1 => array('text' => _('Period'), 'from' => $from,         'to' => $to),
                        2 => array('text' => _('Customer'), 'from' => $cust,       'to' => ''),
                        3 => array('text' => _('Currency'), 'from' => $currency, 'to' => ''),
                        4 => array('text' => _('Suppress Zeros'), 'from' => $nozeros, 'to' => ''));

    $rep = new FrontReport(_('Customer TB'), "Customer TB", user_pagesize(), 9, $orientation);
    if ($orientation == 'L')
        recalculate_cols($cols);
    $rep->Font();
    $rep->Info($params, $cols, $headers, $aligns);
    $rep->NewPage();

    $grandtotal = array(0,0,0,0);


        $sql = "SELECT ".TB_PREF."debtors_master.debtor_no, name, curr_code FROM ".TB_PREF."debtors_master
        INNER JOIN ".TB_PREF."cust_branch
        ON ".TB_PREF."debtors_master.debtor_no=".TB_PREF."cust_branch.debtor_no
    INNER JOIN ".TB_PREF."areas
        ON ".TB_PREF."cust_branch.area = ".TB_PREF."areas.area_code
    INNER JOIN ".TB_PREF."salesman
        ON ".TB_PREF."cust_branch.salesman=".TB_PREF."salesman.salesman_code";
    if ($fromcust != ALL_TEXT )
        {
           // if ($area != 0 || $folk != 0) continue;
            $sql .= " WHERE ".TB_PREF."debtors_master.debtor_no=".db_escape($fromcust);
        }

    elseif ($area != 0)
        {
            if ($folk != 0)
                $sql .= " WHERE ".TB_PREF."salesman.salesman_code=".db_escape($folk)."
                    AND ".TB_PREF."areas.area_code=".db_escape($area);
            else
                $sql .= " WHERE ".TB_PREF."areas.area_code=".db_escape($area);
        }
    elseif ($folk != 0 )
        {
            $sql .= " WHERE ".TB_PREF."salesman.salesman_code=".db_escape($folk);
        }

$sql .= " GROUP BY ".TB_PREF."debtors_master.debtor_no ORDER BY name";


    $result = db_query($sql, "The customers could not be retrieved");

$tot_cur_cr = $tot_cur_db = 0;
    while ($myrow = db_fetch($result))
    {
        if (!$convert && $currency != $myrow['curr_code']) continue;

        $accumulate = 0;
        $rate = $convert ? get_exchange_rate_from_home_currency($myrow['curr_code'], Today()) : 1;
        $bal = get_open_balance($myrow['debtor_no'], $from, $convert);
        $init[0] = $init[1] = 0.0;
        $init[0] = round2(abs($bal['charges']*$rate), $dec);
        $init[1] = round2(Abs($bal['credits']*$rate), $dec);
        $init[2] = round2($bal['Allocated']*$rate, $dec);
        $init[3] = $init[0] - $init[1];
        $accumulate += $init[3];

        $res = get_transactions($myrow['debtor_no'], $from, $to, false);

        $total = array(0,0,0,0);
            for ($i = 0; $i < 4; $i++)
            {
                    $total[$i] += $init[$i];
                    $grandtotal[$i] += $init[$i];

            }

            if ($no_zeros && $init[3]==0) continue;

        if (db_num_rows($res)==0) {

                $rep->TextCol(0, 2, $myrow['name']);
                $rep->AmountCol(3, 4, $init[3], $dec);
                $rep->AmountCol(8, 9, $init[3], $dec);
                $rep->Line($rep->row  - 2);
               $rep->NewLine(1);
                continue;
        }
        $curr_cr = $curr_db = 0;
        while ($trans = db_fetch($res)) //Detail starts here
        {

          $item[0] = $item[1] = 0.0;
            //modified below by faisal
            if ($trans['type'] == ST_CUSTCREDIT || $trans['type'] == ST_CUSTPAYMENT || $trans['type'] == ST_BANKDEPOSIT || $trans['type'] == ST_BULKDEPOSIT || $trans['type'] == ST_CASHDEPOSIT)
                $trans['TotalAmount'] *= -1;
            if ($trans['TotalAmount'] > 0.0)
            {
                $item[0] = round2(abs($trans['TotalAmount']) * $rate, $dec);
                $accumulate += $item[0];
                $curr_db += $item[0];
                $tot_cur_db += $item[0];
                $item[2] = round2($trans['Allocated'] * $rate, $dec);
            }
            else
            {
                $item[1] = round2(Abs($trans['TotalAmount']) * $rate, $dec);
                $accumulate -= $item[1];
                $curr_cr += $item[1];
                $tot_cur_cr +=$item[1];
                $item[2] = round2($trans['Allocated'] * $rate, $dec) * -1;
            }

            if ($trans['type'] == ST_JOURNAL || $trans['type'] == ST_SALESINVOICE || $trans['type'] == ST_BANKPAYMENT)
                $item[3] = $item[0] - $item[2];
            else
                $item[3] = -$item[1] - $item[2];


            for ($i = 0; $i < 4; $i++)
            {
                $total[$i] += $item[$i];
                $grandtotal[$i] += $item[$i];
            }
            $total[3] = $total[0] - $total[1];
        }

        $rep->TextCol(0, 2, $myrow['name']);
        $rep->AmountCol(8, 9, $total[3], $dec);

        $rep->AmountCol(3, 4, $total[3] + $curr_cr - $curr_db, $dec);
        $rep->AmountCol(5, 6, $curr_db, $dec);

        $rep->AmountCol(6, 7, $curr_cr, $dec);



           $rep->Line($rep->row  - 2);
           $rep->NewLine(1);
    }
    $rep->NewLine();
    $rep->fontSize += 2;
    $rep->TextCol(0, 3, _('Grand Total'));
    $rep->fontSize -= 2;
    $grandtotal[3] = $grandtotal[0] - $grandtotal[1];

    $rep->AmountCol(3, 4, $grandtotal[3] - $tot_cur_db + $tot_cur_cr, $dec);
    $rep->AmountCol(5, 6, $tot_cur_db, $dec);
    $rep->AmountCol(6, 7, $tot_cur_cr, $dec);
        $rep->AmountCol(8, 9, $grandtotal[3], $dec);
    $rep->Line($rep->row  - 2);
    $rep->NewLine();
        $rep->End();
}

Below is the code to be added in reports_main.php

$reports->addReport(RC_CUSTOMER, "_customer_tb", _('Customer TB'),
                array(    _('Start Date') => 'DATEBEGIN',
                        _('End Date') => 'DATEENDM',
                        _('Customer') => 'CUSTOMERS_NO_FILTER',
                        _('Sales Areas') => 'AREAS',
                        _('Sales Folk') => 'SALESMEN',
                        _('Currency Filter') => 'CURRENCY',
                        _('Suppress Zeros') => 'YES_NO',
                        _('Comments') => 'TEXTBOX',
                        _('Orientation') => 'ORIENTATION',
                        _('Destination') => 'DESTINATION'));

Here is the screen shot

www.boxygen.pk

Re: Customer Trial Balance Report

Hi @boxygen,

This is a nice and productive report. Let me incorporate this in the core.
Maybe a good idea to also make a Supplier Trial Balance, right?

/Joe

Re: Customer Trial Balance Report

Here is Supplier Trial Balance report

<?php
/**********************************************************************
    Copyright (C) Boxygen, 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 = 'SA_SUPPLIERANALYTIC';
// ----------------------------------------------------------------
// $ Revision:    2.0 $
// Creator:    Joe Hunt
// date_:    2005-05-19
// Title:    Supplier Balances
// ----------------------------------------------------------------
$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 . "/gl/includes/gl_db.inc");

//----------------------------------------------------------------------------------------------------

print_supplier_balances();

function get_open_balance($supplier_id, $to)
{
    if($to)
        $to = date2sql($to);

        $sql = "SELECT SUM(IF(t.type = ".ST_SUPPINVOICE." OR (t.type IN (".ST_JOURNAL." , ".ST_BANKDEPOSIT.") AND t.ov_amount>0),
                        -abs(t.ov_amount + t.ov_gst + t.ov_discount), 0)) AS charges,";

 $sql .= "SUM(IF(t.type != ".ST_SUPPINVOICE." AND NOT(t.type IN (".ST_JOURNAL." , ".ST_BANKDEPOSIT.") AND t.ov_amount>0),
                        abs(t.ov_amount + t.ov_gst + t.ov_discount) * -1, 0)) AS credits,";

     $sql .= "SUM(IF(t.type != ".ST_SUPPINVOICE." AND NOT(t.type IN (".ST_JOURNAL." , ".ST_BANKDEPOSIT.")), t.alloc * -1, t.alloc)) AS Allocated,";

     $sql .=    "SUM(IF(t.type = ".ST_SUPPINVOICE.", 1, -1) *
             (abs(t.ov_amount + t.ov_gst + t.ov_discount) - abs(t.alloc))) AS OutStanding
        FROM ".TB_PREF."supp_trans t
        WHERE t.supplier_id = ".db_escape($supplier_id);
    if ($to)
        $sql .= " AND t.tran_date < '$to'";
    $sql .= " GROUP BY supplier_id";

    $result = db_query($sql,"No transactions were returned");
    return db_fetch($result);
}


// function get_open_balance($supplier_id, $to)
// {
//     $to = date2sql($to);
//
//     $sql = "SELECT SUM(IF(".TB_PREF."supp_trans.type = ".ST_SUPPINVOICE." OR ".TB_PREF."supp_trans.type = ".ST_BANKDEPOSIT.",
//         (".TB_PREF."supp_trans.ov_amount + ".TB_PREF."supp_trans.ov_gst + ".TB_PREF."supp_trans.ov_discount), 0)) AS charges,
//         SUM(IF(".TB_PREF."supp_trans.type <> ".ST_SUPPINVOICE." AND ".TB_PREF."supp_trans.type <> ".ST_BANKDEPOSIT.",
//         (".TB_PREF."supp_trans.ov_amount + ".TB_PREF."supp_trans.ov_gst + ".TB_PREF."supp_trans.ov_discount), 0)) AS credits,
//         SUM(".TB_PREF."supp_trans.alloc) AS Allocated,
//         SUM(IF(".TB_PREF."supp_trans.type = ".ST_SUPPINVOICE." OR ".TB_PREF."supp_trans.type = ".ST_BANKDEPOSIT.",
//         (".TB_PREF."supp_trans.ov_amount + ".TB_PREF."supp_trans.ov_gst + ".TB_PREF."supp_trans.ov_discount - ".TB_PREF."supp_trans.alloc),
//         (".TB_PREF."supp_trans.ov_amount + ".TB_PREF."supp_trans.ov_gst + ".TB_PREF."supp_trans.ov_discount + ".TB_PREF."supp_trans.alloc))) AS OutStanding
//         FROM ".TB_PREF."supp_trans
//         WHERE ".TB_PREF."supp_trans.tran_date < '$to'
//         AND ".TB_PREF."supp_trans.supplier_id = '$supplier_id' GROUP BY supplier_id";
//
//     $result = db_query($sql,"No transactions were returned");
//     return db_fetch($result);
// }

function getTransactions($supplier_id, $from, $to)
{
    $from = date2sql($from);
    $to = date2sql($to);
//memo added by faisal
    $sql = "SELECT ".TB_PREF."supp_trans.*, comments.memo_,
                (".TB_PREF."supp_trans.ov_amount + ".TB_PREF."supp_trans.ov_gst + ".TB_PREF."supp_trans.ov_discount)
                AS TotalAmount, ".TB_PREF."supp_trans.alloc AS Allocated,
                ((".TB_PREF."supp_trans.type = ".ST_SUPPINVOICE.")
                    AND ".TB_PREF."supp_trans.due_date < '$to') AS OverDue
                FROM ".TB_PREF."supp_trans
                    LEFT JOIN ".TB_PREF."comments comments ON ".TB_PREF."supp_trans.type=comments.type AND ".TB_PREF."supp_trans.trans_no=comments.id
                     WHERE ".TB_PREF."supp_trans.tran_date >= '$from' AND ".TB_PREF."supp_trans.tran_date <= '$to'
                AND ".TB_PREF."supp_trans.supplier_id = '$supplier_id' AND ".TB_PREF."supp_trans.ov_amount!=0
                    ORDER BY ".TB_PREF."supp_trans.tran_date";

    $TransResult = db_query($sql,"No transactions were returned");

    return $TransResult;
}

//----------------------------------------------------------------------------------------------------

function print_supplier_balances()
{
        global $path_to_root, $systypes_array;

        $from = $_POST['PARAM_0'];
        $to = $_POST['PARAM_1'];
        $fromsupp = $_POST['PARAM_2'];
        $currency = $_POST['PARAM_3'];
        $no_zeros = $_POST['PARAM_4'];
            $comments = $_POST['PARAM_5'];
    $orientation = $_POST['PARAM_6'];
    $destination = $_POST['PARAM_7'];
    if ($destination)
        include_once($path_to_root . "/reporting/includes/excel_report.inc");
    else
        include_once($path_to_root . "/reporting/includes/pdf_report.inc");

    $orientation = ($orientation ? 'L' : 'P');
    if ($fromsupp == ALL_TEXT)
        $supp = _('All');
    else
        $supp = get_supplier_name($fromsupp);
        $dec = user_price_dec();

    if ($currency == ALL_TEXT)
    {
        $convert = true;
        $currency = _('Balances in Home currency');
    }
    else
        $convert = false;

    if ($no_zeros) $nozeros = _('Yes');
    else $nozeros = _('No');

    $cols = array(0, 100, 130, 190,    250, 320, 385, 450,    515);

    $headers = array(_('Name'), _(''), _(''), _('Opening Bal'), _('Debit'),
        _('Credit'), _(''), _('Balance'));

    $aligns = array('left',    'left',    'left',    'right',    'right', 'right', 'right', 'right');

    $params =   array(     0 => $comments,
                1 => array('text' => _('Period'), 'from' => $from, 'to' => $to),
                2 => array('text' => _('Supplier'), 'from' => $supp, 'to' => ''),
                3 => array(  'text' => _('Currency'),'from' => $currency, 'to' => ''),
            4 => array('text' => _('Suppress Zeros'), 'from' => $nozeros, 'to' => ''));

    $rep = new FrontReport(_('Supplier TB'), "SupplierTB", user_pagesize(), 9, $orientation);
    if ($orientation == 'L')
        recalculate_cols($cols);

    $rep->Font();
    $rep->Info($params, $cols, $headers, $aligns);
    $rep->NewPage();

    $total = array();
    $grandtotal = array(0,0,0,0);

    $sql = "SELECT supplier_id, supp_name AS name, curr_code FROM ".TB_PREF."suppliers";
    if ($fromsupp != ALL_TEXT)
        $sql .= " WHERE supplier_id=".db_escape($fromsupp);
    $sql .= " ORDER BY supp_name";
    $result = db_query($sql, "The customers could not be retrieved");

$tot_cur_cr = $tot_cur_db = 0;
    while ($myrow=db_fetch($result))
    {
        if (!$convert && $currency != $myrow['curr_code'])
            continue;
        $accumulate = 0;
        $rate = $convert ? get_exchange_rate_from_home_currency($myrow['curr_code'], Today()) : 1;
        $bal = get_open_balance($myrow['supplier_id'], $from);
        $init[0] = $init[1] = 0.0;
        $init[0] = round2(abs($bal['charges']*$rate), $dec);
        $init[1] = round2(Abs($bal['credits']*$rate), $dec);
        $init[2] = round2($bal['Allocated']*$rate, $dec);

        $init[3] = $init[1] - $init[0];
        $accumulate += $init[3];

        $res = getTransactions($myrow['supplier_id'], $from, $to);

        $total = array(0,0,0,0);
        for ($i = 0; $i < 4; $i++)
        {
            $total[$i] += $init[$i];
            $grandtotal[$i] += $init[$i];
        }

        if ($no_zeros && $init[3] == 0) continue;

        if (db_num_rows($res)==0) {
            $rep->TextCol(0, 2, $myrow['name']);
            $rep->AmountCol(3, 4, $init[3], $dec);
            $rep->AmountCol(7, 8, $init[3], $dec);
            $rep->Line($rep->row  - 2);
        $rep->NewLine();

            continue;
        }
        $curr_db = $curr_cr =0;
        while ($trans=db_fetch($res))
        {
            if ($no_zeros && floatcmp(abs($trans['TotalAmount']), $trans['Allocated']) == 0) continue;
            $item[0] = $item[1] = 0.0;
            if ($trans['TotalAmount'] > 0.0)
            {
                $item[0] = round2(abs($trans['TotalAmount']) * $rate, $dec);
                $curr_cr += $item[0];
                $tot_cur_cr += $item[0];

                $accumulate -= $item[0];
            }
            else
            {
                $item[1] = round2(abs($trans['TotalAmount']) * $rate, $dec);
                $curr_db += $item[1];
                $tot_cur_db += $item[1];
                $accumulate += $item[1];
            }
            $item[2] = round2($trans['Allocated'] * $rate, $dec);
            if ($trans['TotalAmount'] > 0.0)
                $item[3] = $item[2] - $item[0];
            else
                $item[3] = ($item[2] - $item[1]) * -1;

            for ($i = 0; $i < 4; $i++)
            {
                $total[$i] += $item[$i];
                $grandtotal[$i] += $item[$i];
            }
                $total[3] = $total[1] - $total[0];

        }

                $rep->AmountCol(5, 6, $curr_cr, $dec);
                $rep->AmountCol(4, 5, $curr_db, $dec);


        $rep->TextCol(0, 2, $myrow['name']);
        $rep->AmountCol(3, 4, $total[3] + $curr_cr - $curr_db, $dec);
        $rep->AmountCol(7, 8, $total[3], $dec);


        for ($i = 2; $i < 4; $i++)
        {
            $total[$i] = 0.0;
        }
        $rep->Line($rep->row  - 2);
        $rep->NewLine();
    }
    $rep->NewLine();
    $rep->fontSize += 2;
    $rep->TextCol(0, 3,    _('Grand Total'));
    $rep->fontSize -= 2;

    $grandtotal[3] = $grandtotal[1] - $grandtotal[0];

$rep->AmountCol(3, 4,$grandtotal[3] - $tot_cur_db + $tot_cur_cr, $dec);

$rep->AmountCol(4, 5,$tot_cur_db, $dec);
$rep->AmountCol(5, 6,$tot_cur_cr, $dec);

    $rep->AmountCol(7, 8,$grandtotal[3], $dec);
    $rep->Line($rep->row  - 2);
    $rep->NewLine();
    $rep->End();
}

?>

Here is the code for reports_main.php

    $reports->addReport(RC_SUPPLIER, "_supplier_tb", _('Supplier &TB'),
                array(    _('Start Date') => 'DATEBEGIN',
                        _('End Date') => 'DATEENDM',
                        _('Supplier') => 'SUPPLIERS_NO_FILTER',
                        _('Currency Filter') => 'CURRENCY',
                        _('Suppress Zeros') => 'YES_NO',
                        _('Comments') => 'TEXTBOX',
                        _('Orientation') => 'ORIENTATION',
                        _('Destination') => 'DESTINATION'));
www.boxygen.pk

Re: Customer Trial Balance Report

wow, you are my man, @boxygen.

Will incorporate this as well. will be committed later this afternoon.

/Joe

Re: Customer Trial Balance Report

The 2 reports has been added to core and are committed.

You can download the 3 files
/reporting/rep115.php
/reporting/rep206.php
/reporting/reports_main.php

/Joe

Re: Customer Trial Balance Report

This is nice one. @joe add it to the stable download . So new downloads will get the feature

Subscription service based on FA
HRM CRM POS batch Themes

Re: Customer Trial Balance Report

A couple of minor issues are fixed in the rep115.php and rep206. The no_zeroes parameter didn't work and some parameters were missing in the rep115.php report. The files are committed to repo and you can re-download them a bit up.

We are not glad for the Copyright notice in the beginning of the 2 files. We are going to change our copyright to be FrontAccounting Team from next major 2.5. In the readme.md files we are going to present the active developers in the FrontAccounting Team.
For now I have changed the Copyright to FrontAccounting Team for the 2 files.
A bit down there are a field called 'Creator'. We will use that field for the Team Member that have created the file.
I hope you are ok with this, @boxygen.

/Joe

Re: Customer Trial Balance Report

Updated the Wiki with the screenshots.

Whilst the Suppliers Trial Balance Report has a hot key (T), the Customer Trial balance Report does not have any. Also naming styles (plurals) can be standardised.

Re: Customer Trial Balance Report

@joe This is an honour for me and all contributors.

www.boxygen.pk

Re: Customer Trial Balance Report

In rep206.php Line # 168 shall be modified as below

 if (db_num_rows($res) == 0 && !$no_zeros) 

and Line # 181 shall be commented, Because ignoring the loop here is not adding up the values of $curr_cr, $curr_db and $item variables.

www.boxygen.pk

Re: Customer Trial Balance Report

in rep115.php Line # 234 shall be modified as below

         if (db_num_rows($res) == 0 && !$no_zeros)
www.boxygen.pk

Re: Customer Trial Balance Report

This is fixed and some margin problems in Customer Trial Balance Report fixed too.

Thanks @boxygen for seeing this.

Fixed files can be downloaded here and here.

/Joe