Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
PickingOrderStoreService
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 1
 store
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3namespace Domain\PickingOrder\Services\V2;
4
5use Exception;
6
7use Illuminate\Support\Facades\DB;
8
9use App\Models\PickingOrder\PickingOrder;
10use App\Models\StockIO\StockIO;
11use App\Models\User;
12
13use Domain\PickingOrder\DTOs\PickingOrderDTO;
14use Domain\StockIO\Exceptions\StockStatusException;
15
16readonly class PickingOrderStoreService
17{
18
19    /**
20     * @param PickingOrderDTO $pickingOrderDTO
21     * @param User $user
22     * @param bool $syncPickedItems
23     * @return PickingOrder
24     * @throws \Throwable
25     */
26    public function store(PickingOrderDTO $pickingOrderDTO, User $user, bool $syncPickedItems = true): PickingOrder
27    {
28        try {
29            DB::beginTransaction();
30
31            $pickingOrder = new PickingOrder();
32            $pickingOrder->responsible()->associate(
33                $user->isSeparator() || $user->isStorer() ? $user : $pickingOrderDTO->responsible);
34            $pickingOrder->fill($pickingOrderDTO->toArray());
35            $pickingOrder->save();
36
37            if ($pickingOrderDTO->stockIOProducts) {
38                (new PickingOrderProductSyncService())->sync(
39                    $pickingOrderDTO->stockIOProducts,
40                    $pickingOrder,
41                    $user,
42                    $syncPickedItems
43                );
44            }
45
46            DB::commit();
47        } catch (Exception $exception) {
48            DB::rollBack();
49            throw $exception;
50        }
51
52        return $pickingOrder;
53    }
54}