Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
PickingOrderChangeShippingPackagingService
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
20
0.00% covered (danger)
0.00%
0 / 1
 change
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 resumeCurrentPause
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace Domain\PickingOrder\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\PickingOrder\PickingOrder;
7use App\Models\PickingOrder\PickingOrderPause;
8use App\Models\User;
9use Carbon\Carbon;
10use Domain\PickingOrder\DTOs\PickingOrderStartDTO;
11use Illuminate\Support\Facades\DB;
12use Throwable;
13
14readonly class PickingOrderChangeShippingPackagingService
15{
16    /**
17     * @param PickingOrderStartDTO $pickingOrderStartDTO
18     * @param PickingOrder $pickingOrder
19     * @param User $user
20     * @return void
21     * @throws Throwable
22     */
23    public function change(PickingOrderStartDTO $pickingOrderStartDTO, PickingOrder $pickingOrder, User $user): void
24    {
25
26        try {
27            DB::beginTransaction();
28            $pickingOrder->shippingPackaging()->associate($pickingOrderStartDTO->shippingPackaging);
29            $pickingOrder->touch();
30            DB::commit();
31        } catch (Throwable $throwable) {
32            DB::rollBack();
33            throw  $throwable;
34        }
35
36        ServiceProcessed::dispatch(self::class, $user);
37    }
38
39    /**
40     * @param PickingOrder $pickingOrder
41     * @return void
42     */
43    private function resumeCurrentPause(PickingOrder $pickingOrder): void
44    {
45        /** @var PickingOrderPause $pause */
46        $pause = $pickingOrder->pauses()
47            ->whereNotNull('start_date')
48            ->whereNull('end_date')
49            ->first();
50
51        if ($pause) {
52            $pause->setAttribute('end_date', Carbon::now());
53            $pause->save();
54        }
55    }
56}