Dimensions can be used as Cost Centers.
27 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?
28 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();
}
?>
29 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;
}
30 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.
31 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.
32 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.
33 01/27/2023 07:54:05 pm
Re: Item Code of Manufacturing Item in WorkOrder (1 replies, posted in Manufacturing)
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"],
34 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.
35 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'
36 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
37 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
38 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.
39 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.
40 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);
41 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.
42 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
43 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?
44 12/02/2022 05:52:12 am
Re: PHP SLIM 4 integration (3 replies, posted in Modules/Add-on's)
Are you doing this for API?
45 09/29/2022 07:53:38 pm
Re: Subtotals Annual Expense Breakdown (1 replies, posted in Reporting)
Can you share the Screen Shot for better understanding.
46 09/29/2022 07:52:31 pm
Re: Cannot Generate Invoice or Record Customer Payments. (3 replies, posted in Accounts Receivable)
Please enable the debug mode from config.php and then see the errors
47 09/29/2022 07:50:21 pm
Re: Sales Person Name entry in the sales order (2 replies, posted in Reporting)
@rahmanbd currently you can't select the Sales Person while Creating Sales order. Sales Person is predefined to each customer and it is not linked to order.
48 09/29/2022 07:48:45 pm
Re: Bug found in Supplier Credit (5 replies, posted in Accounts Payable)
I can confirm that
1. Reference is now being picked correctly
2. Edit of Credit Note is not Reversing Entries now.
But
3. Credit Note is not being allocated to the Invoice.
49 09/28/2022 05:57:40 pm
Topic: Bug found in Supplier Credit (5 replies, posted in Accounts Payable)
No 1:
When Supplier Credit Note is Edited it is reverting the GL Entry.
No 2:
When Supplier Credit Note is Created Directly then it is taking the Reference of Supplier Credit Not but when it is created by clicking the Credit Icon in Supplier Transaction Inquiry against any Supplier Inovice then it is taking the Next Reference from Supplier Invoice.
50 08/26/2022 03:18:32 am
Re: a real database for demo (10 replies, posted in Setup)
When you install FA it gives you option to install it with Demo Data. Try that.