65 lines
1.7 KiB
PHP
65 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Resources\Material;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Resources\Json\JsonResource;
|
|
|
|
class MaterialResource extends JsonResource
|
|
{
|
|
public function toArray($request)
|
|
{
|
|
return [
|
|
// universal
|
|
'barcode_id' => $this->barcode_id,
|
|
'material_name' => $this->material_name,
|
|
'user_id' => $this->user_id,
|
|
|
|
// detect type model
|
|
'type' => $this->detectType(),
|
|
|
|
// serialized only
|
|
'serial_number' => $this->when(
|
|
$this->isSerialized(),
|
|
$this->serial_number
|
|
),
|
|
|
|
// consumable only
|
|
'qty' => $this->when(
|
|
$this->isConsumable(),
|
|
[
|
|
'received' => $this->qty_received ?? null,
|
|
'used' => $this->qty_used ?? null,
|
|
'remaining' => $this->qty_remaining ?? null,
|
|
'unit' => $this->unit ?? null,
|
|
]
|
|
),
|
|
|
|
// status (beda logic tapi tetap dipakai keduanya)
|
|
'status' => $this->status ?? null,
|
|
|
|
// optional tracking info
|
|
'assigned_at' => $this->assigned_at ?? null,
|
|
];
|
|
}
|
|
|
|
private function detectType(): string
|
|
{
|
|
// kalau punya qty field → consumable
|
|
if (isset($this->qty_received) || isset($this->qty_remaining)) {
|
|
return 'consumable';
|
|
}
|
|
|
|
return 'serialized';
|
|
}
|
|
|
|
private function isSerialized(): bool
|
|
{
|
|
return !isset($this->qty_received);
|
|
}
|
|
|
|
private function isConsumable(): bool
|
|
{
|
|
return isset($this->qty_received);
|
|
}
|
|
} |