Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ProductDTO
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 3
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
20
 toArray
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 fromRequest
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Domain\Product\DTOs;
4
5use Carbon\Carbon;
6
7use App\Models\Category\Family;
8use App\Models\UnitMeasurement\UnitMeasurement;
9
10use Domain\Integration\DTOs\IntegrationProductDTO;
11use Domain\Shared\Interfaces\DataTransferObjectInterface;
12
13use Illuminate\Foundation\Http\FormRequest;
14
15readonly final class ProductDTO implements DataTransferObjectInterface
16{
17    private string $description;
18    private int $amount;
19    public ?ProductMeasureDTO $productMeasureDTO;
20    public Family $family;
21    public UnitMeasurement $unitMeasurement;
22    public IntegrationProductDTO $integrationProductDTO;
23
24    public function __construct(array $args)
25    {
26        $this->description           = $args['description'];
27        $this->amount                = $args['amount'];
28        $this->productMeasureDTO     = isset($args['measure']) ? new ProductMeasureDTO($args['measure']) : null;
29        $this->family                = $args['family_id'] instanceof Family ? $args['family_id'] : Family::find($args['family_id']);
30        $this->unitMeasurement       = $args['unit_measurement_id'] instanceof UnitMeasurement ? $args['unit_measurement_id'] : UnitMeasurement::find($args['unit_measurement_id']);
31        $this->integrationProductDTO = new IntegrationProductDTO([
32            'integration_barcode'           => $args['integration_barcode'] ?? null,
33            'integration_code'              => $args['integration_code'] ?? null,
34            'integration_product'           => $args['integration_product'],
35            'integration_company'           => $args['integration_company'],
36            'integration_derivation'        => $args['integration_derivation'],
37            'integration_packing_quantity'  => $args['integration_packing_quantity'],
38            'integration_date'              => Carbon::now()->format('Y-m-d H:i:s'),
39            'integration_can_buy'           => $args['integration_can_buy'],
40            'integration_produced_can_buy'  => $args['integration_produced_can_buy'],
41            'integration_can_request'       => $args['integration_can_request'],
42            'integration_can_sell_invoiced' => $args['integration_can_sell_invoiced'],
43        ]);
44    }
45
46    public function toArray(): array
47    {
48        return [
49            'description'         => $this->description,
50            'amount'              => $this->amount,
51            'family_id'           => $this->family->getKey(),
52            'unit_measurement_id' => $this->unitMeasurement->getKey(),
53        ];
54    }
55
56    public static function fromRequest(FormRequest $request): ProductDTO
57    {
58        return new self([
59            'description'                   => $request->validated('description'),
60            'amount'                        => $request->validated('amount'),
61            'measure'                       => $request->validated('measure'),
62            'family_id'                     => $request->validated('family_id'),
63            'unit_measurement_id'           => $request->validated('unit_measurement_id'),
64            'integration_date'              => $request->validated('integration_date'),
65            'integration_barcode'           => $request->validated('integration_barcode'),
66            'integration_code'              => $request->validated('integration_code'),
67            'integration_product'           => $request->validated('integration_product'),
68            'integration_company'           => $request->validated('integration_company'),
69            'integration_derivation'        => $request->validated('integration_derivation'),
70            'integration_packing_quantity'  => $request->validated('integration_packing_quantity'),
71            'integration_can_buy'           => $request->validated('integration_can_buy'),
72            'integration_produced_can_buy'  => $request->validated('integration_produced_can_buy'),
73            'integration_can_request'       => $request->validated('integration_can_request'),
74            'integration_can_sell_invoiced' => $request->validated('integration_can_sell_invoiced'),
75        ]);
76    }
77}