You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.9 KiB
136 lines
4.9 KiB
<?php
|
|
|
|
namespace App\Http\DataTables\Finance;
|
|
|
|
use App\Domains\Finance\Models\ProductMapping;
|
|
use Illuminate\Database\Eloquent\Builder as QueryBuilder;
|
|
use Yajra\DataTables\EloquentDataTable;
|
|
use Yajra\DataTables\Html\Builder as HtmlBuilder;
|
|
use Yajra\DataTables\Html\Button;
|
|
use Yajra\DataTables\Html\Column;
|
|
use Yajra\DataTables\Services\DataTable;
|
|
|
|
class ProductMappingDataTable extends DataTable
|
|
{
|
|
/**
|
|
* Build the DataTable class.
|
|
*
|
|
* @param QueryBuilder<ProductMapping> $query Results from query() method.
|
|
*/
|
|
public function dataTable(QueryBuilder $query): EloquentDataTable
|
|
{
|
|
return (new EloquentDataTable($query))
|
|
->addColumn(
|
|
'action',
|
|
fn ($productMapping) => view('components.datatables.action-button', [
|
|
'log' => true,
|
|
'edit' => [
|
|
'modal' => 'productmapping-form-modal',
|
|
'permission' => auth()->user()->can('update', $productMapping),
|
|
],
|
|
'delete' => [
|
|
'url' => null,
|
|
'title' => __('ui/button.delete'),
|
|
'message' => __('ui/confirmation.delete', ['resource' => __('resources.product_mapping')]),
|
|
'success_message' => __('ui/crud.success.deleted', ['resource' => __('resources.product_mapping')]),
|
|
'permission' => auth()->user()->can('delete', $productMapping),
|
|
],
|
|
'table_name' => 'productmapping-table',
|
|
'id' => $productMapping->ulid,
|
|
])
|
|
)
|
|
->rawColumns(['action'])
|
|
->addIndexColumn();
|
|
}
|
|
|
|
/**
|
|
* Get the query source of dataTable.
|
|
*
|
|
* @return QueryBuilder<ProductMapping>
|
|
*/
|
|
public function query(ProductMapping $model): QueryBuilder
|
|
{
|
|
return $model->newQuery();
|
|
}
|
|
|
|
/**
|
|
* Optional method if you want to use the html builder.
|
|
*/
|
|
public function html(): HtmlBuilder
|
|
{
|
|
return $this->builder()
|
|
->setTableId('productmapping-table')
|
|
->columns($this->getColumns())
|
|
->minifiedAjax()
|
|
->orderBy(-1)
|
|
->layout([
|
|
'topStart' => [
|
|
'rowClass' => 'row gap-1',
|
|
'className' => 'col-md-auto me-auto d-flex flex-sm-row flex-column justify-content-center justify-content-md-start align-items-center align-items-md-start gap-1',
|
|
'features' => ['buttons', 'pageLength'],
|
|
],
|
|
'topEnd' => [
|
|
'className' => 'col-md-auto ms-auto d-flex flex-sm-row flex-column justify-content-center justify-content-md-end align-items-center align-items-md-start gap-1',
|
|
'features' => ['search'],
|
|
],
|
|
|
|
'bottomStart' => 'info',
|
|
'bottomEnd' => 'paging',
|
|
])
|
|
->parameters([
|
|
'language' => [
|
|
'search' => '',
|
|
'searchPlaceholder' => __('ui/button.lookup'),
|
|
],
|
|
'fixedColumns' => [
|
|
'start' => 2,
|
|
],
|
|
'scrollX' => true,
|
|
'scrollCollapse' => true,
|
|
'responsive' => true,
|
|
])
|
|
->buttons([
|
|
Button::make('add')
|
|
->action('$("#productmapping-form-modal").modal("show");')
|
|
->text(svg('tabler-plus', ['width' => 16, 'height' => 16])->toHtml())
|
|
->addClass('btn-sm'),
|
|
Button::make('reload')
|
|
->text(svg('tabler-reload', ['width' => 16, 'height' => 16])->toHtml())
|
|
->addClass('btn-sm'),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Get the dataTable columns definition.
|
|
*/
|
|
public function getColumns(): array
|
|
{
|
|
return [
|
|
Column::computed('DT_RowIndex')
|
|
->width(10)
|
|
->title('#'),
|
|
Column::make('code')
|
|
->title(__('domains/finance/field.product_mapping.code')),
|
|
Column::make('name')
|
|
->title(__('domains/finance/field.product_mapping.name')),
|
|
Column::make('chart_of_account.name')
|
|
->title(__('domains/finance/field.product_mapping.coa_name')),
|
|
Column::make('client.name')
|
|
->title(__('domains/finance/field.product_mapping.client_name')),
|
|
Column::computed('action')
|
|
->title(__('ui/label.actions'))
|
|
->exportable(false)
|
|
->printable(false)
|
|
->width(60)
|
|
->addClass('text-center'),
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get the filename for export.
|
|
*/
|
|
protected function filename(): string
|
|
{
|
|
return 'ProductMapping_'.date('YmdHis');
|
|
}
|
|
}
|
|
|