Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
InvoiceItemStoreService
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 1
 store
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace Domain\Invoice\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\Invoice\InvoiceItem;
7use App\Models\User;
8use Domain\Integration\Services\IntegrationStoreService;
9use Domain\Invoice\DTOs\StoreInvoiceItemDTO;
10use Domain\PurchaseOrder\Services\LinkAutomaticWithInvoiceItemService;
11use Illuminate\Support\Facades\DB;
12use Throwable;
13
14readonly class InvoiceItemStoreService
15{
16    public function store(StoreInvoiceItemDTO $storeInvoiceDTO, User $user): InvoiceItem
17    {
18        try {
19            DB::beginTransaction();
20
21            $invoiceItem = new InvoiceItem();
22            $invoiceItem->fill($storeInvoiceDTO->toArray());
23            $invoiceItem->unitMeasurement()->associate($storeInvoiceDTO->unit_measurement);
24            $invoiceItem->invoice()->associate($storeInvoiceDTO->invoice);
25            $invoiceItem->save();
26
27            (new IntegrationStoreService())->store($storeInvoiceDTO->integration, $invoiceItem, $user);
28
29            if($storeInvoiceDTO->integration->numOcp <> '0') {
30                (new LinkAutomaticWithInvoiceItemService())->linkAutomatic(
31                    $invoiceItem,
32                    $storeInvoiceDTO->invoice,
33                    $storeInvoiceDTO->invoice->getAttribute('key'),
34                    $storeInvoiceDTO->integration->numOcp,
35                    $storeInvoiceDTO->integration->seqIpc,
36                    $user
37                );
38            }
39
40            DB::commit();
41        } catch (Throwable $exception) {
42            DB::rollBack();
43            throw $exception;
44        }
45
46        ServiceProcessed::dispatch(self::class, $user);
47        return $invoiceItem;
48    }
49}