Sindbad~EG File Manager
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\AdjustmentResource\Pages;
use App\Filament\Resources\AdjustmentResource\RelationManagers;
use App\Models\Adjustment;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Forms\Components\TextInput;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use League\Flysystem\Visibility;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\DatePicker;
use Filament\Tables\Actions\Action;
use Illuminate\Support\Facades\DB;
use Symfony\Component\HttpFoundation\StreamedResponse;
class AdjustmentResource extends Resource
{
protected static ?string $model = Adjustment::class;
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
protected static ?string $modelLabel = 'Adjustment';
protected static ?string $pluralLabel = 'List Adjustment';
protected static ?string $navigationLabel = 'Adjustment';
public static function form(Form $form): Form
{
return $form
->schema([
//
TextInput::Make('no_inv')
->required()
->maxLength(15),
Forms\Components\DateTimePicker::Make('tgl_inv'),
TextInput::Make('kode_brg'),
TextInput::Make('type'),
TextInput::Make('quantity'),
TextInput::Make('satuan'),
TextInput::Make('harga'),
TextInput::Make('keterangan'),
]);
}
public static function table(Table $table): Table
{
return $table
->modifyQueryUsing(function (Builder $query) {
$query->leftJoin('ms_stock', 'tr_stock.kode_brg', '=', 'ms_stock.kode_brg')
->select('tr_stock.*', 'ms_stock.nama_brg as nama_barang');
// Tambahkan filter hanya jika kondisi tertentu
$shouldFilter = true; // Ganti dengan logic Anda
if ($shouldFilter) {
$query->where(function($q) {
$q->where('tr_stock.no_inv', 'NOT LIKE', 'STAR%')
->where('tr_stock.no_inv', 'NOT LIKE', 'STOP%');
});
}
})
->columns([
//
TextColumn::make('no_inv')
->label('No Invoice')
->searchable(query: function ($query, string $search) {
$query->where('tr_stock.no_inv', 'like', "%{$search}%");
})
->sortable(),
TextColumn::make('tgl_inv')
->label('Tanggal Adjustmen')
->date()
->sortable(),
// TextColumn::make('tr_code')
// ->label('Kode Transaksi')
// ->sortable(),
TextColumn::make('type')
->label('Type')
->searchable(query: function ($query, string $search) {
$query->where('tr_stock.kode_brg', 'like', "%{$search}%");
})
->sortable(),
TextColumn::make('kode_brg')
->label('Kode Barang')
->searchable(query: function ($query, string $search) {
$query->where('tr_stock.kode_brg', 'like', "%{$search}%");
})
->sortable(),
// TextColumn::make('kode_kategori_brg')
// ->label('Kategori Barang')
// ->sortable(),
Tables\Columns\TextColumn::make('nama_barang')
->label('Nama Barang')
// ->searchable()
->searchable(query: function ($query, string $search) {
$query->where('ms_stock.nama_brg', 'like', "%{$search}%");
})
->sortable(),
TextColumn::make('quantity')
->label('Qty')
->numeric()
->sortable(),
TextColumn::make('satuan')
->label('Satuan')
->sortable(),
TextColumn::make('harga')
->label('harga')
->money('IDR')
->sortable(),
])
->defaultSort('tgl_inv', 'desc') // optional
->filters([
//awal filter
// ⬅️ FILTER TARUH DI SINI
// \Filament\Tables\Filters\Filter::make('tgl_kirim')
// ->form([
// DatePicker::make('from')
// ->label('Tgl Kirim Awal'),
// DatePicker::make('until')
// ->label('Tgl Kirim Akhir'),
// ])
// ->query(function (Builder $query, array $data) {
// return $query
// ->when($data['from'], fn ($q) =>
// $q->whereDate('transaksis.tgl_kirim', '>=', $data['from'])
// )
// ->when($data['until'], fn ($q) =>
// $q->whereDate('transaksis.tgl_kirim', '<=', $data['until'])
// );
// })
\Filament\Tables\Filters\Filter::make('tanggal')
->form([
Select::make('tanggal')
->label('tanggal adjustment')
->options([
'tgl_inv' => 'Tanggal Adjustmen',
])
->required(),
DatePicker::make('from')->label('Dari'),
DatePicker::make('until')->label('Sampai'),
])
->query(function (Builder $query, array $data) {
if (empty($data['jenis'])) {
return $query;
}
return $query
->when($data['from'], fn ($q) =>
$q->whereDate("tr_stock.{$data['jenis']}", '>=', $data['from'])
)
->when($data['until'], fn ($q) =>
$q->whereDate("tr_stock.{$data['jenis']}", '<=', $data['until'])
);
}),
//akhir filter
])
//-awal agung wibowo 20260120
/*
->headerActions([
Action::make('export_csv')
->label('Export CSV')
->icon('heroicon-o-arrow-down-tray')
->action(function (): StreamedResponse {
$filename = 'Adjustment-' . now()->format('Ymd_His') . '.csv';
return response()->streamDownload(function () {
$out = fopen('php://output', 'w');
// Header CSV
fputcsv($out, [
'No Invoice',
'Tanggal',
'Kode Barang',
'Nama Barang',
'Type',
'Qty',
'Satuan',
'Harga',
]);
// Query (samakan dengan logic table kamu)
DB::table('tr_stock as a')
->leftJoin('ms_stock as b', 'a.kode_brg', '=', 'b.kode_brg')
->select([
'a.no_inv',
'a.tgl_inv',
'a.kode_brg',
DB::raw('b.nama_brg as nama_barang'),
'a.type',
'a.quantity',
'a.satuan',
'a.harga',
])
->where('a.no_inv', 'NOT LIKE', 'STAR%')
->where('a.no_inv', 'NOT LIKE', 'STOP%')
->orderByDesc('a.tgl_inv')
->chunk(1000, function ($rows) use ($out) {
foreach ($rows as $r) {
fputcsv($out, [
$r->no_inv,
$r->tgl_inv,
'="'.$r->kode_brg.'"', // ✅ 0 depan aman
$r->nama_barang,
$r->type,
$r->quantity,
$r->satuan,
$r->harga,
]);
}
});
fclose($out);
}, $filename, [
'Content-Type' => 'text/csv; charset=UTF-8',
]);
}),
])
*/
//-akhir agung wibowo 20260120
->actions([
// Tables\Actions\EditAction::make(),
// Tables\Actions\DeleteAction::make(),
])
->bulkActions([
// Tables\Actions\BulkActionGroup::make([
// Tables\Actions\DeleteBulkAction::make(),
// ]),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListAdjustments::route('/'),
// 'create' => Pages\CreateAdjustment::route('/create'),
// 'edit' => Pages\EditAdjustment::route('/{record}/edit'),
];
}
public static function canCreate(): bool
{
return false; // Tidak bisa create
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists