netgescon-day0/database/seeders/TabelleMillesimaliSeeder.php

258 lines
11 KiB
PHP
Executable File

<?php
namespace Database\Seeders;
use App\Models\GestioneCondominiale;
use App\Models\TabellaMillesimaleConti;
use App\Models\VoceSpesaMillesimale;
use App\Models\MillesimiUnita;
use App\Models\UnitaImmobiliare;
use App\Models\Stabile;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class TabelleMillesimaliSeeder extends Seeder
{
public function run()
{
DB::transaction(function () {
// Trova il primo stabile esistente
$stabile = Stabile::first();
if (!$stabile) {
$this->command->error('Nessuno stabile trovato. Crea prima uno stabile.');
return;
}
// 1. CREA GESTIONI CONDOMINIALI
$gestioneOrdinaria = GestioneCondominiale::create([
'stabile_id' => $stabile->id,
'codice' => 'ORD2024',
'descrizione' => 'Gestione Ordinaria 2024',
'tipo' => 'ORDINARIA',
'anno_inizio' => 2024,
'data_inizio' => '2024-01-01',
'stato' => 'ATTIVA'
]);
$gestioneRiscaldamento = GestioneCondominiale::create([
'stabile_id' => $stabile->id,
'codice' => 'RISC2024-25',
'descrizione' => 'Gestione Riscaldamento 2024-2025',
'tipo' => 'RISCALDAMENTO',
'anno_inizio' => 2024,
'anno_fine' => 2025,
'data_inizio' => '2024-10-01',
'data_fine' => '2025-04-30',
'stato' => 'ATTIVA'
]);
// 2. CREA TABELLE MILLESIMALI
$tabelle = [
['TAB.A', 'Tabella di Proprieta\'', 'TAB.A', 'M', 'O', 1000.00],
['TAB.A1', 'Tabella di Prop. scala A', 'TAB.A1', 'M', 'O', 1000.00],
['TAB.A2', 'Tabella di Prop. scala B', 'TAB.A2', 'M', 'O', 1000.00],
['TAB.A3', 'Tabella di Prop. scala C', 'TAB.A3', 'M', 'O', 1000.00],
['TAB.A4', 'Tabella di Prop. particolare', 'TAB.A4', 'M', 'O', 1000.00],
['TAB.A5', 'Tabella portiere', 'TAB.A5', 'M', 'O', 1000.00],
['TAB.B1', 'Tabella scale A', 'TAB.B1', 'M', 'O', 1000.00],
['TAB.B2', 'Tabella scala B', 'TAB.B2', 'M', 'O', 1000.00],
['TAB.B3', 'Tabella scala C', 'TAB.B3', 'M', 'O', 1000.00],
['TAB.C1', 'Tabella ascensore scala A', 'TAB.C1', 'M', 'O', 1000.00],
['TAB.C2', 'Tabella ascensore scala B', 'TAB.C2', 'M', 'O', 992.52],
['TAB.C3', 'Tabella ascensore scala C', 'TAB.C3', 'M', 'O', 1000.00],
['RISC.', 'Riscaldamento', 'RISC.', 'M', 'R', 1000.00],
['RISC.L', 'RISCALDAMENTO (in base alle letture)', 'Risc.a lettura', 'A', 'R', 0.00],
['RENDIT', 'Rendite condominiali', 'RENDIT', 'M', 'O', 1000.00],
['QUOTAU', 'Rimborso quota uffici', 'QUOTAU', 'M', 'O', 6.00],
['ACQUA', 'Consumi idrici individuali', 'ACQUA', 'A', 'O', 0.00],
['REND.A', 'Contributo immobili uso non abitativo sc.A', 'REND.A', 'M', 'O', 838.84],
['REND.B', 'Contributo immobili uso non abitativo sc.B', 'REND.B', 'M', 'O', 708.51],
['REND.C', 'Contributo immobili uso non abitativo sc.C', 'REND.C', 'M', 'O', 877.04],
['RIPARC', 'Ripartizioni spese Condominio', 'RIPARC', 'M', 'O', 1000.00],
['RIPARR', 'Ripartizioni spese Riscaldamento', 'RIPARR', 'M', 'R', 1000.00],
['RI.ASS', 'RIMBORSI ASSICURATIVI', 'RI.ASS', 'M', 'O', 1000.00],
];
$tabelleCreate = [];
foreach ($tabelle as $tab) {
$gestione = ($tab[4] === 'R') ? $gestioneRiscaldamento : $gestioneOrdinaria;
$tabella = TabellaMillesimaleConti::create([
'gestione_id' => $gestione->id,
'codice' => $tab[0],
'descrizione' => $tab[1],
'intestazione_colonne' => $tab[2],
'calcolo' => $tab[3],
'gestione_tipo' => $tab[4],
'decimali' => 2,
'unita_misura' => ($tab[3] === 'A' && $tab[0] === 'ACQUA') ? 'Cons.' : 'mill.',
'totale_millesimi' => $tab[5],
'attiva' => true
]);
$tabelleCreate[$tab[0]] = $tabella;
}
// 3. CREA VOCI DI SPESA - Solo alcune di esempio per TAB.A
$vociSpesaTabA = [
['A00', 'GESTIONE FISCALE'],
['A01', 'Assicurazione fabbricato'],
['A02', 'Tassa occ. spazi Via vai (COSAP)'],
['A03', 'Quota associativa Prop.Edilizia (ARPE)'],
['A04', 'Fondo spese acqua'],
['A05', 'Manutenzione ordinaria e Lampade'],
['A06', 'DISINFESTAZIONI E DERATTIZZAZIONE'],
['A07', 'Fotocopie, cancelleria e telefono'],
['A08', 'Spese Postali generali'],
['A09', 'Riparazioni / lavori'],
['A10', 'Spese e bollo su CCP'],
['A11', 'Tasse condominiali (TOSAP, ETC)'],
['A12', 'Ritnuta d\'acconto anni precedenti'],
['A13', 'Compenso amministratore'],
['A14', 'Tasse e Imposte su compensi'],
['A15', 'Materiale di pulizia'],
['A16', 'Postali Condominiali'],
['A17', 'IMU LOCALI CONDOMINIALI'],
['A18', 'SPESE CONDOMINIALI LOCALI'],
['A26', 'DICHIARAZIONI DETRAZIONI FISCALI E CU FORNITORI'],
['A27', 'PULIZIA POZZETTI'],
['A28', 'Documento Valutazione Rischi'],
['A29', 'Sala per Assemblee'],
['A30', 'Manutenzione Estintore Guardiola'],
['A33', 'Compenso Amministratore Attuale'],
];
foreach ($vociSpesaTabA as $voce) {
VoceSpesaMillesimale::create([
'tabella_millesimale_id' => $tabelleCreate['TAB.A']->id,
'codice_voce' => $voce[0],
'descrizione' => $voce[1],
'importo_preventivo' => rand(500, 5000),
'attiva' => true
]);
}
// Voci per TAB.A5 (Portiere)
$vociPortiere = [
['P01', 'Salario, 13 mensilita\' e ferie'],
['P02', 'Assicurazione TFR (Sig.Giorgi)'],
['P03', 'Contributi sociali INPS/INAIL'],
['P04', 'Propr. Edilizia per conteggi'],
['P05', 'Materiali Pulizie'],
['P06', 'Acqua Portineria'],
['P07', 'Varie e postali'],
['P08', 'Ore permesso non usufruite'],
['P09', 'Indennita esazione'],
['P10', 'Spese riscaldamento'],
['P11', 'Ritenute IRPEF PORTIERE'],
['P14', 'Servizi di Pulizia e sostituzione del Portiere'],
['P16', 'Quota annuale TFR portiere da aggiungere al FONDO TFR'],
];
foreach ($vociPortiere as $voce) {
VoceSpesaMillesimale::create([
'tabella_millesimale_id' => $tabelleCreate['TAB.A5']->id,
'codice_voce' => $voce[0],
'descrizione' => $voce[1],
'importo_preventivo' => rand(1000, 8000),
'attiva' => true
]);
}
$this->command->info('✅ Tabelle millesimali e voci di spesa create con successo!');
// 4. CREA ALCUNE UNITÀ DI ESEMPIO E MILLESIMI
$this->creaUnitaEMillesimi($stabile, $tabelleCreate);
});
}
private function creaUnitaEMillesimi($stabile, $tabelleCreate)
{
// Trova o crea palazzina
$palazzina = $stabile->palazzine()->first();
if (!$palazzina) {
$this->command->warn('Nessuna palazzina trovata. Creazione delle unità saltata.');
return;
}
// Dati di esempio dalle tue tabelle - Solo alcune unità per test
$unitaConMillesimi = [
['A', '1', '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,
'RI.ASS' => 16.00
]],
['A', '2', '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
]],
['B', '1', '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
]],
['C', '1', '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,
'RISC.' => 24.66,
'RI.ASS' => 24.66
]],
];
foreach ($unitaConMillesimi as $datiUnita) {
[$scala, $interno, $proprietario, $millesimi] = $datiUnita;
// Crea o trova l'unità immobiliare
$unita = UnitaImmobiliare::firstOrCreate([
'palazzina_id' => $palazzina->id,
'scala' => $scala,
'piano' => '1', // Assumiamo piano 1 per semplicità
'interno' => $interno,
], [
'tipologia' => 'appartamento',
'superficie_commerciale' => rand(60, 120),
'stato_occupazione' => 'occupata_proprietario',
'proprietario_nome' => $proprietario,
'attiva' => true
]);
// Inserisci i millesimi per questa unità
foreach ($millesimi as $codiceTabella => $valoreMillesimi) {
if (isset($tabelleCreate[$codiceTabella])) {
MillesimiUnita::updateOrCreate([
'unita_immobiliare_id' => $unita->id,
'tabella_millesimale_id' => $tabelleCreate[$codiceTabella]->id,
], [
'millesimi' => $valoreMillesimi
]);
}
}
}
$this->command->info('✅ Unità immobiliari e millesimi di esempio creati!');
}
}