Sindbad~EG File Manager

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

<?php

namespace App\Filament\Resources;

use App\Filament\Resources\TabelBarangResource\Pages;
use App\Filament\Resources\TabelBarangResource\RelationManagers;
use App\Models\ms_stock;
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;
class TabelBarangResource extends Resource
{
    protected static ?string $model = ms_stock::class;

    protected static ?string $modelLabel = 'Tabel Barang';
    protected static ?string $pluralLabel = 'List Barang';
    protected static ?string $navigationLabel = 'Tabel Barang';


    protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                //
                // TextInput::Make('no_inv')
                // ->required()
                // ->maxLength(15),
                // Forms\Components\DateTimePicker::Make('tgl'),
                TextInput::Make('kode_brg'),
                TextInput::Make('nama_brg'),
                TextInput::Make('kelompok'),
                TextInput::Make('jenis'),
                TextInput::Make('merk'),
                TextInput::Make('satuan'),               
                TextInput::Make('status'),    
            ]);
    }

    public static function table(Table $table): Table
        {
        return $table
        ->modifyQueryUsing(function (Builder $query) {
            // $query->leftJoin('ms_stock', 'ms_stock.kode_brg', '=', 'ms_stock.kode_brg')
            //       ->select('ms_stock.*', 'ms_stock.nama_brg as nama_barang');
            $query->select('ms_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', 'LIKE', 'STAR%')
            //         ->Orwhere('tr_stock.no_inv', 'LIKE', 'STOP%');
            //     });
            // }
        })        
            ->columns([
                //
                TextColumn::make('kode_brg')
                    ->label('Kode barang')
                    ->searchable(query: function ($query, string $search) {
                        $query->where('ms_stock.kode_brg', 'like', "%{$search}%");
                    })                    
                    ->sortable(),
                TextColumn::make('nama_brg')
                    ->label('Nama Barang')
                    ->searchable(query: function ($query, string $search) {
                        $query->where('ms_stock.nama_brg', 'like', "%{$search}%");
                    })                    
                    ->sortable(),

                // TextColumn::make('tr_code')
                //     ->label('Kode Transaksi')
                //     ->sortable(),

                TextColumn::make('kelompok')
                    ->label('kelompok')
                    ->searchable(query: function ($query, string $search) {
                        $query->where('ms_stock.kelompok', 'like', "%{$search}%");
                    })                    
                    ->sortable(),

                TextColumn::make('jenis')
                    ->label('Jenis Barang')
                    ->searchable(query: function ($query, string $search) {
                        $query->where('ms_stock.kode_brg', 'like', "%{$search}%");
                    })                    
                    ->sortable(),                    

                // TextColumn::make('kode_kategori_brg')
                //     ->label('Kategori Barang')
                //     ->sortable(),

                Tables\Columns\TextColumn::make('satuan')
                    ->label('satuan')
                    // ->searchable()
                    ->searchable(query: function ($query, string $search) {
                        $query->where('ms_stock.satuan', 'like', "%{$search}%");
                    })                    
                    ->sortable(),

                Tables\Columns\TextColumn::make('status')
                    ->label('status')
                    // ->searchable()
                    ->searchable(query: function ($query, string $search) {
                        $query->where('ms_stock.status', 'like', "%{$search}%");
                    })                    
                    ->sortable(),



                // TextColumn::make('satuan')
                //     ->label('Satuan')
                //     ->sortable(),

                // TextColumn::make('harga')
                //     ->label('harga')
                //     ->money('IDR')
                //     ->sortable(),
            ])
            ->defaultSort('kode_brg', 'asc') // optional
            ->filters([

            \Filament\Tables\Filters\Filter::make('status_filter')
                    ->form([
                        Select::make('status')
                            ->label('Status')
                            ->options(function () {
                                // Ambil semua status unik dari database
                                $statuses = ms_stock::distinct()
                                    ->orderBy('status')
                                    ->pluck('status', 'status')
                                    ->toArray();
                                
                                return [
                                    '' => 'Semua Status',
                                    'exclude_non_aktif' => '▶ Kecuali Non-Aktif', // Khusus
                                ] + $statuses;
                            })
                    ])
                    ->query(function (Builder $query, array $data) {
                        return $query
                            ->when($data['status'] === 'exclude_non_aktif', fn ($q) => 
                                $q->where('status', '!=', 'NON AKTIF')
                            )
                            ->when($data['status'] && $data['status'] !== 'exclude_non_aktif', fn ($q) => 
                                $q->where('status', $data['status'])
                            );
                    }),                

            // \Filament\Tables\Filters\Filter::make('status')
            //     ->form([
            //         Select::make('status')
            //             ->label('Status')
            //             ->options([
            //                 '' => 'Semua',
            //                 // 'status' => 'Aktif',
            //                 'status' => 'Non-Aktif',
            //             ])
            //             ->default('')
            //     ])
            //     ->query(function (Builder $query, array $data) {
            //         return $query
            //             // ->when($data['status'] === 'active', fn ($q) => 
            //             //     $q->where('is_active', true)
            //             // )
            //             // ->when($data['status'] === 'inactive', fn ($q) => 
            //             //     $q->where('is_active', false)
            //             // );
            //              ->when($data['status'] !== 'NON AKTIF', fn ($q) => 
            //                 $q->where('is_active', true)
            //             )
            //             ->when($data['status'] === 'NON AKTIF', fn ($q) => 
            //                 $q->where('is_active', false)
            //             );
            //     })

                //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'])
                //             );
                //     })

                //awal filter    
            // \Filament\Tables\Filters\Filter::make('tanggal')
            //     ->form([
            //         Select::make('tanggal')
            //             ->label('tanggal stock opname')
            //             ->options([
            //                 'tgl'   => 'Tanggal Stock Opname',
            //             ])
            //             ->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
            ])
            ->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\ListTabelBarangs::route('/'),
            // 'create' => Pages\CreateTabelBarang::route('/create'),
            // 'edit' => Pages\EditTabelBarang::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