From 1db254c32b53f0989c7c1d6b7d14e24855974492 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Wed, 14 Jan 2026 11:37:04 +0530 Subject: [PATCH] Implement feature X to enhance user experience and optimize performance --- .../Resources/TestingPanelReadingResource.php | 879 +++++++++++------- 1 file changed, 536 insertions(+), 343 deletions(-) diff --git a/app/Filament/Resources/TestingPanelReadingResource.php b/app/Filament/Resources/TestingPanelReadingResource.php index f7a19aa..865b064 100644 --- a/app/Filament/Resources/TestingPanelReadingResource.php +++ b/app/Filament/Resources/TestingPanelReadingResource.php @@ -2,8 +2,7 @@ namespace App\Filament\Resources; -use AlperenErsoy\FilamentExport\Actions\FilamentExportBulkAction; -use App\Exports\TestingPanelReadingExport; +use App\Exports\MotorFreeRunExport; use App\Filament\Exports\TestingPanelReadingExporter; use App\Filament\Imports\TestingPanelReadingImporter; use App\Filament\Resources\TestingPanelReadingResource\Pages; @@ -23,19 +22,24 @@ use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Forms\Get; -use Filament\Notifications\Collection as NotificationsCollection; +use Filament\Notifications\Notification; use Filament\Resources\Resource; use Filament\Tables; +use Filament\Tables\Actions\Action; use Filament\Tables\Actions\BulkAction; +use Filament\Tables\Actions\ExportAction; +use Filament\Tables\Actions\ImportAction; +use Filament\Tables\Filters\Filter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -use Filament\Tables\Actions\ImportAction; -use Filament\Tables\Actions\ExportAction; -use Filament\Tables\Filters\Filter; -use Maatwebsite\Excel\Facades\Excel; -use Filament\Tables\Actions\Action; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Response; +// use Barryvdh\Snappy\Facades\SnappyPdf as PDF; +use Maatwebsite\Excel\Facades\Excel; +// use App\Exports\TestingPanelReadingExport; +use PhpOffice\PhpSpreadsheet\IOFactory; // For loading Excel file +use PhpOffice\PhpSpreadsheet\Writer\Xlsx; class TestingPanelReadingResource extends Resource { @@ -45,7 +49,7 @@ class TestingPanelReadingResource extends Resource protected static ?string $navigationGroup = 'Testing Panel'; - protected static ?int $navigationSort = 3; + protected static ?int $navigationSort = 3; public static function form(Form $form): Form { @@ -58,23 +62,23 @@ class TestingPanelReadingResource extends Resource ->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(); }) ->default(function () { return optional(TestingPanelReading::latest()->first())->plant_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->afterStateUpdated(function ($state, callable $set, callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { $set('line_id', null); $set('item_id', null); $set('machine_id', null); $set('tPrError', 'Please select a plant first.'); + return; - } - else - { + } else { $set('line_id', null); $set('item_id', null); $set('machine_id', null); @@ -91,9 +95,10 @@ class TestingPanelReadingResource extends Resource ->relationship('line', 'name') ->options(function (callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { return []; } + return Line::where('plant_id', $plantId) ->pluck('name', 'id') ->toArray(); @@ -101,7 +106,7 @@ class TestingPanelReadingResource extends Resource ->default(function () { return optional(TestingPanelReading::latest()->first())->line_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->required() ->reactive() ->afterStateUpdated(fn (callable $set) => $set('item_id', null)), @@ -110,9 +115,10 @@ class TestingPanelReadingResource extends Resource ->relationship('machine', 'name') ->options(function (callable $get) { $lineId = $get('line_id'); - if (!$lineId) { + if (! $lineId) { return []; } + // Only show machines for the selected line return Machine::where('line_id', $lineId) ->pluck('name', 'id') @@ -121,12 +127,12 @@ class TestingPanelReadingResource extends Resource ->default(function () { return optional(TestingPanelReading::latest()->first())->machine_id; }) - ->disabled(fn (Get $get) => !empty($get('id'))) + ->disabled(fn (Get $get) => ! empty($get('id'))) ->required() ->reactive(), Forms\Components\Select::make('motor_testing_master_id') ->label('Item Code') - //->relationship('motorTestingMaster', 'item.code') + // ->relationship('motorTestingMaster', 'item.code') // ->options(function (callable $get) { // $plantId = $get('plant_id'); // if (!$plantId) { @@ -141,9 +147,10 @@ class TestingPanelReadingResource extends Resource // }) ->options(function (callable $get) { $plantId = $get('plant_id'); - if (!$plantId) { + if (! $plantId) { return []; } + return MotorTestingMaster::query() ->join('items', 'motor_testing_masters.item_id', '=', 'items.id') ->where('motor_testing_masters.plant_id', $plantId) @@ -259,6 +266,7 @@ class TestingPanelReadingResource extends Resource public static function table(Table $table): Table { + return $table ->columns([ // Tables\Columns\TextColumn::make('id') @@ -271,6 +279,7 @@ class TestingPanelReadingResource extends Resource $paginator = $livewire->getTableRecords(); $perPage = method_exists($paginator, 'perPage') ? $paginator->perPage() : 10; $currentPage = method_exists($paginator, 'currentPage') ? $paginator->currentPage() : 1; + return ($currentPage - 1) * $perPage + $rowLoop->iteration; }), Tables\Columns\TextColumn::make('plant.name') @@ -463,7 +472,6 @@ class TestingPanelReadingResource extends Resource ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ - Tables\Filters\TrashedFilter::make(), Filter::make('advanced_filters') ->label('Advanced Filters') @@ -485,8 +493,7 @@ class TestingPanelReadingResource extends Resource ->nullable() ->options(function (callable $get) { $plantId = $get('Plant'); - if (!$plantId) - { + if (! $plantId) { return []; } @@ -509,14 +516,12 @@ class TestingPanelReadingResource extends Resource ->whereHas('motorTestingMasters') ->pluck('code', 'id') ->toArray(); - } - else - { + } else { return Item::whereHas('motorTestingMasters') - ->pluck('code', 'id') - ->toArray(); + ->pluck('code', 'id') + ->toArray(); } - //return []; + // return []; }) ->reactive(), Select::make('machine_name') @@ -525,9 +530,10 @@ class TestingPanelReadingResource extends Resource $plantId = $get('Plant'); $lineId = $get('Line'); - if (!$plantId || !$lineId) { + if (! $plantId || ! $lineId) { return []; } + return Machine::where('plant_id', $plantId) ->where('line_id', $lineId) ->pluck('name', 'id') @@ -548,6 +554,7 @@ class TestingPanelReadingResource extends Resource if ($plantId) { $query->where('plant_id', $plantId); } + return $query->pluck('description', 'description')->toArray(); }) @@ -595,23 +602,20 @@ class TestingPanelReadingResource extends Resource // } // }) // ->reactive(), - //... + // ... Select::make('connection') ->label('Connection') ->required() ->default('Star') ->options(function (callable $get) { $plantId = $get('Plant'); - if ($plantId) - { + if ($plantId) { return Configuration::where('plant_id', $plantId) - ->where('c_name', 'MOTOR_CONNECTION') - ->orderBy('created_at') - ->pluck('c_value', 'c_value') - ->toArray(); - } - else - { + ->where('c_name', 'MOTOR_CONNECTION') + ->orderBy('created_at') + ->pluck('c_value', 'c_value') + ->toArray(); + } else { return Configuration::where('c_name', 'MOTOR_CONNECTION') ->orderBy('created_at') ->pluck('c_value', 'c_value') @@ -620,7 +624,7 @@ class TestingPanelReadingResource extends Resource }) ->selectablePlaceholder(false) ->reactive(), - //.. + // .. TextInput::make('remark') ->label('Remark') ->reactive(), @@ -652,153 +656,156 @@ class TestingPanelReadingResource extends Resource ->placeholder(placeholder: 'Select To DateTime') ->reactive() ->native(false), - ]) - ->query(function ($query, array $data) { + ]) + ->query(function ($query, array $data) { - // dd($data); - // Hide all records initially if no filters are applied - if (empty($data['Plant']) && empty($data['Line']) && empty($data['item_code']) && empty($data['machine_name']) && empty($data['item_description']) && empty($data['serial_number']) && empty($data['output']) && empty($data['phase']) && empty($data['connection']) && empty($data['remark']) && empty($data['batch_no'])&& empty($data['result']) && empty($data['created_from']) && empty($data['created_to'])) { - return $query->whereRaw('1 = 0'); - } - - // if (empty($data['Plant']) && empty($data['Line']) && empty($data['item_code']) && empty($data['machine_name']) && empty($data['item_description']) && empty($data['serial_number']) && empty($data['output']) && empty($data['phase']) && !empty($data['connection']) && empty($data['remark']) && empty($data['batch_no'])&& empty($data['result']) && empty($data['created_from']) && empty($data['created_to'])) { - // return $query->whereRaw('1 = 0'); - // } - - if (!empty($data['Plant'])) { - $query->where('plant_id', $data['Plant']); - } - - if (!empty($data['Line'])) { - $query->where('line_id', $data['Line']); - } - - if (!empty($data['item_code'])) { - // $query->where('item_id', $data['item_code']); - $query->whereHas('motorTestingMaster', function ($subQuery) use ($data) { - $subQuery->where('item_id', $data['item_code']); - }); - } - - if (!empty($data['machine_name'])) { - $query->where('machine_id', $data['machine_name']); - } - - if (!empty($data['serial_number'])) { - $query->where('serial_number', $data['serial_number']); - } - - if (!empty($data['item_description'])) { - $item = Item::where('description', $data['item_description'])->first(); - - if ($item) { - $query->whereHas('motorTestingMaster', function ($subQuery) use ($item) { - $subQuery->where('item_id', $item->id); - }); - } else { - $query->whereRaw('1 = 0'); + // dd($data); + // Hide all records initially if no filters are applied + if (empty($data['Plant']) && empty($data['Line']) && empty($data['item_code']) && empty($data['machine_name']) && empty($data['item_description']) && empty($data['serial_number']) && empty($data['output']) && empty($data['phase']) && empty($data['connection']) && empty($data['remark']) && empty($data['batch_no']) && empty($data['result']) && empty($data['created_from']) && empty($data['created_to'])) { + return $query->whereRaw('1 = 0'); } - } - if (!empty($data['output'])) - { - $query->where('output',$data['output']); - } + // if (empty($data['Plant']) && empty($data['Line']) && empty($data['item_code']) && empty($data['machine_name']) && empty($data['item_description']) && empty($data['serial_number']) && empty($data['output']) && empty($data['phase']) && !empty($data['connection']) && empty($data['remark']) && empty($data['batch_no'])&& empty($data['result']) && empty($data['created_from']) && empty($data['created_to'])) { + // return $query->whereRaw('1 = 0'); + // } - // if (!empty($data['phase'])) - // { - // //$query->where('phase',$data['phase']); - // $query->whereHas('motorTestingMaster', function ($subQuery) use ($data) { - // $subQuery->where('phase', $data['phase']); - // }); - // } + if (! empty($data['Plant'])) { + $query->where('plant_id', $data['Plant']); + } else { + $userHas = Filament::auth()->user()->plant_id; - if (!empty($data['connection'])) - { - //$query->where('connection',$data['connection']); - $query->whereHas('motorTestingMaster', function ($subQuery) use ($data) { - $subQuery->where('connection', $data['connection']); - }); - } + if ($userHas && strlen($userHas) > 0) { + return $query->whereRaw('1 = 0'); + } + } - if (!empty($data['remark'])) - { - $query->where('remark',$data['remark']); - } + if (! empty($data['Line'])) { + $query->where('line_id', $data['Line']); + } - if (!empty($data['batch_number'])) - { - $query->where('batch_number',$data['batch_number']); - } + if (! empty($data['item_code'])) { + // $query->where('item_id', $data['item_code']); + $query->whereHas('motorTestingMaster', function ($subQuery) use ($data) { + $subQuery->where('item_id', $data['item_code']); + }); + } - if (!empty($data['result'])) - { - $query->where('result', $data['result']); - } + if (! empty($data['machine_name'])) { + $query->where('machine_id', $data['machine_name']); + } + if (! empty($data['serial_number'])) { + $query->where('serial_number', $data['serial_number']); + } - if (!empty($data['created_from'])) - { - $query->where('created_at', '>=', $data['created_from']); - } + if (! empty($data['item_description'])) { + $item = Item::where('description', $data['item_description'])->first(); - if (!empty($data['created_to'])) - { - $query->where('created_at', '<=', $data['created_to']); - } - }) - ->indicateUsing(function (array $data) { - $indicators = []; + if ($item) { + $query->whereHas('motorTestingMaster', function ($subQuery) use ($item) { + $subQuery->where('item_id', $item->id); + }); + } else { + $query->whereRaw('1 = 0'); + } + } - if (!empty($data['Plant'])) { - $indicators[] = 'Plant: ' . Plant::where('id', $data['Plant'])->value('name'); - } - if (!empty($data['Line'])) { - $indicators[] = 'Line: ' . Line::where('id', $data['Line'])->value('name'); - } - if (!empty($data['item_code'])) { - $indicators[] = 'Item Code: ' . Item::where('id', $data['item_code'])->value('code'); - } - if (!empty($data['machine_name'])) { - $indicators[] = 'Machine: ' . Machine::where('id', $data['machine_name'])->value('name'); - } - if (!empty($data['output'])) { - $indicators[] = 'Output: ' . $data['output']; - } - if (!empty($data['item_description'])) { - $indicators[] = 'Model: ' . $data['item_description']; - } - // if (!empty($data['phase'])) { - // $indicators[] = 'Phase: ' . $data['phase']; - // } - // if (!empty($data['connection'])) { - // $indicators[] = 'Connection: ' . $data['connection']; - // } - if (!empty($data['remark'])) { - $indicators[] = 'Remark: ' . $data['remark']; - } - if (!empty($data['batch_number'])) { - $indicators[] = 'Batch Number: ' . $data['batch_number']; - } - if (!empty($data['result'])) - { - $indicators[] = 'Result: ' . $data['result']; - } + if (! empty($data['output'])) { + $query->where('output', $data['output']); + } - if (!empty($data['serial_number'])) { - $indicators[] = 'Serial Number: ' . $data['serial_number']; - } + // if (!empty($data['phase'])) + // { + // //$query->where('phase',$data['phase']); + // $query->whereHas('motorTestingMaster', function ($subQuery) use ($data) { + // $subQuery->where('phase', $data['phase']); + // }); + // } - if (!empty($data['created_from'])) { - $indicators[] = 'From: ' . $data['created_from']; - } + if (! empty($data['connection'])) { + // $query->where('connection',$data['connection']); + $query->whereHas('motorTestingMaster', function ($subQuery) use ($data) { + $subQuery->where('connection', $data['connection']); + }); + } - if (!empty($data['created_to'])) { - $indicators[] = 'To: ' . $data['created_to']; - } + if (! empty($data['remark'])) { + $query->where('remark', $data['remark']); + } - return $indicators; - }) + if (! empty($data['batch_number'])) { + $query->where('batch_number', $data['batch_number']); + } + + if (! empty($data['result'])) { + $query->where('result', $data['result']); + } + + if (! empty($data['created_from'])) { + $query->where('created_at', '>=', $data['created_from']); + } + + if (! empty($data['created_to'])) { + $query->where('created_at', '<=', $data['created_to']); + } + }) + ->indicateUsing(function (array $data) { + $indicators = []; + + if (! empty($data['Plant'])) { + $indicators[] = 'Plant: '.Plant::where('id', $data['Plant'])->value('name'); + } else { + $userHas = Filament::auth()->user()->plant_id; + + if ($userHas && strlen($userHas) > 0) { + return 'Plant: Choose plant to filter records.'; + } + } + if (! empty($data['Line'])) { + $indicators[] = 'Line: '.Line::where('id', $data['Line'])->value('name'); + } + if (! empty($data['item_code'])) { + $indicators[] = 'Item Code: '.Item::where('id', $data['item_code'])->value('code'); + } + if (! empty($data['machine_name'])) { + $indicators[] = 'Machine: '.Machine::where('id', $data['machine_name'])->value('name'); + } + if (! empty($data['output'])) { + $indicators[] = 'Output: '.$data['output']; + } + if (! empty($data['item_description'])) { + $indicators[] = 'Model: '.$data['item_description']; + } + // if (!empty($data['phase'])) { + // $indicators[] = 'Phase: ' . $data['phase']; + // } + // if (!empty($data['connection'])) { + // $indicators[] = 'Connection: ' . $data['connection']; + // } + if (! empty($data['remark'])) { + $indicators[] = 'Remark: '.$data['remark']; + } + if (! empty($data['batch_number'])) { + $indicators[] = 'Batch Number: '.$data['batch_number']; + } + if (! empty($data['result'])) { + $indicators[] = 'Result: '.$data['result']; + } + + if (! empty($data['serial_number'])) { + $indicators[] = 'Serial Number: '.$data['serial_number']; + } + + if (! empty($data['created_from'])) { + $indicators[] = 'From: '.$data['created_from']; + } + + if (! empty($data['created_to'])) { + $indicators[] = 'To: '.$data['created_to']; + } + + return $indicators; + }), ]) ->filtersFormMaxHeight('280px') ->actions([ @@ -810,168 +817,355 @@ class TestingPanelReadingResource extends Resource Tables\Actions\DeleteBulkAction::make(), Tables\Actions\ForceDeleteBulkAction::make(), Tables\Actions\RestoreBulkAction::make(), + + // BulkAction::make('exportExcel') + // ->label('Export Selected to Excel') + // ->icon('heroicon-o-document-arrow-down') + // ->action(function (Collection $records) { + // return Excel::download( + // new MotorFreeRunExport($records), + // 'Motor_Free_Run_Register.xlsx' + // ); + // }), + BulkAction::make('export_pdf') - ->label('Export Readings PDF') - ->action(function ($records) - { - //$records->load('item'); - $records->load('motorTestingMaster.item'); - $plantId = $records->first()?->plant_id; - - $plant = $plantId ? Plant::find($plantId) : null; - - // Check if all records are Star-Delta type - $isAllStarDelta = $records->every(function ($record) { - return $record->motorTestingMaster?->connection === 'Star-Delta'; - }); - // $hasStarDelta = $records->contains(function ($record) { - // return $record->motorTestingMaster?->connection === 'Star-Delta'; - // }); - - - //dd($isAllStarDelta); - if(!$isAllStarDelta) - { - $mappedData = collect($records)->map(function ($record) { - return [ - // 'Date' => $record['created_at'] ?? '', - 'Date' =>date('Y-m-d', strtotime($record['created_at'] ?? '')), - 'Output' => $record['output'] ?? '', - 'Motor SNo' => $record['serial_number'] ?? '', - 'Item Code' => $record->motorTestingMaster->item->code ?? '', - 'Motor Type' => $record->motorTestingMaster->item->description ?? '', - - 'kw' => $record->motorTestingMaster->kw ?? '', - 'hp' => $record->motorTestingMaster->hp ?? '', - 'phase' => $record->motorTestingMaster->phase ?? '', - 'isi_model' => $record->motorTestingMaster->isi_model ?? '', - - // BEFORE FREE RUN - 'Voltage_Before' => $record['before_fr_volt'] ?? '', - 'Current_Before' => $record['before_fr_cur'] ?? '', - 'Power_Before' => $record['before_fr_pow'] ?? '', - 'Resistance_RY' => $record['before_fr_res_ry'] ?? '', - 'Resistance_YB' => $record['before_fr_res_yb'] ?? '', - 'Resistance_BR' => $record['before_fr_res_br'] ?? '', - 'Insulation_Resistance' => $record['before_fr_ir'] ?? '', - 'Frequency_Before' => $record['before_fr_freq'] ?? '', - 'Speed_Before' => $record['before_fr_speed'] ?? '', - - // AFTER FREE RUN - 'Voltage_After' => $record['after_fr_vol'] ?? '', - 'Current_After' => $record['after_fr_cur'] ?? '', - 'Power_After' => $record['after_fr_pow'] ?? '', - 'IR_Hot' => $record['after_fr_ir_hot'] ?? '', - 'IR_Cool' => $record['after_fr_ir_cool'] ?? '', - 'Leakage_Current' => $record['after_fr_leak_cur'] ?? '', - 'Frequency_After' => $record['after_fr_freq'] ?? '', - 'Speed_After' => $record['after_fr_speed'] ?? '', - - // LOCKED ROTOR TEST - 'Voltage_Locked' => $record['locked_rt_volt'] ?? '', - 'Current_Locked' => $record['locked_rt_cur'] ?? '', - 'Power_Locked' => $record['locked_rt_pow'] ?? '', - - // Last 8 columns - 'No_Load_Pickup_Voltage' => $record['no_load_pickup_volt'] ?? '', - 'Room_Temp' => $record['room_temperature'] ?? '', - 'High_Voltage_Test' => $record['hv_test'] ?? '', - 'Batch_Number' => $record['batch_number'] ?? '', - 'Batch_Count' => $record['batch_count'] ?? '', - 'Result' => $record['result'] ?? '', - 'Remark' => $record['remark'] ?? '', - 'Tested_By' => $record['tested_by'] ?? '', - ]; - }); - } - else - { - - $mappedData = collect($records)->map(function ($record) { - return [ - //'Date' => $record['created_at'] ?? '', - 'Date' =>date('Y-m-d', strtotime($record['created_at'] ?? '')), - 'Output' => $record['output'] ?? '', - 'Motor SNo' => $record['serial_number'] ?? '', - 'Item Code' => $record->motorTestingMaster->item->code ?? '', - 'Motor Type' => $record->motorTestingMaster->item->description ?? '', - - 'kw' => $record->motorTestingMaster->kw ?? '', - 'hp' => $record->motorTestingMaster->hp ?? '', - 'phase' => $record->motorTestingMaster->phase ?? '', - 'isi_model' => $record->motorTestingMaster->isi_model ?? '', - - // BEFORE FREE RUN - 'Voltage_Before' => $record['before_fr_volt'] ?? '', - 'Current_Before' => $record['before_fr_cur'] ?? '', - 'Power_Before' => $record['before_fr_pow'] ?? '', - 'Resistance_RY' => $record['before_fr_res_ry'] ?? '', - 'Resistance_YB' => $record['before_fr_res_yb'] ?? '', - 'Resistance_BR' => $record['before_fr_res_br'] ?? '', - 'Insulation_Resistance_R' => $record['before_fr_ir_r'] ?? '', - 'Insulation_Resistance_Y' => $record['before_fr_ir_y'] ?? '', - 'Insulation_Resistance_B' => $record['before_fr_ir_b'] ?? '', - 'Frequency_Before' => $record['before_fr_freq'] ?? '', - 'Speed_Before' => $record['before_fr_speed'] ?? '', - - // AFTER FREE RUN - 'Voltage_After' => $record['after_fr_vol'] ?? '', - 'Current_After' => $record['after_fr_cur'] ?? '', - 'Power_After' => $record['after_fr_pow'] ?? '', - 'IR_Hot_R' => $record['after_fr_ir_hot_r'] ?? '', - 'IR_Hot_Y' => $record['after_fr_ir_hot_y'] ?? '', - 'IR_Hot_B' => $record['after_fr_ir_hot_b'] ?? '', - 'IR_Cool_R' => $record['after_fr_ir_cool_r'] ?? '', - 'IR_Cool_Y' => $record['after_fr_ir_cool_y'] ?? '', - 'IR_Cool_B' => $record['after_fr_ir_cool_b'] ?? '', - 'Leakage_Current' => $record['after_fr_leak_cur'] ?? '', - 'Frequency_After' => $record['after_fr_freq'] ?? '', - 'Speed_After' => $record['after_fr_speed'] ?? '', - - // LOCKED ROTOR TEST - 'Voltage_Locked' => $record['locked_rt_volt'] ?? '', - 'Current_Locked' => $record['locked_rt_cur'] ?? '', - 'Power_Locked' => $record['locked_rt_pow'] ?? '', - - // Last 8 columns - 'No_Load_Pickup_Voltage' => $record['no_load_pickup_volt'] ?? '', - 'Room_Temp' => $record['room_temperature'] ?? '', - 'High_Voltage_Test' => $record['hv_test'] ?? '', - 'Batch_Number' => $record['batch_number'] ?? '', - 'Batch_Count' => $record['batch_count'] ?? '', - 'Result' => $record['result'] ?? '', - 'Remark' => $record['remark'] ?? '', - 'Tested_By' => $record['tested_by'] ?? '', - ]; - }); - } - - $view = $isAllStarDelta ? 'exports.export-three-phase-pdf' : 'exports.testingpanel-pdf'; - - - $pdf = Pdf::loadView($view, [ - 'records' => $mappedData, - 'plant' => $plant, - ]); - - // $pdf = Pdf::loadView('exports.testingpanel-pdf',[ - // // ['records' => $mappedData] - // 'records' => $mappedData, - // 'plant' => $plant, - - // ]); - - return response()->streamDownload( - fn () => print($pdf->stream()), - 'TestingPanelReading.pdf' - ); + ->label('Export Selected to Excel') + ->action(function ($records) { + // $ids = $records->pluck('id')->toArray(); + // $query = TestingPanelReading::whereIn('id', $ids); + $templatePath = storage_path('app/private/uploads/temp/MotorTestingPanelReportTemplate.xlsx'); + return Excel::download(new MotorFreeRunExport($records, $templatePath), 'MotorFreeRunData.xlsx'); }) ->icon('heroicon-o-document-arrow-down'), + + // BulkAction::make('export_pdf') + // ->label('Export Readings PDF'), + // ->action(function ($records) + // { + // //$records->load('item'); + // $records->load('motorTestingMaster.item'); + // $plantId = $records->first()?->plant_id; + + // $plant = $plantId ? Plant::find($plantId) : null; + + // // Check if all records are Star-Delta type + // $isAllStarDelta = $records->every(function ($record) { + // return $record->motorTestingMaster?->connection === 'Star-Delta'; + // }); + // // $hasStarDelta = $records->contains(function ($record) { + // // return $record->motorTestingMaster?->connection === 'Star-Delta'; + // // }); + + // //dd($isAllStarDelta); + // if(!$isAllStarDelta) + // { + // $mappedData = collect($records)->map(function ($record) { + // return [ + // // 'Date' => $record['created_at'] ?? '', + // 'Date' =>date('Y-m-d', strtotime($record['created_at'] ?? '')), + // 'Output' => $record['output'] ?? '', + // 'Motor SNo' => $record['serial_number'] ?? '', + // 'Item Code' => $record->motorTestingMaster->item->code ?? '', + // 'Motor Type' => $record->motorTestingMaster->item->description ?? '', + + // 'kw' => $record->motorTestingMaster->kw ?? '', + // 'hp' => $record->motorTestingMaster->hp ?? '', + // 'phase' => $record->motorTestingMaster->phase ?? '', + // 'isi_model' => $record->motorTestingMaster->isi_model ?? '', + + // // BEFORE FREE RUN + // 'Voltage_Before' => $record['before_fr_volt'] ?? '', + // 'Current_Before' => $record['before_fr_cur'] ?? '', + // 'Power_Before' => $record['before_fr_pow'] ?? '', + // 'Resistance_RY' => $record['before_fr_res_ry'] ?? '', + // 'Resistance_YB' => $record['before_fr_res_yb'] ?? '', + // 'Resistance_BR' => $record['before_fr_res_br'] ?? '', + // 'Insulation_Resistance' => $record['before_fr_ir'] ?? '', + // 'Frequency_Before' => $record['before_fr_freq'] ?? '', + // 'Speed_Before' => $record['before_fr_speed'] ?? '', + + // // AFTER FREE RUN + // 'Voltage_After' => $record['after_fr_vol'] ?? '', + // 'Current_After' => $record['after_fr_cur'] ?? '', + // 'Power_After' => $record['after_fr_pow'] ?? '', + // 'IR_Hot' => $record['after_fr_ir_hot'] ?? '', + // 'IR_Cool' => $record['after_fr_ir_cool'] ?? '', + // 'Leakage_Current' => $record['after_fr_leak_cur'] ?? '', + // 'Frequency_After' => $record['after_fr_freq'] ?? '', + // 'Speed_After' => $record['after_fr_speed'] ?? '', + + // // LOCKED ROTOR TEST + // 'Voltage_Locked' => $record['locked_rt_volt'] ?? '', + // 'Current_Locked' => $record['locked_rt_cur'] ?? '', + // 'Power_Locked' => $record['locked_rt_pow'] ?? '', + + // // Last 8 columns + // 'No_Load_Pickup_Voltage' => $record['no_load_pickup_volt'] ?? '', + // 'Room_Temp' => $record['room_temperature'] ?? '', + // 'High_Voltage_Test' => $record['hv_test'] ?? '', + // 'Batch_Number' => $record['batch_number'] ?? '', + // 'Batch_Count' => $record['batch_count'] ?? '', + // 'Result' => $record['result'] ?? '', + // 'Remark' => $record['remark'] ?? '', + // 'Tested_By' => $record['tested_by'] ?? '', + // ]; + // }); + // } + // else + // { + + // $mappedData = collect($records)->map(function ($record) { + // return [ + // //'Date' => $record['created_at'] ?? '', + // 'Date' =>date('Y-m-d', strtotime($record['created_at'] ?? '')), + // 'Output' => $record['output'] ?? '', + // 'Motor SNo' => $record['serial_number'] ?? '', + // 'Item Code' => $record->motorTestingMaster->item->code ?? '', + // 'Motor Type' => $record->motorTestingMaster->item->description ?? '', + + // 'kw' => $record->motorTestingMaster->kw ?? '', + // 'hp' => $record->motorTestingMaster->hp ?? '', + // 'phase' => $record->motorTestingMaster->phase ?? '', + // 'isi_model' => $record->motorTestingMaster->isi_model ?? '', + + // // BEFORE FREE RUN + // 'Voltage_Before' => $record['before_fr_volt'] ?? '', + // 'Current_Before' => $record['before_fr_cur'] ?? '', + // 'Power_Before' => $record['before_fr_pow'] ?? '', + // 'Resistance_RY' => $record['before_fr_res_ry'] ?? '', + // 'Resistance_YB' => $record['before_fr_res_yb'] ?? '', + // 'Resistance_BR' => $record['before_fr_res_br'] ?? '', + // 'Insulation_Resistance_R' => $record['before_fr_ir_r'] ?? '', + // 'Insulation_Resistance_Y' => $record['before_fr_ir_y'] ?? '', + // 'Insulation_Resistance_B' => $record['before_fr_ir_b'] ?? '', + // 'Frequency_Before' => $record['before_fr_freq'] ?? '', + // 'Speed_Before' => $record['before_fr_speed'] ?? '', + + // // AFTER FREE RUN + // 'Voltage_After' => $record['after_fr_vol'] ?? '', + // 'Current_After' => $record['after_fr_cur'] ?? '', + // 'Power_After' => $record['after_fr_pow'] ?? '', + // 'IR_Hot_R' => $record['after_fr_ir_hot_r'] ?? '', + // 'IR_Hot_Y' => $record['after_fr_ir_hot_y'] ?? '', + // 'IR_Hot_B' => $record['after_fr_ir_hot_b'] ?? '', + // 'IR_Cool_R' => $record['after_fr_ir_cool_r'] ?? '', + // 'IR_Cool_Y' => $record['after_fr_ir_cool_y'] ?? '', + // 'IR_Cool_B' => $record['after_fr_ir_cool_b'] ?? '', + // 'Leakage_Current' => $record['after_fr_leak_cur'] ?? '', + // 'Frequency_After' => $record['after_fr_freq'] ?? '', + // 'Speed_After' => $record['after_fr_speed'] ?? '', + + // // LOCKED ROTOR TEST + // 'Voltage_Locked' => $record['locked_rt_volt'] ?? '', + // 'Current_Locked' => $record['locked_rt_cur'] ?? '', + // 'Power_Locked' => $record['locked_rt_pow'] ?? '', + + // // Last 8 columns + // 'No_Load_Pickup_Voltage' => $record['no_load_pickup_volt'] ?? '', + // 'Room_Temp' => $record['room_temperature'] ?? '', + // 'High_Voltage_Test' => $record['hv_test'] ?? '', + // 'Batch_Number' => $record['batch_number'] ?? '', + // 'Batch_Count' => $record['batch_count'] ?? '', + // 'Result' => $record['result'] ?? '', + // 'Remark' => $record['remark'] ?? '', + // 'Tested_By' => $record['tested_by'] ?? '', + // ]; + // }); + // } + + // $view = $isAllStarDelta ? 'exports.export-three-phase-pdf' : 'exports.testingpanel-pdf'; + + // $pdf = Pdf::loadView($view, [ + // 'records' => $mappedData, + // 'plant' => $plant, + // ]); + + // // $pdf = Pdf::loadView('exports.testingpanel-pdf',[ + // // // ['records' => $mappedData] + // // 'records' => $mappedData, + // // 'plant' => $plant, + + // // ]); + + // return response()->streamDownload( + // fn () => print($pdf->stream()), + // 'TestingPanelReading.pdf' + // ); + // // return $pdf->download('TestingPanelReading.pdf'); + // }) + + // ->action(function ($records) { + + // // Load related item data + // $records->load('motorTestingMaster.item'); + + // $plantId = $records->first()?->plant_id; + // $plant = $plantId ? Plant::find($plantId) : null; + + // // Check if all records are Star-Delta type + // $isAllStarDelta = $records->every(fn($record) => $record->motorTestingMaster?->connection === 'Star-Delta'); + + // // Map records for export + // $mappedData = $records->map(function ($record) use ($isAllStarDelta) { + + // if (!$isAllStarDelta) { + // return [ + // 'Date' => date('Y-m-d', strtotime($record['created_at'] ?? '')), + // 'Output' => $record['output'] ?? '', + // 'Motor SNo' => $record['serial_number'] ?? '', + // 'Item Code' => $record->motorTestingMaster->item->code ?? '', + // 'Motor Type' => $record->motorTestingMaster->item->description ?? '', + // 'kw' => $record->motorTestingMaster->kw ?? '', + // 'hp' => $record->motorTestingMaster->hp ?? '', + // 'phase' => $record->motorTestingMaster->phase ?? '', + // 'isi_model' => $record->motorTestingMaster->isi_model ?? '', + // 'Voltage_Before' => $record['before_fr_volt'] ?? '', + // 'Current_Before' => $record['before_fr_cur'] ?? '', + // 'Power_Before' => $record['before_fr_pow'] ?? '', + // 'Resistance_RY' => $record['before_fr_res_ry'] ?? '', + // 'Resistance_YB' => $record['before_fr_res_yb'] ?? '', + // 'Resistance_BR' => $record['before_fr_res_br'] ?? '', + // 'Insulation_Resistance' => $record['before_fr_ir'] ?? '', + // 'Frequency_Before' => $record['before_fr_freq'] ?? '', + // 'Speed_Before' => $record['before_fr_speed'] ?? '', + // 'Voltage_After' => $record['after_fr_vol'] ?? '', + // 'Current_After' => $record['after_fr_cur'] ?? '', + // 'Power_After' => $record['after_fr_pow'] ?? '', + // 'IR_Hot' => $record['after_fr_ir_hot'] ?? '', + // 'IR_Cool' => $record['after_fr_ir_cool'] ?? '', + // 'Leakage_Current' => $record['after_fr_leak_cur'] ?? '', + // 'Frequency_After' => $record['after_fr_freq'] ?? '', + // 'Speed_After' => $record['after_fr_speed'] ?? '', + // 'Voltage_Locked' => $record['locked_rt_volt'] ?? '', + // 'Current_Locked' => $record['locked_rt_cur'] ?? '', + // 'Power_Locked' => $record['locked_rt_pow'] ?? '', + // 'No_Load_Pickup_Voltage' => $record['no_load_pickup_volt'] ?? '', + // 'Room_Temp' => $record['room_temperature'] ?? '', + // 'High_Voltage_Test' => $record['hv_test'] ?? '', + // 'Batch_Number' => $record['batch_number'] ?? '', + // 'Batch_Count' => $record['batch_count'] ?? '', + // 'Result' => $record['result'] ?? '', + // 'Remark' => $record['remark'] ?? '', + // 'Tested_By' => $record['tested_by'] ?? '', + // ]; + // } else { + // // Star-Delta records + // return [ + // 'Date' => date('Y-m-d', strtotime($record['created_at'] ?? '')), + // 'Output' => $record['output'] ?? '', + // 'Motor SNo' => $record['serial_number'] ?? '', + // 'Item Code' => $record->motorTestingMaster->item->code ?? '', + // 'Motor Type' => $record->motorTestingMaster->item->description ?? '', + // 'kw' => $record->motorTestingMaster->kw ?? '', + // 'hp' => $record->motorTestingMaster->hp ?? '', + // 'phase' => $record->motorTestingMaster->phase ?? '', + // 'isi_model' => $record->motorTestingMaster->isi_model ?? '', + // 'Voltage_Before' => $record['before_fr_volt'] ?? '', + // 'Current_Before' => $record['before_fr_cur'] ?? '', + // 'Power_Before' => $record['before_fr_pow'] ?? '', + // 'Resistance_RY' => $record['before_fr_res_ry'] ?? '', + // 'Resistance_YB' => $record['before_fr_res_yb'] ?? '', + // 'Resistance_BR' => $record['before_fr_res_br'] ?? '', + // 'Insulation_Resistance_R' => $record['before_fr_ir_r'] ?? '', + // 'Insulation_Resistance_Y' => $record['before_fr_ir_y'] ?? '', + // 'Insulation_Resistance_B' => $record['before_fr_ir_b'] ?? '', + // 'Frequency_Before' => $record['before_fr_freq'] ?? '', + // 'Speed_Before' => $record['before_fr_speed'] ?? '', + // 'Voltage_After' => $record['after_fr_vol'] ?? '', + // 'Current_After' => $record['after_fr_cur'] ?? '', + // 'Power_After' => $record['after_fr_pow'] ?? '', + // 'IR_Hot_R' => $record['after_fr_ir_hot_r'] ?? '', + // 'IR_Hot_Y' => $record['after_fr_ir_hot_y'] ?? '', + // 'IR_Hot_B' => $record['after_fr_ir_hot_b'] ?? '', + // 'IR_Cool_R' => $record['after_fr_ir_cool_r'] ?? '', + // 'IR_Cool_Y' => $record['after_fr_ir_cool_y'] ?? '', + // 'IR_Cool_B' => $record['after_fr_ir_cool_b'] ?? '', + // 'Leakage_Current' => $record['after_fr_leak_cur'] ?? '', + // 'Frequency_After' => $record['after_fr_freq'] ?? '', + // 'Speed_After' => $record['after_fr_speed'] ?? '', + // 'Voltage_Locked' => $record['locked_rt_volt'] ?? '', + // 'Current_Locked' => $record['locked_rt_cur'] ?? '', + // 'Power_Locked' => $record['locked_rt_pow'] ?? '', + // 'No_Load_Pickup_Voltage' => $record['no_load_pickup_volt'] ?? '', + // 'Room_Temp' => $record['room_temperature'] ?? '', + // 'High_Voltage_Test' => $record['hv_test'] ?? '', + // 'Batch_Number' => $record['batch_number'] ?? '', + // 'Batch_Count' => $record['batch_count'] ?? '', + // 'Result' => $record['result'] ?? '', + // 'Remark' => $record['remark'] ?? '', + // 'Tested_By' => $record['tested_by'] ?? '', + // ]; + // } + // }); + + // // Excel template path + // $templatePath = storage_path('app/private/uploads/temp/MotorTestingPanelReportTemplate.xlsx'); + + // // Check if template exists + // if (!file_exists($templatePath)) { + // Notification::make() + // ->title('Template Not Found') + // ->danger() + // ->body('The Excel template file does not exist. Please upload it first.') + // ->send(); + + // return; // Stop further execution + // } + // // Export Excel + // // return Excel::download( + // // new MotorFreeRunExport(collect($mappedData)), + // // 'TestingPanelReading.xlsx', + // // \Maatwebsite\Excel\Excel::XLSX, + // // [ + // // 'template' => $templatePath, + // // ] + // // ); + // // Load the template + // $spreadsheet = IOFactory::load($templatePath); + // $sheet = $spreadsheet->getActiveSheet(); + + // // Insert mapped data starting from row 3 + // $row = 7; + // foreach ($mappedData as $dataRow) { + // $col = 'A'; + // foreach ($dataRow as $cell) { + // $sheet->setCellValue($col . $row, $cell); + // $col++; + // } + // $row++; + // } + + // // Download the modified template as Excel + // $writer = new Xlsx($spreadsheet); + // return response()->streamDownload(function() use ($writer) { + // $writer->save('php://output'); + // }, 'TestingPanelReading.xlsx'); + // }) + // ->action(function ($records) { + + // // If no template, notify + // $templatePath = storage_path('app/private/uploads/temp/MotorTestingPanelReportTemplate.xlsx'); + // if (!file_exists($templatePath)) { + // Notification::make() + // ->title('Template Not Found') + // ->danger() + // ->body('The Excel template file does not exist. Please upload it first.') + // ->send(); + // return; + // } + + // // Just export the raw data (fast, chunked) + // return Excel::download(new MotorFreeRunExport($records->pluck('id')), 'MotorFreeRunData.xlsx'); + // }) + // ->icon('heroicon-o-document-arrow-down'), c + BulkAction::make('export_isi_pdf') ->label('Export ISI Readings PDF') - ->action(function ($records) - { + ->action(function ($records) { + // Increase memory and execution time + // ini_set('memory_limit', '1024M'); + // set_time_limit(300); $records->load('motorTestingMaster.item'); $plantId = $records->first()?->plant_id; @@ -984,13 +1178,12 @@ class TestingPanelReadingResource extends Resource // return $record->motorTestingMaster?->connection === 'Star-Delta'; // }); - //dd($isAllStarDelta); - if(!$isAllStarDelta) - { + // dd($isAllStarDelta); + if (! $isAllStarDelta) { $mappedData = collect($records)->map(function ($record) { - return [ + return [ // 'Date' => $record['created_at'] ?? '', - 'Date' =>date('Y-m-d', strtotime($record['created_at'] ?? '')), + 'Date' => date('Y-m-d', strtotime($record['created_at'] ?? '')), 'Output' => $record['output'] ?? '', 'Motor SNo' => $record['serial_number'] ?? '', 'Item Code' => $record->motorTestingMaster->item->code ?? '', @@ -1024,13 +1217,11 @@ class TestingPanelReadingResource extends Resource 'Remark' => $record['remark'] ?? '', ]; }); - } - else - { + } else { $mappedData = collect($records)->map(function ($record) { - return [ + return [ // 'Date' => $record['created_at'] ?? '', - 'Date' =>date('Y-m-d', strtotime($record['created_at'] ?? '')), + 'Date' => date('Y-m-d', strtotime($record['created_at'] ?? '')), 'Output' => $record['output'] ?? '', 'Motor SNo' => $record['serial_number'] ?? '', 'Item Code' => $record->motorTestingMaster->item->code ?? '', @@ -1070,7 +1261,6 @@ class TestingPanelReadingResource extends Resource }); } - $view = $isAllStarDelta ? 'exports.export-isi-three-phase-pdf' : 'exports.export-isi-pdf'; $pdf = Pdf::loadView($view, [ @@ -1086,24 +1276,27 @@ class TestingPanelReadingResource extends Resource // ]); return response()->streamDownload( - fn () => print($pdf->stream()), + fn () => print ($pdf->stream()), 'TestingPanelReading.pdf' ); }) ->icon('heroicon-o-document-arrow-down'), ]), - ]) ->headerActions([ ImportAction::make() + ->label('Import Testing Panel Readings') + ->color('warning') ->importer(TestingPanelReadingImporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view import testing panel reading'); }), ExportAction::make() + ->label('Export Testing Panel Readings') + ->color('warning') ->exporter(TestingPanelReadingExporter::class) - ->visible(function() { + ->visible(function () { return Filament::auth()->user()->can('view export testing panel reading'); }), ]);