netgescon-day0/app/Services/Gestione/GestioneResolver.php

55 lines
1.7 KiB
PHP

<?php
namespace App\Services\Gestione;
use App\Models\GestioneContabile;
/**
* Service centralizzato per risolvere / creare una gestione contabile unificata.
*/
class GestioneResolver
{
/**
* Resolve or create a gestione_contabile.
* @param string $tenantId
* @param int $stabileId
* @param int $anno
* @param string $tipo ('ordinaria','riscaldamento','straordinaria')
* @param int|null $numeroStraordinaria
* @param array $extra Attributi aggiuntivi opzionali
*/
public function resolve(
string $tenantId,
int $stabileId,
int $anno,
string $tipo = 'ordinaria',
?int $numeroStraordinaria = null,
array $extra = []
): GestioneContabile {
$protocolPrefix = match ($tipo) {
'ordinaria' => 'O' . $anno,
'riscaldamento' => 'R' . $anno,
'straordinaria' => 'S' . $anno . ($numeroStraordinaria ? '-' . str_pad($numeroStraordinaria, 2, '0', STR_PAD_LEFT) : ''),
default => 'G' . $anno,
};
$defaults = array_merge([
'denominazione' => ucfirst($tipo) . " {$anno}",
'data_inizio' => "$anno-01-01",
'data_fine' => "$anno-12-31",
'stato' => 'aperta',
'protocollo_prefix' => $protocolPrefix,
'ultimo_protocollo' => 0,
'gestione_attiva' => true,
], $extra);
return GestioneContabile::updateOrCreate([
'tenant_id' => $tenantId,
'stabile_id' => $stabileId,
'anno_gestione' => $anno,
'tipo_gestione' => $tipo,
'numero_straordinaria' => $numeroStraordinaria,
], $defaults);
}
}