Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
LinkInvoiceItemVerificationService
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 link
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
6
 processActivetyLog
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Domain\PurchaseOrder\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\Invoice\InvoiceItem;
7use App\Models\Invoice\InvoiceVerification;
8use App\Models\User;
9use Domain\Invoice\DTOs\StoreInvoiceActivityLogDTO;
10use Domain\Invoice\Enums\InvoiceActivetyLogOperationEnum;
11use Domain\Invoice\Services\InvoiceActivityLogStoreService;
12use Illuminate\Support\Facades\DB;
13use Throwable;
14
15readonly class LinkInvoiceItemVerificationService
16{
17    /**
18     * @param InvoiceItem $invoiceItem
19     * @param InvoiceVerification $invoiceVerification
20     * @param User $user
21     * @throws Throwable
22     */
23    public function link(InvoiceItem $invoiceItem, InvoiceVerification $invoiceVerification, User $user): void
24    {
25        try {
26            DB::beginTransaction();
27
28            $invoiceVerificationOld = $invoiceVerification->getAttributes();
29
30            $invoiceVerification->invoiceItem()->associate($invoiceItem);
31            $invoiceVerification->save();
32
33            $this->processActivetyLog($invoiceVerification, $user, $invoiceVerificationOld);
34
35            DB::commit();
36        } catch (Throwable $exception) {
37            DB::rollBack();
38            throw $exception;
39        }
40
41        ServiceProcessed::dispatch(self::class, $user);
42    }
43
44    /**
45     * @param InvoiceVerification $invoiceVerification
46     * @param User $user
47     * @param array $details
48     */
49    private function processActivetyLog(InvoiceVerification $invoiceVerification, User $user, array $details)
50    {
51        $invoiceActivityLogDTO = new StoreInvoiceActivityLogDTO([
52            'entity_type' => InvoiceVerification::class,
53            'entity_id'   => $invoiceVerification->getKey(),
54            'operation'   => InvoiceActivetyLogOperationEnum::UPDATE,
55            'user'        => $user,
56            'detail'      => json_encode($details),
57            'observation' => 'Realizado vĂ­nculo do item adicional da conferĂȘncia, com um item de nota fiscal.'
58        ]);
59
60        (new InvoiceActivityLogStoreService())->store($invoiceActivityLogDTO, $invoiceVerification->invoice, $user);
61    }
62}