diff --git a/app/Filament/Pages/TrendLineAnalysis.php b/app/Filament/Pages/TrendLineAnalysis.php new file mode 100644 index 0000000..d935069 --- /dev/null +++ b/app/Filament/Pages/TrendLineAnalysis.php @@ -0,0 +1,126 @@ +forget(['selected_plant', 'selected_meter', 'from_datetime', 'to_datetime', 'parameter']); + $this->filtersForm->fill([ + 'selected_plant' => null, + 'selected_meter' => null, + 'from_datetime' => null, + 'to_datetime' => null, + 'parameter' => null, + ]); + } + + + public function filtersForm(Form $form): Form + { + return $form + ->statePath('filters') + ->schema([ + + DateTimePicker::make('from_datetime') + ->label('From DateTime') + ->required() + ->before('to_datetime') + ->reactive() + ->afterStateUpdated(function ($state) { + $formatted = \Carbon\Carbon::parse($state)->format('Y-m-d H:i:s'); + session(['from_datetime' => $formatted]); + }), + DateTimePicker::make('to_datetime') + ->label('To DateTime') + ->required() + ->after('from_datetime') + ->reactive() + ->afterStateUpdated(function ($state) { + $formatted = \Carbon\Carbon::parse($state)->format('Y-m-d H:i:s'); + session(['to_datetime' => $formatted]); + }), + Select::make('plant') + ->options(Plant::pluck('name', 'id')) + ->label('Select Plant') + ->reactive() + ->afterStateUpdated(function ($state, callable $set) { + session(['selected_plant' => $state]); + // When plant changes, also reset meter_name + $set('meter_name', null); + session(['selected_meter' => null]); + // dd($state); + }), + + Select::make('meter_name') + ->options(function ($get) { + $plantId = $get('plant'); + // Return meter name/id pairs from mfm_meters where plant_id matches selected plant + return $plantId ? MfmMeter::where('plant_id', $plantId)->pluck('name', 'id') : []; + }) + ->label('Select Meter') + ->reactive() + ->afterStateUpdated(function ($state) { + session(['selected_meter' => $state]); + }), + Select::make('parameter') + ->options([ + 'Phase Voltage' => 'Phase Voltage', + 'Line Voltage' => 'Line Voltage', + 'Current' => 'Current', + 'Active Power' => 'Active Power', + 'Power Factor' => 'Power Factor', + 'Units' => 'Units', + ]) + ->label('Select Parameter') + ->reactive() + ->afterStateUpdated(function ($state) { + session(['parameter' => $state]); + }), + + ]) + ->columns(5); + } + // public static function getNavigationLabel(): string + // { + // return 'Trend Chart Analysis'; + // } + // public function getHeading(): string + // { + // return 'Trend Chart Analysis'; + // } + + + public function getWidgets(): array + { + $widgets = []; + + if (TrendLineChart::canView()) { + $widgets[] = TrendLineChart::class; + } + return $widgets; + } + + public static function canAccess(): bool + { + return Auth::check() && Auth::user()->can('view ems trend line analysis dashboard'); + } +} diff --git a/resources/views/filament/pages/trend-line-analysis.blade.php b/resources/views/filament/pages/trend-line-analysis.blade.php new file mode 100644 index 0000000..9035c66 --- /dev/null +++ b/resources/views/filament/pages/trend-line-analysis.blade.php @@ -0,0 +1,10 @@ + +
+ {{-- Filters form --}} + {{ $this->filtersForm($this->form) }} + + {{-- Chart widget --}} + + +
+