Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
61.54% covered (warning)
61.54%
8 / 13
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
TransferableTransferPickedItemService
61.54% covered (warning)
61.54%
8 / 13
0.00% covered (danger)
0.00%
0 / 1
4.91
0.00% covered (danger)
0.00%
0 / 1
 getRecipientItem
61.54% covered (warning)
61.54%
8 / 13
0.00% covered (danger)
0.00%
0 / 1
4.91
1<?php
2
3namespace Domain\Transferable\Services;
4
5use App\Models\Item\Item;
6use App\Models\StockIO\StockIO;
7use Domain\Item\Interfaces\HasItemsInterface;
8use Domain\Transferable\DTOs\TransferItemDTO;
9use Domain\Transferable\Exceptions\CantTransferItemException;
10use Illuminate\Database\Eloquent\Builder;
11
12readonly class TransferableTransferPickedItemService extends TransferableTransferItemService
13{
14    protected function getRecipientItem(HasItemsInterface $recipient, TransferItemDTO $itemToTransfer): ?Item
15    {
16        if (!$recipient instanceof StockIO) {
17            throw new CantTransferItemException(__('Recipient is not an InputOutput instance'));
18        }
19
20        /** @var Item $itemOnReceiver */
21        $itemOnReceiver = $recipient->items()
22                ->whereHas('integration', function (Builder $query) use ($itemToTransfer) {
23                    if (isset($itemToTransfer->item->integration->getAttribute('parameters')['production_order'])) {
24                        $query->where('parameters->production_order', $itemToTransfer->item->integration->getAttribute('parameters')['production_order']);
25                        $query->where('product_id', $itemToTransfer->item->product->getKey());
26
27                    } else if ($itemToTransfer->item->integration->getAttribute('parameters')['priority_value']) {
28                        $query->where('parameters->priority_value', $itemToTransfer->item->integration->getAttribute('parameters')['priority_value']);
29                        $query->where('parameters->priority_field', $itemToTransfer->item->integration->getAttribute('parameters')['priority_field']);
30                        $query->where('product_id', $itemToTransfer->item->product->getKey());
31                    }
32                })->first();
33
34        return $itemOnReceiver ?? null;
35    }
36}