db = $this->load->database("regional", true); // string database // $this->db_str_doctor = 'one_doctor'; } public function index() { echo "NAT REPORT API"; } function get($url, $timeout = 60, $c_timeout = 5) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $c_timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); $err_msg = curl_error($ch); if ($err_msg != "") { return json_encode(["status" => "ERR", "message" => $err_msg]); } return $result; } function reply_err($message) { echo json_encode(["status" => "ERR", "data" => $message]); exit(); } public 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, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Content-Type: application/text", "Content-Length: " . strlen($data), ]); $result = curl_exec($ch); if (curl_error($ch) != "") { echo json_encode([ "status" => "ERR", "message" => "Http Error : " . curl_error($ch), ]); curl_close($ch); exit(); } curl_close($ch); return $result; } function log($msg) { // $dt = Date("Y-m-d H:i:s"); // echo "$dt $msg \n"; echo $msg; } function get_param_z() { $body_z = file_get_contents("php://input"); $body = gzuncompress($body_z); return json_decode($body, true); } function reply($resp) { echo json_encode($resp); } function reply_gz($resp) { //echo json_encode($resp); echo gzcompress(json_encode($resp)); } // nat_sales start function get_sales($T_OrderHeaderDate) { // print_r($T_OrderHeaderDate); $sql_sales = "with branch as ( select M_BranchID, M_BranchCode from m_branch where M_BranchIsActive='Y' and M_BranchIsDefault ='Y' ) select M_BranchID, M_BranchCode, date(T_OrderHeaderDate) day, month(T_OrderHeaderDate) month, year(T_OrderHeaderDate) year, quarter(T_OrderHeaderDate) quarter, T_OrderHeaderM_CompanyID, Nat_TestNat_GroupID, Nat_TestNat_SubGroupID, sum(SsPiutangTestPrice) SalesPrice, sum(SsPiutangTestDiscTotal) SalesDiscount, sum(SsPiutangTestTotal) SalesTotal, sum(if(T_TestIsPrice='Y',1,0) ) CountPx from t_orderheader join ss_piutang on T_OrderHeaderID = SsPiutangT_OrderHeaderID and SsPiutangType in ( 'A1','A2','A3') and T_OrderHeaderIsActive = 'Y' and date(T_OrderHeaderDate) = ? join ss_piutang_test on SsPiutangID = SsPiutangTestSsPiutangID join t_test on SsPiutangTestT_TestID = T_TestID join nat_test on T_TestNat_TestID = Nat_TestID, branch group by Nat_TestID, Nat_TestNat_GroupID, Nat_TestNat_SubGroupID "; $qry_sales = $this->db->query($sql_sales, [ $T_OrderHeaderDate ]); if (!$qry_sales) { $this->db->trans_rollback(); $this->sys_error_db("error select sales ss_piutang", $this->db); exit; } $row_sales = $qry_sales->result_array(); if (count($row_sales) == 0) { // $this->sys_error('sales Tidak Ada'); return json_encode( array( 'status' => 'OK', 'message' => 'Data Tidak Ada', 'data' => $row_sales, 'total_recors' => count($row_sales) ) ); } else { return json_encode( array( 'status' => 'OK', 'data' => $row_sales, 'total_recors' => count($row_sales) ) ); } } function upload_nat_sales_nat_report_range($start_date = "", $end_date = "") { // $T_OrderHeaderDate = ""; if ($start_date == "") { $start_date = date('Y-m-d'); } if ($end_date == "") { $end_date = date('Y-m-d'); } if ($end_date < $start_date) { $this->reply([ "status" => "ERR", 'message' => "Start date lebih besar dari end date" ]); exit; } // check max jarak start date dan end date adalah 10 hari but failed if (($end_date - $start_date) / 60 / 60 / 24 > 10) { $this->reply([ "status" => "ERR", 'message' => "Maksimal jarak start date dan end date adalah 10 hari" ]); exit; } for ($date = $start_date; $date <= $end_date;) { // echo $date; $date = date("Y-m-d", strtotime("$date + 1 day")); // echo "\n"; // echo $date; $this->upload_nat_sales_nat_report_gzcompress($date); sleep(3); } } function upload_nat_sales_nat_report_gzcompress($date = "") { // check format tanggal $T_OrderHeaderDate = ""; if ($date == "") { $T_OrderHeaderDate = date('Y-m-d'); } else { $T_OrderHeaderDate = $date; } $this->db->trans_begin(); $j_param = $this->get_sales($T_OrderHeaderDate); $result = json_decode($j_param, true); if (count($result['data']) > 0) { $size = round(strlen($j_param) / 1024, 2); $z_param = gzcompress($j_param, 9); $size_z = round(strlen($z_param) / 1024, 2); $url = "http://$this->IP_ADDRESS/one-api/one-dash/R_sales/r_sales_upload_log"; //$this->log("Post to $url | size : $size k | comprezzed $size_z k"); $resp = $this->post($url, $z_param); $j_resp = json_decode($resp, true); // $j_resp_x = $this->get_param_z(); // print_r($j_resp); // print_r($resp); // print_r($j_resp_x); if ($j_resp["status"] == "OK") { $this->db->trans_commit(); // $this->db->trans_rollback(); $this->reply(["status" => "OK", 'message' => "Proses upload sudah berhasil. $url, $size_z k"]); } else { $this->db->trans_rollback(); // print_r($j_resp['status']); $this->reply([ "status" => "ERR", 'message' => "Gagal update", 'debug' => print_r($resp, true) ]); } } else { $this->db->trans_rollback(); // print_r($j_resp['status']); $this->reply([ "status" => "OK", 'message' => "Tidak Ada Data", 'debug' => print_r($resp, true) ]); } } // nat_sales end // nat payment start function get_payment($T_OrderHeaderDate) { // print_r($T_OrderHeaderDate); $sql_payment = "with branch as ( select M_BranchID, M_BranchCode from m_branch where M_BranchIsActive='Y' and M_BranchIsDefault ='Y' ), payment as ( select T_OrderHeaderID, T_OrderHeaderM_CompanyID, date(T_OrderHeaderDate) orderDay, month(T_OrderHeaderDate) orderMonth, quarter(T_OrderHeaderDate) orderQuarter, year(T_OrderHeaderDate) orderYear, ssPiutangDate, ssPiutangTotal piutangTotal, sum(ssPiutangPayment) as paymentTotal, max(ssPiutangIsLunas) isLunas from t_orderheader join ss_piutang on SsPiutangT_OrderHeaderID = T_OrderHeaderID and date(T_OrderHeaderDate) = ? and date(SsPiutangDate) >= ? and SsPiutangIsActive = 'Y' and SsPiutangPayment <> 0 group by T_OrderHeaderID, SsPiutangDate ) select M_BranchID, M_BranchCode, T_OrderHeaderM_CompanyID, orderDay, orderMonth, orderQuarter, orderYear, ssPiutangDate paymentDay, month(ssPiutangDate) month, year(ssPiutangDate) year, quarter(ssPiutangDate) quarter, sum(piutangTotal) piutang, sum(paymentTotal) paymentTotal, sum(piutangTotal) - sum(paymentTotal) sisaPiutang from payment,branch group by T_OrderHeaderM_CompanyID, orderDay, orderMonth, orderQuarter, orderYear, paymentDay, month, year, quarter order by paymentDay"; $qry_payment = $this->db->query($sql_payment, [ $T_OrderHeaderDate, $T_OrderHeaderDate, ]); if (!$qry_payment) { $this->db->trans_rollback(); $this->sys_error_db("error select sales ss_piutang", $this->db); exit; } $row_payment = $qry_payment->result_array(); if (count($row_payment) == 0) { // $this->sys_error('sales Tidak Ada'); return json_encode( array( 'status' => 'OK', 'message' => 'Data Tidak Ada', 'data' => $row_payment, 'total_recors' => count($row_payment) ) ); } else { return json_encode( array( 'status' => 'OK', 'total_recors' => count($row_payment), 'data' => $row_payment, ) ); } } function upload_nat_payment_nat_report_gzcompress($date = "") { // check format tanggal $T_OrderHeaderDate = ""; if ($date == "") { $T_OrderHeaderDate = date('Y-m-d'); } else { $T_OrderHeaderDate = $date; } $this->db->trans_begin(); $j_param = $this->get_payment($T_OrderHeaderDate); $result = json_decode($j_param, true); if (count($result['data']) > 0) { $size = round(strlen($j_param) / 1024, 2); $z_param = gzcompress($j_param, 9); $size_z = round(strlen($z_param) / 1024, 2); $url = "http://$this->IP_ADDRESS/one-api/one-dash/R_payment/r_payment_upload_log"; // $this->log("Post to $url | size : $size k | comprezzed $size_z k"); $resp = $this->post($url, $z_param); $j_resp = json_decode($resp, true); // $j_resp_x = $this->get_param_z(); // print_r($j_resp); // print_r($resp); // print_r($j_resp_x); if ($j_resp["status"] == "OK") { $this->db->trans_commit(); // $this->db->trans_rollback(); $this->reply(["status" => "OK", 'message' => "Proses upload sudah berhasil. $url | $size_z k"]); } else { $this->db->trans_rollback(); // print_r($j_resp['status']); $this->reply([ "status" => "ERR", 'message' => "Gagal update", 'debug' => print_r($resp, true) ]); } } else { $this->db->trans_rollback(); // print_r($j_resp['status']); $this->reply([ "status" => "OK", 'message' => "Tidak Ada Data", 'debug' => print_r($resp, true) ]); } } function upload_nat_payment_nat_report_range($start_date = "", $end_date = "") { // $T_OrderHeaderDate = ""; if ($start_date == "") { $start_date = date('Y-m-d'); } if ($end_date == "") { $end_date = date('Y-m-d'); } if ($end_date < $start_date) { $this->reply([ "status" => "ERR", 'message' => "Start date lebih besar dari end date" ]); exit; } // check max jarak start date dan end date adalah 10 hari but failed if (($end_date - $start_date) / 60 / 60 / 24 > 10) { $this->reply([ "status" => "ERR", 'message' => "Maksimal jarak start date dan end date adalah 10 hari" ]); exit; } for ($date = $start_date; $date <= $end_date;) { // echo $date; $date = date("Y-m-d", strtotime("$date + 1 day")); // echo "\n"; // echo $date; $this->upload_nat_payment_nat_report_gzcompress($date); sleep(3); } } // nat payment end }