The variable $comp_path is undefined.
326 01/01/2019 05:18:12 pm
Re: Fixing Usage - report generator (40 replies, posted in Modules Add-on's)
327 01/01/2019 10:57:41 am
Re: Default Theme Redesigned And available For testing (47 replies, posted in Modules Add-on's)
@kvvaradha, good effort.
However if modernizing can turn this into bootstrap theme with less number of clicks to reach any page then it will be very good.
Obviously if @Joe and @itronics agree.
Currently if we are on any page and we need to navigate to any other module or any other page, we need multiple clicks.
If using bootstrap the Menu Dashboard gets Available on Mouse Hoover and Left Panel then it will be perfect.
Thanks
328 01/01/2019 05:10:15 am
Re: Fixing Usage - report generator (40 replies, posted in Modules Add-on's)
@apmuthu
Line # 19 on repgen_print.php must be like this
$file = company_path().'/pdf_files/'.$id.'.pdf';
The Edit and Copy functions are not working properly.
Copying a Report is Copying the Function.
Editing a Report is Editing the Function.
You can check at fresh installation at
Click Here
id: admin
pass: Pakistan1947
329 12/29/2018 04:53:18 am
Re: AJAX DRIVEN AUTOCOMPLETE DEMO & SOURCE (25 replies, posted in FA Modifications)
@anoopmb, I have tested this Ajax Version. I would suggest that there shall be a Variable controlling to Use Ajax or Not in Config. The Ajax is needed if the list goes long. Secondly along with Ajax at least first 100 values shall be shown in the list.
Ajax searching is taking time. So Initially when the list is not long the user can set $ajax_use=false something like that.
Its a great feature.
330 12/28/2018 07:42:06 pm
Re: An Irrational Behavior in Manufacturing Advanced Manufacturing (2 replies, posted in Manufactoring)
Agreed
331 12/28/2018 02:36:09 pm
Topic: An Irrational Behavior in Manufacturing Advanced Manufacturing (2 replies, posted in Manufactoring)
I have taken a Very Simple Case Through Advanced Manufacturing without defining BOM.
1. Manufacturing of 400 Kg rice Bags.
Day 1:
a. Raw Material of 200 Kg is Issued to WO.
b. Labour and OH Cost is also issued to Work Order
c. 200 KG of Rice Bags are Produced.
d. No Finished Good Inventory of Rice is Added.
e. We needed to Sell those 200 Bags but since No STock was added to Inventory the Invoice Couldn't be made.
Day 2:
a. Raw Material of 100 Kg is Issued to WO.
b. Labour and OH Cost is also issued to Work Order
c. 100 KG of Rice Bags are Produced.
d. No Finished Good Inventory of Rice is Added.
e. We needed to Sell those 100 Bags but since No STock was added to Inventory the Invoice Couldn't be made.
Day 3:
a. Raw Material of 100 Kg is Issued to WO.
b. Labour and OH Cost is also issued to Work Order
c. 100 KG of Rice Bags are Produced.
d. 400 Bags of Rice are Added to inventory and WO is set to Closed.
My Question is Why Stock is not Added If Partial Production is Run. Is this any irrational behavior no one could figure out yet or it is lack of my understanding?
Any Idea?
332 12/27/2018 05:41:24 am
Re: FA WITH AUTOCOMPLETE DOWNLOAD (36 replies, posted in FA Modifications)
@anoopmb can you mention the changes you made in the core. Overwriting my files with your files will overwrite some of my modifications too.
Thanks in Advance
333 12/24/2018 05:43:12 am
Re: Customer Trial Balance Report (11 replies, posted in Reporting)
@joe This is an honour for me and all contributors.
334 12/21/2018 09:55:31 am
Re: Modularizing the Dashboard (82 replies, posted in FA Modifications)
@Joe, @notrinos thanks alot for this nice feature.
Also if we can apply the Security Area on Dashboard Widgets then it would be great
335 12/21/2018 09:37:20 am
Re: Customer Trial Balance Report (11 replies, posted in Reporting)
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'));
336 12/21/2018 06:11:21 am
Topic: Customer Trial Balance Report (11 replies, posted in Reporting)
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
337 12/21/2018 05:45:07 am
Re: Modularizing the Dashboard (82 replies, posted in FA Modifications)
@joe, @itronics
I request you to please include this customization in the core. Flexible dashboards are really the need of the day. It will be a great option if we can manage dashboards using modules/extensions.
338 12/19/2018 03:35:52 am
Re: No exchange rate working in FA now (20 replies, posted in Report Bugs here)
https://free.currencyconverterapi.com/
They allow 100 Requests Per Hour for Free.
This is also a good option
config.php changes
$xr_providers = array("ECB", "YAHOO", "GOOGLE", "BLOOMBERG", "CCA");
gl_db_rates.inc changes as follows.
function get_extern_rate($curr_b, $provider = 'ECB', $date)
{
global $path_to_root;
if ($date != Today()) // no historical rates available
return 0;
$contents = '';
$proto = 'http://';
$curr_a = get_company_pref('curr_default');
if ($provider == 'ECB')
{
$filename = "/stats/eurofxref/eurofxref-daily.xml";
$site = "www.ecb.europa.eu";
$site_ip="172.230.157.137";
}
elseif ($provider == 'YAHOO')
{
$filename = "/d/quotes.csv?s={$curr_a}{$curr_b}=X&f=sl1d1t1ba&e=.csv"; // new URL's for YAHOO
$site = "download.finance.yahoo.com";
$site_ip="203.84.220.151";
}
elseif ($provider == 'GOOGLE')
{
$filename = "/bctzjpnsun/converter?a=1&from={$curr_a}&to={$curr_b}";
$site = "finance.google.com";
}
elseif ($provider == 'BLOOMBERG')
{
$filename = "/quote/{$curr_b}{$curr_a}:CUR";
$site = "www.bloomberg.com";
$proto = 'https://';
$contents=file_get_contents($proto.$site.$filename);
}
elseif ($provider == 'CCA') //free.currencyconverterapi.com
{
$filename = "/api/v5/convert?q={$curr_b}_{$curr_a}&compact=y";
$site = "free.currencyconverterapi.com";
$proto = 'https://';
}
if (empty($contents)) {
if (function_exists('curl_init'))
{ // first check with curl as we can set short timeout;
$retry = 1;
do {
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $proto.$site.$filename);
curl_setopt ($ch, CURLOPT_COOKIEJAR, VARLIB_PATH."/cookie.txt");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// prevent warning while safe_mode/open_basedir on (redirection doesn't occur at least on ECB page)
if (!ini_get('safe_mode') && !ini_get('open_basedir'))
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_TIMEOUT, 3);
$contents = curl_exec ($ch);
curl_close($ch);
// due to resolver bug in some curl versions (e.g. 7.15.5)
// try again for constant IP.
if (isset($site_ip))
$site=$site_ip;
} while( ($contents == '') && $retry--);
} else {
$contents = url_get_contents($proto.$site.$filename);
}
}
$val = '';
if ($provider == 'ECB')
{
$contents = str_replace ("<Cube currency='USD'", " <Cube currency='EUR' rate='1'/> <Cube currency='USD'", $contents);
$from_mask = "|<Cube\s*currency=\'" . $curr_a . "\'\s*rate=\'([\d.,]*)\'\s*/>|i";
preg_match ( $from_mask, $contents, $out );
$val_a = isset($out[1]) ? $out[1] : 0;
$val_a = str_replace ( ',', '', $val_a );
$to_mask = "|<Cube\s*currency=\'" . $curr_b . "\'\s*rate=\'([\d.,]*)\'\s*/>|i";
preg_match ( $to_mask, $contents, $out );
$val_b = isset($out[1]) ? $out[1] : 0;
$val_b = str_replace ( ',', '', $val_b );
if ($val_b)
{
$val = $val_a / $val_b;
}
else
{
$val = 0;
}
}
elseif ($provider == 'YAHOO')
{
$array = explode(',',$contents); // New operations for YAHOO. Safer.
$val = $array[1];
if ($val != 0)
$val = 1 / $val;
}
elseif ($provider == 'GOOGLE')
{
$val = getInnerStr($contents, '<span class=bld>', ' ');
if (empty($val) || $val+0 <= 0.0001) {
// reverse lookup on could not convert for too small values
$filename = "/bctzjpnsun/converter?a=1&from={$curr_b}&to={$curr_a}";
$contents = url_get_contents($proto.$site.$filename);
$val = getInnerStr($contents, '<span class=bld>', ' ');
} else {
if ($val != 0)
$val = 1 / $val;
}
}
elseif ($provider == 'BLOOMBERG')
{
$val = getInnerStr($contents, ',"price":', ',"');
}
elseif ($provider == 'CCA')
{
$rates = json_decode($contents, true);
$val = $rates[$curr_b.'_'.$curr_a]['val'];
}
return $val;
} /* end function get_extern_rate */
339 12/19/2018 03:15:34 am
Re: FA with Batch/Serial/Lot Number Tracking System (19 replies, posted in FA Modifications)
@kvvaradha As you mentioned in Post # 12 that Batch system will be open source. How can I get it?
340 12/18/2018 04:43:37 am
Re: Multiple Products From One Manufacturing Process (5 replies, posted in Manufactoring)
I tried using UnAssembly but it has 2 problems.
1. The output quantity is not confirmed. But we can handle this by creating BOM at the final stage.
2. The cost of Raw Material issued is not distributed among the Finished Products received. Even the OverHead and Labour cost is not loaded to the Finished Goods.
341 12/18/2018 03:48:44 am
Re: Multiple Products From One Manufacturing Process (5 replies, posted in Manufactoring)
@apmuthu, in post#2 you suggested that we need to split raw materials if the desired finished goods are multiple items. I am facing a scenario where in Rice Processing Plant, Raw Material is single called "Paddy". When it is processed the Finished Products are 3 Different Grades of Rice i.e Grade A, Grade B and Grade C. The fourth by product is the "Husk".
In this scenario we can't split the Raw Material. Can this be handled in FA?
342 12/16/2018 03:29:57 pm
Re: Bug Created by Last Commit to items.php (8 replies, posted in Items and Inventory)
@joe , please have a look at this bug also or roll it back
343 12/16/2018 10:43:23 am
Re: Bug due to commit (14 replies, posted in Accounts Receivable)
344 12/16/2018 06:07:45 am
Re: Bug due to commit (14 replies, posted in Accounts Receivable)
Yes changing the return to 1 has worked.
345 12/15/2018 05:20:41 am
Topic: Bug due to commit (14 replies, posted in Accounts Receivable)
This commit has created a bug shown in image.
I could have caught just one. May be this is affecting other places too.
Please rectify.
346 12/14/2018 04:05:07 am
Re: Bug Created by Last Commit to items.php (8 replies, posted in Items and Inventory)
This bug is not addressed yet I think.
347 12/10/2018 04:57:53 pm
Re: Local Server Requirements (8 replies, posted in Installation)
Thanks all for your input. I will post my feedback once done
348 12/09/2018 05:28:45 pm
Re: Local Server Requirements (8 replies, posted in Installation)
I need 100 users on 100 work stations concurrently accessing FA installed on the server in LAN
349 12/09/2018 06:14:55 am
Topic: Local Server Requirements (8 replies, posted in Installation)
Hello,
I need to install FA in a local network powered by Windows with more than 100 Users.
What should be configuration of Local Server to host FA with this number of users.
Any Ideas?
350 11/05/2018 09:37:10 am
Re: Fixing Usage - report generator (40 replies, posted in Modules Add-on's)
@apmuthu Getting This Error while using Report Generator Module
Parse error: syntax error, unexpected '$protocol' (T_VARIABLE), expecting '(' in C:\xampp\htdocs\my-pakerp-com\modules\repgen\includes\repgen_def.inc on line 56