Sindbad~EG File Manager

Current Path : /home/webg5288/www/laravel_kendal/app/Filament/Resources/
Upload File :
Current File : /home/webg5288/www/laravel_kendal/app/Filament/Resources/AdjustmentResource.php

<?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