Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
62.96% covered (warning)
62.96%
17 / 27
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
RequestUpdateService
62.96% covered (warning)
62.96%
17 / 27
0.00% covered (danger)
0.00%
0 / 1
15.08
0.00% covered (danger)
0.00%
0 / 1
 update
62.96% covered (warning)
62.96%
17 / 27
0.00% covered (danger)
0.00%
0 / 1
15.08
1<?php
2
3namespace Domain\Request\Services;
4
5use Exception;
6
7use Illuminate\Support\Facades\DB;
8
9use App\Events\ServiceProcessed;
10use App\Models\Request\Request;
11use App\Models\User;
12
13use Domain\Request\DTOs\RequestUpdateDTO;
14use Domain\Request\DTOs\RequestItemUpdateDTO;
15use Throwable;
16
17readonly class RequestUpdateService
18{
19    /**
20     * @param RequestUpdateDTO $requestDTO
21     * @param Request $request
22     * @param User $user
23     * @return Request
24     * @throws Exception|Throwable
25     */
26    public function update(RequestUpdateDTO $requestDTO, Request $request, User $user): Request
27    {
28        try {
29            DB::beginTransaction();
30
31            $request->fill($requestDTO->toArray());
32
33            if (!is_null($requestDTO->applicant_badge)) {
34                $request->setAttribute('applicant->badge', $requestDTO->applicant_badge);
35            }
36
37            if (!is_null($requestDTO->applicant_name)) {
38                $request->setAttribute('applicant->name', $requestDTO->applicant_name);
39            }
40
41            if (!is_null($requestDTO->resource_code)) {
42                $request->setAttribute('resource->code', $requestDTO->resource_code);
43            }
44
45            if (!is_null($requestDTO->resource_description)) {
46                $request->setAttribute('resource->description', $requestDTO->resource_description);
47            }
48
49            if (!is_null($requestDTO->cost_center)) {
50                $request->setAttribute('cost_center_id', $requestDTO->cost_center->getKey());
51            }
52
53            if (!is_null($requestDTO->resource_center)) {
54                $request->setAttribute('resource_center_id', $requestDTO->resource_center->getKey());
55            }
56
57            $request->save();
58
59            if($requestDTO->items != []) {
60                foreach($requestDTO->items as $item) {
61                    (new RequestItemUpdateService())->update(
62                        RequestItemUpdateDTO::fromArray($item),
63                        $user
64                    );
65                }
66            }
67
68            DB::commit();
69        } catch (Exception $exception) {
70            DB::rollBack();
71            throw $exception;
72        }
73
74        ServiceProcessed::dispatch(self::class, $user);
75        return $request;
76    }
77}