Files
JobcardSystem/app/Domain/Reporting/ReportDataMapper.php
T

39 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
final class ReportDataMapper
{
private const CLIENT_FIELDS = [
'id','name','status','support_email','client_id','client_name','reference_no','priority','work_requested','created_at','completed_at','closed_at','changed_at','from_status','to_status','hours','sla_hours','allocated_hours','used_hours','remaining_hours','usage_percentage','status_label','period_type','start_date','end_date',
];
private const INTERNAL_FIELDS = [
'id','client_id','client_name','reference_no','status','priority','work_requested','technician_id','technician_name','created_at','completed_at','closed_at','changed_at','from_status','to_status','changed_by','changed_by_name','work_date','hours','sla_hours','counts_toward_sla','sla_status','allocated_hours','used_hours','remaining_hours','usage_percentage','status_label','period_type','start_date','end_date','internal_notes','technician_notes',
];
/** @return array<string,mixed> */
public function clientFacing(array $record): array { return $this->allow($record, self::CLIENT_FIELDS); }
/** @return array<string,mixed> */
public function internal(array $record): array { return $this->allow($record, self::INTERNAL_FIELDS); }
/** @return array{client:array<string,mixed>,internal:array<string,mixed>} */
public function map(array $record): array { return ['client' => $this->clientFacing($record), 'internal' => $this->internal($record)]; }
/** @return array<string,mixed> */
public function clientJobcard(array $record): array { $safe = $this->clientFacing($record); $ordered = []; foreach (['client_id','client_name','reference_no','status','priority','work_requested','created_at','completed_at','closed_at'] as $field) if (array_key_exists($field, $safe)) $ordered[$field] = $safe[$field]; return $ordered; }
/** @return array<string,mixed> */
public function internalJobcard(array $record): array { return $this->allow($record, self::INTERNAL_FIELDS); }
/** @return array<string,mixed> */
public function clientHistory(array $record): array { $safe = $this->clientFacing($record); $ordered = []; foreach (['client_id','reference_no','from_status','to_status','changed_at'] as $field) if (array_key_exists($field, $safe)) $ordered[$field] = $safe[$field]; return $ordered; }
/** @return array<string,mixed> */
public function internalHistory(array $record): array { return $this->allow($record, self::INTERNAL_FIELDS); }
/** @return array<string,mixed> */
public function clientActivity(array $record): array { return $this->clientFacing($record); }
/** @return array<string,mixed> */
public function internalActivity(array $record): array { return $this->allow($record, self::INTERNAL_FIELDS); }
private function allow(array $record, array $fields): array
{
$result = [];
foreach ($fields as $field) if (array_key_exists($field, $record)) $result[$field] = $record[$field];
return $result;
}
}