39 lines
2.9 KiB
PHP
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;
|
|
}
|
|
}
|