Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
PickingOrderDeleteService
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 1
 delete
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
20
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\PickingOrderAlreadyStartedException;
10use Illuminate\Support\Facades\DB;
11use Throwable;
12
13readonly class PickingOrderDeleteService
14{
15    /**
16     * @param PickingOrder $pickingOrder
17     * @param User $user
18     * @return void
19     * @throws Throwable
20     */
21    public function delete(PickingOrder $pickingOrder, User $user): void
22    {
23        if ($pickingOrder->getAttribute('status') != PickingOrderStatusEnum::PENDING || $pickingOrder->stockIOProducts()->whereHas('pickedItems')->exists()) {
24            throw new PickingOrderAlreadyStartedException(__('Picking order already started.'));
25        }
26
27        try {
28            DB::beginTransaction();
29
30            $pickingOrder->stockIOProducts()->detach();
31            $pickingOrder->delete();
32
33            DB::commit();
34        } catch (Throwable $exception) {
35            DB::rollBack();
36            throw $exception;
37        }
38
39        ServiceProcessed::dispatch(self::class, $user);
40    }
41}