55 lines
1.7 KiB
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);
|
|
}
|
|
}
|