Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /proc/self/root/var/www/laciasmara.com/public_html/shop/application/controllers/admin/ |
Upload File : |
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Warranty extends Admin_Controller { function __construct() { parent::__construct(); $this->load->model('customer_m'); $this->load->model('product_m'); } public function index() { redirect('admin/warranty/manage'); } //this is to list all resellers public function manage() { $data['userdata'] = $this->session->userdata(); $data['title'] = 'Daftar Klaim Garansi | Laciasmara'; $this->load->view('admin_new/layouts/header', $data); $this->load->view('admin_new/warranty/manage_claim'); $this->load->view('admin_new/layouts/footer'); } public function get_claims() { $sort = $this->input->get('sort', true); $dateFilter = $this->input->get('date_filter', true); $startDate = $this->input->get('start_date', true); $endDate = $this->input->get('end_date', true); // Status filter $isAnalysing = filter_var($this->input->get('isAnalysing', true), FILTER_VALIDATE_BOOLEAN); // Status = 1 $isProductApproved = filter_var($this->input->get('isProductApproved', true), FILTER_VALIDATE_BOOLEAN); // Status = 2 $isVoucherApproved = filter_var($this->input->get('isVoucherApproved', true), FILTER_VALIDATE_BOOLEAN); // Status = 6 $isDelivered = filter_var($this->input->get('isDelivered', true), FILTER_VALIDATE_BOOLEAN); // Status = 4 $isRejected = filter_var($this->input->get('isRejected', true), FILTER_VALIDATE_BOOLEAN); // Status = 3 $statusArray = []; if ($isAnalysing) { $statusArray[] = 1; // Proses Analisa } if ($isProductApproved) { $statusArray[] = 2; // Disetujui Barang } if ($isVoucherApproved) { $statusArray[] = 6; // Disetujui Voucher } if ($isDelivered) { $statusArray[] = 4; // Terkirim } if ($isRejected) { $statusArray[] = 3; // Ditolak } $page = (int) ($this->input->get('page', true) ?? 1); $limit = (int) ($this->input->get('limit', true) ?? 10); $offset = ($page - 1) * $limit; $searchTerm = $this->input->get('search', true); // Base query $this->db->select('cg.*, c.name as customer_name, c.email as customer_email, o.id_orders, od.item_id as product_detail_id, p.id_products as product_id, p.title as product_title'); $this->db->from('claim_garansi cg'); $this->db->join('customers c', 'c.id_customers = cg.customer_id', 'left'); $this->db->join('orders o', 'o.id_orders = cg.no_order_id', 'left'); $this->db->join('orders_detail od', 'od.orders_id = o.id_orders AND od.id_orders_detail = cg.no_order_detail_id', 'left'); $this->db->join('products p', 'p.id_products = od.product_id', 'left'); // Status filter if (!empty($statusArray)) { $this->db->where_in('cg.status', $statusArray); } // Date filter if ($dateFilter) { switch ($dateFilter) { case 'today': $this->db->where('DATE(cg.created) = CURDATE()'); break; case 'yesterday': $this->db->where('DATE(cg.created) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)'); break; case 'last7days': $this->db->where('cg.created >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)'); break; case 'last30days': $this->db->where('cg.created >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)'); break; case 'thisMonth': $this->db->where('MONTH(cg.created) = MONTH(CURDATE()) AND YEAR(cg.created) = YEAR(CURDATE())'); break; case 'thisYear': $this->db->where('YEAR(cg.created) = YEAR(CURDATE())'); break; case 'custom': if (!empty($startDate) && !empty($endDate)) { $this->db->where('cg.created >=', $startDate); $this->db->where('cg.created <=', $endDate); } break; } } // Search filter if (!empty($searchTerm)) { $this->db->group_start(); $this->db->like('c.name', $searchTerm); $this->db->or_like('c.email', $searchTerm); $this->db->or_like('o.id_orders', $searchTerm); $this->db->or_like('p.title', $searchTerm); $this->db->or_like('cg.reason_claim', $searchTerm); $this->db->or_like('cg.keterangan', $searchTerm); $this->db->group_end(); } // Count total records before pagination $totalRecords = $this->db->count_all_results('', false); // Sorting switch ($sort) { case 'terbaru': $this->db->order_by('cg.created', 'DESC'); break; case 'terlama': $this->db->order_by('cg.created', 'ASC'); break; default: $this->db->order_by('cg.created', 'DESC'); // Default sorting } // Pagination $this->db->limit($limit, $offset); // Execute final query $query = $this->db->get(); $claims = $query->result(); // Pagination info $pagination = [ 'total_records' => $totalRecords, 'total_pages' => ceil($totalRecords / $limit), 'current_page' => $page, 'limit' => $limit ]; // Method to get status label $getStatusLabel = function ($status) { switch ($status) { case 1: return 'Proses Analisa'; case 2: return 'Disetujui Barang'; case 6: return 'Disetujui Voucher'; case 4: return 'Terkirim'; case 3: return 'Ditolak'; default: return 'Status Tidak Dikenal'; } }; // Attach pagination and status label to each claim foreach ($claims as $claim) { $claim->_pagination = $pagination; $claim->status_label = $getStatusLabel($claim->status); } echo json_encode($claims); } public function get_claim_status_label($status) { switch ($status) { case 1: return 'Proses Analisa'; case 2: return 'Disetujui Barang'; case 6: return 'Disetujui Voucher'; case 4: return 'Terkirim'; case 3: return 'Ditolak'; default: return 'Status Tidak Dikenal'; } } public function get_claim_detail($id_claim) { $this->db->select('*'); $this->db->from('claim_garansi'); $this->db->where('id_claim', $id_claim); $query = $this->db->get(); $claim = $query->row(); if ($claim) { echo json_encode($claim); } else { echo json_encode(['error' => 'Claim not found']); } } public function update_keterangan() { $id_claim = $this->input->post('id_claim'); $keterangan = $this->input->post('keterangan'); $data = [ 'keterangan' => $keterangan ]; $this->db->where('id_claim', $id_claim); $update = $this->db->update('claim_garansi', $data); if ($update) { echo json_encode([ 'status' => 'success', 'message' => 'Keterangan berhasil diperbarui' ]); } else { echo json_encode([ 'status' => 'error', 'message' => 'Gagal memperbarui keterangan' ]); } } public function update_status() { $id_claim = $this->input->post('id_claim'); $status = $this->input->post('status'); $keterangan = $this->input->post('keterangan'); // Ambil data claim saat ini $this->db->select('*')->from('claim_garansi')->where('id_claim', $id_claim); $claim = $this->db->get()->row(); // Cek status saat ini $current_status = $claim->status; // Hanya update jika status berubah if ($current_status != $status) { // Data untuk update $data = [ 'status' => $status, 'keterangan' => $keterangan ?? $claim->keterangan ]; // Update status claim $this->db->where('id_claim', $id_claim); $update = $this->db->update('claim_garansi', $data); // Jika status disetujui barang (status 2) if ($status == 2) { // Ambil detail order $this->db->select('item_id, product_id, warehouse_id')->from('orders_detail') ->where('id_orders_detail', $claim->no_order_detail_id); $order_detail = $this->db->get()->row(); // Ambil stok saat ini $this->db->select('id, stock')->from('stock') ->where('id_product', (int) $order_detail->product_id) ->where('id_product_detail', (int) $order_detail->item_id) ->where('warehouse_id', (int) $order_detail->warehouse_id); $current_stock = $this->db->get()->row(); // Kurangi stok (default 1) $qty = 1; $new_item_stock = $current_stock->stock - $qty; // Update stok $this->db->where('id_product', (int) $order_detail->product_id) ->where('id_product_detail', (int) $order_detail->item_id) ->where('warehouse_id', (int) $order_detail->warehouse_id) ->update('stock', ['stock' => $new_item_stock]); // Catat pergerakan stok $user_name = $this->session->userdata('name'); $movement_data = [ 'stock_id' => $current_stock->id, 'type' => '-', 'stock_change' => $qty, 'remark' => 'Pengurangan Stok untuk Claim Garansi #' . $claim->id_claim . ' - Produk Disetujui', 'total' => $new_item_stock, 'name' => $user_name ]; $this->db->insert('stock_movement', $movement_data); } // Kirim email untuk update status (kecuali status 5) if ($status != 5) { // Ambil data customer $this->db->select('name, email, reseller_id')->from('customers') ->where('id_customers', $claim->customer_id); $customer_data = $this->db->get()->row(); // Ambil data website $this->db->select('logo, website_name')->from('configuration') ->where('id_configuration', 1); $website_data = $this->db->get()->row(); // Persiapkan data email $email_data = [ 'customer_name' => $customer_data->name, 'reseller_id' => $customer_data->reseller_id, 'email' => $customer_data->email, 'status' => $status, 'id_claim' => $id_claim, 'keterangan' => $claim->keterangan ]; // Tentukan bahasa dan subject email if ($claim->lang == 'english') { $email_data['subject'] = 'Warranty Claim Process Update'; $view_file = 'email/english/claim_update'; } else { $email_data['subject'] = 'Update Proses Claim Garansi'; $view_file = 'email/indonesian/claim_update'; } // Kirim email $this->send_email($view_file, $email_data); } // Logging aktivitas $user_id = $this->session->userdata('user_id'); $activity = 'User mengubah status claim garansi (' . $id_claim . ')'; log_activity($user_id, $activity); // Response sukses echo json_encode([ 'status' => 'success', 'message' => 'Status klaim berhasil diperbarui' ]); } else { // Jika status tidak berubah echo json_encode([ 'status' => 'error', 'message' => 'Status klaim sudah sama' ]); } } public function add() { $data['userdata'] = $this->session->userdata(); $data['title'] = 'Tambah Review | Laciasmara'; $data['products'] = $this->product_m->all_products(); $this->load->view('admin_new/layouts/header', $data); $this->load->view('admin_new/reviews/add_review'); $this->load->view('admin_new/layouts/footer'); } }