Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
StoreInvoiceDTO
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 3
12
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 toArray
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
 fromRequest
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Domain\Invoice\DTOs;
4
5use App\Models\Supplier;
6use Domain\Integration\DTOs\IntegrationInvoiceDTO;
7use Domain\Invoice\Enums\InvoicePurchaseOrderStatusEnum;
8use Domain\Invoice\Enums\InvoiceStatusEnum;
9use Domain\Invoice\Enums\VerificationStatusInvoiceEnum;
10use Domain\Shared\Interfaces\DataTransferObjectInterface;
11use Illuminate\Foundation\Http\FormRequest;
12
13readonly final class StoreInvoiceDTO implements DataTransferObjectInterface
14{
15    public string $key;
16    public InvoiceStatusEnum $status;
17    public string $issue_date;
18    public ?string $observation;
19    public Supplier $supplier;
20    public InvoicePurchaseOrderStatusEnum $purchase_order_status;
21    public VerificationStatusInvoiceEnum $verification_status;
22    public IntegrationInvoiceDTO $integration;
23
24    public function __construct(array $args)
25    {
26        $this->key                   = $args['key'];
27        $this->status                = $args['status'];
28        $this->issue_date            = $args['issue_date'];
29        $this->observation           = $args['observation'] ?? null;
30        $this->supplier              = $args['supplier'];
31        $this->purchase_order_status = $args['purchase_order_status'];
32        $this->verification_status   = $args['verification_status'];
33        $this->integration           = $args['integration'];
34    }
35
36    public function toArray(): array
37    {
38        return [
39            'key'                   => $this->key,
40            'status'                => $this->status->value,
41            'issue_date'            => $this->issue_date,
42            'observation'           => $this->observation,
43            'supplier'              => $this->supplier,
44            'purchase_order_status' => $this->purchase_order_status->value,
45            'verification_status'   => $this->verification_status->value,
46            'integration'           => $this->integration,
47        ];
48    }
49
50    public static function fromRequest(FormRequest $request): StoreInvoiceDTO
51    {
52        return new self([
53            'key'                   => $request->validated('key'),
54            'status'                => InvoiceStatusEnum::tryFrom($request->validated('status')),
55            'issue_date'            => $request->validated('issue_date'),
56            'observation'           => $request->validated('observation'),
57            'supplier'              => $request->validated('supplier'),
58            'purchase_order_status' => InvoicePurchaseOrderStatusEnum::tryFrom($request->validated('purchase_order_status')),
59            'verification_status'   => VerificationStatusInvoiceEnum::tryFrom($request->validated('verification_status')),
60        ]);
61    }
62}