https://t.me/RX1948
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/self/root/var/www/laciasmara.com/public_html/shop/application/controllers/admin/Warranty.php
<?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');
    }
}

https://t.me/RX1948 - 2025