url_renderer = "http://devkedungdoro.aplikasi.web.id:3000/chart"; } function staff_group($sdate, $edate) { $sql = "SELECT employee_id, employee_name, ROUND(SUM(unit_amount),1) AS s_hour FROM one_support.odoo_timesheet WHERE date_trx BETWEEN '{$sdate}' AND '{$edate}' GROUP BY employee_id"; $qry_total_data = $this->db->query($sql); $this->check_error($qry_total_data, "get xTotalAll mcu"); $rows = $qry_total_data->result_array(); if (count($rows) == 0) { $result = array( 'employeeNames' => ["No Employee Found"], 'employeeIds' => ["0"], 's_hour' => ["0"] ); header("Content-Type: application/json"); echo json_encode($result); return; } $employeeNames = array(); $employeeIds = array(); $employeeHours = array(); foreach ($rows as $row) { $employeeNames[] = $row['employee_name']; $employeeIds[] = $row['employee_id']; $employeeHours[] = $row['s_hour']; } // Remove duplicate entries and reindex arrays $employeeNames = array_values(array_unique($employeeNames)); $employeeIds = array_values(array_unique($employeeIds)); $employeeHours = array_values($employeeHours); // Prepare response $response = array( 'employeeNames' => $employeeNames, 'employeeIds' => $employeeIds, 's_hour' => $employeeHours ); // Set header and output JSON header('Content-Type: application/json'); echo json_encode($response); } function staff_detail($type, $id, $sdate, $edate) { if ($type == "client") { $sql = "SELECT project_name item, sum(unit_amount) as s_hour FROM one_support.odoo_timesheet WHERE date_trx BETWEEN '{$sdate}' AND '{$edate}' AND employee_id = '$id' GROUP BY item ORDER BY item "; } else { //project $sql = "SELECT if (regexp_substr(task_name,'(#\\\\w+)') = '', 'other', regexp_substr(task_name,'(#\\\\w+)') ) item, sum(unit_amount) as s_hour FROM one_support.odoo_timesheet WHERE date_trx BETWEEN '{$sdate}' AND '{$edate}' AND employee_id = '$id' GROUP BY item ORDER BY item "; } $qry = $this->db->query($sql); $this->check_error($qry, "get project_name"); $rows = $qry->result_array(); if (count($rows) == 0) { $result = array( 'item' => ["No Data Found"], 'itemHours' => [0], 'hours' => [0], ); header("Content-Type: application/json"); echo json_encode($result); return; } $itemName = []; $itemHours = []; $hours = []; $total_val = 0.0; // Hitung total jam foreach ($rows as $itm) { $total_val += $itm['s_hour']; } // Tambahkan data ke array foreach ($rows as $itm) { $formatted = number_format(($itm['s_hour'] / $total_val) * 100, 2, '.', ''); $itemName[] = $itm['item']; $itemHours[] = $formatted; $hours[] = number_format($itm['s_hour'], 2); } $result = array( 'itemNames' => $itemName, 'itemHours' => $itemHours, 'hours' => $hours ); header("Content-Type: application/json"); echo json_encode($result); } function project_group($sdate, $edate) { // Query untuk mengambil data dari database $sql = "SELECT project_name, sum(unit_amount) as s_hour FROM one_support.odoo_timesheet WHERE date_trx BETWEEN '{$sdate}' AND '{$edate}' AND unit_amount > 0 GROUP BY project_name ORDER BY project_name "; $qry = $this->db->query($sql); $this->check_error($qry, "get project_name"); $rows = $qry->result_array(); // Periksa apakah ada data if (count($rows) == 0) { $result = array( 'projectNames' => ["No Data Found"], 'projectHours' => [0], 'hours' => [0] ); header("Content-Type: application/json"); echo json_encode($result); return; } // Inisialisasi array untuk nama dan jam proyek $projectNames = []; $projectHours = []; $hours = []; $total_val = 0.0; // Hitung total jam foreach ($rows as $itm) { $total_val += $itm['s_hour']; } $other_val = 0.0; $limit = count($rows); // Limit jumlah item yang ditampilkan secara langsung $count = 0; // Tambahkan data ke array foreach ($rows as $itm) { $formatted = number_format(($itm['s_hour'] / $total_val) * 100, 2, '.', ''); if ($count < $limit) { $projectNames[] = $itm['project_name']; $projectHours[] = $formatted; $hours[] = number_format($itm['s_hour'], 2); } else { $other_val += floatval($formatted); $other_hour += number_format($itm['s_hour'], 2);; } $count++; } // Tambahkan data 'Lainnya' jika ada if ($other_val > 0) { $projectNames[] = 'Lainnya'; $projectHours[] = floatval($other_val); $hours[] = $other_hour; } // Output data dalam format JSON $result = array( 'projectNames' => $projectNames, 'projectHours' => $projectHours, 'hours' => $hours ); header("Content-Type: application/json"); echo json_encode($result); } function project_pramita_sup($sdate, $edate) { // Query untuk mengambil data dari database $sql = "WITH categories AS ( SELECT 'Support' AS category, 1 AS sort_order UNION ALL SELECT 'Point Reward', 2 UNION ALL SELECT 'Accounting', 3 UNION ALL SELECT 'Pola Kelainan', 4 UNION ALL SELECT 'Satu Sehat', 5 UNION ALL SELECT 'Inventory', 6 UNION ALL SELECT 'Meeting', 7 UNION ALL SELECT 'Other', 8 ) SELECT c.category, COALESCE(SUM(ot.unit_amount), 0) AS s_hour FROM categories c LEFT JOIN ( SELECT CASE WHEN task_name LIKE '%[[]%[]]%' THEN 'Support' WHEN task_name LIKE '%#accounting%' THEN 'Accounting' WHEN task_name LIKE '%#support%' THEN 'Support' WHEN task_name LIKE '%#point%' THEN 'Point Reward' WHEN task_name LIKE '%#mcu%' THEN 'Pola Kelainan' WHEN task_name LIKE '%#sehat%' THEN 'Satu Sehat' WHEN task_name LIKE '%#inventory%' THEN 'Inventory' WHEN task_name LIKE '%#meeting%' THEN 'Meeting' ELSE 'Other' END AS category, unit_amount FROM one_support.odoo_timesheet WHERE date_trx BETWEEN '{$sdate}' AND '{$edate}' AND project_id = 70 ) ot ON c.category = ot.category GROUP BY c.category, c.sort_order ORDER BY c.sort_order"; $qry = $this->db->query($sql); $this->check_error($qry, "get task_name"); $rows = $qry->result_array(); // Periksa apakah ada data if (count($rows) == 0) { $result = array( 'taskCategory' => ["No Data Found"], 'taskHours' => [0], 'hours' => [0] ); header("Content-Type: application/json"); echo json_encode($result); return; } // Inisialisasi array untuk nama dan jam proyek $projectNames = array(); $projectHours = array(); $hours = []; $total_val = 0.0; $other_hour = 0.0; // Inisialisasi variabel other_hour // Hitung total jam foreach ($rows as $itm) { $total_val += $itm['s_hour']; } $other_val = 0.0; $limit = count($rows); // Limit jumlah item yang ditampilkan secara langsung $count = 0; // Tambahkan data ke array foreach ($rows as $itm) { $formatted = number_format(($itm['s_hour'] / $total_val) * 100, 2, '.', ''); if ($count < $limit) { $projectNames[] = $itm['category']; if (is_null($formatted) || is_nan($formatted)) { $formatted = 0; // Jika null atau NaN, set jadi 0 } $projectHours[] = $formatted; $hours[] = number_format($itm['s_hour'], 2); } else { $other_val += floatval($formatted); $other_hour += floatval($itm['s_hour']); // Konversi ke float untuk akurasi } $count++; } // Pastikan other_val tidak null atau NaN // Tambahkan data 'Lainnya' jika ada if ($other_val > 0) { $projectNames[] = 'Lainnya'; $projectHours[] = floatval($other_val); $hours[] = number_format($other_hour, 2); // Format nilai other_hour } // Output data dalam format JSON $result = array( 'taskCategory' => $projectNames, 'taskHours' => $projectHours, 'hours' => $hours ); header("Content-Type: application/json"); echo json_encode($result); } function all($sdate, $edate) { // $sql = "SELECT project_name, sum(unit_amount) as s_hour // FROM one_support.odoo_timesheet // WHERE date_trx BETWEEN '{$sdate}' AND '{$edate}'"; // get total hour and employee between start and end date $sql = "SELECT COUNT(employee_name) as n_employee, IFNULL(SUM(s_hour), 0) as total FROM (SELECT employee_name, project_name, sum(unit_amount) as s_hour FROM one_support.odoo_timesheet WHERE date_trx BETWEEN '{$sdate}' AND '{$edate}' GROUP BY employee_name ) as x"; $qry = $this->db->query($sql); $this->check_error($qry, "get project_name"); $rows = $qry->result_array(); if (count($rows) == 0) { $this->chart_error("No data found"); } // get total weekdays between start and end date $sql_weekdays = "SELECT COUNT(day_code) as tot_weekday FROM (SELECT WEEKDAY(date_trx) as day_code FROM one_support.odoo_timesheet WHERE date_trx BETWEEN '{$sdate}' AND '{$edate}' GROUP BY date_trx ) as x WHERE x.day_code != 6 AND x.day_code != 5"; $wk_qry = $this->db->query($sql_weekdays); $this->check_error($wk_qry, "get project_name"); $row_wk = $wk_qry->result_array(); if (count($row_wk) == 0) { $this->chart_error("No data found"); } // calc percentage total hour / n_weekday * 8 * n_employee $week_hour = $row_wk[0]['tot_weekday'] * 8 * $rows[0]['n_employee']; $value = ($rows[0]['total'] / $week_hour) * 100; $formatted = number_format($value, 2, '.', ''); if (is_nan(floatval($formatted)) || is_infinite(floatval($formatted))) { $formatted = 0; } $result = [ 'value' => $formatted ]; // 3. encapsulate in config attribute and json encode header("Content-Type: application/json"); echo json_encode($result); } function coba() { echo ("ADA"); } function check_error($qry, $stage) { if (!$qry) { $errMsg = $stage . "
" . $this->db->error()["messge"]; print_r($errMsg); $this->chart_error($errMsg); } } function chart_error($msg) { $param = array( 'title' => array( 'show' => true, 'textStyle' => array( 'color' => 'grey', 'fontSize' => 20 ), 'text' => $msg, 'left' => 'center', 'top' => 'center' ), 'xAxis' => array( 'show' => false ), 'yAxis' => array( 'show' => false ), 'series' => array() ); header("Content-Type: image/png"); $config = ["config" => $param]; $j_param = json_encode($config); echo $this->post($this->url_renderer, $j_param); exit; } function post($url, $data) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, j120); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Content-Type: application/json", "Content-Length: " . strlen($data), ]); $result = curl_exec($ch); if (curl_errno($ch) > 0) { return [ "status" => "ERR", "message" => curl_error($ch), ]; } $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode != 200) { return [ "status" => "ERR", "message" => "Http Response : $httpCode", ]; } return $result; } }