File: //home/armgroup/libs/app/DataTables/ProductsDataTable.php
<?php
namespace App\DataTables;
use App\Models\Product;
use Yajra\DataTables\Html\Button;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Services\DataTable;
class ProductsDataTable extends DataTable
{
public function dataTable($query)
{
return datatables()
->eloquent($query)
->addColumn('action', function ($query) {
$abilities = [
'show' => route('products.show', $query->slug),
'edit' => route('admin.products.edit', $query->slug),
'delete' => route('admin.products.destroy', $query->slug),
];
return view('admin.partials.datatables-btns', compact('abilities'));
})
->editColumn('created_at', function ($query) {
return to_persian_numbers(jdate($query->created_at));
})
->editColumn('status', function ($query) {
return view('admin.partials.datatables-status', [
'color' => ['danger', 'success'][$query->status],
'name' => ['غیرفعال', 'فعال'][$query->status],
]);
})
// ->editColumn('stock', function ($query) {
// return view('admin.partials.datatables-product-stock', ['product' => $query]);
// })
->editColumn('price', function ($query) {
return number_format($query->price);
// return view('admin.partials.datatables-product-price', ['product' => $query]);
})
->editColumn('products_checkbox', function ($query) {
return view('admin.partials.datatables-checkbox', [
'id' => $query->id,
]);
})
->addIndexColumn();
}
public function query(Product $model)
{
$category_id = $this->request()->get('category_id');
$status = $this->request()->get('status');
$isDeleted = $this->request()->get('isDeleted');
$checked_ids = $this->request()->get('checked_ids');
if ($checked_ids) {
if ($status) {
Product::query()->whereIn('id', $checked_ids)->update([
'status' => auth()->user()->can('change status') ? ($status == 'active') : false,
]);
}
if ($isDeleted) {
Product::query()->whereIn('id', $checked_ids)->delete();
}
}
if (auth()->user()->can('manage other users content')) {
$result = $model->newQuery();
} else {
$result = $model->newQuery()->where('user_id', auth()->id());
}
return $result->when(! is_null($category_id), function ($query) use ($category_id) {
return $query->whereRelation('categories', 'category_id', $category_id);
});
}
public function html()
{
$buttons = [
Button::make('create')->action("window.location = '".route('admin.products.selectCategory')."';"),
Button::make('excel'),
Button::make('print'),
Button::make('reset'),
Button::make('reload'),
];
return $this->builder()
->setTableId('products-table')
->columns($this->getColumns())
->minifiedAjax()
->dom('Bfrtip')
->orderBy(7)
->language(asset('vendor/datatables/Persian.json'))
->buttons($buttons)
->drawCallback('function(settings){if(window.livewire){window.livewire.rescan();}}');
}
protected function getColumns()
{
return [
Column::make('DT_RowIndex')
->title('#')
->orderable(false)
->searchable(false),
Column::make('products_checkbox')->title('<input type="checkbox" id="check_all">')->searchable(false)->orderable(false),
Column::make('name')->title('نام'),
Column::make('code')->title('کد'),
Column::make('price')->title('قیمت'),
Column::make('stock')->title('موجودی'),
Column::make('status')->title('وضعیت')->className('text-center'),
Column::make('created_at')->title('تاریخ'),
Column::computed('action')
->exportable(false)
->printable(false)
->title('عملیات'),
];
}
protected function filename()
{
return 'Products_'.date('YmdHis');
}
}