163 lines
5.2 KiB
PHP
163 lines
5.2 KiB
PHP
<?php
|
|
|
|
use App\Models\FatturaElettronica;
|
|
use App\Models\Persona;
|
|
use App\Models\PersonaUnitaRelazione;
|
|
use App\Models\Stabile;
|
|
use App\Models\UnitaImmobiliare;
|
|
use App\Models\User;
|
|
use App\Services\FattureElettroniche\FatturaElettronicaImporter;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
it('nominativi stabile page resolves identical canonical names as unita immobiliare', function () {
|
|
$user = User::factory()->create();
|
|
Role::firstOrCreate(['name' => 'amministratore', 'guard_name' => 'web']);
|
|
$user->assignRole('amministratore');
|
|
|
|
DB::table('amministratori')->insertOrIgnore([
|
|
'id' => 1,
|
|
'user_id' => $user->id,
|
|
'nome' => 'Mario',
|
|
'cognome' => 'Rossi',
|
|
'codice_amministratore' => 'ADM0001',
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
]);
|
|
|
|
$stabile = Stabile::create([
|
|
'codice_stabile' => '0099',
|
|
'denominazione' => 'Condominio Test Unitario',
|
|
'indirizzo' => 'Via Test 1',
|
|
'citta' => 'Roma',
|
|
'cap' => '00100',
|
|
'provincia' => 'RM',
|
|
'codice_fiscale' => '99999990580',
|
|
'amministratore_id' => 1,
|
|
]);
|
|
|
|
$unita = UnitaImmobiliare::create([
|
|
'stabile_id' => $stabile->id,
|
|
'interno' => '1',
|
|
'scala' => 'A',
|
|
]);
|
|
|
|
$proprietario = Persona::create([
|
|
'cognome' => 'Rossi',
|
|
'nome' => 'Mario',
|
|
'codice_fiscale' => 'RSSMRA80A01H501U',
|
|
]);
|
|
|
|
$inquilino = Persona::create([
|
|
'cognome' => 'Bianchi',
|
|
'nome' => 'Luigi',
|
|
'codice_fiscale' => 'BNCLGU85B02H501Z',
|
|
]);
|
|
|
|
PersonaUnitaRelazione::create([
|
|
'unita_id' => $unita->id,
|
|
'persona_id' => $proprietario->id,
|
|
'tipo_relazione' => 'proprietario',
|
|
'quota_relazione' => 100,
|
|
'data_inizio' => '2020-01-01',
|
|
'attivo' => 1,
|
|
]);
|
|
|
|
PersonaUnitaRelazione::create([
|
|
'unita_id' => $unita->id,
|
|
'persona_id' => $inquilino->id,
|
|
'tipo_relazione' => 'inquilino',
|
|
'quota_relazione' => 100,
|
|
'data_inizio' => '2020-01-01',
|
|
'attivo' => 1,
|
|
]);
|
|
|
|
$response = $this->actingAs($user)->get("/admin-filament/condomini/nominativi?stabile_id={$stabile->id}");
|
|
expect($response->status())->toBeIn([200, 302]);
|
|
});
|
|
|
|
it('fe scanner correctly matches invoices strictly by codice fiscale without arbitrary fallback', function () {
|
|
$user = User::factory()->create();
|
|
Role::firstOrCreate(['name' => 'amministratore', 'guard_name' => 'web']);
|
|
$user->assignRole('amministratore');
|
|
|
|
DB::table('amministratori')->insertOrIgnore([
|
|
'id' => 1,
|
|
'user_id' => $user->id,
|
|
'nome' => 'Admin',
|
|
'cognome' => 'Test',
|
|
'codice_amministratore' => 'ADM0001',
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
]);
|
|
|
|
$stabile = Stabile::create([
|
|
'codice_stabile' => '0098',
|
|
'denominazione' => 'Condominio Via Test 10',
|
|
'indirizzo' => 'Via Test 10',
|
|
'citta' => 'Roma',
|
|
'cap' => '00100',
|
|
'provincia' => 'RM',
|
|
'codice_fiscale' => '88888880581',
|
|
'amministratore_id' => 1,
|
|
]);
|
|
|
|
$xmlContentMatching = <<<XML
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<p:FatturaElettronica versione="FPR12" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2">
|
|
<FatturaElettronicaHeader>
|
|
<CedentePrestatore>
|
|
<DatiAnagrafici>
|
|
<IdFiscaleIVA><IdPaese>IT</IdPaese><IdCodice>01234567890</IdCodice></IdFiscaleIVA>
|
|
<Anagrafica><Denominazione>FORNITORE TEST SRL</Denominazione></Anagrafica>
|
|
</DatiAnagrafici>
|
|
</CedentePrestatore>
|
|
<CessionarioCommittente>
|
|
<DatiAnagrafici>
|
|
<CodiceFiscale>88888880581</CodiceFiscale>
|
|
<Anagrafica><Denominazione>CONDOMINIO VIA TEST 10</Denominazione></Anagrafica>
|
|
</DatiAnagrafici>
|
|
</CessionarioCommittente>
|
|
</FatturaElettronicaHeader>
|
|
<FatturaElettronicaBody>
|
|
<DatiGenerali>
|
|
<DatiGeneraliDocumento>
|
|
<TipoDocumento>TD01</TipoDocumento>
|
|
<Divisa>EUR</Divisa>
|
|
<Data>2026-03-01</Data>
|
|
<Numero>FT-TEST-001</Numero>
|
|
<ImportoTotaleDocumento>122.00</ImportoTotaleDocumento>
|
|
</DatiGeneraliDocumento>
|
|
</DatiGenerali>
|
|
<DatiBeniServizi>
|
|
<DettaglioLinee>
|
|
<NumeroLinea>1</NumeroLinea>
|
|
<Descrizione>Manutenzione Ordinaria Impianto</Descrizione>
|
|
<PrezzoUnitario>100.00</PrezzoUnitario>
|
|
<PrezzoTotale>100.00</PrezzoTotale>
|
|
<AliquotaIVA>22.00</AliquotaIVA>
|
|
</DettaglioLinee>
|
|
<DatiRiepilogo>
|
|
<AliquotaIVA>22.00</AliquotaIVA>
|
|
<ImponibileImporto>100.00</ImponibileImporto>
|
|
<Imposta>22.00</Imposta>
|
|
</DatiRiepilogo>
|
|
</DatiBeniServizi>
|
|
</FatturaElettronicaBody>
|
|
</p:FatturaElettronica>
|
|
XML;
|
|
|
|
$importer = app(FatturaElettronicaImporter::class);
|
|
$result = $importer->importXml($xmlContentMatching, (int) $stabile->id, 'FT-TEST-001.xml');
|
|
|
|
expect($result['status'])->toBe('imported');
|
|
|
|
$fe = FatturaElettronica::where('numero_fattura', 'FT-TEST-001')->first();
|
|
expect($fe)->not->toBeNull();
|
|
expect((int) $fe->stabile_id)->toBe((int) $stabile->id);
|
|
expect($fe->destinatario_cf)->toBe('88888880581');
|
|
});
|