From 0bb9ce50f39b09b93005c45a49d9c47c4521267c Mon Sep 17 00:00:00 2001 From: Joe Hunt Date: Tue, 15 Jun 2021 21:59:05 +0200 Subject: [PATCH] New dashboard and Graphics Engine Class, that also includes the SVG Vector Graphics for the core. Much prettier graphics. --- admin/dashboard.php | 23 +- includes/dashboard.inc | 1311 ++++++++++-- reporting/fonts/FreeSans.ttf | Bin 0 -> 459480 bytes reporting/includes/class.graphic.inc | 2556 +++++++++++++++--------- reporting/includes/reports_classes.inc | 2 +- reporting/rep102.php | 24 +- reporting/rep202.php | 21 +- reporting/rep706.php | 39 +- reporting/rep707.php | 43 +- 9 files changed, 2748 insertions(+), 1271 deletions(-) create mode 100644 reporting/fonts/FreeSans.ttf diff --git a/admin/dashboard.php b/admin/dashboard.php index 7b538159..e44806d1 100644 --- a/admin/dashboard.php +++ b/admin/dashboard.php @@ -9,23 +9,30 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License here . ***********************************************************************/ - -if (isset($_GET['sel_app'])) -{ - $page_security = 'SA_SETUPDISPLAY'; // A very low access level. The real access level is inside the routines. $path_to_root = ".."; include_once($path_to_root . "/includes/session.inc"); include_once($path_to_root . "/includes/ui.inc"); + include_once($path_to_root . "/includes/data_checks.inc"); include_once($path_to_root . "/reporting/includes/class.graphic.inc"); - include_once($path_to_root . "/includes/dashboard.inc"); // here are all the dashboard routines. - + if (file_exists("$path_to_root/themes/".user_theme()."/dashboard.inc")) + include_once("$path_to_root/themes/".user_theme()."/dashboard.inc"); // yse theme dashboard.inc + else + include_once("$path_to_root/includes/dashboard.inc"); // here are all the dashboard routines. + $page_security = 'SA_SETUPDISPLAY'; // A very low access level. The real access level is inside the routines. + $app = isset($_GET['sel_app']) ? $_GET['sel_app'] : (isset($_POST['sel_app']) ? $_POST['sel_app'] : "orders"); + if (get_post('id')) + { + dashboard($app); + exit; + } + $js = ""; if ($SysPrefs->use_popup_windows) $js .= get_js_open_window(800, 500); page(_($help_context = "Dashboard"), false, false, "", $js); - dashboard($_GET['sel_app']); + dashboard($app); end_page(); exit; -} + diff --git a/includes/dashboard.inc b/includes/dashboard.inc index 9a5a9f4b..56f69a56 100644 --- a/includes/dashboard.inc +++ b/includes/dashboard.inc @@ -9,245 +9,518 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License here . ***********************************************************************/ +//$colors = array('#008cc9','#4db625','#ef5500','#eef100','#05c6e6', '#5ee66a'); // Current in Use +$colors = Chart::$palette; +$style = ""; +function dashboard($sel_app) +{ + global $style; if (is_object($sel_app) && !$_SESSION["wa_current_user"]->check_application_access($selected_app)) return; - // first have a look through the directory, - // and remove old temporary pdfs and pngs - $dir = company_path(). '/pdf_files'; - - if ($d = @opendir($dir)) { - while (($file = readdir($d)) !== false) { - if (!is_file($dir.'/'.$file) || $file == 'index.php') continue; - // then check to see if this one is too old - $ftime = filemtime($dir.'/'.$file); - // seems 3 min is enough for any report download, isn't it? - if (time()-$ftime > 180){ - unlink($dir.'/'.$file); + echo $style; + echo ""; //check_for_overdue_recurrent_invoices(); - if ($selected_app == "orders") + if ($sel_app == "orders") display_customer_topten(); - elseif ($selected_app == "AP") + elseif ($sel_app == "AP") display_supplier_topten(); - elseif ($selected_app == "stock") + elseif ($sel_app == "stock") display_stock_topten(); - elseif ($selected_app == "manuf") + elseif ($sel_app == "manuf") display_stock_topten(1); - elseif ($selected_app == "assets") + elseif ($sel_app == "assets") display_stock_topten(2); - elseif ($selected_app == "proj") + elseif ($sel_app == "proj") display_dimension_topten(); - elseif ($selected_app == "GL") + elseif ($sel_app == "GL") display_gl_info(); else display_all(); } -function display_title($title) +function display_title($title, $id=false, $type = false, $per = '', $num = false) { br(); - display_heading($title); + start_form(); + echo "
"; + echo "$title"; + if ($id) + { + /* + global $Ajax; + echo ""; + $options = array('select_submit' => true ); + if (!empty($per)) + { + $name = "per_$id"; + $sel1 = array(3 => "3", 4 => "4", 5 => "5", 6 => "6", 7 => "7", 8=> "8"); + echo array_selector($name, $per, $sel1, $options); + echo " $per\n"; + } + else + { + $name = "select_$id"; + $sel = array(1 => _("Vertical bars"), 2 => _("Horizontal bars"), 3 => _("Dots"), 4 => _("Lines"), 5 => _("Pie"), 6 => _("Donut"), 7 => _("Half Donut"), 8 => _("Splines"), 9 => _("Tables")); + echo array_selector($name, $type, $sel, $options); + } + if (list_updated($name)) + $Ajax->activate($id); + echo ""; + */ + echo ""; + if (!empty($per)) + { + $sel1 = array(3 => "3", 4 => "4", 5 => "5", 6 => "6", 7 => "7", 8=> "8"); + echo " $per\n"; + } + else + { + $sel = array(1 => _("Vertical bars"), 2 => _("Horizontal bars"), 3 => _("Dots"), 4 => _("Lines"), 5 => _("Pie"), 6 => _("Donut"), 7 => _("Half Donut"), 8 => _("Splines"), 9 => _("Tables")); + echo "\n"; + } + echo ""; + } + echo "
\n"; + end_form(); br(); - //echo "$title\n"; } -function table_one() +function table($width='100%', $twidth=false) { - echo ""; - echo "\n"; + foreach ($labels as $label) + echo "\n"; + echo "\n"; +} - table_one(); - $today = Today(); +function display_customer_topten() +{ + table('100%', '25%'); + echo "
"._('Customers')."

"; + echo get_num_customers()."

"; + td('25%'); + echo "
"._('Branches')."

"; + echo get_num_branches()."

"; + td('25%'); + echo "
"._('Salesmen')."

"; + echo get_num_salesmen()."

"; + td('25%'); + echo "
"._('Overdue Invoices')."

"; + echo get_num_overdue_sales()."

"; + table_end(); + $pg = new chart('horizontalBar', 'c1'); + if (isset($_POST['select_c1'])) + $pg->type = $_POST['select_c1']; + $today = calc_today(); + table('100%', '50%'); $title = customer_top($today, 10, 66, $pg); - customer_trans($today); - table_two(); - source_graphic($today, $title, _("Customer"), $pg, _("Sales")); + $total = customer_aging($today, 66); + td('50%'); + source_graphic($today, $title[0], _("Customer"), $pg); + br(3); + echo "
"._('Sales Total')."

"; + echo number_format2($title[1])."

"; + br(3); + echo "
"._('Aging Total')."

"; + echo number_format2($total)."

"; + table_end(); + table('100%', '100%'); customer_recurrent_invoices($today); + customer_trans($today); table_end(); } function display_supplier_topten() { - $pg = new graph(); - - $today = Today(); - table_one(); + table('100%', '25%'); + echo "
"._('Suppliers')."

"; + echo get_num_suppliers()."

"; + td('25%'); + echo "
"._('New Orders')."

"; + echo get_new_purch_orders()."

"; + td('25%'); + echo "
"._('Invoices')."

"; + echo get_num_supp_invoices()."

"; + td('25%'); + echo "
"._('Overdue Invoices')."

"; + echo get_num_overdue_purch()."

"; + table_end(); + $pg = new chart('horizontalBar', 's1'); + if (isset($_POST['select_s1'])) + $pg->type = $_POST['select_s1']; + $today = calc_today(); + table('100%', '50%'); $title = supplier_top($today, 10, 66, $pg); + $total = supplier_aging($today, 66); + td('50%'); + source_graphic($today, $title[0], _("Supplier"), $pg); + br(3); + echo "
"._('Purchable Total')."

"; + echo number_format2($title[1])."

"; + br(3); + echo "
"._('Aging Total')."

"; + echo number_format2($total)."

"; + table_end(); + table('100%', '100%'); supplier_trans($today); - table_two(); - source_graphic($today, $title, _("Supplier"), $pg, _("Purchase")); table_end(); } function display_stock_topten($type=0) { - $pg = new graph(); - - table_one(); - $today = Today(); - $title = stock_top($today, 10, 66, $type, $pg); - table_two(); + if ($type == 0) + { + table('100%', '25%'); + echo "
"._('Items')."

"; + echo get_num_items()."

"; + td('25%'); + echo "
"._('Locations')."

"; + echo get_num_locations()."

"; + td('25%'); + echo "
"._('Kits')."

"; + echo get_num_kits()."

"; + td('25%'); + echo "
"._('Below Reorder Level')."

"; + echo get_num_reorder()."

"; + table_end(); + } + elseif ($type == 1) + { + table('100%', '25%'); + echo "
"._('Assembled Items')."

"; + echo get_num_assembled()."

"; + td('25%'); + echo "
"._('Manufactured Items')."

"; + echo get_num_manufactured()."

"; + td('25%'); + echo "
"._('Work Centres')."

"; + echo get_num_workcentres()."

"; + td('25%'); + echo "
"._('Open Workorders')."

"; + echo get_open_workorders()."

"; + table_end(); + } + elseif ($type == 2) + { + table('100%', '25%'); + echo "
"._('Fixed Assets')."

"; + echo get_num_fixed_assets()."

"; + td('25%'); + echo "
"._('Locations')."

"; + echo get_num_fixed_locations()."

"; + td('25%'); + echo "
"._('Categories')."

"; + echo get_num_fixed_categories()."

"; + td('25%'); + echo "
"._('Fixed Asset Classes')."

"; + echo get_num_fixed_classes()."

"; + table_end(); + } + $pg = new chart('bar', 'i1'); + if (isset($_POST['select_i1'])) + $pg->type = $_POST['select_i1']; + table('100%', '50%'); + $today = calc_today(); + $title = stock_top($today, 5, 66, $type, $pg); + table('50%', '25%'); + echo "
"._('Total Sales')."

"; + echo number_format2($title[1])."

"; + td('25%'); + echo "
"._('Total Costs')."

"; + echo number_format2($title[2])."

"; + table_end(); + td('50%'); if ($type == 2) $source = _("Fixed Assets"); elseif ($type == 1) $source = _("Manufacturing"); else $source = _("Items"); - source_graphic($today, $title, $source, $pg, ($type == 0 ? _("Sales") : _("Amount")), - ($type == 0 ? _("Costs") : null)); + source_graphic($today, $title[0], $source, $pg); + echo "
"._('Total Results')."
"; + echo number_format2($title[3])."
"; + table_end(); + table('100%', '100%'); + stock_below_reorder($today, $type); table_end(); } function display_dimension_topten() { - $pg = new graph(); - - table_one(); - $today = Today(); - $title = dimension_top($today, 10, 66, $pg); - table_two(); - source_graphic($today, $title, _("Dimension"), $pg, _("Performance"), null, 5); + table('100%', '25%'); + echo "
"._('Dimensions')."

"; + echo get_num_dimensions()."

"; + td('25%'); + echo "
"._('Type 2 Dimensions')."

"; + echo get_dim_type2()."

"; + td('25%'); + $res = get_dim_total(); + $s = $res[0] < 0.0 ? 2 : 1; + echo "
"._('Dimensions Total Balance')."

"; + echo number_format2($res[0])."

"; + td('25%'); + $s = $res[1] < 0.0 ? 2 : 1; + echo "
"._('Dimensions Total Result')."

"; + echo number_format2($res[1])."

"; + table_end(); + $pg = new chart('bar', 'd1'); + if (isset($_POST['select_d1'])) + $pg->type = $_POST['select_d1']; + table('100%', '50%'); + $today = calc_today(); + $title = dimension_top($today, 5, 66, $pg); + td('50%'); + source_graphic($today, $title, _("Dimension"), $pg); table_end(); } function display_gl_info() { - $pg = new graph(); - - table_one(); - $today = Today(); + $today = calc_today(); + table('100%', '25%'); + echo "
"._('Receivables')."

"; + echo number_format2(customer_balance($today))."

"; + td('25%'); + echo "
"._('Payables')."

"; + echo number_format2(-supplier_balance($today))."

"; + td('25%'); + echo "
"._('Todays Deposits')."

"; + echo number_format2(get_today_deposits($today))."

"; + td('25%'); + echo "
"._('Todays Payments')."

"; + echo number_format2(get_today_payments($today))."

"; + table_end(); + $pg = new chart('halfDonut', 'g1'); + if (isset($_POST['select_g1'])) + $pg->type = $_POST['select_g1']; + table('100%', '50%'); $title = gl_top($today, 66, $pg); + source_graphic($today, $title, _("Class"), $pg); + gl_month_performance($today, 66, 5); + td('50%'); + gl_week_performance($today, 66, 4); + cash_flow($today); bank_balance($today, 66); - table_two(); - source_graphic($today, $title, _("Class"), $pg, _("Amount"), null, 5); - gl_performance($today, 66, 5); table_end(); } function display_all() { - $today = Today(); - $pg = new graph(); + $today = calc_today(); - table_one(); + table('100%', '25%'); + echo "
"._('Users')."

"; + echo get_num_users()."

"; + td('25%'); + echo "
"._('Extensions')."

"; + echo get_num_extensions()."

"; + td('25%'); + echo "
"._('Languages')."

"; + echo get_num_languages()."

"; + td('25%'); + echo "
"._('Database Size')."

"; + echo get_database_size()."

"; + table_end(); + $pg = new chart('horizontalBar', 'c2'); + if (isset($_POST['select_c2'])) + $pg->type = $_POST['select_c2']; + table('100%', '50%'); $title = customer_top($today, 3, 66, $pg); - source_graphic($today, $title, _("Customer"), $pg, _("Sales")); - $pg = new graph(); + source_graphic($today, $title[0], _("Customer"), $pg); + $pg = new chart('horizontalBar', 's2'); + if (isset($_POST['select_s2'])) + $pg->type = $_POST['select_s2']; $title = supplier_top($today, 3, 66, $pg); - source_graphic($today, $title, _("Supplier"), $pg, _("Purchases")); - $pg = new graph(); + source_graphic($today, $title[0], _("Supplier"), $pg); + $pg = new chart('bar', 'i2'); + if (isset($_POST['select_i2'])) + $pg->type = $_POST['select_i2']; $title = stock_top($today, 3, 66, 0, $pg); - source_graphic($today, $title, _("Items"), $pg, _("Sales"), _("Costs")); - table_two(); + source_graphic($today, $title[0], _("Items"), $pg); + td('50%'); dimension_top($today, 3, 66); - $pg = new graph(); + $pg = new chart('pie', 'd2'); + if (isset($_POST['select_d2'])) + $pg->type = $_POST['select_d2']; $title = gl_top($today, 66, $pg); - source_graphic($today, $title, _("Class"), $pg, _("Amount"), null, 5); + source_graphic($today, $title, _("Class"), $pg); stock_top($today, 3, 66, 2); stock_top($today, 3, 66, 1); table_end(); } -function customer_top($today, $limit=10, $width="33", &$pg=null) +function customer_top($today, $limit=10, $width='33', &$pg=null) { - $begin = begin_fiscalyear(); - $begin1 = date2sql($begin); - $today1 = date2sql($today); - $sql = "SELECT SUM((ov_amount + ov_discount) * rate * IF(trans.type = ".ST_CUSTCREDIT.", -1, 1)) AS total,d.debtor_no, d.name FROM - ".TB_PREF."debtor_trans AS trans, ".TB_PREF."debtors_master AS d WHERE trans.debtor_no=d.debtor_no + $begin = date2sql(begin_fiscalyear()); + $today = date2sql($today); + $sql = "SELECT SUM((ov_amount + ov_discount) * rate * IF(trans.type = ".ST_CUSTCREDIT.", -1, 1)) AS total,d.debtor_no, d.name FROM ".TB_PREF."debtor_trans AS trans, ".TB_PREF."debtors_master AS d WHERE trans.debtor_no=d.debtor_no AND (trans.type = ".ST_SALESINVOICE." OR trans.type = ".ST_CUSTCREDIT.") - AND tran_date >= '$begin1' AND tran_date <= '$today1' GROUP by d.debtor_no ORDER BY total DESC, d.debtor_no + AND tran_date >= '$begin' AND tran_date <= '$today' GROUP by d.debtor_no ORDER BY total DESC, d.debtor_no LIMIT $limit"; $result = db_query($sql); $title = sprintf(_("Top %s customers in fiscal year"), $limit); display_title($title); $th = array(_("Customer"), _("Amount")); start_table(TABLESTYLE, "width='$width%'"); - table_header($th); + headers($th); check_page_security('SA_SALESTRANSVIEW'); $k = 0; //row colour counter - $i = 0; + $i = 1; + $names = $totals = array(); + $sales = 0; while ($myrow = db_fetch($result)) { - alt_table_row_color($k); - $name = $myrow["debtor_no"]." ".htmlspecialchars_decode($myrow["name"]); - label_cell($name); - amount_cell($myrow['total']); - if ($pg != null) + $sales += round($myrow['total']); + if ($i++ < $limit) { - $pg->x[$i] = $name; - $pg->y[$i] = $myrow['total']; - } - $i++; - end_row(); + alt_table_row_color($k); + $name = $myrow["debtor_no"]." ".htmlspecialchars_decode($myrow["name"]); + label_cell($name); + amount_cell($myrow['total']); + if ($pg != null) + { + $names[] = $name; + $totals[] = round($myrow['total']); + } + end_row(); + } + } + if ($pg != null) + { + $pg->setLabels($names); + $pg->addSerie(_('Sales'), $totals); } end_table(2); - return $title; + return array($title, $sales); } -function supplier_top($today, $limit=10, $width="33", &$pg=null) +function supplier_top($today, $limit=10, $width='33', &$pg=null) { - $begin = begin_fiscalyear(); - $begin1 = date2sql($begin); - $today1 = date2sql($today); + $begin = date2sql(begin_fiscalyear()); + $today = date2sql($today); $sql = "SELECT SUM((trans.ov_amount + trans.ov_discount) * rate) AS total, s.supplier_id, s.supp_name FROM ".TB_PREF."supp_trans AS trans, ".TB_PREF."suppliers AS s WHERE trans.supplier_id=s.supplier_id AND (trans.type = ".ST_SUPPINVOICE." OR trans.type = ".ST_SUPPCREDIT.") - AND tran_date >= '$begin1' AND tran_date <= '$today1' GROUP by s.supplier_id ORDER BY total DESC, s.supplier_id + AND tran_date >= '$begin' AND tran_date <= '$today' GROUP by s.supplier_id ORDER BY total DESC, s.supplier_id LIMIT $limit"; $result = db_query($sql); $title = sprintf(_("Top %s suppliers in fiscal year"), $limit); display_title($title); $th = array(_("Supplier"), _("Amount")); start_table(TABLESTYLE, "width='$width%'"); - table_header($th); + headers($th); check_page_security('SA_SUPPTRANSVIEW'); $k = 0; //row colour counter - $i = 0; + $i = 1; + $names = $totals = array(); + $total = 0; while ($myrow = db_fetch($result)) { - alt_table_row_color($k); - $name = $myrow["supplier_id"]." ".htmlspecialchars_decode($myrow["supp_name"]); - label_cell($name); - amount_cell($myrow['total']); - if ($pg != null) + $total += $myrow['total']; + if ($i++ < $limit) { - $pg->x[$i] = $name; - $pg->y[$i] = $myrow['total']; - } - $i++; - end_row(); + alt_table_row_color($k); + $name = $myrow["supplier_id"]." ".htmlspecialchars_decode($myrow["supp_name"]); + label_cell($name); + amount_cell($myrow['total']); + if ($pg != null) + { + $names[] = $name; + $totals[] = round($myrow['total']); + } + end_row(); + } + } + if ($pg != null) + { + $pg->setLabels($names); + $pg->addSerie(_('Purchases'), $totals); } end_table(2); - return $title; + return array($title, $total); } -function stock_top($today, $limit=10, $width="33", $type=0, &$pg=null) +function stock_top($today, $limit=10, $width='33', $type=0, &$pg=null) { if ($type == 2) $sec = 'SA_ASSETSANALYTIC'; @@ -255,9 +528,8 @@ function stock_top($today, $limit=10, $width="33", $type=0, &$pg=null) $sec = 'SA_WORKORDERANALYTIC'; else $sec = 'SA_ITEMSTRANSVIEW'; - $begin = begin_fiscalyear(); - $begin1 = date2sql($begin); - $today1 = date2sql($today); + $begin = date2sql(begin_fiscalyear()); + $today = date2sql($today); if ($type == 0) { $sql = "SELECT SUM((trans.unit_price * trans.quantity) * d.rate) AS total, s.stock_id, s.description, @@ -277,9 +549,8 @@ function stock_top($today, $limit=10, $width="33", $type=0, &$pg=null) $sql .= "AND s.mb_flag='F' "; } if ($type != 2) - $sql .= "AND tran_date >= '$begin1' "; - $sql .= "AND tran_date <= '$today1' GROUP by s.stock_id ORDER BY total DESC, s.stock_id - LIMIT $limit"; + $sql .= "AND tran_date >= '$begin' "; + $sql .= "AND tran_date <= '$today' GROUP by s.stock_id ORDER BY total DESC, s.stock_id LIMIT $limit"; $result = db_query($sql); if ($type == 1) $title = sprintf(_("Top %s Manufactured Items in fiscal year"), $limit); @@ -289,178 +560,442 @@ function stock_top($today, $limit=10, $width="33", $type=0, &$pg=null) $title = sprintf(_("Top %s Sold Items in fiscal year"), $limit); display_title($title); if ($type == 0) - $th = array(_("Item"), _("Sales"), _("Costs"), _("Quantity")); + $th = array(_("Item"), _("Sales"), _("Costs"), _("Results"), _("Quantity")); else $th = array(_("Item"), _("Amount"), _("Quantity")); start_table(TABLESTYLE, "width='$width%'"); - table_header($th); + headers($th); check_page_security($sec); $k = 0; //row colour counter - $i = 0; + $i = 1; + $names = $totals = $costs = $results = array(); + $sales = $cost = $res = 0; while ($myrow = db_fetch($result)) { - alt_table_row_color($k); - $name = $myrow["description"]; - label_cell($name); - amount_cell($myrow['total']); + $sales += $myrow['total']; if ($type == 0) - amount_cell($myrow['costs']); - qty_cell($myrow['qty']); - if ($pg != NULL) { - $pg->x[$i] = $name; - $pg->y[$i] = $myrow['total']; + $cost += $myrow['costs']; + $res += ($myrow['total'] - $myrow['costs']); + } + if ($i++ < $limit) + { + alt_table_row_color($k); + $name = $myrow["description"]; + label_cell($name); + amount_cell($myrow['total']); if ($type == 0) - $pg->z[$i] = $myrow['costs']; - } - $i++; - end_row(); + { + amount_cell($myrow['costs']); + amount_cell($myrow['total'] - $myrow['costs']); + } + qty_cell($myrow['qty']); + if ($pg != NULL) + { + $names[] = $name; + $totals[] = round($myrow['total']); + if ($type == 0) + { + $costs[] = round($myrow['costs']); + $results[] = round($myrow['total'] - $myrow['costs']); + } + } + end_row(); + } + } + if ($pg != null) + { + $pg->setLabels($names); + $pg->addSerie(_('Sales'), $totals); + if ($type == 0) + { + $pg->addSerie(_('Costs'), $costs); + $pg->addSerie(_('Results'), $results, 8); + } } end_table(2); - return $title; + return array($title, $sales, $cost, $res); } -function dimension_top($today, $limit=10, $width="33", &$pg=null) +function dimension_top($today, $limit=10, $width='33', &$pg=null) { + $begin = date2sql(begin_fiscalyear()); + $today = date2sql($today); - $begin = begin_fiscalyear(); - $begin1 = date2sql($begin); - $today1 = date2sql($today); - $sql = "SELECT SUM(-t.amount) AS total, d.reference, d.name FROM - ".TB_PREF."gl_trans AS t,".TB_PREF."dimensions AS d WHERE - (t.dimension_id = d.id OR t.dimension2_id = d.id) AND - t.tran_date >= '$begin1' AND t.tran_date <= '$today1' GROUP BY d.id ORDER BY total DESC LIMIT $limit"; + $sql = "SELECT SUM(IF(c.ctype > 3, -amount, 0)) AS result, SUM(IF(c.ctype < 4, amount, 0)) AS balance, d.reference, d.name FROM ".TB_PREF."gl_trans g + LEFT JOIN ".TB_PREF."chart_master AS a ON g.account = a.account_code + LEFT JOIN ".TB_PREF."chart_types AS t ON t.id = a.account_type + LEFT JOIN ".TB_PREF."dimensions AS d ON (g.dimension_id = d.id OR g.dimension2_id = d.id) + LEFT JOIN ".TB_PREF."chart_class AS c ON t.class_id = c.cid + WHERE IF(c.ctype > 3, tran_date >= '$begin', tran_date >= '0000-00-00') + AND tran_date <= '$today' AND d.reference IS NOT NULL GROUP BY d.reference ORDER BY d.reference DESC LIMIT $limit"; $result = db_query($sql, "Transactions could not be calculated"); $title = sprintf(_("Top %s Dimensions in fiscal year"), $limit); display_title($title); - $th = array(_("Dimension"), _("Amount")); + $th = array(_("Dimension"), _("Balance"), _("Result")); start_table(TABLESTYLE, "width='$width%'"); - table_header($th); + headers($th); check_page_security('SA_DIMTRANSVIEW'); $k = 0; //row colour counter - $i = 0; + $names = $balances = $results = array(); while ($myrow = db_fetch($result)) { alt_table_row_color($k); $name = $myrow['reference']." ".$myrow["name"]; label_cell($name); - amount_cell($myrow['total']); + amount_cell($myrow['balance']); + amount_cell($myrow['result']); if ($pg != null) { - $pg->x[$i] = $name; - $pg->y[$i] = abs($myrow['total']); + $names[] = $name; + $balances[] = round(abs($myrow['balance'])); + $results[] = round(abs($myrow['result'])); } - $i++; end_row(); } + if ($pg != null) + { + $pg->setLabels($names); + $pg->setValues(true); + $pg->addSerie(_('Balance'), $balances); + $pg->addSerie(_('Result'), $results); + } end_table(2); return $title; } -function gl_top($today, $width="33", &$pg=null) +function gl_top($today, $width='33', &$pg=null) { - $begin = begin_fiscalyear(); - $begin1 = date2sql($begin); - $today1 = date2sql($today); - $sql = "SELECT SUM(amount) AS total, c.class_name, c.ctype FROM + $begin = date2sql(begin_fiscalyear()); + $today = date2sql($today); + $sql = "SELECT SUM(IF(c.ctype > 3, -amount, amount)) AS total, c.class_name, c.ctype FROM ".TB_PREF."gl_trans,".TB_PREF."chart_master AS a, ".TB_PREF."chart_types AS t, ".TB_PREF."chart_class AS c WHERE account = a.account_code AND a.account_type = t.id AND t.class_id = c.cid - AND IF(c.ctype > 3, tran_date >= '$begin1', tran_date >= '0000-00-00') - AND tran_date <= '$today1' GROUP BY c.cid ORDER BY c.cid"; + AND IF(c.ctype > 3, tran_date >= '$begin', tran_date >= '0000-00-00') + AND tran_date <= '$today' GROUP BY c.cid ORDER BY c.cid"; $result = db_query($sql, "Transactions could not be calculated"); $title = _("Class Balances"); display_title($title); start_table(TABLESTYLE2, "width='$width%'"); check_page_security('SA_GLANALYTIC'); - $i = 0; $total = 0; + $names = $totals = array(); while ($myrow = db_fetch($result)) { if ($myrow['ctype'] > 3) { - $total += $myrow['total']; - $myrow['total'] = -$myrow['total']; + $total += round($myrow['total']); if ($pg != null) { - $pg->x[$i] = $myrow['class_name']; - $pg->y[$i] = abs($myrow['total']); + $names[] = $myrow['class_name']; + $totals[] = round(abs($myrow['total'])); } - $i++; } label_row($myrow['class_name'], number_format2($myrow['total'], user_price_dec()), "class='label' style='font-weight:bold;'", "style='font-weight:bold;' align=right"); } $calculated = _("Calculated Return"); label_row(" ", ""); - label_row($calculated, number_format2(-$total, user_price_dec()), + label_row($calculated, number_format2($total, user_price_dec()), "class='label' style='font-weight:bold;'", "style='font-weight:bold;' align=right"); if ($pg != null) { - $pg->x[$i] = $calculated; - $pg->y[$i] = -$total; + $names[] = $calculated; + $totals[] = $total; + $pg->setLabels($names); + $pg->addSerie(_('Totals'), $totals); + $pg->setValues(true); + $pg->setDTitle(number_format2($total)); } end_table(2); return $title; } -function gl_performance($today, $width="33", $weeks=5) +function gl_week_performance($today, $width="33", $weeks=4) { global $SysPrefs; - $pg = new graph(); - - $begin = begin_fiscalyear(); - $begin1 = date2sql($begin); + + $pg = new chart('bar', 'g3'); + if (isset($_POST['select_g3'])) + $pg->type = $_POST['select_g3']; + if (isset($_POST['per_g3'])) + $weeks = $_POST['per_g3']; + $begin = date2sql(begin_fiscalyear()); $today1 = date2sql($today); $sep = $SysPrefs->dateseps[user_date_sep()]; $sql = "SELECT week_name, sales, costs - FROM(SELECT DATE_FORMAT(tran_date, '%Y{$sep}%u') AS week_name, + FROM(SELECT DATE_FORMAT(tran_date, '%X{$sep}%V') AS week_name, SUM(IF(c.ctype = 4, amount * -1, 0)) AS sales, SUM(IF(c.ctype = 6, amount, 0)) AS costs FROM ".TB_PREF."gl_trans, ".TB_PREF."chart_master AS a, ".TB_PREF."chart_types AS t, ".TB_PREF."chart_class AS c WHERE(c.ctype = 4 OR c.ctype = 6) AND account = a.account_code AND a.account_type = t.id AND t.class_id = c.cid - AND tran_date >= '$begin1' AND tran_date <= '$today1' + AND tran_date >= '$begin' AND tran_date <= '$today1' GROUP BY week_name ORDER BY week_name DESC LIMIT 0, $weeks) b GROUP BY week_name ORDER BY week_name ASC"; $result = db_query($sql, "Transactions could not be calculated"); $title = _("Last $weeks weeks Performance"); check_page_security('SA_GLANALYTIC'); - $i = 0; + $week_names = $sales = $costs = $results = array(); while ($myrow = db_fetch($result)) { - $pg->x[$i] = $myrow['week_name']; - $pg->y[$i] = $myrow['sales']; - $pg->z[$i] = $myrow['costs']; - $i++; + $week_names[] = $myrow['week_name']; + $sales[] = round($myrow['sales']); + $costs[] = round($myrow['costs']); + $results[] = round($myrow['sales'] - $myrow['costs']); } - - source_graphic($today, $title, _("Week"), $pg, _("Sales"), _("Costs"), 1); + $pg->setLabels($week_names); + $pg->addSerie(_('Sales'), $sales, 'bar'); + $pg->addSerie(_('Costs'), $costs, 'bar'); + $pg->addSerie(_('Results'), $results, 8); + source_graphic($today, $title, _("Week"), $pg, _("Weeks"), $weeks); } -function source_graphic($today, $title, $x_axis, $pg, $graphic1, $graphic2=null, $type=2) +function gl_month_performance($today, $width="33", $months=5) { - if (count($pg->y) ==0 || (count($pg->y) == 1 && $pg->y[0] == 0)) + global $SysPrefs; + $pg = new chart('bar', 'g4'); + if (isset($_POST['select_g4'])) + $pg->type = $_POST['select_g4']; + if (isset($_POST['per_g4'])) + $months = $_POST['per_g4']; + $begin = date2sql(begin_fiscalyear()); + $today1 = date2sql($today); + $sep = $SysPrefs->dateseps[user_date_sep()]; + $sql = "SELECT month_name, sales, costs + FROM(SELECT DATE_FORMAT(tran_date, '%Y{$sep}%m') AS month_name, + SUM(IF(c.ctype = 4, amount * -1, 0)) AS sales, + SUM(IF(c.ctype = 6, amount, 0)) AS costs FROM + ".TB_PREF."gl_trans, ".TB_PREF."chart_master AS a, ".TB_PREF."chart_types AS t, + ".TB_PREF."chart_class AS c WHERE(c.ctype = 4 OR c.ctype = 6) + AND account = a.account_code AND a.account_type = t.id AND t.class_id = c.cid + AND tran_date >= '$begin' AND tran_date <= '$today1' + GROUP BY month_name ORDER BY month_name DESC LIMIT 0, $months) b + GROUP BY month_name ORDER BY month_name ASC"; + $result = db_query($sql, "Transactions could not be calculated"); + $title = _("Last $months Months Performance"); + check_page_security('SA_GLANALYTIC'); + $month_names = $sales = $costs = $results = array(); + while ($myrow = db_fetch($result)) + { + $month_names[] = $myrow['month_name']; + $sales[] = round($myrow['sales']); + $costs[] = round($myrow['costs']); + $results[] = round($myrow['sales'] - $myrow['costs']); + } + $pg->setLabels($month_names); + $pg->addSerie(_('Sales'), $sales, 'bar'); + $pg->addSerie(_('Costs'), $costs, 'bar'); + $pg->addSerie(_('Results'), $results, 8); + source_graphic($today, $title, _("Month"), $pg, _("Months"), $months); +} + +function customer_aging($today, $width="33") +{ + $pg = new chart('bar', 'c3'); + if (isset($_POST['select_c3'])) + $pg->type = $_POST['select_c3']; + $today1 = date2sql($today); + $past1 = get_company_pref('past_due_days'); + $past2 = 2 * $past1; + // removed - debtor_trans.alloc from all summations + $sign = "IF(`type` IN(".implode(',', array(ST_CUSTCREDIT,ST_CUSTPAYMENT,ST_BANKDEPOSIT))."), -1, 1)"; + $value = "IFNULL($sign*((trans.ov_amount + trans.ov_gst + trans.ov_freight + trans.ov_freight_tax + trans.ov_discount - + trans.alloc)*trans.rate),0)"; + $due = "IF (trans.type=".ST_SALESINVOICE.", trans.due_date, trans.tran_date)"; + $sql = "SELECT Sum($value) AS Balance, + Sum(IF ((TO_DAYS('$today1') - TO_DAYS($due)) > 0,$value,0)) AS Due, + Sum(IF ((TO_DAYS('$today1') - TO_DAYS($due)) > $past1,$value,0)) AS Overdue1, + Sum(IF ((TO_DAYS('$today1') - TO_DAYS($due)) > $past2,$value,0)) AS Overdue2 + FROM ".TB_PREF."debtors_master debtor + LEFT JOIN ".TB_PREF."debtor_trans trans ON trans.tran_date <= '$today1' AND debtor.debtor_no = trans.debtor_no AND trans.type <> ".ST_CUSTDELIVERY."," + .TB_PREF."payment_terms terms," + .TB_PREF."credit_status credit_status + WHERE + debtor.payment_terms = terms.terms_indicator + AND debtor.credit_status = credit_status.id"; + $sql .= " AND ABS(trans.ov_amount + trans.ov_gst + trans.ov_freight + trans.ov_freight_tax + trans.ov_discount - trans.alloc) > ".FLOAT_COMP_DELTA; + $result = db_query($sql,"The customer details could not be retrieved"); + + $row = db_fetch($result); + + $title = _("Total Customers Aged Analysis"); + check_page_security('SA_SALESTRANSVIEW'); + $names = array(); + $past1a = $past1 + 1; + $past2a = $past2 + 1; + $names = array(_('Current'),"1-$past1", "$past1a-$past2", "$past2+"); + $balances = array(round($row['Balance']-$row['Due']), round($row['Due'] - $row['Overdue1']), + round($row['Overdue1'] - $row['Overdue2']), round($row['Overdue2'])); + $total = round($row['Balance']); + $pg->setLabels($names); + $pg->addSerie(_('Balances'), $balances); + source_graphic($today, $title, _('Days'), $pg); + return $total; +} + +function customer_balance($today) +{ + $today = date2sql($today); + $sign = "IF(`type` IN(".implode(',', array(ST_CUSTCREDIT,ST_CUSTPAYMENT,ST_BANKDEPOSIT))."), -1, 1)"; + $value = "IFNULL($sign*((trans.ov_amount + trans.ov_gst + trans.ov_freight + trans.ov_freight_tax + trans.ov_discount - + trans.alloc)*trans.rate),0)"; + $due = "IF (trans.type=".ST_SALESINVOICE.", trans.due_date, trans.tran_date)"; + $sql = "SELECT Sum($value) AS Balance + FROM ".TB_PREF."debtors_master debtor + LEFT JOIN ".TB_PREF."debtor_trans trans ON trans.tran_date <= '$today' AND debtor.debtor_no = trans.debtor_no AND trans.type <> ".ST_CUSTDELIVERY." + WHERE ABS(trans.ov_amount + trans.ov_gst + trans.ov_freight + trans.ov_freight_tax + trans.ov_discount - trans.alloc) > ".FLOAT_COMP_DELTA; + $result = db_query($sql,"The customer details could not be retrieved"); + $row = db_fetch($result); + return $row[0]; +} + +function supplier_aging($today, $width="33") +{ + $pg = new chart('bar', 's3'); + if (isset($_POST['select_s3'])) + $pg->type = $_POST['select_s3']; + $today1 = date2sql($today); + $past1 = get_company_pref('past_due_days'); + $past2 = 2 * $past1; + // removed - debtor_trans.alloc from all summations + $value = "IF (trans.type=".ST_SUPPINVOICE." OR trans.type=".ST_BANKDEPOSIT.", + (trans.ov_amount + trans.ov_gst + trans.ov_discount - trans.alloc) * trans.rate, + (trans.ov_amount + trans.ov_gst + trans.ov_discount + trans.alloc) * trans.rate)"; + $due = "IF (trans.type=".ST_SUPPINVOICE." OR trans.type=".ST_SUPPCREDIT.",trans.due_date,trans.tran_date)"; + $sql = "SELECT Sum($value) AS Balance, + Sum(IF ((TO_DAYS('$today1') - TO_DAYS($due)) > 0,$value,0)) AS Due, + Sum(IF ((TO_DAYS('$today1') - TO_DAYS($due)) > $past1,$value,0)) AS Overdue1, + Sum(IF ((TO_DAYS('$today1') - TO_DAYS($due)) > $past2,$value,0)) AS Overdue2 + FROM ".TB_PREF."suppliers supplier, ".TB_PREF."supp_trans trans + WHERE supplier.supplier_id = trans.supplier_id + AND trans.tran_date <= '$today1' + AND ABS(trans.ov_amount + trans.ov_gst + trans.ov_discount) > ".FLOAT_COMP_DELTA." + AND ABS(trans.ov_amount + trans.ov_gst + trans.ov_discount) - trans.alloc > ".FLOAT_COMP_DELTA; + $result = db_query($sql,"The supplier details could not be retrieved"); + + $row = db_fetch($result); + + $title = _("Total Suppliers Aged Analysis"); + check_page_security('SA_SUPPLIERANALYTIC'); + $names = array(); + $past1a = $past1 + 1; + $past2a = $past2 + 1; + $names = array(_('Current'),"1-$past1", "$past1a-$past2", "$past2+"); + $balances = array(round($row['Balance']-$row['Due']), round($row['Due'] - $row['Overdue1']), + round($row['Overdue1'] - $row['Overdue2']), round($row['Overdue2'])); + $total = round($row['Balance']); + $pg->setLabels($names); + $pg->addSerie(_('Balances'), $balances); + source_graphic($today, $title, _('Days'), $pg); + return $total; +} + +function supplier_balance($today) +{ + $today = date2sql($today); + $value = "IF (trans.type=".ST_SUPPINVOICE." OR trans.type=".ST_BANKDEPOSIT.", + (trans.ov_amount + trans.ov_gst + trans.ov_discount - trans.alloc) * trans.rate, + (trans.ov_amount + trans.ov_gst + trans.ov_discount + trans.alloc) * trans.rate)"; + $sql = "SELECT Sum($value) AS Balance + FROM ".TB_PREF."suppliers supplier, ".TB_PREF."supp_trans trans + WHERE supplier.supplier_id = trans.supplier_id + AND trans.tran_date <= '$today' + AND ABS(trans.ov_amount + trans.ov_gst + trans.ov_discount) > ".FLOAT_COMP_DELTA." + AND ABS(trans.ov_amount + trans.ov_gst + trans.ov_discount) - trans.alloc > ".FLOAT_COMP_DELTA; + $result = db_query($sql,"The supplier details could not be retrieved"); + $row = db_fetch($result); + return $row[0]; +} + +function cash_flow($today) +{ + global $date_system, $SysPrefs; + $months = 6; + $pg = new chart('spline', 'g5'); + if (isset($_POST['select_g5'])) + $pg->type = $_POST['select_g5']; + if (isset($_POST['per_g5'])) + $months = $_POST['per_g5']; + if (!is_date_in_fiscalyear($today)) + $today = end_fiscalyear(); + $today1 = begin_month($today); + $today1 = add_months($today, -$months+1); + list($da, $mo, $yr) = explode_date_to_dmy($today1); + if ($date_system == 1) + list($yr, $mo, $da) = jalali_to_gregorian($yr, $mo, $da); + elseif ($date_system == 2) + list($yr, $mo, $da) = islamic_to_gregorian($yr, $mo, $da); + + $date = array(); + + for ($i = 0; $i < $months; $i++) + $date[$i] = date('Y-m-d',mktime(0,0,0,$mo + $i,1,$yr)); + + $result = get_bank_accounts(); + $total = array_fill(0, $months, 0); + $balance = array_fill(0, $months, 0); + while ($account=db_fetch($result)) + { + $sql = "SELECT"; + for ($i = 0; $i < $months; $i++) + $sql .= " SUM(CASE WHEN trans_date < '$date[$i]' THEN amount ELSE 0 END) AS per0".($i+1).","; + $sql = substr($sql, 0, -1); + $sql .= " FROM ".TB_PREF."bank_trans + WHERE bank_act=".$account['id']; + $res = db_query($sql, "Transactions for bank account could not be calculated"); + $bal = db_fetch($res); + $is_home = is_company_currency($account['bank_curr_code']); + for ($i = 1; $i <= $months; $i++) + $balance[$i - 1] = $bal['per0'.$i]; + for ($i = 0; $i < $months; $i++) + { + if (!$is_home) + $balance[$i] = to_home_currency($balance[$i], $account['bank_curr_code'], sql2date($date[$i])); + $total[$i] += $balance[$i]; + } + } + $sep = $SysPrefs->dateseps[user_date_sep()]; + for ($i = 0; $i < $months; $i++) + { + $y = substr($date[$i], 0, 4); + $m = substr($date[$i], 5, 2); + $date[$i] = $y.$sep.$m; + $total[$i] = round($total[$i]); + } + $title = _("Last $months Months Cash Flow"); + check_page_security('SA_BANKREP'); + $pg->setLabels($date); + $pg->addSerie(_('Balances'), $total, false, true); + source_graphic($today, $title, _("Month"), $pg, _("Months"), $months); +} + +function source_graphic($today, $title, $x_axis, $pg, $per = '', $num = false) +{ + if (!empty($per)) + div_start($pg->id); + //$today = sql2date($today); + display_title("$title ($today)", $pg->id, $pg->type, $per, $num); + if ($pg->isEmpty()) + { + display_note(_("No Data available yet!"), 1); return; - display_title("$title ($today)"); - //$pg->title = $title . " - " . $today; - $pg->axis_x = $x_axis; - $pg->axis_y = _("Amount"); - $pg->graphic_1 = $graphic1; - if ($graphic2 != null) - $pg->graphic_2 = $graphic2; - $pg->type = $type; - $pg->skin = 1; - $pg->built_in = false; - $filename = company_path(). "/pdf_files/". random_id().".png"; - $pg->display($filename, true); - start_table(TABLESTYLE); - start_row(); - echo ""; - end_row(); - end_table(1); + } + if ($pg->type == 'horizontalBar') + { + $pg->setYTitle($x_axis); + $pg->setXTitle(_("Amount")); + } + else + { + $pg->setXTitle($x_axis); + $pg->setYTitle(_("Amount")); + } + if (empty($per)) + div_start($pg->id); + $pg->display(); + div_end(); } function customer_trans($today) @@ -485,8 +1020,8 @@ function customer_trans($today) display_title($title); $th = array("#", _("Ref."), _("Date"), _("Due Date"), _("Customer"), _("Branch"), _("Currency"), _("Total"), _("Remainder"), _("Days")); - start_table(TABLESTYLE); - table_header($th); + start_table(TABLESTYLE, "width=90%"); + headers($th); $k = 0; //row colour counter while ($myrow = db_fetch($result)) { @@ -524,8 +1059,8 @@ function customer_recurrent_invoices($today) $title = _("Overdue Recurrent Invoices"); display_title($title); $th = array(_("Description"), _("Template No"),_("Customer"),_("Branch")."/"._("Group"),_("Next invoice")); - start_table(TABLESTYLE, "width=70%"); - table_header($th); + start_table(TABLESTYLE, "width=90%"); + headers($th); $k = 0; while ($myrow = db_fetch($result)) { @@ -570,8 +1105,8 @@ function supplier_trans($today) display_title($title); $th = array("#", _("Ref."), _("Date"), _("Due Date"), _("Supplier"), _("Currency"), _("Total"), _("Remainder"), _("Days")); - start_table(TABLESTYLE); - table_header($th); + start_table(TABLESTYLE, "width=90%"); + headers($th); $k = 0; //row colour counter while ($myrow = db_fetch($result)) { @@ -591,6 +1126,42 @@ function supplier_trans($today) end_table(2); } +function stock_below_reorder($today, $type) +{ + $MB = ($type == 0 ? 'B' : ($type == 1 ? 'M' : 'F')); + $today = date2sql($today); + + $sql = "SELECT st.loc_code, l.location_name, st.stock_id, sm.description, reorders.reorder_level AS r, SUM(st.qty) AS q + FROM ".TB_PREF."stock_moves st + LEFT JOIN ".TB_PREF."voided v ON st.type=v.type AND st.trans_no=v.id + LEFT JOIN ".TB_PREF."stock_master sm ON sm.stock_id = st.stock_id + LEFT JOIN ".TB_PREF."loc_stock reorders ON reorders.loc_code=st.loc_code AND + reorders.stock_id = st.stock_id + LEFT JOIN ".TB_PREF."locations l ON l.loc_code = st.loc_code + WHERE ISNULL(v.id) AND tran_date <= '$today' AND sm.mb_flag = 'B' + GROUP BY sm.stock_id HAVING q <= r"; + $result = db_query($sql,"an item reorder could not be retreived"); + $title = db_num_rows($result) . _(" items are below Reorder Level"); + display_title($title); + $th = array("#", _("Location"), _("Stock Id"), _('Description'), _("Reorder"), _("qty")); + start_table(TABLESTYLE, "width=90%"); + headers($th); + $k = 0; //row colour counter + while ($myrow = db_fetch($result)) + { + alt_table_row_color($k); + label_cell($myrow['loc_code']); + label_cell($myrow['location_name']); + label_cell($myrow['stock_id']); + label_cell($myrow['description']); + $dec = get_qty_dec($myrow['stock_id']); + qty_cell($myrow['r'], false, $dec); + qty_cell($myrow['q'], false, $dec); + end_row(); + } + end_table(2); +} + function bank_balance($today, $width) { $today = date2sql($today); @@ -605,7 +1176,7 @@ function bank_balance($today, $width) display_title($title); $th = array(_("Account"), _("Currency"), _("Balance")); start_table(TABLESTYLE, "width='$width%'"); - table_header($th); + headers($th); $k = 0; //row colour counter while ($myrow = db_fetch($result)) { @@ -616,4 +1187,314 @@ function bank_balance($today, $width) end_row(); } end_table(1); -} \ No newline at end of file +} + +function get_num_customers() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."debtors_master"; + $result = db_query($sql, "Fail in count customers"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_branches() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."cust_branch"; + $result = db_query($sql, "Fail in count branches"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_salesmen() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."salesman"; + $result = db_query($sql, "Fail in count salesmen"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_overdue_sales() +{ + $today = date2sql(calc_today()); + + $sql = "SELECT COUNT(trans.trans_no) + FROM ".TB_PREF."debtor_trans as trans + WHERE trans.type = ".ST_SALESINVOICE." AND (trans.ov_amount + trans.ov_gst + trans.ov_freight + + trans.ov_freight_tax + trans.ov_discount - trans.alloc) > ".FLOAT_COMP_DELTA." + AND DATEDIFF('$today', trans.due_date) > 0"; + $result = db_query($sql); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_suppliers() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."suppliers"; + $result = db_query($sql, "Fail in count suppliers"); + $row = db_fetch($result); + return $row[0]; +} + +function get_new_purch_orders() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."purch_orders po, ".TB_PREF."purch_order_details pd WHERE po.order_no = pd.order_no AND + quantity_received < quantity_ordered"; + $result = db_query($sql, "Fail in count purch orders"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_supp_invoices() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."supp_trans WHERE (ov_amount+ov_discount+ov_gst - alloc) <> 0"; + $result = db_query($sql, "Fail in count purch invoices"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_overdue_purch() +{ + $today = date2sql(calc_today()); + + $sql = "SELECT COUNT(*) FROM ".TB_PREF."supp_trans WHERE (ov_amount+ov_discount+ov_gst - alloc) > ".FLOAT_COMP_DELTA." AND DATEDIFF('$today', due_date) > 0"; + $result = db_query($sql, "Fail in count purch invoices"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_items() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."stock_master"; + $result = db_query($sql, "Fail in count stock master"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_locations() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."locations"; + $result = db_query($sql, "Fail in count locations"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_kits() +{ + $sql="SELECT count(*) FROM ".TB_PREF."item_codes"; + + $result = db_query($sql, "Fail in count kits"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_reorder() +{ + $MB = 'B'; + $today = date2sql(calc_today()); + + $sql = "SELECT st.stock_id, reorders.reorder_level AS r, SUM(st.qty) AS q + FROM ".TB_PREF."stock_moves st + LEFT JOIN ".TB_PREF."voided v ON st.type=v.type AND st.trans_no=v.id + LEFT JOIN ".TB_PREF."stock_master sm ON sm.stock_id = st.stock_id + LEFT JOIN ".TB_PREF."loc_stock reorders ON reorders.loc_code=st.loc_code AND + reorders.stock_id = st.stock_id + WHERE ISNULL(v.id) AND tran_date <= '$today' AND sm.mb_flag = 'B' + GROUP BY st.stock_id HAVING q <= r"; + $result = db_query($sql,"an item reorder could not be retreived"); + return db_num_rows($result); +} + +function get_num_assembled() +{ + $begin = date2sql(begin_fiscalyear()); + $today = date2sql(calc_today()); + $sql = "SELECT count(*) FROM ".TB_PREF."workorders WHERE closed = 1 AND type = ".WO_ASSEMBLY." AND released_date >= '$begin' + AND released_date <= '$today'"; + $result = db_query($sql, "Fail in count workorders"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_manufactured() +{ + $begin = date2sql(begin_fiscalyear()); + $today = date2sql(calc_today()); + $sql = "SELECT count(*) FROM ".TB_PREF."workorders WHERE closed = 1 AND type = ".WO_ADVANCED." AND released_date >= '$begin' + AND released_date <= '$today'"; + $result = db_query($sql, "Fail in count workorders"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_workcentres() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."workcentres"; + $result = db_query($sql, "Fail in count work centres"); + $row = db_fetch($result); + return $row[0]; +} + +function get_open_workorders() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."workorders WHERE closed = 0"; + $result = db_query($sql, "Fail in count workorders"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_fixed_assets() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."stock_master WHERE mb_flag = 'F'"; + $result = db_query($sql, "Fail in count fixed assets"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_fixed_locations() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."stock_master s LEFT JOIN ".TB_PREF."loc_stock l ON s.stock_id = l.stock_id + WHERE mb_flag = 'F'"; + $result = db_query($sql, "Fail in count locations"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_fixed_categories() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."stock_category c LEFT JOIN ".TB_PREF."stock_master s ON c.category_id = s.category_id + WHERE mb_flag = 'F'"; + $result = db_query($sql, "Fail in count categories"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_fixed_classes() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."stock_fa_class"; + $result = db_query($sql, "Fail in count fa classes"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_dimensions() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."dimensions"; + $result = db_query($sql, "Fail in count dimensions"); + $row = db_fetch($result); + return $row[0]; +} + +function get_dim_type2() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."dimensions WHERE type_ = 2"; + $result = db_query($sql, "Fail in count simensions 2"); + $row = db_fetch($result); + return $row[0]; +} + +function get_dim_closed() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."dimensions WHERE closed = 1"; + $result = db_query($sql, "Fail in count closed dimensions"); + $row = db_fetch($result); + return $row[0]; +} + +function get_dim_total() +{ + $begin = date2sql(begin_fiscalyear()); + $today = date2sql(calc_today()); + + $sql = "SELECT SUM(IF(c.ctype > 3, -amount, 0)) AS result, SUM(IF(c.ctype < 4, amount, 0)) AS balance, d.reference, d.name FROM ".TB_PREF."gl_trans g + LEFT JOIN ".TB_PREF."chart_master AS a ON g.account = a.account_code + LEFT JOIN ".TB_PREF."chart_types AS t ON t.id = a.account_type + LEFT JOIN ".TB_PREF."dimensions AS d ON (g.dimension_id = d.id OR g.dimension2_id = d.id) + LEFT JOIN ".TB_PREF."chart_class AS c ON t.class_id = c.cid + WHERE IF(c.ctype > 3, tran_date >= '$begin', tran_date >= '0000-00-00') + AND tran_date <= '$today' AND d.reference IS NOT NULL GROUP BY d.reference"; + $bal = $res = 0.0; + $result = db_query($sql, "Transactions could not be calculated"); + while ($row = db_fetch($result)) + { + $bal += $row['balance']; + $res += $row['result']; + } + return array(round($bal), round($res)); +} + +function get_today_deposits($today) +{ + $today= date2sql($today); + $sql="SELECT SUM(gl.amount) FROM ".TB_PREF."gl_trans gl, ".TB_PREF."bank_accounts ba + WHERE gl.account = ba.account_code AND gl.tran_date = '$today' AND gl.amount > 0.0"; + $result = db_query($sql, "could not retrieve today deposits"); + if ($result == false) + return 0; + else + { + $row = db_fetch($result); + return $row[0]; + } +} + +function get_today_payments($today) +{ + $today= date2sql($today); + $sql="SELECT SUM(gl.amount) FROM ".TB_PREF."gl_trans gl, ".TB_PREF."bank_accounts ba + WHERE gl.account = ba.account_code AND gl.tran_date = '$today' AND gl.amount < 0.0"; + $result = db_query($sql, "could not retrieve today deposits"); + if ($result == false) + return 0; + else + { + $row = db_fetch($result); + return $row[0]; + } +} + +function get_num_users() +{ + $sql = "SELECT count(*) FROM ".TB_PREF."users"; + $result = db_query($sql, "could not get num users"); + $row = db_fetch($result); + return $row[0]; +} + +function get_num_extensions() +{ + global $installed_extensions; + return count($installed_extensions); +} + +function get_num_languages() +{ + global $installed_languages; + return count($installed_languages); +} + +function get_database_size() +{ + global $db_connections; + $c = user_company(); + $dbase = $db_connections[$c]['dbname']; + $tb_pref = $db_connections[$c]['tbpref']; + $sql = "SHOW TABLE STATUS FROM $dbase"; + if (!empty($tb_pref)) + $sql .= " LIKE '{$tb_pref}%'"; + $result = db_query($sql, "could not get database size"); + $size = 0; + while ($row = db_fetch($result)) { + $size += $row['Data_length']; + $size += $row['Index_length']; + } + return number_format2(($size / 1024 / 1024), 2).' MB'; +} + +function calc_today() +{ + $today = Today(); + if (!is_date_in_fiscalyear($today)) + $today = end_fiscalyear(); + return $today; +} + diff --git a/reporting/fonts/FreeSans.ttf b/reporting/fonts/FreeSans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4afc54415dfa13bd6022cf9a14bdb42daec67ed0 GIT binary patch literal 459480 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 Vj(Yu`4$kAL*Ppz`Jyr7ezW^3Fn9KkG literal 0 HcmV?d00001 diff --git a/reporting/includes/class.graphic.inc b/reporting/includes/class.graphic.inc index 81e93d25..3f976f73 100644 --- a/reporting/includes/class.graphic.inc +++ b/reporting/includes/class.graphic.inc @@ -1,53 +1,18 @@ title = "Sex"; -$pg->type = "5"; -$pg->x[0] = "male"; -$pg->y[0] = "50"; -$pg->x[1] = "female"; -$pg->y[1] = "55"; -$pg->display(); -?> +/* + +$pg = new Chart('bar'); // Width and Height is set automatically4 +$pg->setTitle("Testing the Chart"); +$pg->setLabels(array('Jan', 'Feb', 'Mar')); +$pg->addSerie(array(10345, 15666, 12222), 'Sales', false, true); +$pg->addSerie(array(20767, 10456, 2888), 'Costs', false, false); +$pg->addSerie(array(15657, 7567, 12890), 'Result', 'spline', false); +$pg->setXTitle("Names"); +$pg->setYTitle("Amount"); +$pg->setDValues(False); +$pg->setDTitle(number_format("15666")); // only printed on donut or half donut +$filename = "test.png"; +$pg->display(); // with filename to file In your html file you set it up as: ..... @@ -60,904 +25,1324 @@ file for later presentation. ///// END OF EXAMPLE.PHP ///// - - - Here is a list of all parameters you may set: - - title => Title of the graphic - axis_x => Name of values from Axis X - axis_y => Name of values from Axis Y - graphic_1 => Name of Graphic_1 (only shown if you are gonna cross data from 2 different graphics) - graphic_2 => Name of Graphic_2 (same comment of above) - - type => Type of graphic (values 1 to 6) - 1 => Vertical bars (default) - 2 => Horizontal bars - 3 => Dots - 4 => Lines - 5 => Pie - 6 => Donut - - skin => Skin of the graphic (values 1 to 3) - 1 => Office (default) - 2 => Matrix - 3 => Spring - - credits => Only if you want to show my credits in the image. :) - 0 => doesn't show (default) - 1 => shows - - x[0] => Name of the first parameter in Axis X - x[1] => Name of the second parameter in Axis X - ... (etc) - - y[0] => Value from "graphic_1" relative for "x[0]" - y[1] => Value from "graphic_1" relative for "x[1]" - ... (etc) - - z[0] => Value from "graphic_2" relative for "x[0]" - z[1] => Value from "graphic_2" relative for "x[1]" - ... (etc) - - - NOTE: You can't cross data between graphics if you use "pie" or "donut" graphic. Values for "z" - won't be considerated. - - That's all! Hope you make a good use of it! - It would be nice to receive feedback from others users. All comments are welcome! - - Regards, - - Carlos Reche - + Here is a list of all types you may set: + + type + ---- + 'bar' 1 => Vertical bars (default) + 'horizontalBar' 2 => Horizontal bars + 'dot' 3 => Dots + 'line' 4 => Lines - Series Type Fill => Area + 'pie' 5 => Pie + 'donut' 6 => Donut + 'halfDonut' 7 => Half Donut + 'spline' 8 => Splines - Series Type fill => Area + 'table' 9 => Simple HTML table + + labels[0] => Name of the first parameter in Axis X + labels[1] => Name of the second parameter in Axis X + ... (etc) + + series[0]['data'][0] => Value relative for "labels[0]" + series[0]['data'][1] => Value relative for "labels[1]" + ... (etc) + + series[1]['data'][0] => Value relative for "labels[0]" + series[1]['data'][1] => Value relative for "labels[1]" + ... (etc) + + NOTE: When using 'pie', 'donut' and 'halfDonut' only the first data set is used. + + That's all! Hope you make a good use of it! + It would be nice to receive feedback from others users. All comments are welcome! + + Regards, + + Joe Hunt */ -class graph +class Chart { - - var $x; - var $y; - var $z; - - var $title; - var $axis_x; - var $axis_y; - var $graphic_1; - var $graphic_2; - var $type = 1; - var $skin = 1; - var $credits = 0; - var $latin_notation; - - var $width; - var $height; - var $height_title; - var $alternate_x; - - var $size = 2; - var $tsize = 5; - - var $total_parameters; - var $sum_total; - var $biggest_value; - var $biggest_parameter; - var $available_types; - var $dec1 = 0; - var $dec2 = 0; - var $h3d = 15; // 3D height - var $built_in = false; + var $id; + var $labels = array(); + var $series = array(); + static $palette = array('#008cc9','#4db625','#ef5500','#eef100','#05c6e6', '#5ee66a'); // Currently in Use + var $color = array(); + var $num_series = 0; + var $title; + var $axis_x; + var $axis_y; + var $type = 1; + var $donut_title = ""; + var $set_values = true; + var $angle = 0; + var $latin_notation; + var $width; + var $height; + var $title_height; + var $size = 12; + var $tsize = 18; + var $num_labels; + var $sum_total = array(); + var $higher_value_size = 0; + var $max_value; + var $max_label; + var $max_legend_str; + var $legend_box_height; + var $stream = 'svg'; // stream = 'svg', 'png', 'jpg' or 'gif' + var $svg; // The SVG engine class. + var $img; // png image + + var $dec1 = 0; + var $dec2 = 0; var $fontfile = ""; var $encoding; - - function __construct() - { - global $SysPrefs; + var $out_dir = ""; + var $dir = "ltr"; + var $align; + var $lang; + var $font; + var $path; + + function __construct($type = 1, $id = 'id', $width = 0, $height = 0) + { + global $SysPrefs; $this->encoding = strtoupper($_SESSION['language']->encoding); - $path = dirname(__FILE__).'/../fonts/'; - - // If you use UTF-8 encoding you have to download and install FreeSans.ttf font. - // It is not bundled with application due to its size. - // You can also use another UTF-8 font and put it in config.php with the name in $UTF8_fontfile - $this->fontfile = $this->encoding == 'UTF-8' ? (isset($SysPrefs->UTF8_fontfile) && $SysPrefs->UTF8_fontfile != "" ? - $path.$SysPrefs->UTF8_fontfile : $path.'FreeSans.ttf') : $path.'LiberationSans-Regular.ttf'; - - $this->x = $this->y = $this->z = array(); - $this->biggest_x = NULL; - $this->biggest_y = NULL; - $this->alternate_x = false; - $this->graphic_2_exists = false; - $this->total_parameters = 0; - $this->sum_total = 1; - $this->latin_notation = false; - } - - - function display($save="", $border=false) - { - $this->legend_exists = (preg_match("/(5|6)/", $this->type)) ? true : false; - $this->biggest_graphic_name = (strlen($this->graphic_1) > strlen($this->graphic_2)) ? $this->graphic_1 : $this->graphic_2; - $this->height_title = (!empty($this->title)) ? ($this->string_height($this->tsize) + 15) : 0; - $this->space_between_bars = ($this->type == 1) ? 40 : 30; - $this->space_between_dots = 40; - $this->higher_value = 0; - $this->higher_value_str = 0; - - $this->width = 0; - $this->height = 0; - $this->graphic_area_width = 0; - $this->graphic_area_height = 0; - $this->graphic_area_x1 = 30; - $this->graphic_area_y1 = 20 + $this->height_title; - $this->graphic_area_x2 = $this->graphic_area_x1 + $this->graphic_area_width; - $this->graphic_area_y2 = $this->graphic_area_y1 + $this->graphic_area_height; - - if (count($this->z) && (preg_match("/(1|2|3|4)/", $this->type))) - $this->graphic_2_exists = true; - $this->total_parameters = count($this->x); - for ($i = 0; $i < $this->total_parameters; $i++) + //$this->encoding = "UTF-8"; // Use alternative if used in FA + $this->dir = $_SESSION['language']->dir; + //$this->dir = 'ltr'; + $this->lang = $_SESSION['language']->code == 'C' ? 'en' : substr($_SESSION['language']->code, 0, 2); + //$this->lang = 'en'; + $this->path = dirname(__FILE__).'/../fonts/'; + //$this->path = dirname(__FILE__).'/'; + // You can use another UTF-8 font and put it in config.php with the name in $UTF8_fontfile + if ($this->encoding == 'UTF-8' && !empty($SysPrefs->UTF8_fontfile)) + $this->fontfile = $this->path.$SysPrefs->UTF8_fontfile; + elseif ($this->dir == 'rtl') + $this->fontfile = $this->path.'zarnormal.ttf'; + else + $this->fontfile = $this->path.'FreeSans.ttf'; + //$this->fontfile = $this->path.'FreeSans.ttf'; + //$this->fontfile = $this->path.'zarnormal.ttf'; + $this->id = $id; + if ($type == 'bar') $type = 1; + elseif ($type == 'horizontalBar') $type = 2; + elseif ($type == 'dot') $type = 3; + elseif ($type == 'line') $type = 4; + elseif ($type == 'spline') $type = 8; + elseif ($type == 'pie') $type = 5; + elseif ($type == 'donut') $type = 6; + elseif ($type == 'halfDonut') $type = 7; + elseif ($type == 'table') $type = 9; + elseif ($type < 1 || $type > 9) $type = 1; + elseif (!is_numeric($type)) $type = 1; + $this->width = $width; + $this->height = $height; + $this->max_label = NULL; + $this->max_value = NULL; + $this->num_labels = 0; + $this->type = $type; + $this->latin_notation = false; + $this->align = $this->dir == 'rtl' ? "end" : "start"; + $this->font = "Tahoma,Arial,sans-serif"; + if ($this->stream != 'svg') { - if (strlen($this->x[$i]) > strlen($this->biggest_x)) - $this->biggest_x = $this->x[$i]; - if ($this->y[$i] > $this->biggest_y) - $this->biggest_y = number_format(round($this->y[$i], 1), 1, ".", ""); - if ($this->graphic_2_exists) - { - if (isset($this->z[$i]) && $this->z[$i] > $this->biggest_y) - $this->biggest_y = number_format(round($this->z[$i], 1), 1, ".", ""); - } - } - - if (($this->graphic_2_exists == true) && ((!empty($this->graphic_1)) || (!empty($this->graphic_2)))) - { - $this->legend_exists = true; - } - - $this->sum_total = array_sum($this->y); - if ($this->sum_total == 0) - $this->sum_total = 1; - $this->space_between_bars += ($this->graphic_2_exists == true) ? 10 : 0; - - $this->calculate_higher_value(); - $this->calculate_width(); - $this->calculate_height(); - - $this->create_graphic($save, $border); - } - - function create_graphic($save="", $border=false) - { - $size = 3; - $this->img = imagecreatetruecolor($this->width, $this->height); - - $this->load_color_palette(); - - // Fill background - imagefill($this->img, 0, 0, $this->color['background']); - - // Draw title - if (!empty($this->title)) - { - $center = ($this->width / 2) - ($this->string_width($this->title, $this->tsize) / 2); - $this->_imagestring($this->img, $this->tsize, $center, 10, $this->title, $this->color['title']); - } - - - // Draw axis and background lines for "vertical bars", "dots" and "lines" - if (preg_match("/^(1|3|4)$/", $this->type)) - { - if ($this->legend_exists == true) - { - $this->draw_legend(); - } - - $higher_value_y = $this->graphic_area_y1 + (0.1 * $this->graphic_area_height); - $higher_value_size = 0.9 * $this->graphic_area_height; - - $less = 7 * strlen($this->higher_value_str); - - imageline($this->img, $this->graphic_area_x1, $higher_value_y, $this->graphic_area_x2, $higher_value_y, $this->color['bg_lines']); - $this->_imagestring($this->img, $this->size, ($this->graphic_area_x1-$less-7), ($higher_value_y-7), $this->higher_value_str, $this->color['axis_values']); - - for ($i = 1; $i < 10; $i++) - { - $dec_y = $i * ($higher_value_size / 10); - $x1 = $this->graphic_area_x1; - $y1 = $this->graphic_area_y2 - $dec_y; - $x2 = $this->graphic_area_x2; - $y2 = $this->graphic_area_y2 - $dec_y; - - imageline($this->img, $x1, $y1, $x2, $y2, $this->color['bg_lines']); - if ($i % 2 == 0) - { - $value = $this->number_formated($this->higher_value * $i / 10, $this->dec1); - $len1 = strlen($this->higher_value_str); - $len2 = strlen($value); - if ($len2 < $len1) - $len2 += ($len1-$len2-1); - $less = 7 * $len2; - $this->_imagestring($this->img, $this->size, ($x1-$less-7), ($y2-7), $value, $this->color['axis_values']); - } - } - - // Axis X - $this->_imagestring($this->img, $this->size, $this->graphic_area_x2+40, $this->graphic_area_y2+3, $this->axis_x, $this->color['title']); - imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']); - // Axis Y - $this->_imagestring($this->img, $this->size, 20, $this->graphic_area_y1-20, $this->axis_y, $this->color['title']); - imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']); - } - - - // Draw axis and background lines for "horizontal bars" - else if ($this->type == 2) - { - if ($this->legend_exists == true) - { - $this->draw_legend(); - } - - $higher_value_x = $this->graphic_area_x2 - (0.2 * $this->graphic_area_width); - $higher_value_size = 0.8 * $this->graphic_area_width; - - imageline($this->img, ($this->graphic_area_x1+$higher_value_size), $this->graphic_area_y1, ($this->graphic_area_x1+$higher_value_size), $this->graphic_area_y2, $this->color['bg_lines']); - $this->_imagestring($this->img, $this->size, (($this->graphic_area_x1+$higher_value_size) - ($this->string_width($this->higher_value, $this->size)/2)), ($this->graphic_area_y2+2), $this->higher_value_str, $this->color['axis_values']); - - for ($i = 1, $alt = 15; $i < 10; $i++) - { - $dec_x = number_format(round($i * ($higher_value_size / 10), 1), 1, ".", ""); - - imageline($this->img, ($this->graphic_area_x1+$dec_x), $this->graphic_area_y1, ($this->graphic_area_x1+$dec_x), $this->graphic_area_y2, $this->color['bg_lines']); - if ($i % 2 == 0) - { - $alt = (strlen($this->biggest_y) > 4 && $alt != 15) ? 15 : 2; - $value = $this->number_formated($this->higher_value * $i / 10, $this->dec1); - $this->_imagestring($this->img, $this->size, (($this->graphic_area_x1+$dec_x) - ($this->string_width($this->higher_value, $this->size)/2)), ($this->graphic_area_y2), $value, $this->color['axis_values'], $alt); - } - } - - // Axis X - $this->_imagestring($this->img, $this->size, ($this->graphic_area_x2+10), ($this->graphic_area_y2+3), $this->axis_y, $this->color['title']); - imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']); - // Axis Y - $this->_imagestring($this->img, $this->size, 20, ($this->graphic_area_y1-20), $this->axis_x, $this->color['title']); - imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']); - } - - - // Draw legend box for "pie" or "donut" - else if (preg_match("/^(5|6)$/", $this->type)) - { - $this->draw_legend(); - } - - - - /** - * Draw graphic: VERTICAL BARS - */ - if ($this->type == 1) - { - $num = 1; - $x = $this->graphic_area_x1 + 20; - - foreach ($this->x as $i => $parameter) - { - if (isset($this->z[$i])) - { - $size = round($this->z[$i] * $higher_value_size / $this->higher_value); - $x1 = $x + 10; - $y1 = ($this->graphic_area_y2 - $size) + 1; - $x2 = $x1 + 20; - $y2 = $this->graphic_area_y2 - 1; - imageline($this->img, ($x1+1), ($y1-1), $x2, ($y1-1), $this->color['bars_2_shadow']); - imageline($this->img, ($x2+1), ($y1-1), ($x2+1), $y2, $this->color['bars_2_shadow']); - imageline($this->img, ($x2+2), ($y1-1), ($x2+2), $y2, $this->color['bars_2_shadow']); - imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars_2']); - } - - $size = round($this->y[$i] * $higher_value_size / $this->higher_value); - $alt = (($num % 2 == 0) && (strlen($this->biggest_x) > 5)) ? 15 : 2; - $x1 = $x; - $y1 = ($this->graphic_area_y2 - $size) + 1; - $x2 = $x1 + 20; - $y2 = $this->graphic_area_y2 - 1; - $x += $this->space_between_bars; - $num++; - - imageline($this->img, ($x1+1), ($y1-1), $x2, ($y1-1), $this->color['bars_shadow']); - imageline($this->img, ($x2+1), ($y1-1), ($x2+1), $y2, $this->color['bars_shadow']); - imageline($this->img, ($x2+2), ($y1-1), ($x2+2), $y2, $this->color['bars_shadow']); - imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars']); - $this->_imagestring($this->img, $this->size, $x1, ($y2+2), $parameter, $this->color['axis_values'], $alt); - } - } - - - /** - * Draw graphic: HORIZONTAL BARS - */ - else if ($this->type == 2) - { - $y = 10; - - foreach ($this->x as $i => $parameter) - { - if (isset($this->z[$i])) - { - $size = round($this->z[$i] * $higher_value_size / $this->higher_value); - $x1 = $this->graphic_area_x1 + 1; - $y1 = $this->graphic_area_y1 + $y + 10; - $x2 = $x1 + $size; - $y2 = $y1 + 15; - imageline($this->img, ($x1), ($y2+1), $x2, ($y2+1), $this->color['bars_2_shadow']); - imageline($this->img, ($x1), ($y2+2), $x2, ($y2+2), $this->color['bars_2_shadow']); - imageline($this->img, ($x2+1), ($y1+1), ($x2+1), ($y2+2), $this->color['bars_2_shadow']); - imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars_2']); - $this->_imagestring($this->img, $this->size, ($x2+7), ($y1+7), $this->number_formated($this->z[$i], $this->dec2), $this->color['bars_2_shadow']); - } - - $size = round(($this->y[$i] / $this->higher_value) * $higher_value_size); - $x1 = $this->graphic_area_x1 + 1; - $y1 = $this->graphic_area_y1 + $y; - $x2 = $x1 + $size; - $y2 = $y1 + 15; - $y += $this->space_between_bars; - - imageline($this->img, ($x1), ($y2+1), $x2, ($y2+1), $this->color['bars_shadow']); - imageline($this->img, ($x1), ($y2+2), $x2, ($y2+2), $this->color['bars_shadow']); - imageline($this->img, ($x2+1), ($y1+1), ($x2+1), ($y2+2), $this->color['bars_shadow']); - imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars']); - $this->_imagestring($this->img, $this->size, ($x2+7), ($y1+2), $this->number_formated($this->y[$i], $this->dec2), $this->color['bars_shadow']); - - $this->_imagestring($this->img, $this->size, 30, ($y1+2), $parameter, $this->color['axis_values']); - } - } - - - /** - * Draw graphic: DOTS or LINE - */ - else if (preg_match("/^(3|4)$/", $this->type)) - { - - $x[0] = $this->graphic_area_x1+1; - - foreach ($this->x as $i => $parameter) - { - if ($this->graphic_2_exists == true) - { - $size = round($this->z[$i] * $higher_value_size / $this->higher_value); - $z[$i] = $this->graphic_area_y2 - $size; - } - - $alt = (($i % 2 == 0) && (strlen($this->biggest_x) > 5)) ? 15 : 2; - $size = round($this->y[$i] * $higher_value_size / $this->higher_value); - $y[$i] = $this->graphic_area_y2 - $size; - - if ($i != 0) - { - imageline($this->img, $x[$i], ($this->graphic_area_y1+10), $x[$i], ($this->graphic_area_y2-1), $this->color['bg_lines']); - } - $this->_imagestring($this->img, $this->size, $x[$i], ($this->graphic_area_y2+2), $parameter, $this->color['axis_values'], $alt); - - $x[$i+1] = $x[$i] + 40; - } - - foreach ($x as $i => $value_x) - { - if ($this->graphic_2_exists == true) - { - if (isset($z[$i+1])) - { - // Draw lines - if ($this->type == 4) - { - imageline($this->img, $x[$i], $z[$i], $x[$i+1], $z[$i+1], $this->color['line_2']); - imageline($this->img, $x[$i], ($z[$i]+1), $x[$i+1], ($z[$i+1]+1), $this->color['line_2']); - } - imagefilledrectangle($this->img, $x[$i]-1, $z[$i]-1, $x[$i]+2, $z[$i]+2, $this->color['line_2']); - } - else - { // Draw last dot - imagefilledrectangle($this->img, $x[$i-1]-1, $z[$i-1]-1, $x[$i-1]+2, $z[$i-1]+2, $this->color['line_2']); - } - } + $this->tsize = 12; + $this->size = 9; + } + if ($this->dir == 'rtl') + { + $this->size += 1; + $this->tsize += 1; + } + } - if (count($y) > 1) - { - if (isset($y[$i+1])) - { - // Draw lines - if ($this->type == 4) - { - imageline($this->img, $x[$i], $y[$i], $x[$i+1], $y[$i+1], $this->color['line']); - imageline($this->img, $x[$i], ($y[$i]+1), $x[$i+1], ($y[$i+1]+1), $this->color['line']); - } - imagefilledrectangle($this->img, $x[$i]-1, $y[$i]-1, $x[$i]+2, $y[$i]+2, $this->color['line']); - } - else - { // Draw last dot - imagefilledrectangle($this->img, $x[$i-1]-1, $y[$i-1]-1, $x[$i-1]+2, $y[$i-1]+2, $this->color['line']); - } - } + function setDirection($dir='ltr') + { + $this->dir = $dir; + } + + function setLanguage($lang='en') + { + $this->lang = $lang; + } + + function setStream($stream = 'svg') + { + $this->stream = $stream; + if ($this->stream == 'png') + { + $this->tsize = 12; + $this->size = 9; + } + } - } - } + function setLabels($labels) + { + $this->labels = $labels; + } + function addSerie($label, $data, $type = false, $fill = false) + { + if ($label == false) + $label = "Serie $this->num_series"; + $this->series[$this->num_series]['label'] = $label; + $this->series[$this->num_series]['data'] = $data; + $this->series[$this->num_series]['type'] = $type; + $this->series[$this->num_series]['fill'] = $fill; + $this->num_series++; + } - /** - * Draw graphic: PIE or DONUT - */ - else if (preg_match("/^(5|6)$/", $this->type)) - { - $center_x = ($this->graphic_area_x1 + $this->graphic_area_x2) / 2; - $center_y = ($this->graphic_area_y1 + $this->graphic_area_y2) / 2; - $width = $this->graphic_area_width; - $height = $this->graphic_area_height; - $start = 0; - $sizes = array(); + function setXTitle($xtitle) + { + $this->axis_x = $xtitle; + } - foreach ($this->x as $i => $parameter) - { - $size = $this->y[$i] * 360 / $this->sum_total; - $size = round2($size, 0); - $sizes[] = $size; - $start += $size; - } - $start = 270; + function setYTitle($ytitle) + { + $this->axis_y = $ytitle; + } - // Draw PIE - if ($this->type == 5) - { - // Draw shadow - foreach ($sizes as $i => $size) - { - $num_color = $i + 1; - while ($num_color > 7) - { - $num_color -= 5; - } - $color = 'arc_' . $num_color . '_shadow'; + function setTitle($title) + { + $this->title = $title; + } - for ($i = $this->h3d; $i >= 0; $i--) - { - if ($size >= 1) - imagefilledarc($this->img, $center_x, ($center_y+$i), $width, $height, $start, ($start+$size), $this->color[$color], IMG_ARC_NOFILL); - } - $start += $size; - } + function setDTitle($dtitle) + { + $this->donut_title = $dtitle; + } - $start = 270; + function setValues($values = false) + { + $this->set_values = $values; + } - // Draw pieces - foreach ($sizes as $i => $size) - { - $num_color = $i + 1; - while ($num_color > 7) - { - $num_color -= 5; - } - $color = 'arc_' . $num_color; - if ($size >= 1) - imagefilledarc($this->img, $center_x, $center_y, ($width+2), ($height+2), $start, ($start+$size), $this->color[$color], IMG_ARC_EDGED); - $start += $size; - } - } + function setOutDir($dir) + { + $this->out_dir = $dir; + } - // Draw DONUT - else if ($this->type == 6) - { - foreach ($sizes as $i => $size) - { - $num_color = $i + 1; - while ($num_color > 7) - { - $num_color -= 5; - } - $color = 'arc_' . $num_color; - $color_shadow = 'arc_' . $num_color . '_shadow'; - if ($size >= 1) - imagefilledarc($this->img, $center_x, $center_y, $width, $height, $start, ($start+$size), $this->color[$color], IMG_ARC_PIE); - $start += $size; - } - imagefilledarc($this->img, $center_x, $center_y, 100, 100, 0, 360, $this->color['background'], IMG_ARC_PIE); - imagearc($this->img, $center_x, $center_y, 100, 100, 0, 360, $this->color['bg_legend']); - imagearc($this->img, $center_x, $center_y, ($width+1), ($height+1), 0, 360, $this->color['bg_legend']); - } - } + function isEmpty() + { + return (!isset($this->series[0]['data']) || count($this->series[0]['data']) == 0); + } + function display($save="") + { + $this->encoding = strtoupper($_SESSION['language']->encoding); + $this->title_height = (!empty($this->title)) ? $this->tsize + 15 : 0; + $this->bar_width = ($this->type == 1) ? 20 : 15; + $this->space_between_dots = 40; + $this->higher_value = 0; + $this->higher_value_str = 0; + $this->graphic_area_width = 0; + $this->graphic_area_height = 0; + $this->graphic_area_x1 = 30; + $this->graphic_area_y1 = 30 + $this->title_height; + $this->num_labels = count($this->labels); + $this->max_legend_str = ""; + $this->legend_box_height += (14 * $this->num_labels); + for ($i = 0; $i < $this->num_labels; $i++) + { + if (strlen($this->labels[$i]) > strlen($this->max_label)) + $this->max_label = $this->labels[$i]; + } + for ($j = 0; $j < $this->num_series; $j++) + { + $this->sum_total[$j] = 0; + if (strlen($this->series[$j]['label']) > strlen($this->max_legend_str)) + $this->max_legend_str = $this->series[$j]['label']; + for ($i = 0; $i < $this->num_labels; $i++) + { + if ($this->series[$j]['data'][$i] > $this->max_value) + $this->max_value = $this->series[$j]['data'][$i]; + $this->sum_total[$j] += $this->series[$j]['data'][$i]; + } + } + $this->max_value = number_format(round($this->max_value, 1), 1, ".", ""); + if ($this->num_series) + $this->legend_exists = true; + if ($this->type == 8 && $this->num_labels < 4) + $this->type = 4; + $this->calculate_higher_value(); + $this->calculate_width(); + $this->calculate_height(); + if ($this->type == 9) + { + $this->draw_table(); + return; + } + $this->create_graphic($save); + } - if ($this->credits == true) - { - $this->draw_credits(); - } - if ($save != "") - imagepng($this->img, $save); + function create_graphic($save="") + { + if ($this->stream == 'svg') + { + $this->svg = new SVG($this->width, $this->height, $this->dir, $this->lang); + $this->svg->style("svg{font-family:{$this->font};background-color:inherit}.tips:hover{cursor:pointer;opacity:0.8;}"); + $this->load_color_palette($this->type); + } else { - header('Content-type: image/png'); - imagepng($this->img); - } - imagedestroy($this->img); - } - - function calculate_width() - { - switch ($this->type) - { - // Vertical bars - case 1: - $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->tsize) + 25) : 0; - $this->graphic_area_width = ($this->space_between_bars * $this->total_parameters) + 30; - $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size); - $this->width += $this->graphic_area_x1 + 20; - $this->width += ($this->legend_exists == true) ? 50 : ((7 * strlen($this->axis_x)) + 10); - break; - - // Horizontal bars - case 2: - $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0; - $this->graphic_area_width = ($this->string_width($this->higher_value_str, $this->size) > 50) ? (5 * ($this->string_width($this->higher_value_str, $this->size)) * 0.85) : 200; - $this->graphic_area_x1 += 7 * strlen($this->biggest_x); - $this->width += ($this->legend_exists == true) ? 60 : ((7 * strlen($this->axis_y)) + 30); - $this->width += $this->graphic_area_x1; - break; - - // Dots - case 3: - $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0; - $this->graphic_area_width = ($this->space_between_dots * $this->total_parameters) - 10; - $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size); - $this->width += $this->graphic_area_x1 + 20; - $this->width += ($this->legend_exists == true) ? 40 : ((7 * strlen($this->axis_x)) + 30); - break; - - // Lines - case 4: - $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->biggest_graphic_name, $this->size) + 25) : 0; - $this->graphic_area_width = ($this->space_between_dots * $this->total_parameters) - 10; - $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size); - $this->width += $this->graphic_area_x1 + 20; - $this->width += ($this->legend_exists == true) ? 40 : ((7 * strlen($this->axis_x)) + 30); - break; - - // Pie - case 5: - $this->legend_box_width = $this->string_width($this->biggest_x, $this->size) + 85; - $this->graphic_area_width = 200; - $this->width += 90; - break; - - // Donut - case 6: - $this->legend_box_width = $this->string_width($this->biggest_x, $this->size) + 85; - $this->graphic_area_width = 180; - $this->width += 90; - break; - } - - $this->graphic_area_width = max($this->graphic_area_width, $this->string_width($this->title, $this->size)); - $this->width += $this->graphic_area_width; - $this->width += $this->legend_box_width; - - - $this->graphic_area_x2 = $this->graphic_area_x1 + $this->graphic_area_width; - $this->legend_box_x1 = $this->graphic_area_x2 + 40; - $this->legend_box_x2 = $this->legend_box_x1 + $this->legend_box_width; - } - - function calculate_height() - { - switch ($this->type) - { - // Vertical bars - case 1: - $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0; - $this->graphic_area_height = 150; - $this->height += 65; - break; - - // Horizontal bars - case 2: - $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0; - $this->graphic_area_height = ($this->space_between_bars * $this->total_parameters) + 10; - $this->height += 65; - break; - - // Dots - case 3: - $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0; - $this->graphic_area_height = 150; - $this->height += 65; - break; - - // Lines - case 4: - $this->legend_box_height = ($this->graphic_2_exists == true) ? 40 : 0; - $this->graphic_area_height = 150; - $this->height += 65; - break; - - // Pie - case 5: - $this->legend_box_height = (!empty($this->axis_x)) ? 30 : 5; - $this->legend_box_height += (14 * $this->total_parameters); - $this->graphic_area_height = 150; - $this->height += 50; - break; - - // Donut - case 6: - $this->legend_box_height = (!empty($this->axis_x)) ? 30 : 5; - $this->legend_box_height += (14 * $this->total_parameters); - $this->graphic_area_height = 180; - $this->height += 50; - break; - } - - $this->height += $this->height_title; - $this->height += ($this->legend_box_height > $this->graphic_area_height) ? ($this->legend_box_height - $this->graphic_area_height) : 0; - $this->height += $this->graphic_area_height; - - $this->graphic_area_y2 = $this->graphic_area_y1 + $this->graphic_area_height; - $this->legend_box_y1 = $this->graphic_area_y1 + 10; - $this->legend_box_y2 = $this->legend_box_y1 + $this->legend_box_height; - } - - function draw_legend() - { - $x1 = $this->legend_box_x1; - $y1 = $this->legend_box_y1; - $x2 = $this->legend_box_x2; - $y2 = $this->legend_box_y2; - - imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bg_legend']); - - $x = $x1 + 5; - $y = $y1 + 5; - - - // Draw legend values for VERTICAL BARS, HORIZONTAL BARS, DOTS and LINES - if (preg_match("/^(1|2|3|4)$/", $this->type)) - { - $color_1 = (preg_match("/^(1|2)$/", $this->type)) ? $this->color['bars'] : $this->color['line']; - $color_2 = (preg_match("/^(1|2)$/", $this->type)) ? $this->color['bars_2'] : $this->color['line_2']; - - imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $color_1); - imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']); - $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $this->graphic_1, $this->color['axis_values']); - $y += 20; - imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $color_2); - imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']); - $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $this->graphic_2, $this->color['axis_values']); - } - - // Draw legend values for PIE or DONUT - else if (preg_match("/^(5|6)$/", $this->type)) - { - if (!empty($this->axis_x)) - { - $this->_imagestring($this->img, $this->size, ((($x1+$x2)/2) - (strlen($this->axis_x)*7/2)), $y, - $this->axis_x." (".$this->graphic_1.")", $this->color['title']); - $y += 25; - } - - $num = 1; - - foreach ($this->x as $i => $parameter) - { - while ($num > 7) - { - $num -= 5; - } - $color = 'arc_' . $num; - - $percent = number_format(round(($this->y[$i] * 100 / $this->sum_total), 2), 2, ".", "") . ' %'; - $less = (strlen($percent) * 7); - - if ($num != 1) - { - imageline($this->img, ($x1+15), ($y-2), ($x2-5), ($y-2), $this->color['bg_lines']); - } - imagefilledrectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color[$color]); - imagerectangle($this->img, $x, $y, ($x+10), ($y+10), $this->color['title']); - $this->_imagestring($this->img, $this->size, ($x+15), ($y-2), $parameter, $this->color['axis_values']); - $this->_imagestring($this->img, $this->size, ($x2-$less), ($y-2), $percent, $this->color['axis_values']); - $y += 14; - $num++; - } - } - } - + $this->img = imagecreatetruecolor($this->width, $this->height); + $this->load_color_palette($this->type); + // Fill background + imagefill($this->img, 0, 0, $this->color['background']); + } + // Draw title + if (!empty($this->title)) + { + if ($this->stream == 'svg') + { + $center = $this->width / 2; + $this->svg->text($center, 20, $this->title, $this->tsize, $this->color['title'], false, "middle"); + } + else + { + $center = ($this->width / 2) - ($this->string_width($this->title, $this->tsize) / 2); + $this->_imagestring($this->img, $this->tsize, $center, 10, $this->title, $this->color['title']); + } + } + // Draw axis and background lines for "vertical bars", "dots", "lines" and "splines" + if (preg_match("/^(1|3|4|8)$/", $this->type)) + { + if ($this->legend_exists == true) + { + $this->draw_legend(); + } + $higher_value_y = $this->graphic_area_y1 + (0.1 * $this->graphic_area_height); + $this->higher_value_size = 0.9 * $this->graphic_area_height; + $less = 7 * strlen($this->higher_value_str); + if ($this->stream == 'svg') + { + $this->svg->line($this->graphic_area_x1, $higher_value_y, $this->graphic_area_x2, $higher_value_y, $this->color['bg_lines']); + $this->svg->text($this->graphic_area_x1-$less-7, $higher_value_y, $this->higher_value_str, $this->size, $this->color['axis_values'], false, $this->align); + } + else + { + imageline($this->img, $this->graphic_area_x1, $higher_value_y, $this->graphic_area_x2, $higher_value_y, $this->color['bg_lines']); + $this->_imagestring($this->img, $this->size, ($this->graphic_area_x1-$less-7), ($higher_value_y-7), $this->higher_value_str, $this->color['axis_values']); + } + for ($i = 1; $i < 10; $i++) + { + $dec_y = $i * ($this->higher_value_size / 10); + $x1 = $this->graphic_area_x1; + $y1 = $this->graphic_area_y2 - $dec_y; + $x2 = $this->graphic_area_x2; + $y2 = $y1; + if ($this->stream == 'svg') + $this->svg->line($x1, $y1, $x2, $y2, $this->color['bg_lines']); + else + imageline($this->img, $x1, $y1, $x2, $y2, $this->color['bg_lines']); + if ($i % 2 == 0) + { + $value = $this->number_formated($this->higher_value * $i / 10, $this->dec1); + $len1 = strlen($this->higher_value_str); + $len2 = strlen($value); + if ($len2 < $len1) + $len2 += ($len1-$len2-1); + $less = 7 * $len2; + if ($this->stream == 'svg') + $this->svg->text($x1-$less-7, ($y1), $value, $this->size, $this->color['axis_values'], false, $this->align); + else + $this->_imagestring($this->img, $this->size, ($x1-$less-7), ($y2-7), $value, $this->color['axis_values']); + } + } + // Axis X + if ($this->stream == 'svg') + { + $this->svg->text($this->graphic_area_x2+10, $this->graphic_area_y2+10, $this->axis_x, $this->size, $this->color['title'], false, $this->align); + $this->svg->line($this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']); + } + else + { + $this->_imagestring($this->img, $this->size, $this->graphic_area_x2+20, $this->graphic_area_y2+3, $this->axis_x, $this->color['title']); + imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']); + } + // Axis Y + if ($this->stream == 'svg') + { + $lex = $this->dir == 'rtl' ? 35 : 25; + $this->svg->text($lex, $this->graphic_area_y1-10, $this->axis_y, $this->size, $this->color['title'], false, $this->align); + $this->svg->line($this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']); + } + else + { + $this->_imagestring($this->img, $this->size, 10, $this->graphic_area_y1-20, $this->axis_y, $this->color['title']); + imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']); + } + } + // Draw axis and background lines for "horizontal bars" + else if ($this->type == 2) + { + if ($this->legend_exists == true) + { + $this->draw_legend(); + } + $this->higher_value_size = 0.9 * $this->graphic_area_width; + if ($this->stream == 'svg') + { + $this->svg->line(($this->graphic_area_x1+$this->higher_value_size), $this->graphic_area_y1, ($this->graphic_area_x1+$this->higher_value_size), $this->graphic_area_y2, $this->color['bg_lines']); + $this->svg->text((($this->graphic_area_x1+$this->higher_value_size) - ($this->string_width($this->higher_value, $this->size)/2)), ($this->graphic_area_y2 + 20), $this->higher_value_str, $this->size, $this->color['axis_values'], false, $this->align); + } + else + { + imageline($this->img, ($this->graphic_area_x1+$this->higher_value_size), $this->graphic_area_y1, ($this->graphic_area_x1+$this->higher_value_size), $this->graphic_area_y2, $this->color['bg_lines']); + $this->_imagestring($this->img, $this->size, (($this->graphic_area_x1+$this->higher_value_size) - ($this->string_width($this->higher_value, $this->size)/2)), ($this->graphic_area_y2+2), $this->higher_value_str, $this->color['axis_values']); + } + for ($i = 1, $alt = 15; $i < 10; $i++) + { + $dec_x = number_format(round($i * ($this->higher_value_size / 10), 1), 1, ".", ""); + if ($this->stream == 'svg') + $this->svg->line(($this->graphic_area_x1+$dec_x), $this->graphic_area_y1, ($this->graphic_area_x1+$dec_x), $this->color['bg_lines']); + else + imageline($this->img, ($this->graphic_area_x1+$dec_x), $this->graphic_area_y1, ($this->graphic_area_x1+$dec_x), $this->graphic_area_y2, $this->color['bg_lines']); + if ($i % 2 == 0) + { + $alt = (strlen($this->max_value) > 4 && $alt != 15) ? 15 : 2; + $value = $this->number_formated($this->higher_value * $i / 10, $this->dec1); + if ($this->stream == 'svg') + $this->svg->text((($this->graphic_area_x1+$dec_x) - ($this->string_width($this->higher_value, $this->size)/2)), ($this->graphic_area_y2+$alt+18), $value, $this->size, $this->color['axis_values'], false, $this->align); + else + $this->_imagestring($this->img, $this->size, (($this->graphic_area_x1+$dec_x) - ($this->string_width($this->higher_value, $this->size)/2)), ($this->graphic_area_y2), $value, $this->color['axis_values'], $alt); + } + } + // Axis X + if ($this->stream == 'svg') + { + $this->svg->text(($this->graphic_area_x2+10), ($this->graphic_area_y2+10), $this->axis_y, $this->size, $this->color['title'], false, $this->align); + $this->svg->line($this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']); + } + else + { + $this->_imagestring($this->img, $this->size, ($this->graphic_area_x2+10), ($this->graphic_area_y2+3), $this->axis_y, $this->color['title']); + imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y2, $this->graphic_area_x2, $this->graphic_area_y2, $this->color['axis_line']); + } + // Axis Y + if ($this->stream == 'svg') + { + $this->svg->text(20, ($this->graphic_area_y1-10), $this->axis_x, $this->size, $this->color['title'], false, $this->align); + $this->svg->line($this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']); + } + else + { + $this->_imagestring($this->img, $this->size, 20, ($this->graphic_area_y1-20), $this->axis_x, $this->color['title']); + imageline($this->img, $this->graphic_area_x1, $this->graphic_area_y1, $this->graphic_area_x1, $this->graphic_area_y2, $this->color['axis_line']); + } + } + else if (preg_match("/^(5|6|7)$/", $this->type)) + { + // Draw legend box for "pie", "donut" or "half donut" + $this->draw_legend(); + } + $average_width = $this->graphic_area_width / $this->num_labels; + $biggest_width = $this->string_width($this->max_label, $this->size) + 10; + if ($biggest_width > $average_width) + $this->angle = -20; + else + $this->angle = 0; + /** + * Draw graphic: VERTICAL BARS + */ + if ($this->type == 1) + { + $this->draw_vertical_bars(); + } + /** + * Draw graphic: HORIZONTAL BARS + */ + else if ($this->type == 2) + { + $this->draw_horizontal_bars(); + } + /** + * Draw graphic: DOTS. LINE or SPLINE + */ + else if (preg_match("/^(3|4|8)$/", $this->type)) + { + $this->draw_lines(); + if ($this->stream != 'svg' && $this->type == 8) + $this->draw_splines(); + } + /** + * Draw graphic: PIE, DONUT or HALF DONUT + */ + else if (preg_match("/^(5|6|7)$/", $this->type)) + { + // Draw PIE, DONUT OR HALF DONUT + $this->draw_pie(); + } + if ($this->stream == 'svg') + { + $this->svg->close(); + return $this->svg->draw(); + //$this->out_dir = company_path(). '/pdf_files/'; + //$filename = $this->out_dir.uniqid().".svg"; + //$this->svg->save($filename); + //echo "$this->title"; + } + else + { + $filename = $this->out_dir.uniqid().".".$this->stream; + if ($this->stream == 'png') + imagepng($this->img, $save != "" ? $save : $filename); + elseif ($this->stream == 'jpg') + imagejpeg($this->img, $save != "" ? $save : $filename); + elseif ($this->stream == 'gif') + imagegif($this->img, $save != "" ? $save : $filename); + echo "$this->title"; + /* + header('Content-type: image/png'); + imagepng($this->img, NULL, 5); + */ + imagedestroy($this->img); + } + } - function string_width($string, $size) - { - $single_width = $size + 4; - if ($this->encoding == "UTF-8") - $width = mb_strlen($string, "UTF-8"); - else - $width = strlen($string); - return $single_width * $width; - } + function draw_vertical_bars() + { + $x = $this->graphic_area_x1 + 10; + $oldx = $oldy = 0; + $p = array(); + foreach ($this->labels as $i => $parameter) + { + for ($j = 0; $j < $this->num_series; $j++) + { + $size = round($this->series[$j]['data'][$i] * $this->higher_value_size / $this->higher_value); + $x1 = $x; + $y1 = ($this->graphic_area_y2 - $size) + 1; + $x2 = $this->bar_width; + $y2 = $this->graphic_area_y2; + if ($this->series[$j]['type'] == 8 && $this->num_labels < 4) + $this->series[$j]['type'] = 4; + if ($this->stream == 'svg') + { + if ($this->series[$j]['type'] == 4 || $this->series[$j]['type'] == 8) // line + { + if (!isset($this->color['line'][0])) + $this->load_color_palette($this->series[$j]['type']); + if ($i == $this->num_labels - 1) + { + $dx = ($this->num_series-1) * ($this->bar_width + 10); + $xx = $this->graphic_area_x1 + $dx; + foreach($this->series[$j]['data'] as $i => $v) + { + $size = round($this->series[$j]['data'][$i] * $this->higher_value_size / $this->higher_value); + $y = $this->graphic_area_y2 - $size; + $p[$i][0] = $xx; + $p[$i][1] = $y; + $xx += $dx; + } + $path = "M ".$p[0][0].",".$p[0][1]; + foreach ($p as $ix => $y) + { + $this->svg->circle($p[$ix][0], $p[$ix][1], 2.5, $this->color['line'][$j], 2, $this->color['line'][$j], "class=\"tips\"", $this->series[$j]['label'].": ".number_format($this->series[$j]['data'][$ix], 2)); + if ($ix != 0) + { + if ($this->series[$j]['type'] == 4) // normal line + $path .= " L".$p[$ix][0].",".$p[$ix][1]; + elseif ($this->series[$j]['type'] == 8) // spline + $path .= $this->_splineCommand($p[$ix], $ix, $p); + } + } + if ($this->series[$j]['fill'] == true) + { + $fpath = $path; + $fpath .= " L ".($p[$ix][0]+1).",".($this->graphic_area_y2-2)." L ".$p[0][0].",".($this->graphic_area_y2-2)." L ".$p[0][0].",".$p[0][1]; + $this->svg->path($fpath, $this->color['line_light'][$j], 1, $this->color['line_light'][$j]); + } + $this->svg->path($path, $this->color['line'][$j], 3, "none"); + } + } + else + { + $this->svg->rect( $x1, $y1, $x2, $y2-$y1, $this->color['bars'][$j], 1, $this->color['bars'][$j], "class=\"tips\"", $this->series[$j]['label'].": ".number_format($this->series[$j]['data'][$i], 2)); + $x += $this->bar_width + 5; + } + } + else + { + if ($this->series[$j]['type'] == 4) // line + { + if (!isset($this->color['line'][0])) + $this->load_color_palette($this->series[$j]['type']); + if ($i > 0) + { + $this->_imageline($this->img, $oldx, $oldy, $x1, $y1, $this->color['line'][$j], 3); + if ($this->series[$j]['fill'] == true) + { + $pt = array($oldx, $oldy+3, $x1, $y1 + 3, $x1, $this->graphic_area_y2-2, $oldx, $this->graphic_area_y2-2, $oldx, $oldy+4); + imagefilledpolygon($this->img, $pt, 5, $this->color['line_light'][$j]); + } + } + imagefilledrectangle($this->img, $x1-2, $y1-2, $x1+2, $y1+2, $this->color['line'][$j]); + $oldx = $x1; + $oldy = $y1; + $x += 5; + } + elseif ($this->series[$j]['type'] == 8) // spline + { + if (!isset($this->color['line'][0])) + $this->load_color_palette($this->series[$j]['type']); + imagefilledrectangle($this->img, $x1-2, $y1-2, $x1+2, $y1+2, $this->color['line'][$j]); + $p[$x1] = $this->graphic_area_y2 - $size; + if ($i == $this->num_labels - 1) + { + $r = $this->imageSpline($p); + if ($r == false) + break; + while (list ($xx, $yy) = each($r)) + { + imagefilledellipse($this->img, round($xx), round($yy)+1, 3, 3, $this->color['line'][$j]); + if ($this->series[$j]['fill'] == true) + { + $this->_imageline($this->img, round($xx), round($yy+4), round($xx), $this->graphic_area_y2-2, $this->color['line_light'][$j], 3); + } + } + } + $x += 5; + } + else + { + $xx2 = $x2 + $x1; + imageline($this->img, ($x1+1), ($y1-1), $xx2, ($y1-1), $this->color['bars'][$j]); + imageline($this->img, ($xx2+1), ($y1-1), ($xx2+1), $y2, $this->color['bars'][$j]); + imageline($this->img, ($xx2+2), ($y1-1), ($xx2+2), $y2, $this->color['bars'][$j]); + imagefilledrectangle($this->img, $x1, $y1, $xx2, $y2, $this->color['bars'][$j]); + $x += $this->bar_width + 5; + } + } + if ($j == 0) + { + if ($this->stream == 'svg') + { + $lex = $this->angle == 0 ? $x1 + 40 : $x1+20; + $al = $this->dir == 'rtl' ? "start" : "end"; + $this->svg->text($lex, ($y2+15), $parameter, $this->size, $this->color['axis_values'], false, $al, $this->angle); + } + else + { + $this->_imagestring($this->img, $this->size, $x1, ($y2+2), $parameter, $this->color['axis_values'], 0, $this->angle); + } + } + } + $x += 10; + } + } - function string_height($size) - { - if ($size <= 1) - { - $height = 8; - } - else if ($size <= 3) - { - $height = 12; - } - else if ($size >= 4) - { - $height = 14; - } - return $height; - } + function draw_horizontal_bars() + { + $y = 10; + foreach ($this->labels as $i => $parameter) + { + for ($j = 0; $j < $this->num_series; $j++) + { + $size = round($this->series[$j]['data'][$i] / $this->higher_value * $this->higher_value_size); + $x1 = $this->graphic_area_x1 + 1; + $y1 = $this->graphic_area_y1 + $y; + $x2 = $x1 + $size; + $y2 = $y1 + $this->bar_width; + if ($this->stream == 'svg') + { + $this->svg->rect($x1, $y1, $x2-$x1, $y2-$y1, $this->color['bars'][$j], 1, $this->color['bars'][$j], "class=\"tips\"", $this->series[$j]['label'].": ".number_format($this->series[$j]['data'][$i], 2)); + $this->svg->text(($x2+10), ($y1+12), $this->number_formated($this->series[$j]['data'][$i], $this->dec2), $this->size, $this->color['bars'][$j], false, $this->align); + $y += $this->bar_width + 1; + } + else + { + $this->_imageline($this->img, ($x1), ($y2+1), $x2, ($y2+1), $this->color['bars'][$j], 3); + imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bars'][$j]); + $this->_imagestring($this->img, $this->size, ($x2+7), ($y1+2), $this->number_formated($this->series[$j]['data'][$i], $this->dec2), $this->color['bars'][$j]); + $y += $this->bar_width + 4; + } + } + if ($this->stream == 'svg') + { + $this->svg->text(20, ($y2-5), $parameter, $this->size, $this->color['axis_values'], false, $this->align); + $y += 8; + } + else + { + $this->_imagestring($this->img, $this->size, 20, ($y1-5), $parameter, $this->color['axis_values'], 0); + $y += 10; + } + } + } - function calculate_higher_value() - { - $digits = strlen(round($this->biggest_y)); - $interval = pow(10, ($digits-1)); - $this->higher_value = round(($this->biggest_y - ($this->biggest_y % $interval) + $interval), 1); - $this->higher_value_str = $this->number_formated($this->higher_value, $this->dec1); - } + function draw_lines() + { + for ($j = 0; $j < $this->num_series; $j++) + { + $x = $this->graphic_area_x1+1; + $oldx = $oldy = 0; + if ($this->type == 8 && $this->num_labels < 4) + $this->type = 4; + if ($this->stream == 'svg') + { + $p = array(); + foreach ($this->labels as $i => $parameter) + { + $size = round($this->series[$j]['data'][$i] * $this->higher_value_size / $this->higher_value); + $y = $this->graphic_area_y2 - $size; + $p[$i][0] = $x; + $p[$i][1] = $y; + if ($j == 0) + { + $lex = $this->angle == 0 ? $x + 30 : $x+10; + $al = $this->dir == 'rtl' ? "start" : "end"; + $this->svg->text($lex, ($this->graphic_area_y2+15), $parameter, $this->size, $this->color['axis_values'], false, $al, $this->angle); + } + $x += $this->space_between_dots; + } + $path = "M ".$p[0][0].",".$p[0][1]; + foreach ($p as $i => $y) + { + $this->svg->circle($p[$i][0], $p[$i][1], 2.5, $this->color['line'][$j], 3, $this->color['line'][$j], "class=\"tips\"", $this->series[$j]['label'].": ".number_format($this->series[$j]['data'][$i], 2)); + if ($i != 0) + { + if ($this->type == 4) // normal line + $path .= " L".$p[$i][0].",".$p[$i][1]; + elseif ($this->type == 8) // spline + $path .= $this->_splineCommand($p[$i], $i, $p); + } + } + if ($this->series[$j]['fill'] == true) + { + $fpath = $path; + $fpath .= " L ".($p[$i][0]+1).",".($this->graphic_area_y2-1)." L ".$p[0][0].",".($this->graphic_area_y2-1)." L ".$p[0][0].",".$p[0][1]; + $this->svg->path($fpath, $this->color['line_light'][$j], 1, $this->color['line_light'][$j]); + } + $this->svg->path($path, $this->color['line'][$j], 3, "none"); + $x += $this->space_between_dots; + } + else + { + foreach ($this->labels as $i => $parameter) + { + $size = round($this->series[$j]['data'][$i] * $this->higher_value_size / $this->higher_value); + $y = $this->graphic_area_y2 - $size; + + if ($this->type == 4 && $i > 0) // lINES + { + $this->_imageline($this->img, $oldx, $oldy, $x, $y, $this->color['line'][$j], 3); + if ($this->series[$j]['fill'] == true) + { + $pt = array($oldx, $oldy+3, $x, $y + 3, $x, $this->graphic_area_y2-2, $oldx, $this->graphic_area_y2-2, $oldx, $oldy+4); + imagefilledpolygon($this->img, $pt, 5, $this->color['line_light'][$j]); + } + } + imagefilledrectangle($this->img, $x-2, $y-2, $x+2, $y+2, $this->color['line'][$j]); + $oldx = $x; + $oldy = $y; + if ($j == 0) + $this->_imagestring($this->img, $this->size, $oldx, ($this->graphic_area_y2+2), $parameter, $this->color['axis_values'], 0, $this->angle); + $x += $this->space_between_dots; + } + } + } + } - function number_formated($number, $dec_size = 1) - { - if ($this->latin_notation == true) - return number_format(round($number, $dec_size), $dec_size, ",", "."); - return number_format(round($number, $dec_size), $dec_size, ".", ","); - } + function draw_splines() + { + for ($j = 0; $j < $this->num_series; $j++) + { + $n = $this->graphic_area_x1+1; + foreach ($this->labels as $i => $parameter) + { + $size = round($this->series[$j]['data'][$i] * $this->higher_value_size / $this->higher_value); + $y = $this->graphic_area_y2 - $size; + $p[$n] = $y; + $n += $this->space_between_dots; + } + $r = $this->imageSpline($p); + reset($r); + $oldx = key($r); + $oldy = current($r); + foreach ($r as $x => $y) + { + imagefilledellipse($this->img, round($x), round($y)+1, 3, 3, $this->color['line'][$j]); - function number_float($number) - { - if ($this->latin_notation == true) - $number = str_replace(".", "", $number); - return (float)str_replace(",", "", $number); - } + if ($this->series[$j]['fill'] == true) + { + $this->_imageline($this->img, round($x), round($y+4), round($x), $this->graphic_area_y2-2, $this->color['line_light'][$j], 1); + } + } + } + } + function imageSpline($p, $step = 1, $minx = -1, $maxx = -1) + { + $splines = array(); + if (count($p) < 4) + return false; + $cx = $cy = $p1 = array(); + ksort($p); + foreach ($p as $x => $y) + { + $cx[] = $x; + $cy[] = $y; + } + if ($minx == -1) + $minx = min($cx); + if ($maxx == -1) + $maxx = max($cx); + $n = count($cx); + for ($i = 0; $i < $n; ++$i) + { + $splines[$i]['x'] = $cx[$i]; + $splines[$i]['a'] = $cy[$i]; + } + $splines[0]['c'] = $splines[$n - 1]['c'] = 0; + $alpha[0] = $beta[0] = 0; + for ($i = 1; $i < $n - 1; ++$i) + { + $h_i = $cx[$i] - $cx[$i - 1]; + $h_i1 = $cx[$i + 1] - $cx[$i]; + $A = $h_i; + $C = 2.0 * ($h_i + $h_i1); + $B = $h_i1; + $F = 6.0 * (($cy[$i + 1] - $cy[$i]) / $h_i1 - ($cy[$i] - $cy[$i - 1]) / $h_i); + $z = ($A * $alpha[$i - 1] + $C); + $alpha[$i] = - $B / $z; + $beta[$i] = ($F - $A * $beta[$i - 1]) / $z; + } + for ($i = $n - 2; $i > 0; --$i) + $splines[$i]['c'] = $alpha[$i] * $splines[$i + 1]['c'] + $beta[$i]; + for ($i = $n - 1; $i > 0; --$i) + { + $h_i = $cx[$i] - $cx[$i - 1]; + $splines[$i]['d'] = ($splines[$i]['c'] - $splines[$i - 1]['c']) / $h_i; + $splines[$i]['b'] = $h_i * (2.0 * $splines[$i]['c'] + $splines[$i - 1]['c']) / 6.0 + ($cy[$i] - $cy[$i - 1]) / $h_i; + } + for ($x = $minx; $x <= $maxx; $x += $step) + { + $n = count($splines); + if ($x <= $splines[0]['x']) { + $s = $splines[1]; + } else { + if ($x >= $splines[$n - 1]['x']) { + $s = $splines[$n - 1]; + } else { + $i = 0; + $j = $n - 1; + while ($i + 1 < $j) { + $k = $i + ($j - $i) / 2; + if ($x <= $splines[$k]['x']) { + $j = $k; + } else { + $i = $k; + } + } + $s = $splines[$j]; + } + } + $dx = ($x - $s['x']); + $p1[$x] = $s['a'] + ($s['b'] + ($s['c'] / 2.0 + $s['d'] * $dx / 6.0) * $dx) * $dx; + } + return $p1; + } - function draw_credits() - { - $this->_imagestring($this->img, $this->size - 2, ($this->width-120), ($this->height-10), "Powered by Carlos Reche", $this->color['title']); - } + function draw_pie() + { + $n = count(self::$palette); + if ($this->stream == 'svg') + { + $cx = ($this->graphic_area_x1 + $this->graphic_area_x2) / 2; + $cy = ($this->graphic_area_y1 + $this->graphic_area_y2) / 2; + $width = $this->graphic_area_width; + $height = $this->graphic_area_height; + if ($this->sum_total[0] == 0) + $this->sum_total[0] = 1; + $r = $cx * 0.7; + $rc = $this->type == 5 ? 0.01 : $r - 25; + $d = $this->type == 7 ? 180 : 360; // half donut or all + $area = $d / $this->sum_total[0]; + $start = $this->type == 7 ? 180 : 90; + $rad = pi() / 180.; + $out=''; + $gap=0.01; + $ang1=0; // start angle + foreach ($this->labels as $i => $num) + { + $pct[$i] = round($this->series[0]['data'][$i] / $this->sum_total[0] * 100, 1); + $dang = $this->series[0]['data'][$i] * $area; // delta angle + $laf = $dang > 180 ? 1 : 0; // Large Arc Flag + $ang2 = $ang1 + $dang; // second angle + $a = ($ang1 - $start) * $rad + asin($gap / $rc); + $p1 = sprintf('%0.2f,%0.2f', $cx + $rc * cos($a), $cy + $rc * sin($a)); + $a = ($ang1 - $start) * $rad + asin($gap / $r); + $p2 = sprintf('%0.2f,%0.2f', $cx + $r * cos($a), $cy + $r * sin($a)); + $a = ($ang2 - $start) * $rad - asin($gap / $r); + $p3 = sprintf('%0.2f,%0.2f', $cx + $r * cos($a), $cy + $r * sin($a)); + $a = ($ang2 - $start) * $rad - asin($gap / $rc); + $p4 = sprintf('%0.2f,%0.2f', $cx + $rc * cos($a), $cy + $rc * sin($a)); + $a = ($ang1 - $start) * $rad + asin($gap / $rc); + $p5 = sprintf('%0.2f,%0.2f', $cx + $rc * cos($a), $cy + $rc * sin($a)); + $this->svg->path("M$p1 L$p2 A$r,$r 0 $laf,1 $p3 L$p4 A$rc,$rc 0 $laf,0 $p5", $this->color[$i], 0, $this->color[$i], "class=\"tips\"", "$num: ".number_format($pct[$i], 1)."%"); + $ang1=$ang2; + } + if (!empty($this->donut_title) && $this->type != 5) + { + // Display center text + if ($this->type == 6) + $cy += 5; + $this->svg->text($cx, $cy, $this->donut_title, $this->size, $this->color[0], "style=\"font-size:18px;font-weight:bold;\"", "middle"); + } + } + else + { + $start = 0; + $sizes = array(); + $degrees = $this->type == 7 ? 180 : 360; // half donut or all + foreach ($this->labels as $i => $parameter) + { + if ($this->sum_total[0] == 0) + $this->sum_total[0] = 1; + if ($this->series[0]['data'][$i] < 0) + $this->series[0]['data'][$i] = 0; + $size = $this->series[0]['data'][$i] * $degrees / $this->sum_total[0]; + $size = round($size, 0); + $sizes[] = $size; + $start += $size; + } + $center_x = ($this->graphic_area_x1 + $this->graphic_area_x2) / 2; + $center_y = ($this->graphic_area_y1 + $this->graphic_area_y2) / 2; + $width = $this->graphic_area_width; + $height = $this->graphic_area_height; + $start = $this->type == 7 ? 180 : 270; + // Draw pieces + foreach ($sizes as $i => $size) + { + $j = $i % $n; + $color = 'arc_' . $j; + if ($size >= 1) + imagefilledarc($this->img, $center_x, $center_y, $width, $height, $start, ($start+$size), $this->color[$color], IMG_ARC_PIE); + $start += $size; + } + if ($this->type != 5) // DONUTS + { + // 85 pixels width hole + $start = $this->type == 7 ? 180 : 0; + imagefilledarc($this->img, $center_x, $center_y, 85, 85, $start, 360, $this->color['background'], IMG_ARC_PIE); + imagearc($this->img, $center_x, $center_y, 85, 85, $start, 360, $this->color['bg_legend']); + imagearc($this->img, $center_x, $center_y, ($width+1), ($height+1), $start, 360, $this->color['bg_legend']); + if (!empty($this->donut_title)) + { + $plen = $this->string_width($this->donut_title, $this->size); + $x1 = $center_x - $plen / 2 - 6; + $co = $this->type == 7 ? 20 : 10; // HALF or ALL + $this->_imagestring($this->img, $this->size + 4, $x1, $center_y - $co, $this->donut_title, $this->color['arc_0'], 2, 0); + $this->_imagestring($this->img, $this->size + 4, $x1+1, $center_y - $co, $this->donut_title, $this->color['arc_0'], 2, 0); + } + } + } + } + function draw_table() + { + $cs = $this->num_labels + 1; + $html = "
\n"; // outer table + $tstyle = ($twidth != false) ? "style='width:$twidth;'" : ""; + echo "
"; } -function table_two() +function td($width=false) { - echo "\n"; -} + $style = ($width != false) ? "style='width:$width;'" : ""; + echo "\n"; +} function table_end() { echo "
\n"; } -function display_customer_topten() +function headers($labels) { - $pg = new graph(); + echo "
$label
"; - echo "$title"; - echo "
\n"; + if (!empty($this->title)) + $html .= "\n"; + $html .= ""; + for ($i = 0; $i < $this->num_labels; $i++) + $html .= ""; + $html .= "\n"; + for ($j = 0; $j < $this->num_series; $j++) + { + $html .= ""; + for ($i = 0; $i < $this->num_labels; $i++) + $html .= ""; + $html .= "\n"; + } + $html .= "

$this->title

#{$this->labels[$i]}
{$this->series[$j]['label']}".number_format($this->series[$j]['data'][$i], 0)."
\n"; + echo $html; + } - function load_color_palette() - { - switch ($this->skin) - { - // Office - case 1: - $this->color['title'] = imagecolorallocate($this->img, 40, 70, 130); - $this->color['background'] = imagecolorallocate($this->img, 255, 255, 255); - $this->color['axis_values'] = imagecolorallocate($this->img, 50, 50, 50); - $this->color['axis_line'] = imagecolorallocate($this->img, 100, 100, 100); - $this->color['bg_lines'] = imagecolorallocate($this->img, 220, 220, 220); - $this->color['bg_legend'] = imagecolorallocate($this->img, 255, 255, 255); + function calculate_width() + { + $this->legend_box_width = ($this->legend_exists == true) ? ($this->string_width($this->max_legend_str, $this->size) + 70) : 0; + switch ($this->type) + { + // Vertical bars or Table + case 1: + case 9: + $this->graphic_area_x1 += $this->string_width($this->higher_value_str, $this->size); + if (!empty($this->width)) + $this->graphic_area_width = $this->width - $this->graphic_area_x1 - 30 - $this->legend_box_width; + else + { + $gap_series = 10; + $gap_labels = 5; + $serie_width = 0; + for ($j = 0; $j < $this->num_series; $j++) + { + if ($this->series[$j]['type'] != 4 && $this->series[$j]['type'] != 8) + $serie_width += $this->bar_width; + $serie_width += $gap_labels; + } + $serie_width += $gap_series; + $this->graphic_area_width = $serie_width * $this->num_labels; + $this->width += $this->graphic_area_width; + $this->width += $this->graphic_area_x1; + $this->width += $this->legend_box_width; + } + break; + // Horizontal bars + case 2: + $this->graphic_area_x1 += $this->string_width($this->max_label, $this->size); + if (!empty($this->width)) + $this->graphic_area_width = $this->width - $this->graphic_area_x1 - 30 - $this->legend_box_width; + else + { + $this->graphic_area_width = ($this->string_width($this->higher_value_str, $this->size) > 50) ? (5 * ($this->string_width($this->higher_value_str, $this->size)) * 0.85) : 200; + $this->width += $this->graphic_area_x1; + $this->width += $this->graphic_area_width; + $this->width += $this->legend_box_width; + } + break; + // Dots + case 3: + // Lines + case 4: + // Splines + case 8: + $this->graphic_area_x1 += $this->string_width(($this->higher_value_str), $this->size); + if (!empty($this->width)) + $this->graphic_area_width = $this->width - $this->graphic_area_x1 - 30 - $this->legend_box_width; + else + { + $this->graphic_area_width = $this->space_between_dots * ($this->num_labels - 1) + 5; + $this->width += $this->graphic_area_width; + $this->width += $this->graphic_area_x1 + 30; + $this->width += $this->legend_box_width; + } + break; + // Pie + case 5: + // Donut + case 6: + // Half Donut + case 7: + $this->legend_box_width += 60; + if (!empty($this->width)) + $this->graphic_area_width = $this->width - $this->graphic_area_x1 - 30 - $this->legend_box_width; + else + { + $this->graphic_area_width = 150; + $this->width += $this->graphic_area_x1 +20; + $this->width += $this->legend_box_width; + $this->width += $this->graphic_area_width; + $this->width += 90; + } + break; + } + $this->graphic_area_width = max($this->graphic_area_width, $this->string_width($this->title, $this->size)); + $this->graphic_area_x2 = $this->graphic_area_x1 + $this->graphic_area_width; + $this->legend_box_x1 = $this->graphic_area_x2 + 20; + $this->legend_box_x2 = $this->legend_box_x1 + $this->legend_box_width; + } - if (preg_match("/^(1|2)$/", $this->type)) - { - $this->color['bars'] = imagecolorallocate($this->img, 100, 150, 200); - $this->color['bars_shadow'] = imagecolorallocate($this->img, 50, 100, 150); - $this->color['bars_2'] = imagecolorallocate($this->img, 200, 250, 150); - $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 120, 170, 70); - } - else if (preg_match("/^(3|4)$/", $this->type)) - { - $this->color['line'] = imagecolorallocate($this->img, 100, 150, 200); - $this->color['line_2'] = imagecolorallocate($this->img, 230, 100, 100); - } - else if (preg_match("/^(5|6)$/", $this->type)) - { - $this->color['arc_1'] = imagecolorallocate($this->img, 255, 150, 0); - $this->color['arc_2'] = imagecolorallocate($this->img, 150, 0, 255); - $this->color['arc_3'] = imagecolorallocate($this->img, 0, 255, 255); - $this->color['arc_4'] = imagecolorallocate($this->img, 255, 0, 0); - $this->color['arc_5'] = imagecolorallocate($this->img, 0, 255, 0); - $this->color['arc_6'] = imagecolorallocate($this->img, 0, 0, 255); - $this->color['arc_7'] = imagecolorallocate($this->img, 255, 255, 0); - $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 127, 75, 0); - $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 75, 0, 127); - $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 0, 127, 127); - $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 127, 0, 0); - $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 0, 127, 0); - $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 0, 0, 127); - $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 127, 127, 0); - } - break; + function calculate_height() + { + switch ($this->type) + { + // Vertical bars + case 1: + if (!empty($this->height)) + $this->graphic_area_height = $this->height - $this->title_height; + else + { + $this->graphic_area_height = 150; + $this->height += 65; + } + break; + // Horizontal bars + case 2: + if (!empty($this->height)) + $this->graphic_area_height = $this->height - $this->title_height; + else + { + $gap_labels = 12; + if ($this->stream != 'svg') + $gap_labels += 6; + $this->graphic_area_height = $this->num_series * $this->bar_width * $this->num_labels + $this->num_labels * $gap_labels; + $this->height += 65; + } + break; + // Dots + case 3: + // Lines + case 4: + // Spines + case 8: + if (!empty($this->height)) + $this->graphic_area_height = $this->height - $this->title_height; + else + { + $this->graphic_area_height = 150; + $this->height += 65; + } + break; + // Pie + case 5: + // Donut + case 6: + // Half Donut + case 7: + if (!empty($this->height)) + $this->graphic_area_height = $this->height - $this->title_height; + else + { + $this->graphic_area_height = 150; + $this->height += 65; + } + break; + } + //if ($this->type == 7) // Half Donut; + $this->graphic_area_y1 -= 10; + $this->legend_box_y1 = $this->graphic_area_y1; + $this->height += $this->graphic_area_height + 40; + $this->graphic_area_y2 = $this->graphic_area_y1 + $this->graphic_area_height; + $this->legend_box_y2 = $this->legend_box_y1 + $this->legend_box_height; + } - // Matrix - case 2: - $this->color['title'] = imagecolorallocate($this->img, 255, 255, 255); - $this->color['background'] = imagecolorallocate($this->img, 0, 0, 0); - $this->color['axis_values'] = imagecolorallocate($this->img, 0, 230, 0); - $this->color['axis_line'] = imagecolorallocate($this->img, 0, 200, 0); - $this->color['bg_lines'] = imagecolorallocate($this->img, 100, 100, 100); - $this->color['bg_legend'] = imagecolorallocate($this->img, 70, 70, 70); + function draw_legend() + { + $x1 = $this->legend_box_x1; + $y1 = $this->legend_box_y1; + $x2 = $this->legend_box_x2; + $y2 = $this->legend_box_y2; + if ($this->stream == 'svg') + $this->svg->rect($x1, $y1, $x2, $y2, $this->color['bg_legend']); + else + imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $this->color['bg_legend']); + $x = $x1 + 10; + $y = $y1; + // Draw legend values for VERTICAL BARS, HORIZONTAL BARS, DOTS, LINES AND SPLINES + if (preg_match("/^(1|2|3|4|8)$/", $this->type)) + { + for ($j = 0; $j < $this->num_series; $j++) + { + $color = (preg_match("/^(1|2)$/", $this->type)) ? $this->color['bars'][$j] : $this->color['line'][$j]; + if ($this->stream == 'svg') + { + $lex = $this->dir == 'rtl' ? $x1+$this->string_width($this->max_legend_str, $this->size)-20 : $x1-5; + $this->svg->circle($lex, $y-5, 6, "#fff", 1, $color); + //$this->svg->rect($lex, $y-10, 10, 10, "#fff", 1, $color); + $lex = $this->dir == 'rtl' ? $x-20 : $x-5; + $this->svg->text($lex, ($y-2), $this->series[$j]['label'], $this->size, $this->color['axis_values'], false, $this->align); + } + else + { + $lex = $this->dir == 'rtl' ? $x2-60 : $x-10; + imagefilledrectangle($this->img, $lex, $y, ($lex+10), ($y+10), $color); + imagerectangle($this->img, $lex, $y, ($lex+10), ($y+10), $this->color['title']); + $lex = $this->dir == 'rtl' ? $x-10 : $x+10; + $this->_imagestring($this->img, $this->size, $lex, ($y-2), $this->series[$j]['label'], $this->color['axis_values']); + } + $y += 20; + } + } + // Draw legend values for PIE, DONUT or HALF DONUT + else if (preg_match("/^(5|6|7)$/", $this->type)) + { + $n = count(self::$palette); + if ($this->sum_total[0] == 0) + return; + if (!empty($this->axis_x)) // Only first serie [0] + { + if ($this->stream == 'svg') + $this->svg->text(((($x1+$x2)/2) - (strlen($this->axis_x)*7/2)), $y, $this->axis_x." (".$this->series[0]['label'].")", $this->size, $this->color['title'], false, $this->align); + else + $this->_imagestring($this->img, $this->size, (($x1+$x2)/2 - strlen($this->axis_x)*7/2)+30, $y, + $this->axis_x."-".$this->series[0]['label'], $this->color['title']); + $y += 25; + } + foreach ($this->labels as $i => $parameter) + { + if ($this->set_values) + $text = number_format($this->series[0]['data'][$i]); + else + $text = number_format($this->series[0]['data'][$i] * 100 / $this->sum_total[0], 2) . ' %'; + if ($this->stream == 'svg') + { + $j = $i % $n; + $lex = $this->dir == 'rtl' ? $x2+60 : $x+5; + $this->svg->circle($lex, $y-5, 6, "#fff", 1, $this->color[$j]); + //$this->svg->rect($cx, $cy-10, 10, 10, "#fff", 1, $this->color[$j]); + // Display label text + $lex = $this->dir == 'rtl' ? $x2-100 : $x+15; + $this->svg->text($lex, ($y-2), $parameter, $this->size, $this->color['axis_values'], false, $this->align); + $lex = $this->dir == 'rtl' ? $x1+25 : $x2; + $al = $this->dir == 'rtl' ? "start" : "end"; + $this->svg->text($lex, ($y-2), $text, $this->size, $this->color['axis_values'], false, $al); + $lex = $this->dir == 'rtl' ? $x1-10 : $x1+10; + $lex2 = $this->dir == 'rtl' ? $x2+50 : $x2; + $this->svg->line($lex, $y+1, $lex2, $y+1, $this->color['bg_lines']); + } + else + { + $j = $i % $n; + $color = 'arc_' . $j; + $width = $this->string_width($text, $this->size); + imageline($this->img, $x1+15, ($y-2), $x2+20, ($y-2), $this->color['bg_lines']); + $lex = $this->dir == 'rtl' ? $x2+20 : $x; + imagefilledrectangle($this->img, $lex, $y, ($lex+10), ($y+10), $this->color[$color]); + imagerectangle($this->img, $lex, $y, ($lex+10), ($y+10), $this->color['title']); + $lex = $this->dir == 'rtl' ? $x2+10 : $x+15; + $this->_imagestring($this->img, $this->size, $lex, ($y-2), $parameter, $this->color['axis_values'], 0, 0, $this->align); + $lex = $this->dir == 'rtl' ? $x+10 : $x2-$width; + $this->_imagestring($this->img, $this->size, $lex, ($y-2), $text, $this->color['axis_values'], 0, 0, $this->align); + } + $y += 18; + } + } + } - if (preg_match("/^(1|2)$/", $this->type)) - { - $this->color['bars'] = imagecolorallocate($this->img, 50, 200, 50); - $this->color['bars_shadow'] = imagecolorallocate($this->img, 0, 150, 0); - $this->color['bars_2'] = imagecolorallocate($this->img, 255, 255, 255); - $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 220, 220, 220); - } - else if (preg_match("/^(3|4)$/", $this->type)) - { - $this->color['line'] = imagecolorallocate($this->img, 220, 220, 220); - $this->color['line_2'] = imagecolorallocate($this->img, 0, 180, 0); - } - else if (preg_match("/^(5|6)$/", $this->type)) - { - $this->color['arc_1'] = imagecolorallocate($this->img, 255, 255, 255); - $this->color['arc_2'] = imagecolorallocate($this->img, 200, 220, 200); - $this->color['arc_3'] = imagecolorallocate($this->img, 160, 200, 160); - $this->color['arc_4'] = imagecolorallocate($this->img, 135, 180, 135); - $this->color['arc_5'] = imagecolorallocate($this->img, 115, 160, 115); - $this->color['arc_6'] = imagecolorallocate($this->img, 100, 140, 100); - $this->color['arc_7'] = imagecolorallocate($this->img, 90, 120, 90); - $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 127, 127, 127); - $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 100, 110, 100); - $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 80, 100, 80); - $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 67, 90, 67); - $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 57, 80, 57); - $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 50, 70, 50); - $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 45, 60, 45); - } - break; + function string_width($string, $size) + { + $p = imagettfbbox($size, 0, $this->fontfile, $string); + return $p[4] - $p[0]; + } + function calculate_higher_value() + { + $digits = strlen(round($this->max_value)); + $interval = pow(10, ($digits-1)); + $this->higher_value = round(($this->max_value - ($this->max_value % $interval) + $interval), 1); + $this->higher_value_str = $this->number_formated($this->higher_value, $this->dec1); + } - // Spring - case 3: - $this->color['title'] = imagecolorallocate($this->img, 250, 50, 50); - $this->color['background'] = imagecolorallocate($this->img, 255, 255, 255); - $this->color['axis_values'] = imagecolorallocate($this->img, 50, 150, 50); - $this->color['axis_line'] = imagecolorallocate($this->img, 50, 100, 50); - $this->color['bg_lines'] = imagecolorallocate($this->img, 200, 224, 180); - //$this->color['bg_legend'] = imagecolorallocate($this->img, 230, 230, 200); - $this->color['bg_legend'] = imagecolorallocate($this->img, 255, 255, 255); + function number_formated($number, $dec_size = 1) + { + if ($this->latin_notation == true) + return number_format(round($number, $dec_size), $dec_size, ",", "."); + return number_format(round($number, $dec_size), $dec_size, ".", ","); + } - if (preg_match("/^(1|2)$/", $this->type)) - { - $this->color['bars'] = imagecolorallocate($this->img, 255, 170, 80); - $this->color['bars_shadow'] = imagecolorallocate($this->img, 200, 120, 30); - $this->color['bars_2'] = imagecolorallocate($this->img, 250, 230, 80); - $this->color['bars_2_shadow'] = imagecolorallocate($this->img, 180, 150, 0); - } - else if (preg_match("/^(3|4)$/", $this->type)) - { - $this->color['line'] = imagecolorallocate($this->img, 230, 100, 0); - $this->color['line_2'] = imagecolorallocate($this->img, 220, 200, 50); - } - else if (preg_match("/^(5|6)$/", $this->type)) - { - $this->color['arc_1'] = imagecolorallocate($this->img, 100, 150, 200); - $this->color['arc_2'] = imagecolorallocate($this->img, 200, 250, 150); - $this->color['arc_3'] = imagecolorallocate($this->img, 250, 200, 150); - $this->color['arc_4'] = imagecolorallocate($this->img, 250, 150, 150); - $this->color['arc_5'] = imagecolorallocate($this->img, 250, 250, 150); - $this->color['arc_6'] = imagecolorallocate($this->img, 230, 180, 250); - $this->color['arc_7'] = imagecolorallocate($this->img, 200, 200, 150); - $this->color['arc_1_shadow'] = imagecolorallocate($this->img, 50, 75, 100); - $this->color['arc_2_shadow'] = imagecolorallocate($this->img, 100, 125, 75); - $this->color['arc_3_shadow'] = imagecolorallocate($this->img, 125, 100, 75); - $this->color['arc_4_shadow'] = imagecolorallocate($this->img, 125, 75, 75); - $this->color['arc_5_shadow'] = imagecolorallocate($this->img, 125, 125, 75); - $this->color['arc_6_shadow'] = imagecolorallocate($this->img, 115, 90, 125); - $this->color['arc_7_shadow'] = imagecolorallocate($this->img, 100, 100, 75); - } - break; + function load_color_palette($type) + { + // The usual color palette. Change if you like. Must be 6 colors. + $color = self::$palette; + if ($this->stream == 'svg') + { + $this->color['title'] = sprintf("#%02x%02x%02x", 40, 70, 130); + $this->color['background'] = sprintf("#%02x%02x%02x", 255, 255, 255); + $this->color['axis_values'] = sprintf("#%02x%02x%02x", 50, 50, 50); + $this->color['axis_line'] = sprintf("#%02x%02x%02x", 100, 100, 100); + $this->color['bg_lines'] = sprintf("#%02x%02x%02x", 220, 220, 220); + $this->color['bg_legend'] = sprintf("#%02x%02x%02x", 255, 255, 255); + $this->color['shadow'] = sprintf("#%02x%02x%02x", 255, 255, 255); + + if (preg_match("/^(1|2)$/", $type)) // Vertical Bar or Horizontal bar + { + for ($j = 0; $j < $this->num_series; $j++) + { + $this->color['bars'][$j] = $color[$j]; + } + } + elseif (preg_match("/^(3|4|8)$/", $type)) // Dots, Lines or Splines + { + for ($j = 0; $j < $this->num_series; $j++) + { + $this->color['line'][$j] = $color[$j]; + $this->color['line_light'][$j] = $this->colorLuminate($color[$j], 0.8); + } + } + elseif (preg_match("/^(5|6|7)$/", $type)) // Pie, Donut or Half Donut + { + $n = count($color); + for ($j = 0; $j < $n; $j++) + $this->color[$j] = $color[$j]; + } + } + else + { + $this->color['title'] = imagecolorallocate($this->img, 40, 70, 130); + $this->color['background'] = imagecolorallocate($this->img, 255, 255, 255); + $this->color['axis_values'] = imagecolorallocate($this->img, 50, 50, 50); + $this->color['axis_line'] = imagecolorallocate($this->img, 100, 100, 100); + $this->color['bg_lines'] = imagecolorallocate($this->img, 220, 220, 220); + $this->color['bg_legend'] = imagecolorallocate($this->img, 255, 255, 255); + $this->color['shadow'] = imagecolorallocate($this->img, 255, 255, 255); + + if (preg_match("/^(1|2)$/", $type)) // Vertical Bar or Horizontal bar + { + for ($j = 0; $j < $this->num_series; $j++) + { + $c = $this->hex2rgb($color[$j]); + $this->color['bars'][$j] = imagecolorallocate($this->img, $c[0], $c[1], $c[2]); + } + } + else if (preg_match("/^(3|4|8)$/", $type)) // Dots, Lines or Splines + { + for ($j = 0; $j < $this->num_series; $j++) + { + $c = $this->hex2rgb($color[$j]); + $this->color['line'][$j] = imagecolorallocate($this->img, $c[0], $c[1], $c[2]); + $c = $this->hex2rgb($this->colorLuminate($color[$j], 0.8)); // lighten for Areas + $this->color['line_light'][$j] = imagecolorallocate($this->img, $c[0], $c[1], $c[2]); + } + } + else if (preg_match("/^(5|6|7)$/", $type)) // Pie, Donut or Half Donut + { + $n = count($color); + for ($j = 0; $j < $n; $j++) + { + $c = $this->hex2rgb($color[$j]); + $this->color["arc_{$j}"] = imagecolorallocate($this->img, $c[0], $c[1], $c[2]); + } + } + } + } - } - } + function colorLuminate($hex, $percent) // Color lightner, minus is darker + { + $hex = ltrim($hex, '#'); + if (strlen($hex) == 3) { + $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2]; + } + $hex = array_map('hexdec', str_split($hex, 2)); + foreach ($hex as &$color) { + $limit = $percent < 0 ? $color : 255 - $color; + $value = ceil($limit * $percent); + $color = str_pad(dechex($color + $value), 2, '0', STR_PAD_LEFT); + } + return '#' . implode($hex); + } + + function _imageline($image, $x1, $y1, $x2, $y2, $color, $thick = 1) + { + if ($thick == 1) + return imageline($image, $x1, $y1, $x2, $y2, $color); + $t = $thick / 2 - 0.5; + if ($x1 == $x2 || $y1 == $y2) + return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $color); + $k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q + $a = $t / sqrt(1 + pow($k, 2)); + $points = array( + round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a), + round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a), + round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a), + round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a), + ); + imagefilledpolygon($image, $points, 4, $color); + return imagepolygon($image, $points, 4, $color); + } - function _imagestring($img, $size, $x, $y, $string, $col, $alt=0) - { - if ($this->encoding != 'UTF-8') { + function _imagestring($img, $size, $x, $y, $string, $col, $alt=0, $angle=0, $align=false) + { + if ($align == 'end') + { + $p = imagettfbbox($size, $angle, $this->fontfile, $string); + $x -= $p[2]; + } + + if ($this->encoding != 'UTF-8') + { if (function_exists('iconv')) $string = iconv($this->encoding, 'UTF-8', $string); else @@ -967,49 +1352,235 @@ class graph // Handling ev. RTL languages if ($alt) { - if ($this->encoding == 'UTF-8' && is_arabic($string)) + if ($this->encoding == 'UTF-8' && $this->dir == 'rtl') $alt_len = 18; else $alt_len = 12; if (strlen($string) > $alt_len) - $string = substr($string, 0, $alt_len); - } + $string = substr($string, 0, $alt_len); + } if ($this->encoding == 'UTF-8') { if (is_arabic($string)) - $string = arabic($string, "we"); + $string = arabic($string); elseif (is_hebrew($string)) $string = hebrew($string); } + $y += $size + 3; + if ($this->encoding == 'UTF-8' && is_arabic($string)) + { + $size += 2; + $string = str_replace(" ", " ", $string); + } + imagettftext($img, $size, $angle, $x, $y + $alt, $col, $this->fontfile, $string); + } - if ($this->built_in) - { - imagestring($img, $size, $x, $y + $alt, $string, $col); - } - else - { - if ($size == 1) - $size = 7; - elseif ($size == 2) - $size = 8; - elseif ($size == 3) - $size = 9; - elseif ($size == 4) - $size = 11; - else - $size = 12; - $y += $size + 3; - $angle = 0; + function hex2rgb($hex) + { + list($r, $g, $b) = sscanf($hex, "#%02x%02x%02x"); + return array($r, $g, $b); + } - if ($this->encoding == 'UTF-8' && is_arabic($string)) - { - $size += 2; - $string = str_replace(" ", " ", $string); - } - - imagettftext($img, $size, $angle, $x, $y + $alt, $col, $this->fontfile, $string); - } - } + function _controlPoint($curr, $prev, $next, $reverse = false) + { + $p = $prev ? $prev : $curr; + $n = $next ? $next : $curr; + $smooth = 0.2; + $lenx = $n[0] - $p[0]; + $leny = $n[1] - $p[1]; + $len = sqrt(pow($lenx, 2) + pow($leny, 2)); + $angle = atan2($leny, $lenx); + $len *= $smooth; + $angle += ($reverse ? pi() : 0); + $x = $curr[0] + cos($angle) * $len; + $y = $curr[1] + sin($angle) * $len; + return array($x, $y); + } + + function _splineCommand($p, $i, $a) + { + $c = isset($a[$i - 1]) ? $a[$i - 1] : false; + $d = isset($a[$i - 2]) ? $a[$i - 2] : false; + $e = isset($a[$i + 1]) ? $a[$i + 1] : false; + $cps = $this->_controlPoint($c, $d, $p); + $cpe = $this->_controlPoint($p, $c, $e, true); + return " C".round($cps[0],1).",".round($cps[1],1)." ".round($cpe[0],1).",".round($cpe[1], 1)." $p[0],$p[1]"; + } + + function clean_out_dir() + { + $dir = $this->out_dir; + if ($d = @opendir($dir)) { + while (($file = readdir($d)) !== false) { + if (!is_file($dir.'/'.$file) || $file == 'index.php') continue; + // then check to see if this one is too old + $ftime = filemtime($dir.'/'.$file); + // seems 3 min is enough for any report download, isn't it? + if (time()-$ftime > 180){ + unlink($dir.'/'.$file); + } + } + closedir($d); + } + } +} + +class SVG +{ + var $svg; + + function __construct($width=0, $height=0, $dir='ltr', $lang='en') + { + $this->svg = "svg .= ">\n"; + } + function circle($x, $y, $r, $bcolor=false, $line_width=1, $color=false, $style=false, $tooltip=false) + { + $this->svg .= "svg .= " stroke-width=\"$line_width\""; + if (!empty($bcolor)) + $this->svg .= " stroke=\"$bcolor\""; + if (empty($color)) + $color = "none"; + $this->svg .= " fill=\"$color\""; + if (!empty($style)) + $this->svg .= " $style"; + if (!empty($tooltip)) + $this->svg .= ">$tooltip\n"; + else + $this->svg .= " />\n"; + } + function rect($x1, $y1, $x2, $y2, $bcolor=false, $line_width=1, $color=false, $style=false, $tooltip=false) + { + $this->svg .= "svg .= " stroke-width=\"$line_width\""; + if (!empty($bcolor)) + $this->svg .= " stroke=\"$bcolor\""; + if (empty($color)) + $color = "none"; + $this->svg .= " fill=\"$color\""; + if (!empty($style)) + $this->svg .= " $style"; + if (!empty($tooltip)) + $this->svg .= ">$tooltip\n"; + else + $this->svg .= " />\n"; + } + function line($x1, $y1, $x2, $y2, $bcolor=false, $line_width=1, $color=false, $style=false, $tooltip=false) + { + $this->svg .= "svg .= " stroke-width=\"$line_width\""; + if (!empty($bcolor)) + $this->svg .= " stroke=\"$bcolor\""; + if (empty($color)) + $color = "none"; + $this->svg .= " fill=\"$color\""; + if (!empty($style)) + $this->svg .= " $style"; + if (!empty($tooltip)) + $this->svg .= ">$tooltip\n"; + else + $this->svg .= " />\n"; + } + function polygon($p, $bcolor=false, $line_width=1, $color=false, $style=false, $tooltip=false) + { + $this->svg .= "svg .= " stroke-width=\"$line_width\""; + if (!empty($bcolor)) + $this->svg .= " stroke=\"$bcolor\""; + if (empty($color)) + $color = "none"; + $this->svg .= " fill=\"$color\""; + if (!empty($style)) + $this->svg .= " $style"; + if (!empty($tooltip)) + $this->svg .= ">$tooltip\n"; + else + $this->svg .= " />\n"; + } + function polyline($p, $bcolor=false, $line_width=1, $color=false, $style=false, $tooltip=false) + { + $this->svg .= "svg .= " stroke-width=\"$line_width\""; + if (!empty($bcolor)) + $this->svg .= " stroke=\"$bcolor\""; + if (empty($color)) + $color = "none"; + $this->svg .= " fill=\"$color\""; + if (!empty($style)) + $this->svg .= " $style"; + if (!empty($tooltip)) + $this->svg .= ">$tooltip\n"; + else + $this->svg .= " />\n"; + } + function path($d, $bcolor=false, $line_width=1, $color=false, $style=false, $tooltip=false) + { + $this->svg .= "svg .= " stroke-width=\"$line_width\""; + if (!empty($bcolor)) + $this->svg .= " stroke=\"$bcolor\""; + if (empty($color)) + $color = "none"; + $this->svg .= " fill=\"$color\""; + if (!empty($style)) + $this->svg .= " $style"; + if (!empty($tooltip)) + $this->svg .= ">$tooltip\n"; + else + $this->svg .= " />\n"; + } + function text($x, $y, $text, $size=false, $color=false, $style=false, $align=false, $angle=false) // align start, middle, end. + { + $this->svg .= "svg .= " fill=\"$color\""; + if (!empty($size)) + $this->svg .= " font-size=\"$size\""; + if (!empty($style)) + $this->svg .= " $style"; + if (!empty($align)) + $this->svg .= " text-anchor=\"$align\""; + if (!empty($angle)) + $this->svg .= " transform=\"rotate($angle $x $y)\""; + $this->svg .= ">$text\n"; + } + function other($s) + { + $this->svg .= $s; + } + function style($s='') + { + $this->svg .= "\n"; + } + function open_group($p = '') + { + $this->svg .= "\n"; + } + function close_group() + { + $this->svg .= "\n"; + } + function close() + { + $this->svg .= "\n"; + } + function draw() + { + //header('Content-Type: image/svg+xml'); + echo $this->svg; + return true; + } + function save($fileName) + { + file_put_contents($fileName, $this->svg); + } } // The following is for handling RTL texts. GD does not handle RTL at all. @@ -1035,11 +1606,11 @@ function utf8_strlen($str) function utf8_chr($uni) { $r = ""; - # ASCII range (including control chars) - if ( ($uni >= 0) && ($uni <= 0x007f) ) - $r .= chr($uni); + # ASCII range (including control chars) + if ( ($uni >= 0) && ($uni <= 0x007f) ) + $r .= chr($uni); elseif ($uni <= 0x07ff) // 2 byte sequence - { + { $r .= chr(0xc0 | ($uni >> 6)); $r .= chr(0x80 | ($uni & 0x003f)); } @@ -1069,53 +1640,53 @@ function utf8_chr($uni) function arabic($str,$z="",$method='normal') { $p_chars = array ( - utf8_chr(0x0622) => array (utf8_chr(0xfe82), utf8_chr(0xfe82), utf8_chr(0x0622)), - utf8_chr(0x0627) => array (utf8_chr(0xfe8e), utf8_chr(0xfe8e), utf8_chr(0x0627)), - utf8_chr(0x0628) => array (utf8_chr(0xfe90), utf8_chr(0xfe92), utf8_chr(0xfe91)), - utf8_chr(0x067e) => array (utf8_chr(0xfb57), utf8_chr(0xfb59), utf8_chr(0xfb58)), - utf8_chr(0x062a) => array (utf8_chr(0xfe96), utf8_chr(0xfe98), utf8_chr(0xfe97)), - utf8_chr(0x062b) => array (utf8_chr(0xfe9a), utf8_chr(0xfe9c), utf8_chr(0xfe9b)), - utf8_chr(0x062c) => array (utf8_chr(0xfe9e), utf8_chr(0xfea0), utf8_chr(0xfe9f)), - utf8_chr(0x0686) => array (utf8_chr(0xfb7b), utf8_chr(0xfb7d), utf8_chr(0xfb7c)), - utf8_chr(0x062d) => array (utf8_chr(0xfea2), utf8_chr(0xfea4), utf8_chr(0xfea3)), - utf8_chr(0x062e) => array (utf8_chr(0xfea6), utf8_chr(0xfea8), utf8_chr(0xfea7)), - utf8_chr(0x062f) => array (utf8_chr(0xfeaa), utf8_chr(0xfeaa), utf8_chr(0xfea9)), - utf8_chr(0x0630) => array (utf8_chr(0xfeac), utf8_chr(0xfeac), utf8_chr(0xfeab)), - utf8_chr(0x0631) => array (utf8_chr(0xfeae), utf8_chr(0xfeae), utf8_chr(0xfead)), - utf8_chr(0x0632) => array (utf8_chr(0xfeb0), utf8_chr(0xfeb0), utf8_chr(0xfeaf)), - utf8_chr(0x0698) => array (utf8_chr(0xfb8b), utf8_chr(0xfb8b), utf8_chr(0xfb8a)), - utf8_chr(0x0633) => array (utf8_chr(0xfeb2), utf8_chr(0xfeb4), utf8_chr(0xfeb3)), - utf8_chr(0x0634) => array (utf8_chr(0xfeb6), utf8_chr(0xfeb8), utf8_chr(0xfeb7)), - utf8_chr(0x0635) => array (utf8_chr(0xfeba), utf8_chr(0xfebc), utf8_chr(0xfebb)), - utf8_chr(0x0636) => array (utf8_chr(0xfebe), utf8_chr(0xfec0), utf8_chr(0xfebf)), - utf8_chr(0x0637) => array (utf8_chr(0xfec2), utf8_chr(0xfec4), utf8_chr(0xfec3)), - utf8_chr(0x0638) => array (utf8_chr(0xfec6), utf8_chr(0xfec8), utf8_chr(0xfec7)), - utf8_chr(0x0639) => array (utf8_chr(0xfeca), utf8_chr(0xfecc), utf8_chr(0xfecb)), - utf8_chr(0x063a) => array (utf8_chr(0xfece), utf8_chr(0xfed0), utf8_chr(0xfecf)), - utf8_chr(0x0641) => array (utf8_chr(0xfed2), utf8_chr(0xfed4), utf8_chr(0xfed3)), - utf8_chr(0x0642) => array (utf8_chr(0xfed6), utf8_chr(0xfed8), utf8_chr(0xfed7)), - utf8_chr(0x06a9) => array (utf8_chr(0xfeda), utf8_chr(0xfedc), utf8_chr(0xfedb)), - utf8_chr(0x06af) => array (utf8_chr(0xfb93), utf8_chr(0xfb95), utf8_chr(0xfb94)), - utf8_chr(0x0644) => array (utf8_chr(0xfede), utf8_chr(0xfee0), utf8_chr(0xfedf)), - utf8_chr(0x0645) => array (utf8_chr(0xfee2), utf8_chr(0xfee4), utf8_chr(0xfee3)), - utf8_chr(0x0646) => array (utf8_chr(0xfee6), utf8_chr(0xfee8), utf8_chr(0xfee7)), - utf8_chr(0x0648) => array (utf8_chr(0xfeee), utf8_chr(0xfeee), utf8_chr(0xfeed)), - utf8_chr(0x06cc) => array (utf8_chr(0xfbfd), utf8_chr(0xfbff), utf8_chr(0xfbfe)), - utf8_chr(0x0643) => array (utf8_chr(0xfeda), utf8_chr(0xfedc), utf8_chr(0xfedb)), - utf8_chr(0x064a) => array (utf8_chr(0xfef2), utf8_chr(0xfef4), utf8_chr(0xfef3)), - utf8_chr(0x0623) => array (utf8_chr(0xfe84), utf8_chr(0xfe84), utf8_chr(0xfe83)), - utf8_chr(0x0624) => array (utf8_chr(0xfe86), utf8_chr(0xfe86), utf8_chr(0xfe85)), - utf8_chr(0x0625) => array (utf8_chr(0xfe88), utf8_chr(0xfe88), utf8_chr(0xfe87)), - utf8_chr(0x0626) => array (utf8_chr(0xfe8a), utf8_chr(0xfe8c), utf8_chr(0xfe8b)), - utf8_chr(0x0629) => array (utf8_chr(0xfe94), utf8_chr(0xfe98), utf8_chr(0xfe97)) + utf8_chr(0x0622) => array (utf8_chr(0xfe82), utf8_chr(0xfe82), utf8_chr(0x0622)), + utf8_chr(0x0627) => array (utf8_chr(0xfe8e), utf8_chr(0xfe8e), utf8_chr(0x0627)), + utf8_chr(0x0628) => array (utf8_chr(0xfe90), utf8_chr(0xfe92), utf8_chr(0xfe91)), + utf8_chr(0x067e) => array (utf8_chr(0xfb57), utf8_chr(0xfb59), utf8_chr(0xfb58)), + utf8_chr(0x062a) => array (utf8_chr(0xfe96), utf8_chr(0xfe98), utf8_chr(0xfe97)), + utf8_chr(0x062b) => array (utf8_chr(0xfe9a), utf8_chr(0xfe9c), utf8_chr(0xfe9b)), + utf8_chr(0x062c) => array (utf8_chr(0xfe9e), utf8_chr(0xfea0), utf8_chr(0xfe9f)), + utf8_chr(0x0686) => array (utf8_chr(0xfb7b), utf8_chr(0xfb7d), utf8_chr(0xfb7c)), + utf8_chr(0x062d) => array (utf8_chr(0xfea2), utf8_chr(0xfea4), utf8_chr(0xfea3)), + utf8_chr(0x062e) => array (utf8_chr(0xfea6), utf8_chr(0xfea8), utf8_chr(0xfea7)), + utf8_chr(0x062f) => array (utf8_chr(0xfeaa), utf8_chr(0xfeaa), utf8_chr(0xfea9)), + utf8_chr(0x0630) => array (utf8_chr(0xfeac), utf8_chr(0xfeac), utf8_chr(0xfeab)), + utf8_chr(0x0631) => array (utf8_chr(0xfeae), utf8_chr(0xfeae), utf8_chr(0xfead)), + utf8_chr(0x0632) => array (utf8_chr(0xfeb0), utf8_chr(0xfeb0), utf8_chr(0xfeaf)), + utf8_chr(0x0698) => array (utf8_chr(0xfb8b), utf8_chr(0xfb8b), utf8_chr(0xfb8a)), + utf8_chr(0x0633) => array (utf8_chr(0xfeb2), utf8_chr(0xfeb4), utf8_chr(0xfeb3)), + utf8_chr(0x0634) => array (utf8_chr(0xfeb6), utf8_chr(0xfeb8), utf8_chr(0xfeb7)), + utf8_chr(0x0635) => array (utf8_chr(0xfeba), utf8_chr(0xfebc), utf8_chr(0xfebb)), + utf8_chr(0x0636) => array (utf8_chr(0xfebe), utf8_chr(0xfec0), utf8_chr(0xfebf)), + utf8_chr(0x0637) => array (utf8_chr(0xfec2), utf8_chr(0xfec4), utf8_chr(0xfec3)), + utf8_chr(0x0638) => array (utf8_chr(0xfec6), utf8_chr(0xfec8), utf8_chr(0xfec7)), + utf8_chr(0x0639) => array (utf8_chr(0xfeca), utf8_chr(0xfecc), utf8_chr(0xfecb)), + utf8_chr(0x063a) => array (utf8_chr(0xfece), utf8_chr(0xfed0), utf8_chr(0xfecf)), + utf8_chr(0x0641) => array (utf8_chr(0xfed2), utf8_chr(0xfed4), utf8_chr(0xfed3)), + utf8_chr(0x0642) => array (utf8_chr(0xfed6), utf8_chr(0xfed8), utf8_chr(0xfed7)), + utf8_chr(0x06a9) => array (utf8_chr(0xfeda), utf8_chr(0xfedc), utf8_chr(0xfedb)), + utf8_chr(0x06af) => array (utf8_chr(0xfb93), utf8_chr(0xfb95), utf8_chr(0xfb94)), + utf8_chr(0x0644) => array (utf8_chr(0xfede), utf8_chr(0xfee0), utf8_chr(0xfedf)), + utf8_chr(0x0645) => array (utf8_chr(0xfee2), utf8_chr(0xfee4), utf8_chr(0xfee3)), + utf8_chr(0x0646) => array (utf8_chr(0xfee6), utf8_chr(0xfee8), utf8_chr(0xfee7)), + utf8_chr(0x0648) => array (utf8_chr(0xfeee), utf8_chr(0xfeee), utf8_chr(0xfeed)), + utf8_chr(0x06cc) => array (utf8_chr(0xfbfd), utf8_chr(0xfbff), utf8_chr(0xfbfe)), + utf8_chr(0x0643) => array (utf8_chr(0xfeda), utf8_chr(0xfedc), utf8_chr(0xfedb)), + utf8_chr(0x064a) => array (utf8_chr(0xfef2), utf8_chr(0xfef4), utf8_chr(0xfef3)), + utf8_chr(0x0623) => array (utf8_chr(0xfe84), utf8_chr(0xfe84), utf8_chr(0xfe83)), + utf8_chr(0x0624) => array (utf8_chr(0xfe86), utf8_chr(0xfe86), utf8_chr(0xfe85)), + utf8_chr(0x0625) => array (utf8_chr(0xfe88), utf8_chr(0xfe88), utf8_chr(0xfe87)), + utf8_chr(0x0626) => array (utf8_chr(0xfe8a), utf8_chr(0xfe8c), utf8_chr(0xfe8b)), + utf8_chr(0x0629) => array (utf8_chr(0xfe94), utf8_chr(0xfe98), utf8_chr(0xfe97)) ); $nastaligh = array ( - utf8_chr(0x0647) => array (utf8_chr(0xfbab), utf8_chr(0xfbad), utf8_chr(0xfbac)) + utf8_chr(0x0647) => array (utf8_chr(0xfbab), utf8_chr(0xfbad), utf8_chr(0xfbac)) ); $normal = array ( - utf8_chr(0x0647) => array (utf8_chr(0xfeea), utf8_chr(0xfeec), utf8_chr(0xfeeb)) + utf8_chr(0x0647) => array (utf8_chr(0xfeea), utf8_chr(0xfeec), utf8_chr(0xfeeb)) ); $mp_chars = array (utf8_chr(0x0622), utf8_chr(0x0627), utf8_chr(0x062f), utf8_chr(0x0630), utf8_chr(0x0631), utf8_chr(0x0632), @@ -1287,6 +1858,19 @@ $ignorelist = array (utf8_chr(0x0000), utf8_chr(0x064c), utf8_chr(0x064d), utf8_ $str_next = null; $str_back = null; } - return $output; + return $output; } +// For debugging +if (!function_exists('dump')) +{ + function dump($str) + { + $req_dump = print_r($str, true); + $fp = fopen('dump.log', 'a'); + date_default_timezone_set("Europe/Amsterdam"); + $msg = "[" . date('Y-m-d / H:i:s') . "] - $req_dump\n"; + fwrite($fp, $msg); + fclose($fp); + } +} diff --git a/reporting/includes/reports_classes.inc b/reporting/includes/reports_classes.inc index c96378f7..c4a476ed 100644 --- a/reporting/includes/reports_classes.inc +++ b/reporting/includes/reports_classes.inc @@ -253,7 +253,7 @@ class BoxReports case 'GRAPHIC': $sel = array(_("No Graphics"), _("Vertical bars"), _("Horizontal bars"), - _("Dots"), _("Lines"), _("Pie"), _("Donut")); + _("Dots"), _("Lines"), _("Pie"), _("Donut"), _("Half donut"), _("Spline")); return array_selector($name, null, $sel); case 'SYS_TYPES': diff --git a/reporting/rep102.php b/reporting/rep102.php index 22c2d8a9..92b56466 100644 --- a/reporting/rep102.php +++ b/reporting/rep102.php @@ -85,7 +85,7 @@ function print_aged_customer_analysis() if ($graphics) { include_once($path_to_root . "/reporting/includes/class.graphic.inc"); - $pg = new graph(); + $pg = new chart($graphics); } if ($fromcust == ALL_TEXT) @@ -225,28 +225,30 @@ function print_aged_customer_analysis() $rep->fontSize += 2; $rep->TextCol(0, 3, _('Grand Total')); $rep->fontSize -= 2; + $serie = array(); for ($i = 0; $i < count($total); $i++) { $rep->AmountCol($i + 3, $i + 4, $total[$i], $dec); if ($graphics && $i < count($total) - 1) { - $pg->y[$i] = abs($total[$i]); + $serie[] = abs($total[$i]); } } $rep->Line($rep->row - 8); if ($graphics) { - $pg->x = array(_('Current'), $nowdue, $pastdue1, $pastdue2); - $pg->title = $rep->title; - $pg->axis_x = _("Days"); - $pg->axis_y = _("Amount"); - $pg->graphic_1 = $to; - $pg->type = $graphics; - $pg->skin = $SysPrefs->graph_skin; - $pg->built_in = false; + $pg->setStream('png'); + $pg->addSerie(_('Balances'), $serie); + $pg->setLabels(array(_('Current'), $nowdue, $pastdue1, $pastdue2)); + $pg->setTitle($rep->title); + $pg->setXTitle(_("Days")); + $pg->setYTitle(_("Amount")); + $pg->setDTitle(number_format2($total[4])); + $pg->setValues(true); $pg->latin_notation = ($SysPrefs->decseps[user_dec_sep()] != "."); $filename = company_path(). "/pdf_files/". random_id().".png"; - $pg->display($filename, true); + $pg->display($filename); + //sleep(5); $w = $pg->width / 1.5; $h = $pg->height / 1.5; $x = ($rep->pageWidth - $w) / 2; diff --git a/reporting/rep202.php b/reporting/rep202.php index 04d1afa1..0e122ab4 100644 --- a/reporting/rep202.php +++ b/reporting/rep202.php @@ -91,7 +91,8 @@ function print_aged_supplier_analysis() if ($graphics) { include_once($path_to_root . "/reporting/includes/class.graphic.inc"); - $pg = new graph(); + $pg = new chart($graphics); + $serie = array(); } if ($fromsupp == ALL_TEXT) @@ -237,21 +238,21 @@ function print_aged_supplier_analysis() $rep->AmountCol($i + 3, $i + 4, $total[$i], $dec); if ($graphics && $i < count($total) - 1) { - $pg->y[$i] = abs($total[$i]); + $serie[$i] = abs($total[$i]); } } $rep->Line($rep->row - 8); $rep->NewLine(); if ($graphics) { - $pg->x = array(_('Current'), $nowdue, $pastdue1, $pastdue2); - $pg->title = $rep->title; - $pg->axis_x = _("Days"); - $pg->axis_y = _("Amount"); - $pg->graphic_1 = $to; - $pg->type = $graphics; - $pg->skin = $SysPrefs->graph_skin; - $pg->built_in = false; + $pg->setStream('png'); + $pg->setLabels(array(_('Current'), $nowdue, $pastdue1, $pastdue2)); + $pg->addSerie(_("Balances"), $serie); + $pg->setTitle($rep->title); + $pg->setXTitle(_("Days")); + $pg->setYTitle(_("Amount")); + $pg->setDTitle(number_format2($total[4])); + $pg->setValues(true); $pg->latin_notation = ($SysPrefs->decseps[user_dec_sep()] != "."); $filename = company_path(). "/pdf_files/". random_id().".png"; $pg->display($filename, true); diff --git a/reporting/rep706.php b/reporting/rep706.php index 30e2520b..cc41fd39 100644 --- a/reporting/rep706.php +++ b/reporting/rep706.php @@ -26,7 +26,7 @@ include_once($path_to_root . "/admin/db/tags_db.inc"); //---------------------------------------------------------------------------------------------------- -function display_type ($type, $typename, $from, $to, $convert, &$dec, &$rep, $dimension, $dimension2, $tags, &$pg, $graphics) +function display_type ($type, $typename, $from, $to, $convert, &$dec, &$rep, $dimension, $dimension2, $tags, &$pg, $graphics, &$labels, &$serie1, &$serie2) { $code_open_balance = 0; $code_period_balance = 0; @@ -109,9 +109,9 @@ function display_type ($type, $typename, $from, $to, $convert, &$dec, &$rep, $di $rep->AmountCol(4, 5, ($code_open_balance + $open_balance_total + $code_period_balance + $period_balance_total) * $convert, $dec); if ($graphics) { - $pg->x[] = $typename; - $pg->y[] = abs($code_open_balance + $open_balance_total); - $pg->z[] = abs($code_period_balance + $period_balance_total); + $labels[] = $typename; + $serie1[] = abs(($code_period_balance + $period_balance_total) * $convert); + $serie2[] = abs(($code_open_balance + $open_balance_total + $code_period_balance + $period_balance_total) * $convert); } $rep->NewLine(); } @@ -172,7 +172,10 @@ function print_balance_sheet() if ($graphics) { include_once($path_to_root . "/reporting/includes/class.graphic.inc"); - $pg = new graph(); + $pg = new Chart($graphics); + $labels = array(); + $serie1 = array(); + $serie2 = array(); } if (!$decimals) $dec = 0; @@ -241,8 +244,7 @@ function print_balance_sheet() $typeresult = get_account_types(false, $class['cid'], -1); while ($accounttype=db_fetch($typeresult)) { - $classtotal = display_type($accounttype["id"], $accounttype["name"], $from, $to, $convert, $dec, - $rep, $dimension, $dimension2, $tags, $pg, $graphics); + $classtotal = display_type($accounttype["id"], $accounttype["name"], $from, $to, $convert, $dec, $rep, $dimension, $dimension2, $tags, $pg, $graphics, $labels, $serie1, $serie2); $class_open_total += $classtotal[0]; $class_period_total += $classtotal[1]; } @@ -300,17 +302,18 @@ function print_balance_sheet() $rep->Line($rep->row); if ($graphics) { - $pg->x[] = _('Calculated Return'); - $pg->y[] = abs($calc_open); - $pg->z[] = abs($calc_period); - $pg->title = $rep->title; - $pg->axis_x = _("Group"); - $pg->axis_y = _("Amount"); - $pg->graphic_1 = $headers[2]; - $pg->graphic_2 = $headers[3]; - $pg->type = $graphics; - $pg->skin = $SysPrefs->graph_skin; - $pg->built_in = false; + $labels[] = _('Calculated Return'); + $serie1[] = abs($calc_period); + $serie2[] = abs($calc_open + $calc_period); + $pg->setStream('png'); + $pg->setLabels($labels); + $pg->addSerie($headers[3], $serie1); + $pg->addSerie($headers[4], $serie2); + $pg->setTitle($rep->title); + $pg->setXTitle(_("Group")); + $pg->setYTitle(_("Amount")); + $pg->setDTitle(number_format2(abs($calc_open + $calc_period))); + $pg->setValues(true); $pg->latin_notation = ($SysPrefs->decseps[user_dec_sep()] != "."); $filename = company_path(). "/pdf_files/". random_id().".png"; $pg->display($filename, true); diff --git a/reporting/rep707.php b/reporting/rep707.php index 19a01cab..cf259005 100644 --- a/reporting/rep707.php +++ b/reporting/rep707.php @@ -26,8 +26,7 @@ include_once($path_to_root . "/admin/db/tags_db.inc"); //---------------------------------------------------------------------------------------------------- -function display_type ($type, $typename, $from, $to, $begin, $end, $compare, $convert, &$dec, &$pdec, &$rep, $dimension, $dimension2, - $tags, &$pg, $graphics) +function display_type ($type, $typename, $from, $to, $begin, $end, $compare, $convert, &$dec, &$pdec, &$rep, $dimension, $dimension2, $tags, &$pg, $graphics, &$labels, &$serie1, &$serie2) { $code_per_balance = 0; $code_acc_balance = 0; @@ -118,9 +117,9 @@ function display_type ($type, $typename, $from, $to, $begin, $end, $compare, $co $rep->AmountCol(4, 5, Achieve(($code_per_balance + $per_balance_total), ($code_acc_balance + $acc_balance_total)), $pdec); if ($graphics) { - $pg->x[] = $typename; - $pg->y[] = abs($code_per_balance + $per_balance_total); - $pg->z[] = abs($code_acc_balance + $acc_balance_total); + $labels[] = $typename; + $serie1[] = abs($code_per_balance + $per_balance_total); + $serie2[] = abs($code_acc_balance + $acc_balance_total); } $rep->NewLine(); } @@ -196,7 +195,10 @@ function print_profit_and_loss_statement() if ($graphics) { include_once($path_to_root . "/reporting/includes/class.graphic.inc"); - $pg = new graph(); + $pg = new Chart($graphics); + $labels = array(); + $serie1 = array(); + $serie2 = array(); } if (!$decimals) $dec = 0; @@ -285,8 +287,7 @@ function print_profit_and_loss_statement() $typeresult = get_account_types(false, $class['cid'], -1); while ($accounttype=db_fetch($typeresult)) { - $classtotal = display_type($accounttype["id"], $accounttype["name"], $from, $to, $begin, $end, $compare, $convert, $dec, - $pdec, $rep, $dimension, $dimension2, $tags, $pg, $graphics); + $classtotal = display_type($accounttype["id"], $accounttype["name"], $from, $to, $begin, $end, $compare, $convert, $dec, $pdec, $rep, $dimension, $dimension2, $tags, $pg, $graphics, $labels, $serie1, $serie2); $class_per_total += $classtotal[0]; $class_acc_total += $classtotal[1]; } @@ -312,25 +313,23 @@ function print_profit_and_loss_statement() $rep->AmountCol(2, 3, $salesper *-1, $dec); // always convert $rep->AmountCol(3, 4, $salesacc * -1, $dec); $rep->AmountCol(4, 5, Achieve($salesper, $salesacc), $pdec); - if ($graphics) - { - $pg->x[] = _('Calculated Return'); - $pg->y[] = abs($salesper); - $pg->z[] = abs($salesacc); - } $rep->Font(); $rep->NewLine(); $rep->Line($rep->row); if ($graphics) { - $pg->title = $rep->title; - $pg->axis_x = _("Group"); - $pg->axis_y = _("Amount"); - $pg->graphic_1 = $headers[2]; - $pg->graphic_2 = $headers[3]; - $pg->type = $graphics; - $pg->skin = $SysPrefs->graph_skin; - $pg->built_in = false; + $labels[] = _('Calculated Return'); + $serie1[] = abs($salesper); + $serie2[] = abs($salesacc); + $pg->setStream('png'); + $pg->setLabels($labels); + $pg->addSerie($headers[2], $serie1); + $pg->addSerie($headers[3], $serie2); + $pg->setTitle($rep->title); + $pg->setXTitle(_("Group")); + $pg->setYTitle(_("Amount")); + $pg->setDTitle(number_format2(abs($salesper))); + $pg->setValues(true); $pg->latin_notation = ($SysPrefs->decseps[user_dec_sep()] != "."); $filename = company_path(). "/pdf_files/". random_id().".png"; $pg->display($filename, true); -- 2.30.2