db_onedev = $this->load->database("onedev", true); } public function add_notes($orderid){ } public function search() { //# cek token valid if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $startdate = $prm['startdate'] . " 00:00:01"; $enddate = $prm['enddate'] . " 23:59:59"; $search = $prm["search"]; $number_limit = 10; $number_offset = ($prm['current_page'] - 1) * $number_limit; // =============================== // BUILD WHERE DINAMIS // =============================== $where = "VoucherHeaderIsActive = 'Y' AND VoucherHeaderStartDate BETWEEN ? AND ?"; $params = [$startdate, $enddate]; if (!empty($search)) { $where .= " AND (VoucherHeaderName LIKE ? OR VoucherHeaderPrefix LIKE '%{$search}%')"; $params[] = "%{$search}%"; } // =============================== // COUNT TOTAL // =============================== $sql = "SELECT COUNT(*) as total FROM voucher_header WHERE $where"; $query = $this->db_onedev->query($sql, $params); if (!$query) { $this->sys_error_db("voucher_header count", $this->db_onedev); exit; } $tot_count = $query->row()->total; $tot_page = ceil($tot_count / $number_limit); // =============================== // GET DATA // =============================== $sql = "SELECT *, CONCAT( DATE_FORMAT(VoucherHeaderStartDate,'%d-%m-%Y'), ' s/d ', DATE_FORMAT(VoucherHeaderEndDate,'%d-%m-%Y') ) as periode, 'N' isused FROM voucher_header WHERE $where ORDER BY VoucherHeaderID DESC LIMIT $number_limit OFFSET $number_offset"; $query = $this->db_onedev->query($sql, $params); if (!$query) { $this->sys_error_db("voucher_header list", $this->db_onedev); exit; } $rows = $query->result_array(); foreach ($rows as $k => $v) { $x = $this->db_onedev->query("select count(*) as tot FROM voucher_detail where VoucherDetailVoucherHeaderID = '{$v['VoucherHeaderID']}' AND VoucherDetailIsUsed = 'Y'")->row(); if($x->tot == 0){ $isused = 'N'; }else{ $isused = 'Y'; } $rows[$k]['isused'] = $isused; } $result = [ "total" => $tot_page, "records" => $rows ]; $this->sys_ok($result); exit; } public function searchdetail() { //# cek token valid if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $search = isset($prm["search"]) ? $prm["search"] : ''; $ID = isset($prm["ID"]) ? (int) $prm["ID"] : 0; $status = isset($prm["status"]) ? $prm["status"] : ''; // '' = semua, 'N' = belum dipakai, 'Y' = sudah dipakai $number_limit = 10; $number_offset = ($prm['current_page'] - 1) * $number_limit; // =============================== // BUILD WHERE DINAMIS // =============================== $where = "VoucherDetailIsActive = 'Y'"; if (!empty($search)) { $where .= " AND (VoucherDetailNumber LIKE '%{$search}%' OR IFNULL(T_OrderHeaderLabNumber,'') LIKE '%{$search}%')"; } if ($status === 'Y') { $where .= " AND VoucherDetailIsUsed = 'Y'"; } elseif ($status === 'N') { $where .= " AND VoucherDetailIsUsed = 'N'"; } // =============================== // COUNT TOTAL // =============================== $sql = "SELECT COUNT(*) as total FROM voucher_detail LEFT JOIN t_orderheader ON T_OrderHeaderID = VoucherDetailT_OrderHeaderID WHERE $where AND ($ID = 0 OR($ID > 0 AND VoucherDetailVoucherHeaderID = $ID))"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("voucher_detail count", $this->db_onedev); exit; } $tot_count = $query->row()->total; $tot_page = ceil($tot_count / $number_limit); // =============================== // GET DATA // =============================== $sql = "SELECT VoucherDetailID, VoucherDetailT_OrderHeaderID, VoucherDetailVoucherHeaderID, VoucherDetailNumber, VoucherDetailIsUsed, IFNULL(T_OrderHeaderLabNumber,'') T_OrderHeaderLabNumber, IF(VoucherDetailIsUsed = 'Y', 'Digunakan','Belum Digunakan') statusvoucher, T_OrderHeaderDate FROM voucher_detail LEFT JOIN t_orderheader ON T_OrderHeaderID = VoucherDetailT_OrderHeaderID WHERE $where AND ($ID = 0 OR($ID > 0 AND VoucherDetailVoucherHeaderID = $ID)) ORDER BY VoucherDetailNumber DESC LIMIT $number_limit OFFSET $number_offset"; $query = $this->db_onedev->query($sql); if (!$query) { $this->sys_error_db("voucher_header list", $this->db_onedev); exit; } $rows = $query->result_array(); foreach ($rows as $k => $v) { $x = $this->db_onedev->query("select count(*) as tot FROM voucher_detail where VoucherDetailVoucherHeaderID = '{$v['VoucherHeaderID']}' AND VoucherDetailIsUsed = 'Y'")->row(); if($x->tot == 0){ $isused = 'N'; }else{ $isused = 'Y'; } $rows[$k]['isused'] = $isused; } $result = [ "total" => $tot_page, "records" => $rows ]; $this->sys_ok($result); exit; } public function save() { //# ambil parameter input $prm = $this->sys_input; $puserid = $prm['pUserID']; $sql = "CALL sp_fo_send_to_cashier({$puserid})"; $query = $this->db_onedev->query($sql); if ($query) { $result = array(); $this->sys_ok($result); } else { $this->sys_error_db("payment save rows", $this->db_onedev); exit; } } public function savetutup() { //# ambil parameter input $prm = $this->sys_input; $ppaymentkasirid = $prm['pPaymentKasirID']; $puserid = $prm['pUserID']; $sql = "CALL sp_fo_received_cashier('{$ppaymentkasirid}','{$puserid}')"; //$sql = "CALL sp_fo_send_to_cashier({$puserid})"; $query = $this->db_onedev->query($sql); if ($query) { $result = array(); $this->sys_ok($result); } else { $this->sys_error_db("payment savetutup rows", $this->db_onedev); exit; } } public function saveData() { $this->db->trans_begin(); try { $prm = $this->sys_input; $userid = $this->sys_user["M_UserID"]; $VoucherHeaderID = (int)$prm['xid']; $VoucherHeaderName = $prm['VoucherHeaderName']; $VoucherHeaderPrefix = $prm['VoucherHeaderPrefix']; $VoucherHeaderAmount = $prm['VoucherHeaderAmount']; $VoucherHeaderQty = (int)$prm['VoucherHeaderQty']; $VoucherHeaderNote = $prm['VoucherHeaderNote']; $VoucherHeaderStartDate = $prm['VoucherHeaderStartDate']; $VoucherHeaderEndDate = $prm['VoucherHeaderEndDate']; // ====================================== // 1️⃣ JIKA INSERT BARU // ====================================== if ($VoucherHeaderID == 0) { $header_data = [ 'VoucherHeaderName' => $VoucherHeaderName, 'VoucherHeaderPrefix' => $VoucherHeaderPrefix, 'VoucherHeaderAmount' => $VoucherHeaderAmount, 'VoucherHeaderQty' => $VoucherHeaderQty, 'VoucherHeaderNote' => $VoucherHeaderNote, 'VoucherHeaderStartDate' => $VoucherHeaderStartDate, 'VoucherHeaderEndDate' => $VoucherHeaderEndDate, 'VoucherHeaderIsActive' => 'Y', 'VoucherHeaderCreated' => date('Y-m-d H:i:s'), 'VoucherHeaderUserID' => $userid ]; $this->db->insert('voucher_header', $header_data); $VoucherHeaderID = $this->db->insert_id(); } // ====================================== // 2️⃣ JIKA UPDATE // ====================================== else { // update header saja (TIDAK ubah IsActive) $this->db->where('VoucherHeaderID', $VoucherHeaderID); $this->db->update('voucher_header', [ 'VoucherHeaderName' => $VoucherHeaderName, 'VoucherHeaderPrefix' => $VoucherHeaderPrefix, 'VoucherHeaderAmount' => $VoucherHeaderAmount, 'VoucherHeaderQty' => $VoucherHeaderQty, 'VoucherHeaderNote' => $VoucherHeaderNote, 'VoucherHeaderStartDate' => $VoucherHeaderStartDate, 'VoucherHeaderEndDate' => $VoucherHeaderEndDate, 'VoucherHeaderUserID' => $userid ]); // nonaktifkan detail lama $this->db->where('VoucherDetailVoucherHeaderID', $VoucherHeaderID); $this->db->update('voucher_detail', [ 'VoucherDetailIsActive' => 'N' ]); } // ====================================== // 3️⃣ GENERATE DETAIL BARU // ====================================== $insert_detail = []; for ($i = 1; $i <= $VoucherHeaderQty; $i++) { $insert_detail[] = [ 'VoucherDetailVoucherHeaderID' => $VoucherHeaderID, 'VoucherDetailNumber' => $VoucherHeaderPrefix . str_pad($i, 4, '0', STR_PAD_LEFT), 'VoucherDetailIsActive' => 'Y', 'VoucherDetailUserID' => $userid ]; } $this->db->insert_batch('voucher_detail', $insert_detail); if ($this->db->trans_status() === FALSE) { throw new Exception("Transaction gagal"); } $this->db->trans_commit(); echo json_encode([ "status" => "OK", "VoucherHeaderID" => $VoucherHeaderID, "total_generated" => $VoucherHeaderQty ]); exit; } catch (Exception $e) { $this->db->trans_rollback(); echo json_encode([ "status" => "ERROR", "message" => $e->getMessage() ]); exit; } } }