HEX
Server: nginx/1.24.0
System: Linux localhost 5.15.0-46-generic #49-Ubuntu SMP Thu Aug 4 18:03:25 UTC 2022 x86_64
User: www (1000)
PHP: 8.3.27
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,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,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/erp.nhatnamsst.com/domains/Customer/DataTables/CustomerDataTable.php
<?php

namespace Domains\Customer\DataTables;

use Domains\Customer\Repositories\Customer\CustomerRepositoryInterface;
use Domains\Core\DataTables\DataTables;
use Domains\Core\Enums\AdminRole;

class CustomerDataTable extends DataTables
{
    public function __construct(
        public CustomerRepositoryInterface $repo
    ) {}

    protected function setColumnHasSearch(): void
    {
        $this->columnHasSearch = ['code', 'short_name', 'name', 'phone', 'email', 'address', 'contact_person', 'tax_code'];
    }

    protected function setRemoveColumns(): void
    {
        $currentAdmin = get_auth_admin();
        $hasEdit = $currentAdmin && $currentAdmin->checkRouteNameAccessOrSuperAdmin('cms.customer.edit');
        $hasDelete = $currentAdmin && $currentAdmin->checkRouteNameAccessOrSuperAdmin('cms.customer.delete');
        $hasAnyAction = $hasEdit || $hasDelete;
        
        if (!$hasAnyAction) {
            $this->removeColumns[] = 'action';
        }
    }

    public function query()
    {
        $query = $this->repo->getQueryBuilder()->with(['sale', 'contacts']);
        
        $currentAdmin = get_auth_admin();
        if ($currentAdmin && !$currentAdmin->checkIsSuperAdmin()) {
            if ($currentAdmin->role && in_array($currentAdmin->role, [AdminRole::SALE, AdminRole::LEADER_SALE])) {
                $query->where('sale_id', $currentAdmin->id);
            }
            if ($currentAdmin->role && in_array($currentAdmin->role, [AdminRole::INTER, AdminRole::LEADER_INTER])) {
                $query->whereRaw('1 = 0');
            }
        }
        
        // Apply filters from request
        if ($this->request) {
            // Filter by code
            if ($this->request->has('filter_code') && $this->request->get('filter_code')) {
                $code = $this->request->get('filter_code');
                $query->where('code', 'like', '%' . $code . '%');
            }
            
            // Filter by name
            if ($this->request->has('filter_name') && $this->request->get('filter_name')) {
                $name = $this->request->get('filter_name');
                $query->where('name', 'like', '%' . $name . '%');
            }
        }
        
        return $query;
    }

    protected function setEditColumns(): void
    {
        $this->editColumns = [
            'code' => 'cms.customers.datatable.code',
            'type' => fn($row) => $row->type ? $row->type->description() : '-',
            'sale_id' => fn($row) => $row->sale ? ($row->sale->code ?? '') . ' - ' . $row->sale->fullname . ' (' . $row->sale->role->description() . ')' : '-',
        ];
    }

    protected function setAddColumns(): void
    {
        $this->addColumns = [
            'action' => 'cms.customers.datatable.action',
        ];
    }

    protected function setRawColumns(): void
    {
        $this->rawColumns = ['code', 'type', 'sale_id', 'action'];
    }

    protected function setConfigColumns(): void
    {
        $this->configColumns = [
            'code' => [
                'title' => 'Mã khách hàng',
                'orderable' => true,
            ],
            'type' => [
                'title' => 'Loại khách hàng',
                'orderable' => true,
            ],
            'name' => [
                'title' => 'Tên khách hàng',
                'orderable' => true,
            ],
            'short_name' => [
                'title' => 'Tên viết tắt',
                'orderable' => true,
            ],
            'address' => [
                'title' => 'Địa chỉ',
                'orderable' => true,
            ],
            'contact_person' => [
                'title' => 'Người liên hệ',
                'orderable' => true,
            ],
            'position' => [
                'title' => 'Chức vụ',
                'orderable' => true,
            ],
            'tax_code' => [
                'title' => 'Mã số thuế',
                'orderable' => true,
            ],
            'phone' => [
                'title' => 'Số điện thoại',
                'orderable' => true,
            ],
            'email' => [
                'title' => 'Email',
                'orderable' => true,
            ],
            'payment_method' => [
                'title' => 'Phương thức thanh toán',
                'orderable' => true,
            ],
            'sale_id' => [
                'title' => 'Thuộc Sale',
                'orderable' => false,
            ],
            'action' => [
                'title' => 'Hành động',
                'orderable' => false,
                'exportable' => false,
                'printable' => false,
                'addClass' => 'text-center',
                'width' => '120px'
            ]
        ];
    }
}