Aplikasi Keuangan yang mengatur lalu lintas transaksi antara bank dan aplikasi internal Kampus
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.7 KiB

<?php
namespace App\Http\DataTables\Billing;
use App\Domains\Billing\Models\Invoice;
use Illuminate\Database\Eloquent\Builder as QueryBuilder;
use Illuminate\Support\Facades\Blade;
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 InvoiceDataTable extends DataTable
{
/**
* Build the DataTable class.
*
* @param QueryBuilder<Invoice> $query Results from query() method.
*/
public function dataTable(QueryBuilder $query): EloquentDataTable
{
return (new EloquentDataTable($query))
->editColumn('net_amount', fn(Invoice $invoice) => $invoice->net_amount->format())
->editColumn('type', fn(Invoice $invoice) => view('components.badge', [
'label' => $invoice->type->label(),
'variant' => $invoice->type->variant(),
]))
->editColumn('status', fn(Invoice $invoice) => view('components.badge', [
'label' => $invoice->status->label(),
'variant' => $invoice->status->variant(),
]))
->addColumn(
'action',
fn (Invoice $invoice) => view('components.datatables.action-button', [
'view' => [
'url' => route('invoices.view', ['id' => $invoice]),
'permission' => true,
],
'edit' => [
'url' => route('invoices.update', ['invoice' => $invoice]),
'permission' => $invoice->status->isDraft(),
],
'table_name' => 'invoice-table',
'id' => $invoice->ulid,
])
)
->addIndexColumn();
}
/**
* Get the query source of dataTable.
*
* @return QueryBuilder<Invoice>
*/
public function query(Invoice $model): QueryBuilder
{
return $model->newQuery();
}
/**
* Optional method if you want to use the html builder.
*/
public function html(): HtmlBuilder
{
return $this->builder()
->setTableId('invoice-table')
->columns($this->getColumns())
->minifiedAjax()
->orderBy(1)
->layout([
'topStart' => [
'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'),
],
])
->buttons([
Button::make('add')
->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')
->title('#')
->searchable(false)
->orderable(false),
Column::make('code')
->title(__('domains/billing/field.invoice.code')),
Column::make('name')
->title(__('domains/billing/field.invoice.name')),
Column::make('type')
->title(__('domains/billing/field.invoice.type')),
Column::make('net_amount')
->title(__('domains/billing/field.invoice.net_amount')),
Column::make('status')
->title(__('domains/billing/field.invoice.status')),
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 'InvoiceDataTable_' . date('YmdHis');
}
}