|
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 : /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/Credit';
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/Credit';
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');
}
}