Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
64.29% covered (warning)
64.29%
9 / 14
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
PickingOrderReturnPendingService
64.29% covered (warning)
64.29%
9 / 14
0.00% covered (danger)
0.00%
0 / 1
4.73
0.00% covered (danger)
0.00%
0 / 1
 returnToPending
64.29% covered (warning)
64.29%
9 / 14
0.00% covered (danger)
0.00%
0 / 1
4.73
1<?php
2
3namespace Domain\PickingOrder\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\PickingOrder\PickingOrder;
7use App\Models\User;
8use Domain\PickingOrder\Enums\PickingOrderStatusEnum;
9use Domain\PickingOrder\Exception\PickingOrderReturnPendingException;
10use Domain\PickingOrder\Exception\PickingOrderCanceledException;
11use Domain\StockIO\Services\StockOutputReturnToStartedService;
12use Illuminate\Support\Facades\DB;
13use Throwable;
14
15readonly class PickingOrderReturnPendingService
16{
17    /**
18     * @param PickingOrder $pickingOrder
19     * @param User $user
20     * @return void
21     * @throws Throwable
22     */
23    public function returnToPending(PickingOrder $pickingOrder, User $user): void
24    {
25        if (!$pickingOrder->isSeparated()) {
26            throw new PickingOrderReturnPendingException(__('Picking order is not separated.'));
27        }
28
29        if ($pickingOrder->isCanceled()) {
30            throw new PickingOrderCanceledException(__('Picking order is canceled.'));
31        }         
32
33        try {
34            DB::beginTransaction();
35
36            $pickingOrder->setAttribute('status', PickingOrderStatusEnum::PAUSED->value);
37            $pickingOrder->setAttribute('end_date', null);
38            $pickingOrder->save();
39
40            (new StockOutputReturnToStartedService)->processOutputReturnToStarted($pickingOrder->stockIO);
41
42            DB::commit();
43        } catch (Throwable $throwable) {
44            DB::rollBack();
45            throw $throwable;
46        }
47
48        ServiceProcessed::dispatch(self::class, $user);
49    }
50}