Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
ConversionListService
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 list
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
6
 getConversions
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Domain\Conversion\Services;
4
5use App\Events\ServiceProcessed;
6use App\Http\Requests\SearchConversionRequest;
7use App\Jobs\Senior\SeniorSyncConversionJob;
8use App\Models\Conversion\Conversion;
9use App\Models\Invoice\InvoiceItem;
10use App\Models\PurchaseOrder\PurchaseOrderItem;
11use App\Models\UnitMeasurement\UnitMeasurement;
12use Domain\Conversion\Resources\ConversionResource;
13use Illuminate\Database\Eloquent\Collection;
14
15readonly class ConversionListService
16{
17    /**
18     * @param SearchConversionRequest $request
19     * @return
20     */
21    public function list(SearchConversionRequest $request)
22    {
23        $invoiceItem = InvoiceItem::find($request->invoice_item_id);
24        $purchaseOrderItem = PurchaseOrderItem::find($request->purchase_order_item_id);
25
26        $invoiceItemUnitM = $invoiceItem->unitMeasurement;
27        $purchaseOrderItemUnitM = $purchaseOrderItem->product->unitMeasurement;
28
29        $conversions = $this->getConversions($purchaseOrderItemUnitM, $invoiceItemUnitM);
30
31        if($conversions->isEmpty()){
32            $unitMeasurementAcronym = $invoiceItemUnitM->getAttribute('acronym');
33
34            dispatch_sync(new SeniorSyncConversionJob([$unitMeasurementAcronym]));
35
36            $conversions = $this->getConversions($purchaseOrderItemUnitM, $invoiceItemUnitM);
37        }
38
39        ServiceProcessed::dispatch(self::class, $request->user());
40        return ConversionResource::collection($conversions);
41    }
42
43    /**
44     * @param UnitMeasurement $purchaseOrderItemUnitM
45     * @param UnitMeasurement $invoiceItemUnitM
46     * @return Collection
47     */
48    private function getConversions(UnitMeasurement $purchaseOrderItemUnitM, UnitMeasurement $invoiceItemUnitM): Collection
49    {
50        return Conversion::query()
51            ->with([
52                'unitMeasurementFrom',
53                'unitMeasurementTo'
54            ])
55            ->where(function ($query) use ($invoiceItemUnitM, $purchaseOrderItemUnitM) {
56                $query->where('unit_measurement_from_id', $invoiceItemUnitM->getKey())
57                    ->where('unit_measurement_to_id', $purchaseOrderItemUnitM->getKey());
58            })
59            ->get();
60    }
61}