/** * Construct KPI Leadtime Table * @param string $status * @param string $kpi_closing_date_start * @param string $kpi_closing_date_end * @return string */ function kpiLeadtimeLoad($kpi_status, $kpi_closing_date_start = '', $kpi_closing_date_end = '') { use_class('jng_sp'); use_class('design'); $class_sp = new jng_sp(); $sp_b2b = array_keys($class_sp->retrieveList('active_status = 1 AND use_amvd_logistic = 1')); $target_leadtime = load_config('kpi-leadtime'); $design_categories = design::getDesignCategory(); $initial = array('sourcing' => 0, 'depot-refill-orders' => 0, 'internal-levelling-orders' => 0, 'cust-order-mto-mmo' => 0, 'external-levelling-order' => 0, 'full-dso' => 0, 'mto' => 0); foreach ($design_categories as $des_cat_id => $des_cat_name) { $initial["design-{$des_cat_id}"] = 0; } $below_target = $initial; $on_target = $initial; $above_target_1to3d = $initial; $above_target_gt3d = $initial; $total = $initial; $kpi_leadtime_data_o = array(); //open $kpi_leadtime_data_c = array(); //closed //PREPARE KPI LEADTIME DATA if ($kpi_status == 'o') { //OPEN ORDERS //Sourcing $q = " SELECT sp_type, item_id, quantity, MIN(status_date) AS date_start FROM"; $q .= " ("; $q .= " SELECT 'sp' AS sp_type, joi.jng_sp_orders_items_id AS item_id" . ", joish.status_date, joi.order_quantity AS quantity"; $q .= " FROM jng_sp_orders_items joi" . " INNER JOIN jng_sp_orders_items_status_history joish ON joish.jng_sp_orders_items_id = joi.jng_sp_orders_items_id" . " AND joish.status = 2"; $q .= " WHERE joi.status = 2"; $q .= " UNION"; $q .= " SELECT 'jg' AS sp_type, op.orders_products_id AS item_id" . ", opsh.status_date, op.products_quantity AS quantity"; $q .= " FROM orders_products op" . " INNER JOIN orders_products_status_history opsh ON opsh.orders_products_id = op.orders_products_id" . " AND opsh.status = 2"; $q .= " WHERE op.status = 2"; $q .= " UNION"; $q .= " SELECT 'dp' AS sp_type, do.depot_orders_id AS item_id" . ", dosh.update_time AS status_date, do.quantity"; $q .= " FROM depot_orders do" . " INNER JOIN depot_orders_status_history dosh ON dosh.depot_orders_id = do.depot_orders_id" . " AND dosh.status = 2"; $q .= " WHERE do.status = 2"; $q .= ") dt"; $q .= " GROUP BY sp_type, item_id"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { //Sourcing Order Type $kpi_leadtime_data_o['sourcing'][] = $r; } //Production $q = " SELECT sp_type, item_id, quantity, MIN(status_date) AS date_start, mode, order_type, order_type_id, order_type_name"; $q .= " FROM ("; $q .= " SELECT 'sp' AS sp_type, joi.jng_sp_orders_items_id AS item_id" . ", joish.status_date, joi.order_quantity AS quantity, joi.mode" . ", '' AS order_type, '' AS order_type_id, '' AS order_type_name"; $q .= " FROM jng_sp_orders_items joi" . " INNER JOIN jng_sp_orders_items_status_history joish ON joish.jng_sp_orders_items_id = joi.jng_sp_orders_items_id" . " AND joish.status = 4"; $q .= " WHERE joi.status = 4"; $q .= " UNION"; $q .= " SELECT 'jg' AS sp_type, op.orders_products_id AS item_id" . ", opsh.status_date, op.products_quantity AS quantity, op.mode" . ", '' AS order_type, '' AS order_type_id, '' AS order_type_name"; $q .= " FROM orders_products op" . " INNER JOIN orders_products_status_history opsh ON opsh.orders_products_id = op.orders_products_id" . " AND opsh.status = 4"; $q .= " WHERE op.status = 4"; $q .= " UNION"; $q .= " SELECT 'dp' AS sp_type, do.depot_orders_id AS item_id" . ", dosh.update_time AS status_date, do.quantity, '' AS mode" . ", trans_type AS order_type, trans_id AS order_type_id, group_name AS order_type_name"; $q .= " FROM depot_orders do" . " INNER JOIN depot_orders_status_history dosh ON dosh.depot_orders_id = do.depot_orders_id" . " AND dosh.status = 4"; $q .= " WHERE do.status = 4"; $q .= ") dt"; $q .= " GROUP BY sp_type, item_id"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { if ($r['order_type'] == 'AR' || $r['order_type'] == '' && $r['order_type_id'] == depot_orders::MANUAL_REFILL_ID) { //Depot Refill Order Type $kpi_leadtime_data_o['depot-refill-orders'][] = $r; } elseif ($r['order_type_name'] == depot_orders::GROUP_NAME_LTF_INTERNAL) { //Internal Levelling Order Type $kpi_leadtime_data_o['internal-levelling-orders'][] = $r; } elseif ($r['mode'] == 2 || $r['mode'] == 4) { //Customer Orders (MTO/MMO) Order Type $kpi_leadtime_data_o['cust-order-mto-mmo'][] = $r; } } //Outsourcing $q = " SELECT do.depot_orders_id AS item_id, MIN(dosh.update_time) AS status_date, do.quantity"; $q .= " FROM depot_orders do" . " INNER JOIN depot_orders_status_history dosh ON dosh.depot_orders_id = do.depot_orders_id" . " AND dosh.status = 22"; $q .= " WHERE do.status = 22"; $q .= " AND do.trans_type = '' && do.trans_id = " . depot_orders::MANUAL_REFILL_OUTSOURCED; $q .= " GROUP BY item_id"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { //External Levelling Order Type $kpi_leadtime_data_o['external-levelling-order'][] = $r; } //Customer Order $q = " SELECT sp_type, item_id, quantity, MIN(status_date) AS date_start, mode"; $q .= " FROM ("; $q .= " SELECT 'sp' AS sp_type, joi.jng_sp_orders_items_id AS item_id" . ", joish.status_date, joi.order_quantity AS quantity, joi.mode"; $q .= " FROM jng_sp_orders jo " . " INNER JOIN jng_sp_orders_items joi ON joi.jng_sp_orders_id = jo.jng_sp_orders_id" . " INNER JOIN jng_sp_orders_items_status_history joish ON joish.jng_sp_orders_items_id = joi.jng_sp_orders_items_id" . " AND joish.status = 1"; $q .= " WHERE joi.status < 9 AND jo.jng_sp_id NOT IN (" . implode(',', $sp_b2b) . ")"; $q .= " UNION"; $q .= " SELECT 'jg' AS sp_type, op.orders_products_id AS item_id" . ", opsh.status_date, op.products_quantity AS quantity, op.mode"; $q .= " FROM orders_products op" . " INNER JOIN orders_products_status_history opsh ON opsh.orders_products_id = op.orders_products_id" . " AND opsh.status = 1"; $q .= " WHERE op.status < 9"; $q .= ") dt"; $q .= " GROUP BY sp_type, item_id"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { if ($r['mode'] == 1) { //Full DSO Order Type $kpi_leadtime_data_o['full-dso'][] = $r; } elseif ($r['mode'] == 2 || $r['mode'] == 3 || $r['mode'] == 4) { $kpi_leadtime_data_o['mto'][] = $r; } } //Design $q = " SELECT d.designs_category, 1 AS quantity, d.designs_id AS item_id" . ", FROM_UNIXTIME(MIN(dsh.status_time)) AS date_start"; $q .= " FROM designs d " . " INNER JOIN designs_status_history dsh ON dsh.designs_id = d.designs_id AND dsh.status = 2"; $q .= " WHERE d.status NOT IN (1, 9)"; $q .= " GROUP BY d.designs_id"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { $kpi_leadtime_data_o["design-{$r['designs_category']}"][] = $r; } } elseif ($kpi_status == 'c') { $kpi_filter_closing_date_start = date('Y-m-d', strtotime($kpi_closing_date_start)); $kpi_filter_closing_date_end = date('Y-m-d', strtotime($kpi_closing_date_end)); //Sourcing $q = " SELECT * FROM"; $q .= " ("; $q .= " SELECT 'sp' AS sp_type, joi.jng_sp_orders_items_id AS item_id, joi.order_quantity AS quantity" . ", MIN(joish_2.status_date) AS date_start, MAX(joish_3.status_date) AS date_end"; $q .= " FROM jng_sp_orders_items_status_history joish_3" . " LEFT JOIN jng_sp_orders_items joi ON joi.jng_sp_orders_items_id = joish_3.jng_sp_orders_items_id" . " LEFT JOIN jng_sp_orders_items_status_history joish_2 ON joish_2.jng_sp_orders_items_id = joi.jng_sp_orders_items_id" . " AND joish_2.status = 2"; $q .= " WHERE joish_3.status_date >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND joish_3.status_date <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND joish_3.status = 3 AND joi.status NOT IN (1, 2)"; $q .= " GROUP BY sp_type, item_id"; $q .= " UNION"; $q .= " SELECT 'jg' AS sp_type, op.orders_products_id AS item_id, op.products_quantity AS quantity" . ", MIN(opsh_2.status_date) AS date_start, MAX(opsh_3.status_date) AS date_end"; $q .= " FROM orders_products_status_history opsh_3" . " LEFT JOIN orders_products op ON op.orders_products_id = opsh_3.orders_products_id" . " LEFT JOIN orders_products_status_history opsh_2 ON opsh_2.orders_products_id = op.orders_products_id" . " AND opsh_2.status = 2"; $q .= " WHERE opsh_3.status_date >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND opsh_3.status_date <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND opsh_3.status = 3 AND op.status NOT IN (1, 2)"; $q .= " GROUP BY sp_type, item_id"; $q .= " UNION"; $q .= " SELECT 'dp' AS sp_type, do.depot_orders_id AS item_id, do.quantity" . ", MIN(dosh_2.update_time) AS date_start, MAX(dosh_3.update_time) AS date_end"; $q .= " FROM depot_orders_status_history dosh_3" . " LEFT JOIN depot_orders do ON do.depot_orders_id = dosh_3.depot_orders_id" . " LEFT JOIN depot_orders_status_history dosh_2 ON dosh_2.depot_orders_id = do.depot_orders_id" . " AND dosh_2.status = 2"; $q .= " WHERE dosh_3.update_time >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND dosh_3.update_time <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND dosh_3.status = 3 AND do.status NOT IN (1, 2)"; $q .= " GROUP BY sp_type, item_id"; $q .= ") dt"; $q .= " WHERE date_start IS NOT NULL AND date_end IS NOT NULL"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { //Sourcing Order Type $kpi_leadtime_data_c['sourcing'][] = $r; } //Production $q = " SELECT * FROM"; $q .= " ("; $q .= " SELECT 'sp' AS sp_type, joi.jng_sp_orders_items_id AS item_id, joi.order_quantity AS quantity" . ", MIN(joish_4.status_date) AS date_start, MAX(joish_5.status_date) AS date_end, joi.mode" . ", '' AS order_type, '' AS order_type_id, '' AS order_type_name"; $q .= " FROM jng_sp_orders_items_status_history joish_5" . " LEFT JOIN jng_sp_orders_items joi ON joi.jng_sp_orders_items_id = joish_5.jng_sp_orders_items_id" . " LEFT JOIN jng_sp_orders_items_status_history joish_4 ON joish_4.jng_sp_orders_items_id = joi.jng_sp_orders_items_id" . " AND joish_4.status = 4"; $q .= " WHERE joish_5.status_date >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND joish_5.status_date <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND joish_5.status = 5 AND joi.status NOT IN (1, 2, 3, 4)"; $q .= " GROUP BY sp_type, item_id"; $q .= " UNION"; $q .= " SELECT 'jg' AS sp_type, op.orders_products_id AS item_id, op.products_quantity AS quantity" . ", MIN(opsh_4.status_date) AS date_start, MAX(opsh_5.status_date) AS date_end, op.mode" . ", '' AS order_type, '' AS order_type_id, '' AS order_type_name"; $q .= " FROM orders_products_status_history opsh_5" . " LEFT JOIN orders_products op ON op.orders_products_id = opsh_5.orders_products_id" . " LEFT JOIN orders_products_status_history opsh_4 ON opsh_4.orders_products_id = op.orders_products_id" . " AND opsh_4.status = 4"; $q .= " WHERE opsh_5.status_date >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND opsh_5.status_date <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND opsh_5.status = 5 AND op.status NOT IN (1, 2, 3, 4)"; $q .= " GROUP BY sp_type, item_id"; $q .= " UNION"; $q .= " SELECT 'dp' AS sp_type, do.depot_orders_id AS item_id, do.quantity" . ", MIN(dosh_4.update_time) AS date_start, MAX(dosh_5.update_time) AS date_end, '' AS mode" . ", trans_type AS order_type, trans_id AS order_type_id, group_name AS order_type_name"; $q .= " FROM depot_orders_status_history dosh_5" . " LEFT JOIN depot_orders do ON do.depot_orders_id = dosh_5.depot_orders_id" . " LEFT JOIN depot_orders_status_history dosh_4 ON dosh_4.depot_orders_id = do.depot_orders_id" . " AND dosh_4.status = 4"; $q .= " WHERE dosh_5.update_time >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND dosh_5.update_time <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND dosh_5.status = 5 AND do.status NOT IN (1, 2, 3, 4)"; $q .= " GROUP BY sp_type, item_id"; $q .= ") dt"; $q .= " WHERE date_start IS NOT NULL AND date_end IS NOT NULL"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { if ($r['order_type'] == 'AR' || $r['order_type'] == '' && $r['order_type_id'] == depot_orders::MANUAL_REFILL_ID) { //Depot Refill Order Type $kpi_leadtime_data_c['depot-refill-orders'][] = $r; } elseif ($r['order_type_name'] == depot_orders::GROUP_NAME_LTF_INTERNAL) { //Internal Levelling Order Type $kpi_leadtime_data_c['internal-levelling-orders'][] = $r; } elseif ($r['mode'] == 2 || $r['mode'] == 4) { //Customer Orders (MTO/MMO) Order Type $kpi_leadtime_data_c['cust-order-mto-mmo'][] = $r; } } //Outsourcing $q = " SELECT * FROM"; $q .= " ("; $q .= " SELECT do.depot_orders_id AS item_id, do.quantity" . ", MIN(dosh_8.update_time) AS date_start, MAX(dosh_22.update_time) AS date_end"; $q .= " FROM depot_orders_status_history dosh_22" . " LEFT JOIN depot_orders do ON do.depot_orders_id = dosh_22.depot_orders_id" . " LEFT JOIN depot_orders_status_history dosh_8 ON dosh_8.depot_orders_id = do.depot_orders_id" . " AND dosh_8.status = 8"; $q .= " WHERE dosh_22.update_time >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND dosh_22.update_time <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND do.trans_type = '' AND do.trans_id = " . depot_orders::MANUAL_REFILL_OUTSOURCED . " AND dosh_22.status = 22 AND do.status NOT IN (1, 2, 3, 4, 5, 6, 7, 8, 9)"; $q .= " GROUP BY item_id"; $q .= ") dt"; $q .= " WHERE date_start IS NOT NULL AND date_end IS NOT NULL"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { //External Levelling Order Type $kpi_leadtime_data_c['external-levelling-order'][] = $r; } //Customer Order (only B2C Sales Partner) $q = " SELECT * FROM"; $q .= " ("; $q .= " SELECT 'sp' AS sp_type, joi.jng_sp_orders_items_id AS item_id, joi.order_quantity AS quantity" . ", MIN(joish_1.status_date) AS date_start, MAX(joish_9.status_date) AS date_end, joi.mode"; $q .= " FROM jng_sp_orders_items_status_history joish_9" . " LEFT JOIN jng_sp_orders_items joi ON joi.jng_sp_orders_items_id = joish_9.jng_sp_orders_items_id" . " INNER JOIN jng_sp_orders jo ON jo.jng_sp_orders_id = joi.jng_sp_orders_id" . " LEFT JOIN jng_sp_orders_items_status_history joish_1 ON joish_1.jng_sp_orders_items_id = joi.jng_sp_orders_items_id" . " AND joish_1.status = 1"; $q .= " WHERE joish_9.status_date >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND joish_9.status_date <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND joish_9.status = 9 AND joi.status NOT IN (1, 2, 3, 4, 5, 6, 7, 8)" . " AND jo.jng_sp_id NOT IN (" . implode(',', $sp_b2b) . ")"; $q .= " GROUP BY sp_type, item_id"; $q .= " UNION"; $q .= " SELECT 'jg' AS sp_type, op.orders_products_id AS item_id, op.products_quantity AS quantity" . ", MIN(opsh_1.status_date) AS date_start, MAX(opsh_9.status_date) AS date_end, op.mode"; $q .= " FROM orders_products_status_history opsh_9" . " LEFT JOIN orders_products op ON op.orders_products_id = opsh_9.orders_products_id" . " LEFT JOIN orders_products_status_history opsh_1 ON opsh_1.orders_products_id = op.orders_products_id" . " AND opsh_1.status = 1"; $q .= " WHERE opsh_9.status_date >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND opsh_9.status_date <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND opsh_9.status = 9 AND op.status NOT IN (1, 2, 3, 4, 5, 6, 7, 8)"; $q .= " GROUP BY sp_type, item_id"; $q .= " UNION"; $q .= " SELECT 'dp' AS sp_type, do.depot_orders_id AS item_id, do.quantity" . ", MIN(dosh_1.update_time) AS date_start, MAX(dosh_9.update_time) AS date_end, '' AS mode"; $q .= " FROM depot_orders_status_history dosh_9" . " LEFT JOIN depot_orders do ON do.depot_orders_id = dosh_9.depot_orders_id" . " LEFT JOIN depot_orders_status_history dosh_1 ON dosh_1.depot_orders_id = do.depot_orders_id" . " AND dosh_1.status = 1"; $q .= " WHERE dosh_9.update_time >= '{$kpi_filter_closing_date_start} 00:00:00'" . " AND dosh_9.update_time <= '{$kpi_filter_closing_date_end} 23:59:59'" . " AND dosh_9.status = 9 AND do.status NOT IN (1, 2, 3, 4, 5, 6, 7, 8)"; $q .= " GROUP BY sp_type, item_id"; $q .= ") dt"; $q .= " WHERE date_start IS NOT NULL AND date_end IS NOT NULL"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { if ($r['mode'] == 1) { //Full DSO Order Type $kpi_leadtime_data_c['full-dso'][] = $r; } elseif ($r['mode'] == 2 || $r['mode'] == 3 || $r['mode'] == 4) { $kpi_leadtime_data_c['mto'][] = $r; } } //Design $q = " SELECT d.designs_category, 1 AS quantity, d.designs_id AS item_id" . ", FROM_UNIXTIME(MIN(dsh_2.status_time)) AS date_start" . ", FROM_UNIXTIME(MAX(dsh_9.status_time)) AS date_end"; $q .= " FROM designs_status_history dsh_9 " . " LEFT JOIN designs d ON d.designs_id = dsh_9.designs_id" . " LEFT JOIN designs_status_history dsh_2 ON dsh_2.designs_id = d.designs_id AND dsh_2.status = 2"; $q .= " WHERE dsh_9.status_time >= " . strtotime($kpi_filter_closing_date_start . " 00:00:00") . " AND dsh_9.status_time <= " . strtotime($kpi_filter_closing_date_end . " 23:59:59") . " AND dsh_9.status = 9 AND d.status = 9"; $q .= " GROUP BY d.designs_id"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { $kpi_leadtime_data_c["design-{$r['designs_category']}"][] = $r; } } $today = date('d-m-Y'); if ($kpi_status == 'c') { $kpi_leadtime_data = $kpi_leadtime_data_c; } else { $kpi_leadtime_data = $kpi_leadtime_data_o; } $leadtime_arr = array(); foreach ($kpi_leadtime_data as $order_type => $klds) { //klds: kpi leadtime datas foreach ($klds as $kld) { $lsd = $kld['date_start']; $led = $kpi_status == 'o' ? $today : $kld['date_end']; $qty = $kld['quantity']; $datediff_sec = strtotime($led) - strtotime($lsd); $leadtime = ceil($datediff_sec / 3600 / 24); //in days format (round up) $leadtime_arr[$order_type][] = $leadtime; $target = $target_leadtime[$order_type]; $total[$order_type] += $qty; if ($leadtime < $target) { $below_target[$order_type] += $qty; } elseif ($leadtime == $target) { $on_target[$order_type] += $qty; } elseif ($leadtime > $target + 3) { $above_target_gt3d[$order_type] += $qty; } else { $above_target_1to3d[$order_type] += $qty; } } $leadtime_avg[$order_type] = count($leadtime_arr[$order_type]) > 0 ? number_format(array_sum($leadtime_arr[$order_type]) / count($leadtime_arr[$order_type]), 2) : '-'; $leadtime_median[$order_type] = median($leadtime_arr[$order_type], 2); } //DRAW KPI LEADTIME TABLE $tooltip_info_saved = ' title="press enter to save changes" '; $border_dotted_bottom = 'border-bottom:1px dotted #ccc; '; $border_dotted_right = 'border-right:1px dotted #ccc; '; $kpi_lead = '<h3>' . ($kpi_status == 'o' ? 'Lead time of currently open orders/process (' . date('d.m.Y') . ')' : 'Lead time of orders with closing date from ' . date('d.m.Y', strtotime($kpi_closing_date_start)) . ' to ' . date('d.m.Y', strtotime($kpi_closing_date_end))) . '</h3>'; $kpi_lead .= '<table class="spo" cellspacing="0" cellpadding="0">'; $kpi_lead .= '<thead>'; $kpi_lead .= '<tr class="o">'; $kpi_lead .= '<th class="i" colspan="2" style="' . $border_dotted_bottom . $border_dotted_right . '">Running Lead Time / Lead Time</th>'; $kpi_lead .= '<th class="r" rowspan="2" style="' . $border_dotted_right . '">Target Lead Time<br/>in Days</th>'; $kpi_lead .= '<th class="d" rowspan="2" style="' . $border_dotted_right . '">Below Target</th>'; $kpi_lead .= '<th class="d" rowspan="2" style="' . $border_dotted_right . '">On Target</th>'; $kpi_lead .= '<th class="r" rowspan="2" style="' . $border_dotted_right . '">Above Target<br/>1 to 3 days</th>'; $kpi_lead .= '<th class="r" rowspan="2" style="' . $border_dotted_right . '">Above Target<br/>> 3 days</th>'; $kpi_lead .= '<th class="r" rowspan="2" style="' . $border_dotted_right . '">Total<br/>(based on Qty)</th>'; $kpi_lead .= '<th class="r" rowspan="2" style="' . $border_dotted_right . '">Lead Time<br/>Average in Days</th>'; $kpi_lead .= '<th class="r" rowspan="2">Lead Time<br/>Median in Days</th>'; $kpi_lead .= '</tr>'; $kpi_lead .= '<tr>'; $kpi_lead .= '<th style="' . $border_dotted_right . '">Category</th>'; $kpi_lead .= '<th style="' . $border_dotted_right . '">Order Type</th>'; $kpi_lead .= '</tr>'; $kpi_lead .= '</thead>'; $kpi_lead .= '<tbody>'; //Sourcing $kpi_lead .= '<tr class="e">'; $kpi_lead .= '<td><strong>Sourcing</strong></td>'; $kpi_lead .= '<td>Sourcing</td>'; $kpi_lead .= '<td class="tac"><input type="text" class="target_leadtime w040 tac" name="lt-sourcing" value="' . $target_leadtime['sourcing'] . '"' . $tooltip_info_saved . '/></td>'; $kpi_lead .= '<td class="tac">' . $below_target['sourcing'] . '<br/>' . kpiFormatPercentage($total['sourcing'], $below_target['sourcing']) . '</td>'; $kpi_lead .= '<td class="tac">' . $on_target['sourcing'] . '<br/>' . kpiFormatPercentage($total['sourcing'], $on_target['sourcing']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_1to3d['sourcing'] . '<br/>' . kpiFormatPercentage($total['sourcing'], $above_target_1to3d['sourcing']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_gt3d['sourcing'] . '<br/>' . kpiFormatPercentage($total['sourcing'], $above_target_gt3d['sourcing']) . '</td>'; $kpi_lead .= '<td class="tac">' . $total['sourcing'] . '<br/>' . kpiFormatPercentage($total['sourcing'], $total['sourcing']) . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_avg['sourcing']) ? $leadtime_avg['sourcing'] : 'N/A') . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_median['sourcing']) ? $leadtime_median['sourcing'] : 'N/A') . '</td>'; $kpi_lead .= '</tr>'; //Production $kpi_lead .= '<tr class="o">'; $kpi_lead .= '<td rowspan="3"><strong>Production</strong></td>'; $kpi_lead .= '<td>Depot Refill Orders</td>'; $kpi_lead .= '<td class="tac"><input type="text" class="target_leadtime w040 tac" name="lt-depot-refill-orders" value="' . $target_leadtime['depot-refill-orders'] . '"' . $tooltip_info_saved . '/></td>'; $kpi_lead .= '<td class="tac">' . $below_target['depot-refill-orders'] . '<br/>' . kpiFormatPercentage($total['depot-refill-orders'], $below_target['depot-refill-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . $on_target['depot-refill-orders'] . '<br/>' . kpiFormatPercentage($total['depot-refill-orders'], $on_target['depot-refill-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_1to3d['depot-refill-orders'] . '<br/>' . kpiFormatPercentage($total['depot-refill-orders'], $above_target_1to3d['depot-refill-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_gt3d['depot-refill-orders'] . '<br/>' . kpiFormatPercentage($total['depot-refill-orders'], $above_target_gt3d['depot-refill-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . $total['depot-refill-orders'] . '<br/>' . kpiFormatPercentage($total['depot-refill-orders'], $total['depot-refill-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_avg['depot-refill-orders']) ? $leadtime_avg['depot-refill-orders'] : 'N/A') . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_median['depot-refill-orders']) ? $leadtime_median['depot-refill-orders'] : 'N/A') . '</td>'; $kpi_lead .= '</tr>'; $kpi_lead .= '<tr class="o">'; $kpi_lead .= '<td>Internal Levelling Orders</td>'; $kpi_lead .= '<td class="tac"><input type="text" class="target_leadtime w040 tac" name="lt-internal-levelling-orders" value="' . $target_leadtime['internal-levelling-orders'] . '"' . $tooltip_info_saved . '/></td>'; $kpi_lead .= '<td class="tac">' . $below_target['internal-levelling-orders'] . '<br/>' . kpiFormatPercentage($total['internal-levelling-orders'], $below_target['internal-levelling-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . $on_target['internal-levelling-orders'] . '<br/>' . kpiFormatPercentage($total['internal-levelling-orders'], $on_target['internal-levelling-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_1to3d['internal-levelling-orders'] . '<br/>' . kpiFormatPercentage($total['internal-levelling-orders'], $above_target_1to3d['internal-levelling-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_gt3d['internal-levelling-orders'] . '<br/>' . kpiFormatPercentage($total['internal-levelling-orders'], $above_target_gt3d['internal-levelling-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . $total['internal-levelling-orders'] . '<br/>' . kpiFormatPercentage($total['internal-levelling-orders'], $total['internal-levelling-orders']) . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_avg['internal-levelling-orders']) ? $leadtime_avg['internal-levelling-orders'] : 'N/A') . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_median['internal-levelling-orders']) ? $leadtime_median['internal-levelling-orders'] : 'N/A') . '</td>'; $kpi_lead .= '</tr>'; $kpi_lead .= '<tr class="o">'; $kpi_lead .= '<td>Customer Orders (MTO/MMO)</td>'; $kpi_lead .= '<td class="tac"><input type="text" class="target_leadtime w040 tac" name="lt-cust-order-mto-mmo" value="' . $target_leadtime['cust-order-mto-mmo'] . '"' . $tooltip_info_saved . '/></td>'; $kpi_lead .= '<td class="tac">' . $below_target['cust-order-mto-mmo'] . '<br/>' . kpiFormatPercentage($total['cust-order-mto-mmo'], $below_target['cust-order-mto-mmo']) . '</td>'; $kpi_lead .= '<td class="tac">' . $on_target['cust-order-mto-mmo'] . '<br/>' . kpiFormatPercentage($total['cust-order-mto-mmo'], $on_target['cust-order-mto-mmo']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_1to3d['cust-order-mto-mmo'] . '<br/>' . kpiFormatPercentage($total['cust-order-mto-mmo'], $above_target_1to3d['cust-order-mto-mmo']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_gt3d['cust-order-mto-mmo'] . '<br/>' . kpiFormatPercentage($total['cust-order-mto-mmo'], $above_target_gt3d['cust-order-mto-mmo']) . '</td>'; $kpi_lead .= '<td class="tac">' . $total['cust-order-mto-mmo'] . '<br/>' . kpiFormatPercentage($total['cust-order-mto-mmo'], $total['cust-order-mto-mmo']) . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_avg['cust-order-mto-mmo']) ? $leadtime_avg['cust-order-mto-mmo'] : 'N/A') . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_median['cust-order-mto-mmo']) ? $leadtime_median['cust-order-mto-mmo'] : 'N/A') . '</td>'; $kpi_lead .= '</tr>'; //Outsourcing $kpi_lead .= '<tr class="e">'; $kpi_lead .= '<td><strong>Outsourcing</strong></td>'; $kpi_lead .= '<td>External Levelling Orders</td>'; $kpi_lead .= '<td class="tac"><input type="text" class="target_leadtime w040 tac" name="lt-external-levelling-order" value="' . $target_leadtime['external-levelling-order'] . '"' . $tooltip_info_saved . '/></td>'; $kpi_lead .= '<td class="tac">' . $below_target['external-levelling-order'] . '<br/>' . kpiFormatPercentage($total['external-levelling-order'], $below_target['external-levelling-order']) . '</td>'; $kpi_lead .= '<td class="tac">' . $on_target['external-levelling-order'] . '<br/>' . kpiFormatPercentage($total['external-levelling-order'], $on_target['external-levelling-order']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_1to3d['external-levelling-order'] . '<br/>' . kpiFormatPercentage($total['external-levelling-order'], $above_target_1to3d['external-levelling-order']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_gt3d['external-levelling-order'] . '<br/>' . kpiFormatPercentage($total['external-levelling-order'], $above_target_gt3d['external-levelling-order']) . '</td>'; $kpi_lead .= '<td class="tac">' . $total['external-levelling-order'] . '<br/>' . kpiFormatPercentage($total['external-levelling-order'], $total['external-levelling-order']) . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_avg['external-levelling-order']) ? $leadtime_avg['external-levelling-order'] : 'N/A') . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_median['external-levelling-order']) ? $leadtime_median['external-levelling-order'] : 'N/A') . '</td>'; $kpi_lead .= '</tr>'; //Customer Order $kpi_lead .= '<tr class="o">'; $kpi_lead .= '<td rowspan="2"><strong>Customer Order</strong></td>'; $kpi_lead .= '<td>Full DSO</td>'; $kpi_lead .= '<td class="tac"><input type="text" class="target_leadtime w040 tac" name="lt-full-dso" value="' . $target_leadtime['full-dso'] . '"' . $tooltip_info_saved . '/></td>'; $kpi_lead .= '<td class="tac">' . $below_target['full-dso'] . '<br/>' . kpiFormatPercentage($total['full-dso'], $below_target['full-dso']) . '</td>'; $kpi_lead .= '<td class="tac">' . $on_target['full-dso'] . '<br/>' . kpiFormatPercentage($total['full-dso'], $on_target['full-dso']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_1to3d['full-dso'] . '<br/>' . kpiFormatPercentage($total['full-dso'], $above_target_1to3d['full-dso']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_gt3d['full-dso'] . '<br/>' . kpiFormatPercentage($total['full-dso'], $above_target_gt3d['full-dso']) . '</td>'; $kpi_lead .= '<td class="tac">' . $total['full-dso'] . '<br/>' . kpiFormatPercentage($total['full-dso'], $total['full-dso']) . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_avg['full-dso']) ? $leadtime_avg['full-dso'] : 'N/A') . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_median['full-dso']) ? $leadtime_median['full-dso'] : 'N/A') . '</td>'; $kpi_lead .= '</tr>'; $kpi_lead .= '<tr class="o">'; $kpi_lead .= '<td>MTO (Full MTO and Mixed Orders)</td>'; $kpi_lead .= '<td class="tac"><input type="text" class="target_leadtime w040 tac" name="lt-mto" value="' . $target_leadtime['mto'] . '"' . $tooltip_info_saved . '/></td>'; $kpi_lead .= '<td class="tac">' . $below_target['mto'] . '<br/>' . kpiFormatPercentage($total['mto'], $below_target['mto']) . '</td>'; $kpi_lead .= '<td class="tac">' . $on_target['mto'] . '<br/>' . kpiFormatPercentage($total['mto'], $on_target['mto']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_1to3d['mto'] . '<br/>' . kpiFormatPercentage($total['mto'], $above_target_1to3d['mto']) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_gt3d['mto'] . '<br/>' . kpiFormatPercentage($total['mto'], $above_target_gt3d['mto']) . '</td>'; $kpi_lead .= '<td class="tac">' . $total['mto'] . '<br/>' . kpiFormatPercentage($total['mto'], $total['mto']) . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_avg['mto']) ? $leadtime_avg['mto'] : 'N/A') . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_median['mto']) ? $leadtime_median['mto'] : 'N/A') . '</td>'; $kpi_lead .= '</tr>'; //Design $kpi_lead .= '<tr class="e">'; $kpi_lead .= '<td rowspan="' . count($design_categories) . '"><strong>Design</strong></td>'; $des_cat_id_counter = 0; foreach ($design_categories as $des_cat_id => $des_cat_name) { $des_cat_id_counter++; if ($des_cat_id_counter > 1) { $kpi_lead .= '<tr class="e">'; } $design_order_type = "design-{$des_cat_id}"; $kpi_lead .= "<td>{$des_cat_name}</td>"; $kpi_lead .= '<td class="tac"><input type="text" class="target_leadtime w040 tac" name="lt-design-' . $des_cat_id . '" value="' . $target_leadtime[$design_order_type] . '"' . $tooltip_info_saved . '/></td>'; $kpi_lead .= '<td class="tac">' . $below_target[$design_order_type] . '<br/>' . kpiFormatPercentage($total[$design_order_type], $below_target[$design_order_type]) . '</td>'; $kpi_lead .= '<td class="tac">' . $on_target[$design_order_type] . '<br/>' . kpiFormatPercentage($total[$design_order_type], $on_target[$design_order_type]) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_1to3d[$design_order_type] . '<br/>' . kpiFormatPercentage($total[$design_order_type], $above_target_1to3d[$design_order_type]) . '</td>'; $kpi_lead .= '<td class="tac">' . $above_target_gt3d[$design_order_type] . '<br/>' . kpiFormatPercentage($total[$design_order_type], $above_target_gt3d[$design_order_type]) . '</td>'; $kpi_lead .= '<td class="tac">' . $total[$design_order_type] . '<br/>' . kpiFormatPercentage($total[$design_order_type], $total[$design_order_type]) . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_avg[$design_order_type]) ? $leadtime_avg[$design_order_type] : 'N/A') . '</td>'; $kpi_lead .= '<td class="tac">' . (isset($leadtime_median[$design_order_type]) ? $leadtime_median[$design_order_type] : 'N/A') . '</td>'; $kpi_lead .= '</tr>'; } $kpi_lead .= '</tbody>'; $kpi_lead .= '</table>'; return $kpi_lead; }
<?php ######################################### # Author : D3W4 & SAHAT # # Created : Mar 29, 2011 11:00:49 AM # ######################################### use_class('products_minierp'); use_class('design'); $design = new design(); $class_pm = new products_minierp(); $pid = tep_db_prepare_input($_GET['pid']); $d_cat = tep_db_prepare_input($_GET['dcat']); $d_cat_text = $design->getDesignCategory($d_cat); $imgsize = '150'; $products = $class_pm->retrieveDetail($pid, 'p'); $design->original_products_id = $pid; $design->category = $d_cat; $content .= '<form name="copydesign" method="post" action="?open=designs-detail">'; $content .= '<input type="hidden" name="me_action" value="CREATENEWDESIGN" />'; $content .= '<div style="float:left;margin-left:15px;">'; //LEFT Part open $margin_left = 15; $content .= '<div id="image_1" style="float:left;width:' . $imgsize . 'px;height:210px;text-align:center;">'; $content .= '<label><strong>Main Image</strong><br />'; $content .= webImage($products['p']['products_image'], $imgsize, $imgsize, 'Main Image', 'img-border', '') . '</label>'; $content .= '<input type="hidden" name="image_1" value="' . $products['p']['products_image'] . '" />'; $content .= '</div>'; $margin_left += $imgsize; $margin_left += 30; $content .= '</div>'; //LEFT Part close
$content .= '</td></tr>'; $content .= '<tr><td>Price</td><td>' . $element_price . '</td></tr>'; $content .= '<tr><td>Image</td><td colspan="2">'; $content .= '<div>'; //$content .= '<iframe id="upload_target" name="upload_target" style="width:0;height:0;border:0px solid #fff;"></iframe>'; //$content .= '<form name="frm_upload_image" action="?open=element" method="post" enctype="multipart/form-data" target="upload_target">'; //$content .= '<input type="hidden" name="me_action" value="ELEMENTUPLOADIMAGE" />'; //$content .= '<input type="hidden" id="image_elements_id" name="elements_id" />'; $content .= '<input type="file" id="upload_image" name="elements_image" disabled="disabled" />'; $content .= ' <span class="notice">* JPG 500x500 pixels</span>'; $content .= '</form>'; $content .= '</div>'; $content .= '</td></tr>'; //$content .= '<tr><td>Wax Complexity</td><td colspan="2">'.$element_wax_complexity.'</td></tr>'; $content .= '<tr><td>Wax Complexity</td><td rowspan="2" width="200">' . $element_wax_complexity . '</td>'; $descat_array = $design->getDesignCategory(); $content .= '<td><form name="el-revision" method="post" action="?open=designs-detail" enctype="multipart/form-data">'; $content .= '<input type="hidden" name="me_action" value="CREATENEWDESIGN" />'; $content .= '<select id="cbo-descat" name="cat" class="input" style="display:none;">' . loadComboListFromArray($descat_array, '', 'E') . '</select>'; $content .= '<input id="el_id" name="element_id" type="hidden" class="input" value="' . $element->id . '" />'; $content .= '<input id="el_name" name="name" type="hidden" class="input" value="Revision element ' . $element->id . '" />'; $content .= '<input type="button" id="el-revision-button" value="Revision" />'; $content .= '</form></td>'; $content .= '</tr>'; $content .= '</table>'; $content .= '</div>'; //STOCKLESS CATEGORY NOTICE $catnot_bg = '#efefef'; $catnot_fg = '#fcc'; $elcats = $class_ea->retrieveListData('cat'); $elcats_stockless = array();
function drawKPItable($kpi_title, $kpi_date = '', $hidetable = false) { global $design; use_class('products_minierp'); $class_pm = new products_minierp(); $bgst = $class_pm->retrieveBestGoodSettings(); $kpi_data = array(); $kpi_target = array(); $descats = array(); $descat_count = array(); $descat_percent = array(); $kpi_type1 = in_array($kpi_title, array('WIP', 'FIN')); //WIP: Work In Progress, FIN: Designs Finalized $kpi_type2 = in_array($kpi_title, array('PCATIP', 'PCATF')); //PCAT:Products Category >> IP:in Progress, F:Finalized $kpi_type3 = in_array($kpi_title, array('PPRIP', 'PPRF')); //PPR:Products Price >> IP:in Progress, F:Finalized $kpi_type4 = in_array($kpi_title, array('WIPT', 'FINT')); //WIPT: Work In Progress Type, FIN: Designs Finalized Type $ksd = generateKPISupportData($kpi_title, $kpi_date); $q = $ksd['q']; $kpi_id = $ksd['kpi_id']; $kpi_header = $ksd['kpi_header']; $r = tep_db_query($q); if ($kpi_type1) { $kpi_target['W'] = $bgst['kpides_catnw']; $kpi_target['R'] = $bgst['kpides_catr']; while ($row = tep_db_fetch_array($r)) { $kpi_data[$row['designs_category']] = $row['total_designs']; } $descats = design::getDesignCategory(); if (array_key_exists('', $kpi_data)) { $descats[''] = '<span class="red">Unset</span>'; } } elseif ($kpi_type2) { $kpi_target[2] = $bgst['kpides_prodnl']; $kpi_target[3] = $bgst['kpides_prodbl']; $kpi_target[4] = $bgst['kpides_proder']; $kpi_target[9] = $bgst['kpides_prodch']; $kpi_target[28] = $bgst['kpides_prodpn']; $kpi_target[29] = $bgst['kpides_prodrg']; $kpi_target[30] = $bgst['kpides_prodset']; $kpi_target[33] = $bgst['kpides_prodan']; while ($row = tep_db_fetch_array($r)) { $kpi_data[$row['products_category_id']] = $row['total_designs']; } $pcs = getProductsCategorySupportData(); $q = "SELECT {$pcs['field_id']} AS id, {$pcs['field_name']} AS name FROM {$pcs['tables']} WHERE {$pcs['filter']}"; $dbq = tep_db_query($q); while ($r = tep_db_fetch_array($dbq)) { $descats_temp[$r['id']] = $r['name']; } //SORT Product Category as Requested by user $descats_sorts = array(4 => 1, 2 => 2, 3 => 3, 29 => 4, 30 => 5, 9 => 6, 28 => 7, 33 => 8, 35 => 9); foreach ($descats_temp as $key => $val) { $descats_temp2[$descats_sorts[$key]] = $key; } ksort($descats_temp2); foreach ($descats_temp2 as $val) { $descats[$val] = $descats_temp[$val]; } } elseif ($kpi_type3) { $kpi_target[1] = $bgst['kpides_pr1target']; $kpi_target[2] = $bgst['kpides_pr2target']; $kpi_target[3] = $bgst['kpides_pr3target']; $kpi_target[4] = $bgst['kpides_pr4target']; $kpi_target[5] = $bgst['kpides_pr5target']; $kpi_target[6] = $bgst['kpides_pr6target']; $kpi_target[7] = $bgst['kpides_pr7target']; $kpi_target[8] = $bgst['kpides_pr8target']; while ($row = tep_db_fetch_array($r)) { if ($row['target_price'] >= $bgst['kpides_pr1bgn'] && $row['target_price'] <= $bgst['kpides_pr1end']) { $kpi_data[1] += $row['total_designs']; } elseif ($row['target_price'] >= $bgst['kpides_pr2bgn'] && $row['target_price'] <= $bgst['kpides_pr2end']) { $kpi_data[2] += $row['total_designs']; } elseif ($row['target_price'] >= $bgst['kpides_pr3bgn'] && $row['target_price'] <= $bgst['kpides_pr3end']) { $kpi_data[3] += $row['total_designs']; } elseif ($row['target_price'] >= $bgst['kpides_pr4bgn'] && $row['target_price'] <= $bgst['kpides_pr4end']) { $kpi_data[4] += $row['total_designs']; } elseif ($row['target_price'] >= $bgst['kpides_pr5bgn'] && $row['target_price'] <= $bgst['kpides_pr5end']) { $kpi_data[5] += $row['total_designs']; } elseif ($row['target_price'] >= $bgst['kpides_pr6bgn'] && $row['target_price'] <= $bgst['kpides_pr6end']) { $kpi_data[6] += $row['total_designs']; } elseif ($row['target_price'] >= $bgst['kpides_pr7bgn'] && $row['target_price'] <= $bgst['kpides_pr7end']) { $kpi_data[7] += $row['total_designs']; } elseif ($row['target_price'] > $bgst['kpides_pr8bgn']) { $kpi_data[8] += $row['total_designs']; } } $descats[1] = "{$bgst['kpides_pr1bgn']} - {$bgst['kpides_pr1end']}"; $descats[2] = "{$bgst['kpides_pr2bgn']} - {$bgst['kpides_pr2end']}"; $descats[3] = "{$bgst['kpides_pr3bgn']} - {$bgst['kpides_pr3end']}"; $descats[4] = "{$bgst['kpides_pr4bgn']} - {$bgst['kpides_pr4end']}"; $descats[5] = "{$bgst['kpides_pr5bgn']} - {$bgst['kpides_pr5end']}"; $descats[6] = "{$bgst['kpides_pr6bgn']} - {$bgst['kpides_pr6end']}"; $descats[7] = "{$bgst['kpides_pr7bgn']} - {$bgst['kpides_pr7end']}"; $descats[8] = "> {$bgst['kpides_pr8ge']}"; } elseif ($kpi_type4) { $kpi_target['I'] = $bgst['kpides_typib']; $kpi_target['E'] = $bgst['kpides_typeb']; $kpi_target['T'] = $bgst['kpides_typth']; while ($row = tep_db_fetch_array($r)) { $kpi_data[$row['designs_type']] += $row['total_designs']; } $descats = design::getDesignType(); if (array_key_exists('', $kpi_data)) { $descats[''] = '<span class="red">Unset</span>'; } } $descat_count_total = array_sum($kpi_data); if (count($descats) > 0) { foreach ($descats as $key => $dc) { if ($descat_count_total == 0) { $descat_count[$key] = 0; $descat_percent[$key] = 0; } else { $descat_count[$key] = !isset($kpi_data[$key]) ? 0 : $kpi_data[$key]; $descat_percent[$key] = number_format($descat_count[$key] / $descat_count_total * 100, 1); } } } $kpi_table = ''; $kpi_table .= '<div id="' . $kpi_id . '" class="ibox ui-corner-all kpi-box" style="margin:0 0 10px 10px;float:left;' . ($hidetable ? 'display:none;' : '') . '">'; $kpi_table .= '<input type="hidden" value="' . $kpi_title . '"/>'; $kpi_table .= '<h3>KPI : ' . $kpi_header . '</h3>'; $kpi_table .= '<table class="spo" border="0" cellpadding="0" cellspacing="0">'; $kpi_table .= '<tr><td class="bold">' . (in_array($kpi_title, array('WIPT', 'FINT')) ? 'Type' : 'Category') . '</td><td class="bold" colspan="2" style="white-space:nowrap;">Total Designs</td><td class="bold" style="text-align:right;">Target</td></tr>'; foreach ($descats as $key => $dc) { $kpi_table .= '<tr><td>' . $dc . '</td><td>' . $descat_count[$key] . '</td><td style="text-align:right;">' . $descat_percent[$key] . '%</td><td style="text-align:right;">' . $kpi_target[$key] . '%</td></tr>'; } $kpi_table .= '<tr><td width="100" class="bold">Total Designs</td><td width="20" class="bold">' . $descat_count_total . '</td><td width="50"> </td><td width="50"> </td></tr>'; $kpi_table .= '</table></div>'; return $kpi_table; }