Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
64.86% covered (warning)
64.86%
24 / 37
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
SearchStockOutputRequestDTO
64.86% covered (warning)
64.86%
24 / 37
66.67% covered (warning)
66.67%
2 / 3
6.08
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
3
 toArray
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
2
 fromRequest
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Domain\StockIO\DTOs;
4
5use App\Models\CostCenter\CostCenter;
6use App\Models\User;
7use Carbon\Carbon;
8use Domain\Shared\Interfaces\DataTransferObjectInterface;
9use Domain\Shared\Traits\DateRangeDTOTrait;
10use Illuminate\Foundation\Http\FormRequest;
11
12final readonly class SearchStockOutputRequestDTO implements DataTransferObjectInterface
13{
14    use DateRangeDTOTrait;
15
16    public ?int $id;
17    public ?string $requester;
18    public ?CostCenter $cost_center;
19    public ?array $status;
20    public ?Carbon $start_date;
21    public ?Carbon $end_date;
22    /** @var null|Carbon[] */
23    public ?array $created_at;
24    public ?string $product_code;
25    public ?string $product;
26    public ?string $request_number;
27    public ?bool $has_purchase_solicitation;
28
29    public function __construct(array $args)
30    {
31        $this->id          = $args['id'] ?? null;
32        $this->requester   = $args['requester'] ?? null;
33        $this->cost_center = $args['cost_center'] ?? null;
34        $this->start_date  = $args['start_date'] ? Carbon::createFromFormat('d/m/Y', $args['start_date']) : null;
35        $this->end_date    = $args['end_date'] ? Carbon::createFromFormat('d/m/Y', $args['end_date']) : null;
36        $this->created_at  = $args['created_at'] ?? null;
37        $this->status      = $args['status'] ?? null;
38        $this->product_code = $args['product_code'] ?? null;
39        $this->product = $args['product'] ?? null;
40        $this->request_number = $args['request_number'] ?? null;
41        $this->has_purchase_solicitation = $args['has_purchase_solicitation'] ?? null;
42    }
43
44    public function toArray(): array
45    {
46        return [
47            'id'          => $this->id,
48            'requester'   => $this->requester,
49            'cost_center' => $this->cost_center,
50            'start_date'  => $this->start_date,
51            'end_date'    => $this->end_date,
52            'created_at'  => $this->created_at,
53            'status'      => $this->status,
54            'product_code' => $this->product_code,
55            'product' => $this->product,
56            'request_number' => $this->request_number,
57            'has_purchase_solicitation' => $this->has_purchase_solicitation,
58        ];
59    }
60
61    public static function fromRequest(FormRequest $request): SearchStockOutputRequestDTO
62    {
63        return new self([
64            'id'          => $request->validated('id'),
65            'requester'   => $request->validated('requester'),
66            'cost_center' => CostCenter::find($request->validated('cost_center')),
67            'start_date'  => $request->validated('start_date'),
68            'end_date'    => $request->validated('end_date'),
69            'created_at'  => self::processDate($request->validated('created_at')),
70            'status'      => $request->validated('status'),
71            'product_code' => $request->validated('product_code'),
72            'product' => $request->validated('product'),
73            'request_number' => $request->validated('request_number'),
74            'has_purchase_solicitation' => $request->validated('has_purchase_solicitation'),
75        ]);
76    }
77}