Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 37
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
RequestItemUpdateService
0.00% covered (danger)
0.00%
0 / 37
0.00% covered (danger)
0.00%
0 / 2
30
0.00% covered (danger)
0.00%
0 / 1
 update
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
12
 populateExportDTO
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace Domain\Request\Services;
4
5use Throwable;
6use Exception;
7use Carbon\Carbon;
8
9use Illuminate\Support\Facades\DB;
10
11use App\Events\ServiceProcessed;
12use App\Models\Request\RequestItem;
13use App\Models\User;
14
15use Domain\Request\DTOs\ExportRequestSeniorDTO;
16use Domain\Request\DTOs\RequestItemUpdateDTO;
17use Domain\Shared\Integrations\Senior\SeniorRequestExport;
18use Domain\Shared\Integrations\Senior\Exceptions\IntegrationSoapSeniorException;
19
20readonly class RequestItemUpdateService
21{
22
23    /**
24     * @param RequestItemUpdateDTO $requestItemDTO
25     * @param User $user
26     * @return RequestItem
27     * @throws IntegrationSoapSeniorException
28     * @throws Throwable
29     */
30    public function update(RequestItemUpdateDTO $requestItemDTO, User $user): RequestItem
31    {
32        try {
33            DB::beginTransaction();
34            $requestItem = RequestItem::find($requestItemDTO->id);
35            $requestItem->fill($requestItemDTO->toArray());
36
37            if ($requestItemDTO->product) {
38                $requestItem->product()->associate($requestItemDTO->product);
39            }
40
41            $requestItem->save();
42
43            DB::commit();
44        } catch (Exception $exception) {
45            DB::rollBack();
46            throw $exception;
47        }
48
49        (new SeniorRequestExport())->execute(
50            $this->populateExportDTO($requestItem)
51        );
52
53        ServiceProcessed::dispatch(self::class, $user);
54        return $requestItem;
55    }
56
57    /**
58     * @param RequestItem $requestItem
59     * @return ExportRequestSeniorDTO
60     */
61    private function populateExportDTO(RequestItem $requestItem): ExportRequestSeniorDTO
62    {
63        $newRequestItems[] = [
64            'seqEme' => $requestItem->stockIoProduct->integration->getAttribute('parameters')['request_sequence'],
65            'codPro' => $requestItem->product->integration->getAttribute('parameters')['integration_product'],
66            'codDer' => $requestItem->product->integration->getAttribute('parameters')['integration_derivation'],
67            'qtdEme' => $requestItem->getAttribute('amount'),
68            'datEme' => Carbon::now()->format('d/m/Y'),
69            'ccuRes' => $requestItem->request->costCenter->integration->getAttribute('parameters')['cost_center_code'],
70            'obsEme' => ''
71        ];
72
73        if (isset($requestItem->request->requester->getAttribute('integrations')['senior']['user_code'])) {
74            $usuSol = $requestItem->request->requester->getAttribute('integrations')['senior']['user_code'];
75        }
76
77        return new ExportRequestSeniorDTO([
78            'identificadorSistema' => 'SOELX',
79            'codEmp'               => 1,
80            'codFil'               => 1,
81            'numEme'               => $requestItem->request->stockIo->integration->getAttribute('parameters')['request_number'],
82            'tipoProcessamento'    => 2,
83            'itens'                => $newRequestItems,
84            'identificadorExterno' => $requestItem->request->getKey(),
85            'tipoOperacao'         => 'R',
86            'usuSol'               => $usuSol ?? null,
87        ]);
88    }
89}