diff --git a/app/Filament/Pages/RfqDashboard.php b/app/Filament/Pages/RfqDashboard.php new file mode 100644 index 0000000..3454c83 --- /dev/null +++ b/app/Filament/Pages/RfqDashboard.php @@ -0,0 +1,163 @@ +forget(['transport_name']); + session()->forget(['rfq_number']); + $this->filtersForm->fill([ + 'transport_name' => null, + 'rfq_number' => null + ]); + } + + public function filtersForm(Form $form): Form + { + return $form + ->statePath('filters') + ->schema([ + Section::make('') + ->schema([ + // Select::make('plant') + // ->label('Select Plant') + // ->reactive() + // ->options(function (callable $get) { + // $userHas = Filament::auth()->user()->plant_id; + // return ($userHas && strlen($userHas) > 0) ? Plant::where('id', $userHas)->pluck('name', 'id')->toArray() : Plant::pluck('name', 'id')->toArray(); + // }) + // ->afterStateUpdated(function ($state,callable $set) { + // session(['selected_plant' => $state]); + // // $set('rfq_number', null); + // session()->forget('rfq_number'); + // }), + + Select::make('rfq_number') + ->label('Select RFQ Number') + ->reactive() + ->options(function (callable $get) { + + return RequestQuotation::orderBy('rfq_number') + ->pluck('rfq_number', 'id') + ->toArray(); + }) + ->afterStateUpdated(function ($state, callable $set) { + session(['rfq_id' => $state]); + $set('transport_name', null); + session()->forget('transport_name'); + }), + + Select::make('transport_name') + ->label('User name') + ->reactive() + ->options(function (callable $get) { + $rfqId = $get('rfq_number'); + + if (!$rfqId) { + return []; + } + + $user = Filament::auth()->user(); + + if ($user->hasRole(['Super Admin', 'Rfq Supervisor'])) { + return RfqTransporterBid::query() + ->where('request_quotation_id', $rfqId) + ->whereNotNull('transporter_name') + ->distinct() + ->pluck('transporter_name', 'transporter_name') + ->toArray(); + } + + return RfqTransporterBid::query() + ->where('request_quotation_id', $rfqId) + ->where('transporter_name', $user->name) + ->distinct() + ->pluck('transporter_name', 'transporter_name') + ->toArray(); + }) + ->afterStateUpdated(function ($state, callable $set) { + session(['transport_name' => $state]); + }), + + // Select::make('transport_name') + // ->label('User name') + // ->reactive() + // ->options(function () { + // $user = Filament::auth()->user(); + + // if ($user->hasRole(['Super Admin', 'Rfq Supervisor'])) { + // return RfqTransporterBid::query() + // ->whereNotNull('transporter_name') + // ->distinct() + // ->pluck('transporter_name', 'transporter_name') + // ->toArray(); + // } + + // return RfqTransporterBid::query() + // ->where('transporter_name', $user->name) + // ->distinct() + // ->pluck('transporter_name', 'transporter_name') + // ->toArray(); + // }) + // ->afterStateUpdated(function ($state, callable $set) { + // session(['transport_name' => $state]); + // $set('rfq_number', null); + // session()->forget('rfq_number'); + // }), + + // Select::make('rfq_number') + // ->label('Select RFQ Number') + // ->reactive() + // ->options(function (callable $get) { + // $transportName = $get('transport_name'); + + // if (!$transportName) { + // return []; + // } + + // return RequestQuotation::where('transporter_name', $transportName) + // ->pluck('rfq_number', 'rfq_number') + // ->toArray(); + // }) + // ->afterStateUpdated(function ($state) { + // session(['rfq_number' => $state]); + // }), + ]) + ->columns(2), + ]); + } + + public static function canAccess(): bool + { + return Auth::check() && Auth::user()->can('view rfq dashboard'); + } +} diff --git a/app/Filament/Pages/RfqOverview.php b/app/Filament/Pages/RfqOverview.php new file mode 100644 index 0000000..b74d975 --- /dev/null +++ b/app/Filament/Pages/RfqOverview.php @@ -0,0 +1,58 @@ +forget(['rfq_id']); + $this->filtersForm->fill([ + 'rfq_id' => null + ]); + } + + public function filtersForm(Form $form): Form + { + return $form + ->statePath('filters') + ->schema([ + Section::make('') + ->schema([ + Select::make('rfq_number') + ->label('Select RFQ Number') + ->reactive() + ->options(function (callable $get) { + return RequestQuotation::orderBy('rfq_number') + ->pluck('rfq_number', 'id') + ->toArray(); + }) + ->afterStateUpdated(function ($state, callable $set) { + session(['rfq_id' => $state]); + }), + ]) + ->columns(1), + ]); + } + + public static function canAccess(): bool + { + return Auth::check() && Auth::user()->can('view rfq overview dashboard'); + } +} diff --git a/resources/views/filament/pages/rfq-dashboard.blade.php b/resources/views/filament/pages/rfq-dashboard.blade.php new file mode 100644 index 0000000..30a1a3b --- /dev/null +++ b/resources/views/filament/pages/rfq-dashboard.blade.php @@ -0,0 +1,14 @@ + + + {{-- Render the Select form fields --}} + + {{ $this->filtersForm($this->form) }} + {{-- {{ $this->form }} --}} + + + {{-- Render the chart widget below the form --}} + + @livewire(\App\Filament\Widgets\RfqChart::class) + + + diff --git a/resources/views/filament/pages/rfq-overview.blade.php b/resources/views/filament/pages/rfq-overview.blade.php new file mode 100644 index 0000000..a4b0450 --- /dev/null +++ b/resources/views/filament/pages/rfq-overview.blade.php @@ -0,0 +1,14 @@ + + + {{-- Render the Select form fields --}} + + {{ $this->filtersForm($this->form) }} + {{-- {{ $this->form }} --}} + + + {{-- Render the chart widget below the form --}} + + @livewire(\App\Filament\Widgets\RfqRankChart::class) + + +