From ecf6d494de9a463e1735c336a7fe802647258f98 Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Mon, 23 Jun 2025 18:43:05 +0530 Subject: [PATCH] Added guard_patrol_entry importer and exporter file --- .../Exports/GuardPatrolEntryExporter.php | 61 +++++++ .../Imports/GuardPatrolEntryImporter.php | 160 ++++++++++++++++++ 2 files changed, 221 insertions(+) create mode 100644 app/Filament/Exports/GuardPatrolEntryExporter.php create mode 100644 app/Filament/Imports/GuardPatrolEntryImporter.php diff --git a/app/Filament/Exports/GuardPatrolEntryExporter.php b/app/Filament/Exports/GuardPatrolEntryExporter.php new file mode 100644 index 000000000..fed01c396 --- /dev/null +++ b/app/Filament/Exports/GuardPatrolEntryExporter.php @@ -0,0 +1,61 @@ +label('NO') + ->state(function ($record) use (&$rowNumber) { + // Increment and return the row number + return ++$rowNumber; + }), + // ExportColumn::make('id') + // ->label('ID'), + ExportColumn::make('plant.name') + ->label('PLANT'), + ExportColumn::make('guardNames.name') + ->label('GUARD NAME'), + ExportColumn::make('checkPointNames.name') + ->label('CHECK POINT NAME'), + ExportColumn::make('reader_code') + ->label('READER CODE'), + ExportColumn::make('patrol_time') + ->label('PATROL TIME'), + ExportColumn::make('created_at') + ->label('CREATED AT'), + ExportColumn::make('created_by') + ->label('CREATED BY'), + ExportColumn::make('updated_at') + ->label('UPDATED AT'), + ExportColumn::make('Updated_by') + ->label('UPDATED BY'), + ExportColumn::make('deleted_at') + ->enabledByDefault(false) + ->label('DELETED AT'), + ]; + } + + public static function getCompletedNotificationBody(Export $export): string + { + $body = 'Your guard patrol entry export has completed and ' . number_format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.'; + + if ($failedRowsCount = $export->getFailedRowsCount()) { + $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.'; + } + + return $body; + } +} diff --git a/app/Filament/Imports/GuardPatrolEntryImporter.php b/app/Filament/Imports/GuardPatrolEntryImporter.php new file mode 100644 index 000000000..c82a17880 --- /dev/null +++ b/app/Filament/Imports/GuardPatrolEntryImporter.php @@ -0,0 +1,160 @@ +requiredMapping() + ->exampleHeader('Plant Name') + ->example('Ransar Industries-I') + ->label('Plant Name') + ->relationship(resolveUsing: 'name') + ->rules(['required']), + ImportColumn::make('guardNames') + ->requiredMapping() + ->exampleHeader('Guard Name') + ->example('ARUMUGAM - HG') + ->label('Guard Name') + ->relationship(resolveUsing: 'name') + ->rules(['required']), + ImportColumn::make('checkPointNames') + ->requiredMapping() + ->exampleHeader('Check Point Name') + ->example('STP BACKSIDE') + ->label('Check Point Name') + ->relationship(resolveUsing: 'name') + ->rules(['required']), + ImportColumn::make('reader_code') + ->requiredMapping() + ->exampleHeader('Reader Code') + ->example('0C03-25010112') + ->label('Reader Code'), + ImportColumn::make('patrol_time') + ->requiredMapping() + ->exampleHeader('Patrol Time') + ->example('01-01-2025 08:00:00') + ->label('Patrol Time') + ->rules(['required']), + // ImportColumn::make('created_by') + // ->requiredMapping() + // ->exampleHeader('Created By') + // ->example(Filament::auth()->user()->name ?? 'Admin') + // ->label('Created By') + // ->rules(['required']), + // ImportColumn::make('updated_by') + // ->requiredMapping() + // ->rules(['required']), + ]; + } + + public function resolveRecord(): ?GuardPatrolEntry + { + $warnMsg = []; + $plant = Plant::where('name', $this->data['plant'])->first(); + $guardNames = null; + $checkPointNames = null; + $patrolDateTime = null; //$fdateTime = null; + if (!$plant) { + $warnMsg[] = "Plant not found"; // '" . $this->data['plant'] . "' + } + else + { + $guardNames = GuardName::where('plant_id', $plant->id)->where('name', $this->data['guardNames'])->first(); + if (!$guardNames) { + $warnMsg[] = "Guard name not found"; + } + else + { + $checkPointNames = CheckPointName::where('plant_id', $plant->id)->where('name', $this->data['checkPointNames'])->first(); + if (!$checkPointNames) { + $warnMsg[] = "Check point name not found"; + } + else + { + $patrolTime = $this->data['patrol_time'];//$fromDate = $this->data['from_datetime']; + $formats = ['d-m-Y H:i', 'd-m-Y H:i:s']; //'07-05-2025 08:00' or '07-05-2025 08:00:00' + + foreach ($formats as $format) { + try { + $patrolDateTime = Carbon::createFromFormat($format, $patrolTime); + break; + } catch (\Exception $e) { + // Optionally collect warning messages + // $warnMsg[] = "Date format mismatch with format: $format"; + } + } + + if (!isset($patrolDateTime)) { + // throw new \Exception('Invalid date time format'); + $warnMsg[] = "Invalid 'Patrol DateTime' format. Expected DD-MM-YYYY HH:MM:SS"; + } + else + { + $guardEntryFound = GuardPatrolEntry::where('plant_id', $plant->id)->where('guard_name_id', $guardNames->id)->where('check_point_name_id', $checkPointNames->id)->where('patrol_time', $patrolDateTime->format('Y-m-d H:i:s'))->first(); + if ($guardEntryFound) { + $warnMsg[] = "Duplicate guard patrol entry found"; + } + } + } + } + } + + $createdBy = Filament::auth()->user()->name;// ?? 'Admin' + if (!$createdBy) { + $warnMsg[] = "Invalid created by name found"; + } + + if (!empty($warnMsg)) { + throw new RowImportFailedException(implode(', ', $warnMsg)); + } + + GuardPatrolEntry::updateOrCreate([ + 'plant_id' => $plant->id, + 'guard_name_id' => $guardNames->id, + 'check_point_name_id' => $checkPointNames->id, + 'patrol_time' => $patrolDateTime->format('Y-m-d H:i:s') + ], + [ + 'reader_code' => $this->data['reader_code'], + 'created_by' => $createdBy, + 'updated_by' => $createdBy + ] + ); + return null; + // // return GuardPatrolEntry::firstOrNew([ + // // // Update existing records, matching them by `$this->data['column_name']` + // // 'email' => $this->data['email'], + // // ]); + + // return new GuardPatrolEntry(); + } + + public static function getCompletedNotificationBody(Import $import): string + { + $body = 'Your guard patrol entry import has completed and ' . number_format($import->successful_rows) . ' ' . str('row')->plural($import->successful_rows) . ' imported.'; + + if ($failedRowsCount = $import->getFailedRowsCount()) { + $body .= ' ' . number_format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to import.'; + } + + return $body; + } +}