258 lines
11 KiB
PHP
Executable File
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!');
|
|
}
|
|
}
|