276 lines
17 KiB
PHP
Executable File
276 lines
17 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use App\Models\GestioneCondominiale;
|
|
use App\Models\TabellaMillesimale;
|
|
use App\Models\VoceSpesaMillesimale;
|
|
use App\Models\UnitaImmobiliare;
|
|
use App\Models\DettaglioMillesimi;
|
|
use Carbon\Carbon;
|
|
|
|
class TabelleMillesimaliCompleteSeeder extends Seeder
|
|
{
|
|
public function run()
|
|
{
|
|
// Prendi il primo stabile per il test
|
|
$stabile_id = 1;
|
|
|
|
$this->command->info("🏗️ Creazione gestioni condominiali per stabile ID: {$stabile_id}");
|
|
|
|
// 1. Crea le gestioni condominiali
|
|
$gestioni = $this->creaGestioniCondominiali($stabile_id);
|
|
|
|
// 2. Crea le tabelle millesimali per la gestione ordinaria 2024
|
|
$gestione_ordinaria = $gestioni->where('tipo', 'ORDINARIA')->first();
|
|
$this->creaTabelleMillesimali($gestione_ordinaria->id);
|
|
|
|
// 3. Crea le voci di spesa (SALTATA per ora - tabella non presente)
|
|
// $this->creaVociSpesa($gestione_ordinaria->id);
|
|
|
|
// 4. Crea/verifica le unità immobiliari
|
|
$this->creaUnitaImmobiliari($stabile_id);
|
|
|
|
// 5. Inserisce i millesimi per ogni unità
|
|
$this->inserisciMillesimi($gestione_ordinaria->id);
|
|
|
|
$this->command->info("✅ Seeder tabelle millesimali completato!");
|
|
}
|
|
|
|
private function creaGestioniCondominiali($stabile_id)
|
|
{
|
|
$gestioni = collect([
|
|
[
|
|
'stabile_id' => $stabile_id,
|
|
'codice' => 'ORD2024',
|
|
'descrizione' => 'Gestione Ordinaria 2024',
|
|
'tipo' => 'ORDINARIA',
|
|
'anno_inizio' => 2024,
|
|
'anno_fine' => 2024,
|
|
'data_inizio' => Carbon::create(2024, 1, 1),
|
|
'data_fine' => Carbon::create(2024, 12, 31),
|
|
'stato' => 'ATTIVA'
|
|
],
|
|
[
|
|
'stabile_id' => $stabile_id,
|
|
'codice' => 'RISC2024-25',
|
|
'descrizione' => 'Gestione Riscaldamento 2024-2025',
|
|
'tipo' => 'RISCALDAMENTO',
|
|
'anno_inizio' => 2024,
|
|
'anno_fine' => 2025,
|
|
'data_inizio' => Carbon::create(2024, 10, 15),
|
|
'data_fine' => Carbon::create(2025, 4, 15),
|
|
'stato' => 'ATTIVA'
|
|
],
|
|
[
|
|
'stabile_id' => $stabile_id,
|
|
'codice' => 'STRA2023',
|
|
'descrizione' => 'Spesa Straordinaria 2023',
|
|
'tipo' => 'STRAORDINARIA',
|
|
'anno_inizio' => 2023,
|
|
'anno_fine' => 2023,
|
|
'data_inizio' => Carbon::create(2023, 1, 1),
|
|
'data_fine' => Carbon::create(2023, 12, 31),
|
|
'stato' => 'CHIUSA'
|
|
],
|
|
[
|
|
'stabile_id' => $stabile_id,
|
|
'codice' => 'STRA2025',
|
|
'descrizione' => 'Spesa Straordinaria 2025',
|
|
'tipo' => 'STRAORDINARIA',
|
|
'anno_inizio' => 2025,
|
|
'anno_fine' => 2025,
|
|
'data_inizio' => Carbon::create(2025, 1, 1),
|
|
'data_fine' => Carbon::create(2025, 12, 31),
|
|
'stato' => 'ATTIVA'
|
|
]
|
|
]);
|
|
|
|
foreach ($gestioni as $gestione_data) {
|
|
GestioneCondominiale::updateOrCreate(
|
|
['stabile_id' => $gestione_data['stabile_id'], 'codice' => $gestione_data['codice']],
|
|
$gestione_data
|
|
);
|
|
}
|
|
|
|
return GestioneCondominiale::where('stabile_id', $stabile_id)->get();
|
|
}
|
|
|
|
private function creaTabelleMillesimali($gestione_id)
|
|
{
|
|
// Ottieni la gestione per prendere lo stabile_id
|
|
$gestione = GestioneCondominiale::find($gestione_id);
|
|
|
|
$tabelle = [
|
|
['codice_tabella' => 'TAB.A', 'nome_tabella' => 'TAB.A', 'denominazione' => 'Tabella di Proprietà', 'tipo_tabella' => 'proprieta', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.A1', 'nome_tabella' => 'TAB.A1', 'denominazione' => 'Tabella di Prop. scala A', 'tipo_tabella' => 'proprieta', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.A2', 'nome_tabella' => 'TAB.A2', 'denominazione' => 'Tabella di Prop. scala B', 'tipo_tabella' => 'proprieta', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.A3', 'nome_tabella' => 'TAB.A3', 'denominazione' => 'Tabella di Prop. scala C', 'tipo_tabella' => 'proprieta', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.A4', 'nome_tabella' => 'TAB.A4', 'denominazione' => 'Tabella di Prop. particolare', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.A5', 'nome_tabella' => 'TAB.A5', 'denominazione' => 'Tabella portiere', 'tipo_tabella' => 'portineria', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.B1', 'nome_tabella' => 'TAB.B1', 'denominazione' => 'Tabella scale A', 'tipo_tabella' => 'scale', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.B2', 'nome_tabella' => 'TAB.B2', 'denominazione' => 'Tabella scala B', 'tipo_tabella' => 'scale', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.B3', 'nome_tabella' => 'TAB.B3', 'denominazione' => 'Tabella scala C', 'tipo_tabella' => 'scale', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.C1', 'nome_tabella' => 'TAB.C1', 'denominazione' => 'Tabella ascensore scala A', 'tipo_tabella' => 'ascensore', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'TAB.C2', 'nome_tabella' => 'TAB.C2', 'denominazione' => 'Tabella ascensore scala B', 'tipo_tabella' => 'ascensore', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 992.52],
|
|
['codice_tabella' => 'TAB.C3', 'nome_tabella' => 'TAB.C3', 'denominazione' => 'Tabella ascensore scala C', 'tipo_tabella' => 'ascensore', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'RISC.', 'nome_tabella' => 'RISC.', 'denominazione' => 'Riscaldamento', 'tipo_tabella' => 'riscaldamento', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'RISC.L', 'nome_tabella' => 'RISC.L', 'denominazione' => 'RISCALDAMENTO (in base alle letture)', 'tipo_tabella' => 'riscaldamento', 'tipo_calcolo' => 'parti', 'totale_millesimi' => 0.00],
|
|
['codice_tabella' => 'RENDIT', 'nome_tabella' => 'RENDIT', 'denominazione' => 'Rendite condominiali', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'QUOTAU', 'nome_tabella' => 'QUOTAU', 'denominazione' => 'Rimborso quota uffici', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 6.00],
|
|
['codice_tabella' => 'ACQUA', 'nome_tabella' => 'ACQUA', 'denominazione' => 'Consumi idrici individuali', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'parti', 'totale_millesimi' => 0.00],
|
|
['codice_tabella' => 'REND.A', 'nome_tabella' => 'REND.A', 'denominazione' => 'Contributo immobili uso non abitativo sc.A', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 838.84],
|
|
['codice_tabella' => 'REND.B', 'nome_tabella' => 'REND.B', 'denominazione' => 'Contributo immobili uso non abitativo sc.B', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 708.51],
|
|
['codice_tabella' => 'REND.C', 'nome_tabella' => 'REND.C', 'denominazione' => 'Contributo immobili uso non abitativo sc.C', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 877.04],
|
|
['codice_tabella' => 'RIPARC', 'nome_tabella' => 'RIPARC', 'denominazione' => 'Ripartizioni spese Condominio', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'RIPARR', 'nome_tabella' => 'RIPARR', 'denominazione' => 'Ripartizioni spese Riscaldamento', 'tipo_tabella' => 'riscaldamento', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00],
|
|
['codice_tabella' => 'RI.ASS', 'nome_tabella' => 'RI.ASS', 'denominazione' => 'RIMBORSI ASSICURATIVI', 'tipo_tabella' => 'custom', 'tipo_calcolo' => 'millesimi', 'totale_millesimi' => 1000.00]
|
|
];
|
|
|
|
foreach ($tabelle as $tabella_data) {
|
|
$tabella_data['stabile_id'] = $gestione->stabile_id;
|
|
TabellaMillesimale::updateOrCreate(
|
|
['stabile_id' => $gestione->stabile_id, 'codice_tabella' => $tabella_data['codice_tabella']],
|
|
$tabella_data
|
|
);
|
|
}
|
|
}
|
|
|
|
private function creaVociSpesa($gestione_id)
|
|
{
|
|
// Ottieni le tabelle millesimali per associare le voci
|
|
$tabelle = TabellaMillesimale::where('gestione_id', $gestione_id)->get()->keyBy('codice');
|
|
|
|
$voci = [
|
|
// TAB.A - Spese generali
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A00', 'descrizione' => 'GESTIONE FISCALE'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A01', 'descrizione' => 'Assicurazione fabbricato'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A02', 'descrizione' => 'Tassa occ. spazi Via vai (COSAP)'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A03', 'descrizione' => 'Quota associativa Prop.Edilizia (ARPE)'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A04', 'descrizione' => 'Fondo spese acqua'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A05', 'descrizione' => 'Manutenzione ordinaria e Lampade'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A06', 'descrizione' => 'DISINFESTAZIONI E DERATTIZZAZIONE'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A07', 'descrizione' => 'Fotocopie, cancelleria e telefono'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A08', 'descrizione' => 'Spese Postali generali'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A09', 'descrizione' => 'Riparazioni / lavori'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A10', 'descrizione' => 'Spese e bollo su CCP'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A11', 'descrizione' => 'Tasse condominiali (TOSAP, ETC)'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A12', 'descrizione' => 'Ritenuta d\'acconto anni precedenti'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A13', 'descrizione' => 'Compenso amministratore'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A14', 'descrizione' => 'Tasse e Imposte su compensi'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A15', 'descrizione' => 'Materiale di pulizia'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A16', 'descrizione' => 'Postali Condominiali'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A17', 'descrizione' => 'IMU LOCALI CONDOMINIALI'],
|
|
['tabella' => 'TAB.A', 'codice_voce' => 'A18', 'descrizione' => 'SPESE CONDOMINIALI LOCALI'],
|
|
|
|
// Continua con le altre voci...
|
|
// TAB.A5 - Portiere
|
|
['tabella' => 'TAB.A5', 'codice_voce' => 'P01', 'descrizione' => 'Salario, 13 mensilita\' e ferie'],
|
|
['tabella' => 'TAB.A5', 'codice_voce' => 'P02', 'descrizione' => 'Assicurazione TFR (Sig.Giorgi)'],
|
|
['tabella' => 'TAB.A5', 'codice_voce' => 'P03', 'descrizione' => 'Contributi sociali INPS/INAIL'],
|
|
|
|
// RISC. - Riscaldamento
|
|
['tabella' => 'RISC.', 'codice_voce' => 'RS1', 'descrizione' => 'Consumo GAS Anno Corrente'],
|
|
['tabella' => 'RISC.', 'codice_voce' => 'RS2', 'descrizione' => 'ACEA- Energia elettrica'],
|
|
['tabella' => 'RISC.', 'codice_voce' => 'RS3', 'descrizione' => 'Conduzione impianto'],
|
|
|
|
// RENDIT - Rendite
|
|
['tabella' => 'RENDIT', 'codice_voce' => 'R01', 'descrizione' => 'Fitto locale condominiale'],
|
|
['tabella' => 'RENDIT', 'codice_voce' => 'R02', 'descrizione' => 'Contributo sosta auto Spazio sette'],
|
|
];
|
|
|
|
foreach ($voci as $voce_data) {
|
|
if (isset($tabelle[$voce_data['tabella']])) {
|
|
VoceSpesaMillesimale::updateOrCreate([
|
|
'tabella_millesimale_id' => $tabelle[$voce_data['tabella']]->id,
|
|
'codice_voce' => $voce_data['codice_voce']
|
|
], [
|
|
'descrizione' => $voce_data['descrizione'],
|
|
'attiva' => true
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function creaUnitaImmobiliari($stabile_id)
|
|
{
|
|
// Le unità dovrebbero esistere già, verifico
|
|
$count = UnitaImmobiliare::whereHas('palazzina', function ($q) use ($stabile_id) {
|
|
$q->where('stabile_id', $stabile_id);
|
|
})->count();
|
|
|
|
$this->command->info("📋 Trovate {$count} unità immobiliari per lo stabile {$stabile_id}");
|
|
}
|
|
|
|
private function inserisciMillesimi($gestione_id)
|
|
{
|
|
// Ottieni la gestione per prendere lo stabile_id
|
|
$gestione = GestioneCondominiale::find($gestione_id);
|
|
|
|
// Ottieni le tabelle millesimali dello stesso stabile
|
|
$tabelle = TabellaMillesimale::where('stabile_id', $gestione->stabile_id)->get()->keyBy('codice_tabella');
|
|
|
|
// Dati millesimi dal tuo esempio (solo alcuni per test)
|
|
$millesimi_data = [
|
|
// Scala A
|
|
['scala' => 'A', 'interno' => '1', 'nome' => 'PAOLETTI CORRADO', 'TAB.A' => 7.62, 'TAB.A1' => 39.99, 'TAB.A4' => 7.49, 'TAB.A5' => 7.80, 'TAB.B1' => 21.96, 'TAB.C1' => 16.00, 'RISC.' => 7.62, 'RENDIT' => 16.00],
|
|
['scala' => 'A', 'interno' => '2', 'nome' => 'CAPONI ALESSIA', 'TAB.A' => 12.17, 'TAB.A1' => 63.90, 'TAB.A4' => 11.98, 'TAB.A5' => 12.49, 'TAB.B1' => 35.09, 'TAB.C1' => 25.56, 'RISC.' => 11.436, 'RENDIT' => 12.17, 'RI.ASS' => 25.56],
|
|
['scala' => 'A', 'interno' => '3', 'nome' => 'MAZZITELLI MARIA LAURA', 'TAB.A' => 16.64, 'TAB.A1' => 87.34, 'TAB.A4' => 16.37, 'TAB.A5' => 17.05, 'TAB.B1' => 59.24, 'TAB.C1' => 51.32, 'RISC.' => 19.851, 'RENDIT' => 16.64, 'RI.ASS' => 51.32],
|
|
|
|
// Scala B - alcuni esempi
|
|
['scala' => 'B', 'interno' => '1', 'nome' => 'SOC SAVEL', 'TAB.A' => 16.24, 'TAB.A2' => 38.24, 'TAB.A4' => 15.97, 'TAB.A5' => 16.63, 'TAB.B2' => 20.93, 'TAB.C2' => 15.30, 'RISC.' => 21.236, 'RENDIT' => 16.24, 'RI.ASS' => 15.30],
|
|
['scala' => 'B', 'interno' => '2', 'nome' => 'CANTONI GIOVANNA', 'TAB.A' => 21.60, 'TAB.A2' => 50.88, 'TAB.A4' => 21.25, 'TAB.A5' => 22.13, 'TAB.B2' => 27.86, 'TAB.C2' => 20.35, 'RISC.' => 30.738, 'RENDIT' => 21.60, 'RI.ASS' => 20.35],
|
|
|
|
// Scala C - alcuni esempi
|
|
['scala' => 'C', 'interno' => '1', 'nome' => 'ERRIGO ANTONIO', 'TAB.A' => 24.66, 'TAB.A3' => 76.30, 'TAB.A4' => 24.26, 'TAB.A5' => 25.27, 'TAB.B3' => 42.95, 'TAB.C3' => 29.306, 'RENDIT' => 24.66],
|
|
['scala' => 'C', 'interno' => '2', 'nome' => 'ROBILOTTA DONATO ROSARI', 'TAB.A' => 27.07, 'TAB.A3' => 83.76, 'TAB.A4' => 26.63, 'TAB.A5' => 27.74, 'TAB.B3' => 50.28, 'TAB.C3' => 36.27, 'RISC.' => 27.531, 'RENDIT' => 27.07, 'RI.ASS' => 36.27],
|
|
];
|
|
|
|
foreach ($millesimi_data as $unita_data) {
|
|
// Trova l'unità immobiliare con criteri più flessibili
|
|
$unita = UnitaImmobiliare::where('stabile_id', $gestione->stabile_id)
|
|
->where('scala', $unita_data['scala'])
|
|
->where('interno', $unita_data['interno'])
|
|
->first();
|
|
|
|
// Se non trova per interno, prova con pattern più flessibile
|
|
if (!$unita) {
|
|
$unita = UnitaImmobiliare::where('stabile_id', $gestione->stabile_id)
|
|
->where(function ($q) use ($unita_data) {
|
|
$q->where('scala', $unita_data['scala'])
|
|
->orWhere('palazzina', $unita_data['scala']);
|
|
})
|
|
->where(function ($q) use ($unita_data) {
|
|
$q->where('interno', $unita_data['interno'])
|
|
->orWhere('interno', 'LIKE', '%' . $unita_data['interno'] . '%');
|
|
})
|
|
->first();
|
|
}
|
|
|
|
if ($unita) {
|
|
$this->command->info("📍 Inserisco millesimi per {$unita_data['nome']} - Scala: {$unita_data['scala']}, Interno: {$unita_data['interno']} (ID: {$unita->id})");
|
|
|
|
// Inserisci i millesimi per ogni tabella
|
|
foreach ($unita_data as $key => $valore) {
|
|
if (in_array($key, ['scala', 'interno', 'nome'])) continue;
|
|
|
|
if (isset($tabelle[$key]) && $valore > 0) {
|
|
\App\Models\DettaglioMillesimi::updateOrCreate([
|
|
'unita_immobiliare_id' => $unita->id,
|
|
'tabella_millesimale_id' => $tabelle[$key]->id
|
|
], [
|
|
'millesimi' => $valore,
|
|
'partecipa' => true
|
|
]);
|
|
|
|
$this->command->info(" ✅ {$key}: {$valore} millesimi");
|
|
}
|
|
}
|
|
} else {
|
|
$this->command->error("❌ Non trovata unità per {$unita_data['nome']} - Scala: {$unita_data['scala']}, Interno: {$unita_data['interno']}");
|
|
}
|
|
}
|
|
}
|
|
}
|