Files
Verde-Web/app/Http/Resources/QrCodeResource.php
admin d458e74301 feat(backend): complete Module 7 — QR code system (core)
qr_code_batches + qr_codes tables. State machine via
spatie/laravel-model-states (unassigned → allocated → active → used,
plus expired/voided). Serial format PH-{area}-{YYMM}-{batch}-{code}-
{checksum} with 2-char SHA-256-derived checksum. BatchGenerator
bulk-inserts in chunks. QrAllocator allocates free codes to verified
households (prefers area-targeted batch, falls back to any). Real
HouseholdVerified listener replaces the placeholder. QrBalanceLow
event for Module 11.

Admin: batch CRUD, mark-printed, void code, lifecycle search, PDF
print sheet (24/A4 via dompdf + endroid/qr-code + picqer/barcode).
Resident: list own codes, balance with low_balance flag, activate
allocated codes.

Removed explicit Event::listen for HouseholdVerified — Laravel 11
auto-discovers it via handle() type-hint, and double-registering was
causing double-dispatch.

130 feature tests passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 02:12:41 +08:00

27 lines
1.0 KiB
PHP

<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class QrCodeResource extends JsonResource
{
public function toArray(Request $request): array
{
return [
'serial' => $this->serial,
'barcode_value' => $this->barcode_value,
'status' => (string) $this->status,
'batch_number' => $this->whenLoaded('batch', fn () => $this->batch?->batch_number),
'household_id' => $this->whenLoaded('household', fn () => $this->household?->uuid),
'allocated_at' => $this->allocated_at?->toIso8601String(),
'activated_at' => $this->activated_at?->toIso8601String(),
'used_at' => $this->used_at?->toIso8601String(),
'expires_at' => $this->expires_at?->toIso8601String(),
'used_at_drop_off' => $this->whenLoaded('usedAtDropOff', fn () => $this->usedAtDropOff?->name),
'scanned_by' => $this->whenLoaded('scannedBy', fn () => $this->scannedBy?->full_name),
];
}
}