167 lines
7.8 KiB
PHP
167 lines
7.8 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\UnitaImmobiliare;
|
|
use App\Models\Stabile;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
class GesconBonificaStabile0013Command extends Command
|
|
{
|
|
protected $signature = 'gescon:bonifica-stabile-0013';
|
|
|
|
protected $description = 'Bonifica idempotente delle unita immobiliari, comproprietari e inquilini dello Stabile 0013 (Ottaviano 105)';
|
|
|
|
public function handle(): int
|
|
{
|
|
$this->info('Avvio bonifica e allineamento Stabile 0013...');
|
|
|
|
$stabile = Stabile::where('codice_stabile', '0013')->first();
|
|
if (!$stabile) {
|
|
$this->error('Stabile 0013 non trovato!');
|
|
return 1;
|
|
}
|
|
|
|
// 1. Riallineamento rate e movimenti dalle unita fantasma (338, 339, 340, 341) alle unita canoniche
|
|
// 339 (0013-A-82) -> 249 (0013-B-8, Scala B Int. 8)
|
|
$unit249 = UnitaImmobiliare::where('stabile_id', $stabile->id)->where('scala', 'B')->where('interno', '8')->first();
|
|
if ($unit249) {
|
|
if (Schema::hasTable('rate_emesse') && Schema::hasColumn('rate_emesse', 'unita_immobiliare_id')) {
|
|
DB::table('rate_emesse')->where('unita_immobiliare_id', 339)->update(['unita_immobiliare_id' => $unit249->id]);
|
|
}
|
|
if (Schema::hasTable('dettagli_ripartizione_spese') && Schema::hasColumn('dettagli_ripartizione_spese', 'unita_immobiliare_id')) {
|
|
DB::table('dettagli_ripartizione_spese')->where('unita_immobiliare_id', 339)->update(['unita_immobiliare_id' => $unit249->id]);
|
|
}
|
|
}
|
|
|
|
// 340 (0013-A-87) -> 264 (0013-NGOT-103, Scala NGOT Int. 103)
|
|
$unit264 = UnitaImmobiliare::where('stabile_id', $stabile->id)->where('scala', 'NGOT')->where('interno', '103')->first();
|
|
if ($unit264) {
|
|
if (Schema::hasTable('rate_emesse') && Schema::hasColumn('rate_emesse', 'unita_immobiliare_id')) {
|
|
DB::table('rate_emesse')->where('unita_immobiliare_id', 340)->update(['unita_immobiliare_id' => $unit264->id]);
|
|
}
|
|
if (Schema::hasTable('dettagli_ripartizione_spese') && Schema::hasColumn('dettagli_ripartizione_spese', 'unita_immobiliare_id')) {
|
|
DB::table('dettagli_ripartizione_spese')->where('unita_immobiliare_id', 340)->update(['unita_immobiliare_id' => $unit264->id]);
|
|
}
|
|
}
|
|
|
|
// 2. Eliminazione unita fantasma 338, 339, 340, 341
|
|
if (Schema::hasTable('unita_anagrafica_periodo')) {
|
|
DB::table('unita_anagrafica_periodo')->whereIn('unita_immobiliare_id', [338, 339, 340, 341])->delete();
|
|
}
|
|
if (Schema::hasTable('proprieta')) {
|
|
DB::table('proprieta')->whereIn('unita_immobiliare_id', [338, 339, 340, 341])->delete();
|
|
}
|
|
if (Schema::hasTable('unita_immobiliare_nominativi')) {
|
|
DB::table('unita_immobiliare_nominativi')->whereIn('unita_immobiliare_id', [338, 339, 340, 341])->delete();
|
|
}
|
|
if (Schema::hasTable('persone_unita_relazioni')) {
|
|
DB::table('persone_unita_relazioni')->whereIn('unita_id', [338, 339, 340, 341])->delete();
|
|
}
|
|
if (Schema::hasTable('rubrica_ruoli')) {
|
|
DB::table('rubrica_ruoli')->whereIn('unita_immobiliare_id', [338, 339, 340, 341])->delete();
|
|
}
|
|
DB::table('unita_immobiliari')->whereIn('id', [338, 339, 340, 341])->delete();
|
|
$this->info('Unita fantasma (71, 78, 82, 87) rimosse con successo.');
|
|
|
|
// 3. Eliminazione anagrafiche corrotte con '?'
|
|
$badAnagIds = DB::table('anagrafiche')
|
|
->where('cognome', 'like', '%?%')
|
|
->orWhere('nome', 'like', '%?%')
|
|
->orWhere('ragione_sociale', 'like', '%?%')
|
|
->pluck('id')
|
|
->all();
|
|
|
|
if (!empty($badAnagIds)) {
|
|
if (Schema::hasTable('unita_anagrafica_periodo')) {
|
|
DB::table('unita_anagrafica_periodo')->whereIn('anagrafica_id', $badAnagIds)->delete();
|
|
}
|
|
if (Schema::hasTable('proprieta')) {
|
|
DB::table('proprieta')->whereIn('anagrafica_id', $badAnagIds)->delete();
|
|
}
|
|
DB::table('anagrafiche')->whereIn('id', $badAnagIds)->delete();
|
|
$this->info('Anagrafiche corrotte rimaste bonificate.');
|
|
}
|
|
|
|
// 4. Bonifica e allineamento Unità NGGC 163 (ID 267)
|
|
$unit163 = UnitaImmobiliare::where('stabile_id', $stabile->id)->where('scala', 'NGGC')->where('interno', '163')->first();
|
|
if ($unit163) {
|
|
// Anagrafica Inquilino: Ottaviano Supershop Srls
|
|
$inqAnag = DB::table('anagrafiche')->where('ragione_sociale', 'like', '%Ottaviano Supershop%')->first()
|
|
?? DB::table('anagrafiche')->where('nome', 'like', '%Ottaviano Supershop%')->first();
|
|
|
|
if (!$inqAnag) {
|
|
$inqId = DB::table('anagrafiche')->insertGetId([
|
|
'ragione_sociale' => 'Ottaviano Supershop Srls',
|
|
'email' => 'amin.siddque@gmail.com',
|
|
'tipo' => 'inquilino',
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
]);
|
|
} else {
|
|
$inqId = $inqAnag->id;
|
|
DB::table('anagrafiche')->where('id', $inqId)->update([
|
|
'ragione_sociale' => 'Ottaviano Supershop Srls',
|
|
'email' => 'amin.siddque@gmail.com',
|
|
'tipo' => 'inquilino',
|
|
'updated_at' => now(),
|
|
]);
|
|
}
|
|
|
|
// Assicura relazione inquilino attiva in UAP
|
|
$existsInqUap = DB::table('unita_anagrafica_periodo')
|
|
->where('unita_immobiliare_id', $unit163->id)
|
|
->where('anagrafica_id', $inqId)
|
|
->where('ruolo_occupazione', 'inquilino')
|
|
->first();
|
|
|
|
if (!$existsInqUap) {
|
|
DB::table('unita_anagrafica_periodo')->insert([
|
|
'unita_immobiliare_id' => $unit163->id,
|
|
'anagrafica_id' => $inqId,
|
|
'ruolo_occupazione' => 'inquilino',
|
|
'data_inizio' => '2026-01-01',
|
|
'percentuale_spesa' => 100.000,
|
|
'sussidiata_da_proprietario' => 0,
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
]);
|
|
}
|
|
|
|
// Assicura nominativo inquilino in unita_immobiliare_nominativi
|
|
if (Schema::hasTable('unita_immobiliare_nominativi')) {
|
|
DB::table('unita_immobiliare_nominativi')->updateOrInsert(
|
|
['unita_immobiliare_id' => $unit163->id, 'ruolo' => 'I'],
|
|
[
|
|
'stabile_id' => $stabile->id,
|
|
'nominativo' => 'Ottaviano Supershop Srls',
|
|
'data_inizio' => '2026-01-01',
|
|
'percentuale' => 100.00,
|
|
'fonte' => 'gescon_bonifica',
|
|
'updated_at' => now(),
|
|
]
|
|
);
|
|
}
|
|
$this->info('Unita NGGC 163 allineata con Inquilino Ottaviano Supershop Srls.');
|
|
}
|
|
|
|
// 5. Riallineamento Unita 233 (Scala A Int. 1) con dati ufficiali Catasto
|
|
$unit233 = UnitaImmobiliare::where('stabile_id', $stabile->id)->where('scala', 'A')->where('interno', '1')->first();
|
|
if ($unit233) {
|
|
$unit233->subalterno = '509';
|
|
$unit233->categoria_catastale = 'A/2';
|
|
$unit233->rendita_catastale = 2524.18;
|
|
$unit233->piano = '3';
|
|
$unit233->numero_vani = 9;
|
|
$unit233->sezione_urbana = null;
|
|
$unit233->save();
|
|
$this->info('Unita 233 (Scala A Int. 1) allineata con dati Sister Catasto.');
|
|
}
|
|
|
|
$this->info('Bonifica Stabile 0013 completata con successo!');
|
|
return 0;
|
|
}
|
|
}
|