Files
portal-api/app/Http/Resources/Api/Admin/InvoiceResource.php
T
baodev0andClaude Opus 5.5 40bf6b54f9 feat(admin): star/tags marks, service product-type filter, campaign bulk actions, SMTP test
- Star (is_starred) and colored tags for services, customers, orders, invoices:
  Markable trait, tags/taggables tables, PATCH administrator/marks/{type}/{key},
  tag CRUD, list filters starred / tag_ids[]
- GET administrator/services accepts product_type (falls back to product type
  for legacy rows without services.type)
- Mail campaigns: bulk cancel / retry failed / delete; cancelled campaigns are
  skipped by SendMailCampaignRecipient
- POST administrator/settings/test-smtp sends a test email through the saved
  mail transport

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 21:53:41 +07:00

45 lines
1.9 KiB
PHP

<?php
namespace App\Http\Resources\Api\Admin;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class InvoiceResource extends JsonResource
{
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'invoice_number' => $this->invoice_number,
'order_num' => $this->whenLoaded('order', fn() => $this->order?->order_num),
'order_items' => $this->when(
$this->relationLoaded('order') && $this->order?->relationLoaded('orderItems'),
fn() => OrderItemServiceResource::collection($this->order->orderItems)->resolve(),
),
'customer' => $this->whenLoaded('customer', fn() => [
'id' => $this->customer->id,
'uuid' => $this->customer->uuid,
'fullname' => $this->customer->fullname,
'email' => $this->customer->email,
]),
'sub_total' => $this->sub_total,
'discount_amount' => $this->discount_amount,
'tax' => $this->tax,
'total' => $this->total,
// Công nợ: đã thu bao nhiêu / còn thiếu bao nhiêu. Kế toán cần thấy ngay trên
// danh sách thay vì phải suy từ số dư ví của khách.
'amount_paid' => (int) $this->amount_paid,
'outstanding' => \App\Services\InvoicePaymentService::outstanding($this->resource),
'status' => $this->status,
'is_starred' => (bool) $this->is_starred,
'tags' => $this->whenLoaded('tags'),
'due_date' => $this->due_date,
'paid_at' => $this->paid_at,
'reminder_step' => (int) $this->reminder_step,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
}