Please note my repo is very much customized.
I have tested this in core repo and it is working
But you need to recheck with core and remove my customization if any
26 07/26/2023 06:49:24 am
Re: Supplier >> Supplier Balances and Supplier Trial Balances (7 replies, posted in Accounts Payable)
27 07/26/2023 06:48:13 am
Re: Supplier >> Supplier Balances and Supplier Trial Balances (7 replies, posted in Accounts Payable)
<?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=".."; //Fro Cron
//include_once($path_to_root . "/includes/session.inc"); //For Cron
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.", ".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.", ".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." , ".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 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'];
$show_balance = $_POST['PARAM_3'];
$currency = $_POST['PARAM_4'];
$no_zeros = $_POST['PARAM_5'];
$comments = $_POST['PARAM_6'];
$orientation = $_POST['PARAM_7'];
$destination = $_POST['PARAM_8'];
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, 80, 130, 190, 250, 320, 385, 450, 515);
$headers = array(_('Trans Type'), _('#'), _('Date'), _('Due Date'), _('Debit'),
_('Credit'), _('Allocated'), _('Outstanding'));
if ($show_balance)
$headers[7] = _('Balance');
$aligns = array('left', 'left', 'left', 'left', '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 Ledger'), "SupplierBalances", user_pagesize(), 8, $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");
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);
if ($show_balance)
{
$init[3] = $init[1] - $init[0];
$accumulate += $init[3];
}
else
$init[3] = round2($bal['OutStanding']*$rate, $dec);
$res = getTransactions($myrow['supplier_id'], $from, $to);
if ($no_zeros && db_num_rows($res) == 0) continue;
$rep->fontSize += 2;
$rep->TextCol(0, 2, $myrow['name']);
if ($convert) $rep->TextCol(2, 3, $myrow['curr_code']);
$rep->fontSize -= 2;
$rep->TextCol(3, 4, _("Open Balance"));
$rep->AmountCol(5, 6, $init[0], $dec);
$rep->AmountCol(4, 5, $init[1], $dec);
$rep->AmountCol(6, 7, $init[2], $dec);
$rep->AmountCol(7, 8, $init[3], $dec);
$total = array(0,0,0,0);
for ($i = 0; $i < 4; $i++)
{
$total[$i] += $init[$i];
$grandtotal[$i] += $init[$i];
}
$rep->NewLine(1, 2);
$rep->Line($rep->row + 4);
if (db_num_rows($res)==0) {
$rep->NewLine(1, 2);
continue;
}
while ($trans=db_fetch($res))
{
if ($no_zeros && floatcmp(abs($trans['TotalAmount']), $trans['Allocated']) == 0) continue;
$rep->NewLine(1, 2);
$rep->TextCol(0, 1, $systypes_array[$trans['type']]);
$rep->TextCol(1, 2, $trans['reference']);
$rep->DateCol(2, 3, $trans['tran_date'], true);
if ($trans['type'] == ST_SUPPINVOICE)
$rep->DateCol(3, 4, $trans['due_date'], true);
$item[0] = $item[1] = 0.0;
if ($trans['TotalAmount'] > 0.0)
{
$item[0] = round2(abs($trans['TotalAmount']) * $rate, $dec);
$rep->AmountCol(5, 6, $item[0], $dec);
$accumulate -= $item[0];
}
else
{
$item[1] = round2(abs($trans['TotalAmount']) * $rate, $dec);
$rep->AmountCol(4, 5, $item[1], $dec);
$accumulate += $item[1];
}
$item[2] = round2($trans['Allocated'] * $rate, $dec);
$rep->AmountCol(6, 7, $item[2], $dec);
if ($trans['TotalAmount'] > 0.0)
$item[3] = $item[2] - $item[0];
else
$item[3] = ($item[2] - $item[1]) * -1;
if ($show_balance)
$rep->AmountCol(7, 8, $accumulate, $dec);
else
$rep->AmountCol(7, 8, $item[3], $dec);
for ($i = 0; $i < 4; $i++)
{
$total[$i] += $item[$i];
$grandtotal[$i] += $item[$i];
}
if ($show_balance)
$total[3] = $total[1] - $total[0];
// $gl_memo = get_gl_memo($trans['type'], -round2($trans['TotalAmount'] * $rate, $dec), $trans['trans_no'], null, $myrow['supplier_id'], PT_SUPPLIER);
$memo = $gl_memo != "" ? $gl_memo : $trans['memo_'];
if ($memo <> "")
{
$rep->NewLine(1, 2);
$rep->fontSize -= 2;
$rep->TextCol(1, 8, $memo); // added by faisal
$rep->fontSize += 2;
}
$rep->Line($rep->row - 2);
}
$rep->Line($rep->row - 8);
$rep->NewLine(2);
$rep->TextCol(0, 1, _('Total Activity'));
// $rep->TextCol(2, 6, $myrow['name']);
$rep->AmountCol(5, 6, $total[0] - $init[0], $dec);
$rep->AmountCol(4, 5, $total[1] - $init[1], $dec);
$rep->NewLine(2);
$rep->TextCol(0, 3, _('Total'));
$rep->AmountCol(5, 6, $total[0], $dec);
$rep->AmountCol(4, 5, $total[1], $dec);
for ($i = 2; $i < 4; $i++)
{
$rep->AmountCol($i + 4, $i + 5, $total[$i], $dec);
$total[$i] = 0.0;
}
$rep->Line($rep->row - 4);
$rep->NewLine(2);
}
$rep->fontSize += 2;
$rep->TextCol(0, 3, _('Grand Total'));
$rep->fontSize -= 2;
if ($show_balance)
$grandtotal[3] = $grandtotal[1] - $grandtotal[0];
$rep->AmountCol(4, 5,$grandtotal[1], $dec);
$rep->AmountCol(5, 6,$grandtotal[0], $dec);
for ($i = 2; $i < 4; $i++)
$rep->AmountCol($i + 4, $i + 5,$grandtotal[$i], $dec);
$rep->Line($rep->row - 4);
$rep->NewLine();
$rep->End();
}
?>
28 07/26/2023 06:07:06 am
Re: Supplier >> Supplier Balances and Supplier Trial Balances (7 replies, posted in Accounts Payable)
You can comment that line
29 07/26/2023 03:07:50 am
Re: I hope to find (4 replies, posted in Wish List)
1. In FA currently we can't produce multiple products from one single process. I have a customization that can produce multiple products and it disctibutes the Work In Process cost as a weighted average to all produced items taking the Selling Price of the product as a Weight.
2. Such requirements are very specific. In FA we are providing a Generic platform for masses. For specific requirements you need to create modules.
5. There are few POS available as a modules created by some developers like @notrinos. you can contact them and integrate them in your repo
30 07/26/2023 03:01:11 am
Re: Excel output error (2 replies, posted in Reporting)
Support on older versions is difficult. A lot has been changed in FA and PHP both..
31 07/26/2023 02:58:49 am
Re: Supplier Payment Entry error (1 replies, posted in Reporting)
Have you checked the proper reference is defined for this transaction type in Setup >> Transaction References?
32 07/26/2023 02:56:23 am
Re: purchase invoice on standard cost products (2 replies, posted in Items and Inventory)
Can you elaborate further?
33 07/26/2023 02:55:07 am
Re: We need cost centers (2 replies, posted in Wish List)
Dimensions can be used as Cost Centers.
34 07/26/2023 02:53:30 am
Re: Error on Sales Tab with Customer Transaction enquiry (4 replies, posted in Accounts Receivable)
Which version of FA and PHP you are using?
35 07/26/2023 02:51:48 am
Re: Supplier >> Supplier Balances and Supplier Trial Balances (7 replies, posted in Accounts Payable)
Your supplier balances report is not same as core. You have done customization.
In Core The Column Names are Charges and Credits.
Charges is what you means as Credit
Credits is what you mean as Debit.
I have a Customized Supplier Ledger Report given below. I hope that works for your repo.
<?php
$page_security = 'SA_SUPPLIERANALYTIC';
// ----------------------------------------------------------------
// $ Revision: 2.0 $
// Creator: Joe Hunt
// date_: 2005-05-19
// Title: Supplier Balances
// ----------------------------------------------------------------
// $path_to_root=".."; //Fro Cron
//include_once($path_to_root . "/includes/session.inc"); //For Cron
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.", ".ST_CASHDEPOSIT.") 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.", ".ST_CASHDEPOSIT.") 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." , ".ST_CASHDEPOSIT.")), 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 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'];
$show_balance = $_POST['PARAM_3'];
$currency = $_POST['PARAM_4'];
$no_zeros = $_POST['PARAM_5'];
$comments = $_POST['PARAM_6'];
$orientation = $_POST['PARAM_7'];
$destination = $_POST['PARAM_8'];
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, 80, 130, 190, 250, 320, 385, 450, 515);
$headers = array(_('Trans Type'), _('#'), _('Date'), _('Due Date'), _('Debit'),
_('Credit'), _('Allocated'), _('Outstanding'));
if ($show_balance)
$headers[7] = _('Balance');
$aligns = array('left', 'left', 'left', 'left', '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 Ledger'), "SupplierBalances", user_pagesize(), 8, $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");
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);
if ($show_balance)
{
$init[3] = $init[1] - $init[0];
$accumulate += $init[3];
}
else
$init[3] = round2($bal['OutStanding']*$rate, $dec);
$res = getTransactions($myrow['supplier_id'], $from, $to);
if ($no_zeros && db_num_rows($res) == 0) continue;
$rep->fontSize += 2;
$rep->TextCol(0, 2, $myrow['name']);
if ($convert) $rep->TextCol(2, 3, $myrow['curr_code']);
$rep->fontSize -= 2;
$rep->TextCol(3, 4, _("Open Balance"));
$rep->AmountCol(5, 6, $init[0], $dec);
$rep->AmountCol(4, 5, $init[1], $dec);
$rep->AmountCol(6, 7, $init[2], $dec);
$rep->AmountCol(7, 8, $init[3], $dec);
$total = array(0,0,0,0);
for ($i = 0; $i < 4; $i++)
{
$total[$i] += $init[$i];
$grandtotal[$i] += $init[$i];
}
$rep->NewLine(1, 2);
$rep->Line($rep->row + 4);
if (db_num_rows($res)==0) {
$rep->NewLine(1, 2);
continue;
}
while ($trans=db_fetch($res))
{
if ($no_zeros && floatcmp(abs($trans['TotalAmount']), $trans['Allocated']) == 0) continue;
$rep->NewLine(1, 2);
$rep->TextCol(0, 1, $systypes_array[$trans['type']]);
$rep->TextCol(1, 2, $trans['reference']);
$rep->DateCol(2, 3, $trans['tran_date'], true);
if ($trans['type'] == ST_SUPPINVOICE)
$rep->DateCol(3, 4, $trans['due_date'], true);
$item[0] = $item[1] = 0.0;
if ($trans['TotalAmount'] > 0.0)
{
$item[0] = round2(abs($trans['TotalAmount']) * $rate, $dec);
$rep->AmountCol(5, 6, $item[0], $dec);
$accumulate -= $item[0];
}
else
{
$item[1] = round2(abs($trans['TotalAmount']) * $rate, $dec);
$rep->AmountCol(4, 5, $item[1], $dec);
$accumulate += $item[1];
}
$item[2] = round2($trans['Allocated'] * $rate, $dec);
$rep->AmountCol(6, 7, $item[2], $dec);
if ($trans['TotalAmount'] > 0.0)
$item[3] = $item[2] - $item[0];
else
$item[3] = ($item[2] - $item[1]) * -1;
if ($show_balance)
$rep->AmountCol(7, 8, $accumulate, $dec);
else
$rep->AmountCol(7, 8, $item[3], $dec);
for ($i = 0; $i < 4; $i++)
{
$total[$i] += $item[$i];
$grandtotal[$i] += $item[$i];
}
if ($show_balance)
$total[3] = $total[1] - $total[0];
$gl_memo = get_gl_memo($trans['type'], -round2($trans['TotalAmount'] * $rate, $dec), $trans['trans_no'], null, $myrow['supplier_id'], PT_SUPPLIER);
$memo = $gl_memo != "" ? $gl_memo : $trans['memo_'];
if ($memo <> "")
{
$rep->NewLine(1, 2);
$rep->fontSize -= 2;
$rep->TextCol(1, 8, $memo); // added by faisal
$rep->fontSize += 2;
}
$rep->Line($rep->row - 2);
}
$rep->Line($rep->row - 8);
$rep->NewLine(2);
$rep->TextCol(0, 1, _('Total Activity'));
// $rep->TextCol(2, 6, $myrow['name']);
$rep->AmountCol(5, 6, $total[0] - $init[0], $dec);
$rep->AmountCol(4, 5, $total[1] - $init[1], $dec);
$rep->NewLine(2);
$rep->TextCol(0, 3, _('Total'));
$rep->AmountCol(5, 6, $total[0], $dec);
$rep->AmountCol(4, 5, $total[1], $dec);
for ($i = 2; $i < 4; $i++)
{
$rep->AmountCol($i + 4, $i + 5, $total[$i], $dec);
$total[$i] = 0.0;
}
$rep->Line($rep->row - 4);
$rep->NewLine(2);
}
$rep->fontSize += 2;
$rep->TextCol(0, 3, _('Grand Total'));
$rep->fontSize -= 2;
if ($show_balance)
$grandtotal[3] = $grandtotal[1] - $grandtotal[0];
$rep->AmountCol(4, 5,$grandtotal[1], $dec);
$rep->AmountCol(5, 6,$grandtotal[0], $dec);
for ($i = 2; $i < 4; $i++)
$rep->AmountCol($i + 4, $i + 5,$grandtotal[$i], $dec);
$rep->Line($rep->row - 4);
$rep->NewLine();
$rep->End();
}
?>
36 06/23/2023 08:35:38 pm
Topic: Additional Argument in Function Call (0 replies, posted in Accounts Payable)
Hello,
In purchasing/includes/purchasing_db.inc the below function call on Line # 200 the third last argument true is additional I think
$inv->add_grn_to_trans($line->grn_item_id, $line->po_detail_rec, $line->stock_id,
$line->item_description, $line->receive_qty, 0, $line->receive_qty,
$line->price, $line->price, true, get_unit_cost($line->stock_id), '');
function add_grn_to_trans($grn_item_id, $po_detail_item, $item_code, $item_description,
$qty_recd, $prev_quantity_inv, $this_quantity_inv, $order_price, $chg_price,
$std_cost_unit=null, $gl_code='')
{
$this->grn_items[$grn_item_id] = new grn_item($grn_item_id, $po_detail_item,
$item_code, $item_description, $qty_recd, $prev_quantity_inv, $this_quantity_inv,
$order_price, $chg_price, $std_cost_unit, $gl_code, $this->tax_included);
$this->src_docs = find_src_invoices($this);
unset($this->tax_overrides); // cancel tax overrides after cart change
return 1;
}
37 05/12/2023 01:38:25 pm
Re: Emailed reports only use last name (1 replies, posted in FA Modifications)
You can share your code here so that any one else can also get benefit from that if needed.
And off course depending on regional requirements FA can be modified.
38 05/12/2023 01:28:49 pm
Re: DISCOUNT!! (1 replies, posted in Accounts Receivable)
I think you are talking about Overall Invoice Discount. Currently we have Line Item Based Discount in FA But Overall Discount I think that needs to be customized.
In Customer Payments the discount is basically Early Payment Discount and not the discount on Sales.
39 01/28/2023 04:17:21 am
Topic: Bug Found in Invoice Creation (0 replies, posted in Report Bugs here)
I have been facing this issue quite a long but couldn't find the reason becuase this is not happening always but only once in 1000 attempts may be.
While Creating Invoice From Delivery Notes a function write_customer_trans_detail_item is called from customer_invoice.php with following backtrace and function arguments
Function Arguments
(
[0] => 10
[1] => 916
[2] => 10036
[3] => 50/3 Polyester Color SKY 2500
[4] => 88
[5] => 139
[6] => 0
[7] => 0
[8] => 62.160883841992
[9] => 9783
[10] => 9783
)
/home/sites/22a/e/eeb3fd1d98/public_html/boxyerp/sales/includes/db/sales_invoice_db.inc:122: write_customer_trans_detail_item('10','916','10036','50/3 Polyester Color SKY 2500','88','139','0','0','62.160883841992','9783','9783')
/home/sites/22a/e/eeb3fd1d98/public_html/boxyerp/sales/includes/cart_class.inc:343: write_sales_invoice((Cart Object))
/home/sites/22a/e/eeb3fd1d98/public_html/boxyerp/sales/customer_invoice.php:396: (Cart Object)->write()</td
I have just added following lines in the beginning of function to alert the user
function write_customer_trans_detail_item($debtor_trans_type, $debtor_trans_no, $stock_id, $description,
$quantity, $unit_price, $unit_tax, $discount_percent, $std_cost, $src_id, $line_id=0)
{
if ($debtor_trans_type == ST_SALESINVOICE && $src_id == $line_id){
display_error ("High Alert. Bug Found in Invoice Creation. Please Try Again");
exit();
}
Here $line_id was supposed to be Zero but it was same as $src_id and that is creating a big database anomaly.
Still trying to investigate why this happens.
Just sharing here if anyone else facing same issue.
Regards.
40 01/27/2023 07:54:05 pm
Re: Item Code of Manufacturing Item in WorkOrder (1 replies, posted in Manufactoring)
Hello, @sairmalhi In reporting/includes/pdf_report.inc in the function SetCommonData add 'stock_id' after 'StockItemName' and then use this in reporting/includes/doctext.inc as
_("Manufactured Item") => $this->formData["stock_id"],
41 01/27/2023 07:40:21 pm
Re: GL Accounts in Company Defaults (6 replies, posted in Setup)
Hello @MacKenzie, GRN Clearing Account is a contra account when you have received the goods but haven't credited the supplier. This contra account is settled when the supplier is credited against Goods Received.
42 01/17/2023 08:01:54 am
Topic: GL Accounts in Company Defaults (6 replies, posted in Setup)
In this function gl_account_in_company_defaults
please add one more line
OR name='grn_clearing_act'
43 01/15/2023 07:03:29 pm
Re: Slim 4 API for third party apps integration (3 replies, posted in Modules Add-on's)
There are few interesting discussion on API. I think you must have a look on them if not yet
https://frontaccounting.com/punbb/viewtopic.php?id=7536
https://frontaccounting.com/punbb/viewtopic.php?id=7132
https://frontaccounting.com/punbb/viewtopic.php?pid=36418#p36418
44 01/15/2023 06:48:42 pm
Re: 2 factor Authentication (2fa) (1 replies, posted in Wish List)
Have you tried this post
https://frontaccounting.com/punbb/viewtopic.php?id=9510
45 01/15/2023 02:56:31 pm
Re: Slim 4 API for third party apps integration (3 replies, posted in Modules Add-on's)
Yes that is needed. But I think @Andres is no more maintaining this extension.
46 01/15/2023 02:50:55 pm
Re: can't edit chart of account (1 replies, posted in Setup)
Better if you can share Screen Shot to elaborate your problem.
47 01/05/2023 03:50:36 am
Re: Bug found in Supplier Credit (5 replies, posted in Accounts Payable)
I have found another bug in Supplier Credit Note
Fix as below at line # 395 on invoice_db.inc
exchange_variation(ST_SUPPCREDIT, $invoice_id, ST_SUPPINVOICE, $invoice_no, $date_,
$allocate_amount, PT_SUPPLIER);
48 12/02/2022 07:45:19 am
Re: PHP SLIM 4 integration (3 replies, posted in Modules Add-on's)
Hello way back @anoopmb did something to comply with SLIM3. It might help you.
49 12/02/2022 07:28:16 am
Re: Bug in Voiding Customer Payment (2 replies, posted in Accounts Receivable)
Ok Thank you. I missed that Post earlier
50 12/02/2022 06:00:42 am
Topic: Bug in Voiding Customer Payment (2 replies, posted in Accounts Receivable)
I faced a case with one of my installation.
I tried voiding a Customer Payment.
When It comes to the following Line of code in void_transaction() function
case ST_CUSTPAYMENT : // it's a customer payment
if (!check_void_bank_trans($type, $type_no))
return _('This transaction cannot be voided because the operation would decrease account balance below allowed limit in some point of account history.');
case ST_SALESINVOICE : // it's a customer invoice
if (is_cust_invoice_credited($type_no))
return _('This invoice cannot be voided because it was already credited.');
case ST_CUSTCREDIT : // it's a customer credit note
case ST_CUSTDELIVERY : // it's a customer dispatch
if (!exists_customer_trans($type, $type_no))
return _('Selected transaction does not exists.');
if ($type == ST_CUSTDELIVERY) // added 04 Oct 2008 by Joe Hunt. If delivery note has a not voided invoice, then NO.
{
$vers = get_customer_trans_version($type, $type_no);
if ($vers[$type_no] == 1) {
$childs = get_sales_child_lines($type, $type_no, false); // 2011-03-17 This had been changed. Joe
if ($childs && db_num_rows($childs))
return _('This delivery cannot be voided because it was already invoiced.');
}
}
post_void_customer_trans($type, $type_no);
break;
it gave the error message This invoice cannot be voided because it was already credited
Means there is no break after ST_CUSTPAYMENT condition so it attempted the next switch case ST_SALESINVOICE
I resolved the bug with following changes.
case ST_CUSTPAYMENT : // it's a customer payment
if (!check_void_bank_trans($type, $type_no))
return _('This transaction cannot be voided because the operation would decrease account balance below allowed limit in some point of account history.');
post_void_customer_trans($type, $type_no);
break;
case ST_SALESINVOICE : // it's a customer invoice
if (is_cust_invoice_credited($type_no))
return _('This invoice cannot be voided because it was already credited.');
post_void_customer_trans($type, $type_no);
break;
Please let me know if this is the right way to handle this bug?