netgescon-day0/app/Services/Consumi/ConsumiAcquaTariffeIngestionService.php

65 lines
2.9 KiB
PHP

<?php
namespace App\Services\Consumi;
use App\Models\FatturaElettronica;
use App\Models\StabileServizioTariffa;
use Illuminate\Support\Facades\Schema;
class ConsumiAcquaTariffeIngestionService
{
/** @param array<string,mixed> $parsed */
public function ingest(FatturaElettronica $fattura, array $parsed, ?int $stabileServizioId = null): array
{
if (! Schema::hasTable('stabile_servizio_tariffe')) {
return ['status' => 'skipped', 'message' => 'Tabella stabile_servizio_tariffe non presente'];
}
$stabileId = (int) ($fattura->stabile_id ?? 0);
if ($stabileId <= 0) {
return ['status' => 'error', 'message' => 'Stabile non valido'];
}
$tariffe = is_array($parsed['tariffe'] ?? null) ? $parsed['tariffe'] : [];
$iva = is_array($parsed['iva'] ?? null) ? $parsed['iva'] : [];
$scaglioni = is_array($tariffe['quota_variabile_acquedotto_scaglioni'] ?? null) ? $tariffe['quota_variabile_acquedotto_scaglioni'] : [];
$quotaFissaAnnua = is_array($tariffe['quota_fissa_annua'] ?? null) ? $tariffe['quota_fissa_annua'] : [];
$componentiUi = is_array($tariffe['componenti_ui'] ?? null) ? $tariffe['componenti_ui'] : [];
$componenti = [
'quota_variabile_fognatura_euro_mc' => $tariffe['quota_variabile_fognatura_euro_mc'] ?? null,
'quota_variabile_depurazione_euro_mc' => $tariffe['quota_variabile_depurazione_euro_mc'] ?? null,
'quota_fissa_annua' => $quotaFissaAnnua,
'componenti_ui' => $componentiUi,
];
$row = StabileServizioTariffa::query()->updateOrCreate(
['fattura_elettronica_id' => (int) $fattura->id],
[
'stabile_id' => $stabileId,
'stabile_servizio_id' => $stabileServizioId,
'fornitore_id' => (int) ($fattura->fornitore_id ?: 0) ?: null,
'data_fattura' => $fattura->data_fattura,
'decorrenza_tariffe' => $tariffe['decorrenza'] ?? null,
'profilo_tariffario' => $tariffe['profilo'] ?? null,
'delibera_ato' => $tariffe['delibera_ato'] ?? null,
'delibera_arera' => $tariffe['delibera_arera'] ?? null,
'codice_iva' => $iva['codice'] ?? null,
'aliquota_iva_percentuale' => $iva['aliquota_percentuale'] ?? null,
'iva_descrizione' => $iva['descrizione'] ?? null,
'tariffe_scaglioni' => $scaglioni,
'tariffe_componenti' => $componenti,
'payload' => [
'tariffe' => $tariffe,
'iva' => $iva,
],
]
);
return [
'status' => 'ok',
'id' => (int) $row->id,
];
}
}