Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
71.43% covered (warning)
71.43%
10 / 14
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
TransferTaskFinishService
71.43% covered (warning)
71.43%
10 / 14
0.00% covered (danger)
0.00%
0 / 1
3.21
0.00% covered (danger)
0.00%
0 / 1
 finish
71.43% covered (warning)
71.43%
10 / 14
0.00% covered (danger)
0.00%
0 / 1
3.21
1<?php
2
3namespace Domain\TransferTask\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\TransferTask\TransferTask;
7use App\Models\User;
8use Domain\TransferTask\Enums\TransferTaskStatusEnum;
9use App\Models\TransferTask\PickedTransferTaskProduct;
10use Domain\TransferTask\Exceptions\TransferTaskException;
11use Illuminate\Support\Facades\DB;
12use Throwable;
13
14readonly class TransferTaskFinishService
15{
16    /**
17     * @param TransferTask $transferTask
18     * @param User $user
19     * @return void
20     * @throws Throwable
21     */
22    public function finish(TransferTask $transferTask, User $user): void
23    {
24        try {
25            DB::beginTransaction();
26
27            $hasItems = PickedTransferTaskProduct::whereHas('transferTaskProduct', function ($q) use ($transferTask) {
28                $q->where('transfer_task_id', $transferTask->id);
29            })->whereNotNull('item_id')->exists();
30
31            if (!$hasItems) {
32                $transferTask->setAttribute('status', TransferTaskStatusEnum::CONCLUDED);
33                $transferTask->setAttribute('end_date', now());
34                $transferTask->save();
35            } else {
36                throw new TransferTaskException(__('There still are items in the cart to be stored'));
37            }
38
39            DB::commit();
40        } catch (Throwable $throwable) {
41            DB::rollBack();
42            throw $throwable;
43        }
44
45        ServiceProcessed::dispatch(self::class, $user);
46    }
47}