Hi
I have done similar thing for Pakistan.
I thing this is related to report VAT charged on each invoice to government.
It's much more fun, when you can discuss your problems with others...
You are not logged in. Please login or register.
FrontAccounting forum → Posts by boxygen
Hi
I have done similar thing for Pakistan.
I thing this is related to report VAT charged on each invoice to government.
Is this a fatal error or the page is still working? This may be warning for PHP 8 and may need to be fix
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
<?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();
}
?>
You can comment that line
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
Support on older versions is difficult. A lot has been changed in FA and PHP both..
Have you checked the proper reference is defined for this transaction type in Setup >> Transaction References?
Can you elaborate further?
Dimensions can be used as Cost Centers.
Which version of FA and PHP you are using?
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();
}
?>
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;
}
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.
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.
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.
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"],
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.
In this function gl_account_in_company_defaults
please add one more line
OR name='grn_clearing_act'
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
Have you tried this post
https://frontaccounting.com/punbb/viewtopic.php?id=9510
Yes that is needed. But I think @Andres is no more maintaining this extension.
Better if you can share Screen Shot to elaborate your problem.
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);
Hello way back @anoopmb did something to comply with SLIM3. It might help you.
FrontAccounting forum → Posts by boxygen
Powered by PunBB, supported by Informer Technologies, Inc.
Currently installed 4 official extensions. Copyright © 2003–2009 PunBB.