Validation

This commit is contained in:
David Bomba 2024-05-12 09:13:14 +10:00
parent 1db95e3e32
commit 34eb936927
31 changed files with 283 additions and 100 deletions

View File

@ -13,30 +13,19 @@ namespace App\DataMapper\EDoc;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\DatiContratto;
use App\DataMapper\EDoc\FatturaPA\DatiRicezione;
use App\DataMapper\EDoc\FatturaPA\DatiOrdineAcquisto;
use App\DataMapper\EDoc\FatturaPA\DatiAnagraficiVettore;
use App\DataMapper\EDoc\FatturaPA\FatturaElettronicaHeader;
use App\DataMapper\EDoc\FatturaPA\FatturaElettronicaBody;
// minimum required fields
// public string $RegimeFiscale = 'RF01',
// public string $TipoDocumento = 'TD01',
// public string $ModalitaPagamento = 'MP01',
// public string $CondizioniPagamento = 'TP02',
class FatturaPA extends Data
{
public FatturaElettronicaHeader $FatturaElettronicaHeader;
public FatturaElettronicaBody $FatturaElettronicaBody;
// public DatiRicezione|Optional $DatiRicezione;
// public DatiContratto|Optional $DatiContratto;
// public DatiOrdineAcquisto|Optional $DatiOrdineAcquisto;
// public DatiAnagraficiVettore|Optional $DatiAnagraficiVettore;
public function __construct(
// public string $RegimeFiscale = 'RF01',
// public string $TipoDocumento = 'TD01',
// public string $ModalitaPagamento = 'MP01',
// public string $CondizioniPagamento = 'TP02',
) {
}
}

View File

@ -15,21 +15,26 @@ use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\DatiVeicoli;
use App\DataMapper\EDoc\FatturaPA\Body\DatiGenerali;
use Spatie\LaravelData\Attributes\Validation\Max;
class Allegati extends Data
{
//string 60
#[Max(60)]
public string $NomeAttachment;
//base64 binary
public mixed $Attachment;
//string 10
#[Max(10)]
public string|Optional $AlgoritmoCompressione;
//string 10
#[Max(10)]
public string|Optional $FormatoAttachment;
//string 100
#[Max(100)]
public string|Optional $DescrizioneAttachment;
}

View File

@ -12,24 +12,30 @@
namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Data;
use Illuminate\Support\Carbon;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Attributes\Validation\Regex;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class AltriDatiGestionali extends Data
{
//string 10
#[Max(10)]
public string $TipoDato;
//String60LatinType
#[Max(60)]
public string|Optional $RiferimentoTesto;
//Amount8DecimalType
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2,8}$/')]
public float|Optional $RiferimentoNumero;
//date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $RiferimentoData;
public Carbon|Optional $RiferimentoData;
}

View File

@ -11,6 +11,7 @@
namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Data;
class Anagrafica extends Data
@ -19,13 +20,16 @@ class Anagrafica extends Data
//either Deminominazione OR
//string length 80
public string $Denominazione;
#[Max(80)]
public string $Denominazione = '';
////////////////////////////////////////////
//2. Nome AND CogNome
//string length 60
public string $Nome;
#[Max(60)]
public string $Nome = '';
//string length 60
public string $CogNome;
#[Max(60)]
public string $CogNome = '';
}

View File

@ -13,14 +13,18 @@ namespace App\DataMapper\EDoc\FatturaPA\Body;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\Validation\Size;
use Spatie\LaravelData\Attributes\Validation\Regex;
class DatiBollo extends Data
{
//SI
#[Size(2)]
public string $BolloVirtuale = 'SI';
//Amount2DecimalType
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float|Optional $ImportoBollo;
}

View File

@ -13,33 +13,41 @@ namespace App\DataMapper\EDoc\FatturaPA\Body;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\Validation\Size;
use Spatie\LaravelData\Attributes\Validation\Regex;
class DatiCassaPrevidenziale extends Data
{
//string 4char options
#[Size(4)]
public string $TipoCassa;
//rate type 0-100
#[Regex('/^[0-9]{1,3}\.[0-9]{2}$/')]
public float $AlCassa = 0;
//Amount2DecimalType
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float $ImportoContributoCassa;
//rate type 0-100
#[Regex('/^[0-9]{1,3}\.[0-9]{2}$/')]
public float $AliquotaIVA;
//Amount2DecimalType
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float|Optional $ImponibileCassa;
//string string options
#[Size(4)]
public string|Optional $Ritenuta;
//string 2char options
public string|Optional $Natura;
//String20Type
#[Max(20)]
public string|Optional $RiferimentoAmministrazione;
}

View File

@ -14,22 +14,24 @@ namespace App\DataMapper\EDoc\FatturaPA\Body;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\Body\DatiBollo;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\Validation\Size;
use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Attributes\Validation\Regex;
use App\DataMapper\EDoc\FatturaPA\Body\DatiRitenuta;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class DatiGeneraliDocumento extends Data
{
//length 4 - optional
public string $TipoDocumento;
//string regex [A-Z]{3}
public string $Divisa;
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime $Data;
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
public \Illuminate\Support\Carbon $Data;
//string max 20 char
#[Max(20)]
public string $Numero;
public DatiRitenuta|Optional $DatiRitenuta;
@ -38,15 +40,25 @@ class DatiGeneraliDocumento extends Data
public ScontoMaggiorazione|Optional $ScontoMaggiorazione;
//float 2 decimal type
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float|Optional $ImportoTotaleDocumento;
//float 2 decimal type
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float|Optional $Arrotondamento;
//string 200char
public string|Optional $Causale;
/** @var string[] */
public array|Optional $Causale;
//SI = Documento emesso secondo modalità e termini stabiliti con DM ai sensi dell'art. 73 DPR 633/72
//optional 2 char - only value possible = SI
#[Size(2)]
public string|Optional $Art73;
//length 4 - optional
#[Size(4)]
public string $TipoDocumento = 'TD01';
}

View File

@ -12,18 +12,24 @@
namespace App\DataMapper\EDoc\FatturaPA\Body;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\Validation\Size;
use Spatie\LaravelData\Attributes\Validation\Regex;
class DatiRitenuta extends Data
{
//string 4 char options
#[Size(4)]
public string $TipoRitenuta;
//float 2 decimal
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float $ImportoRitenuta;
// <xs:restriction base="xs:decimal">
// <xs:maxInclusive value="100.00" />
// <xs:pattern value="[0-9]{1,3}\.[0-9]{2}" />
// <xs:pattern value="/^[0-9]{1,3}\.[0-9]{2}$/" />
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float $AliquotaRitenuta;
/*
@ -58,6 +64,7 @@ class DatiRitenuta extends Data
<xs:enumeration value="V1" />
<xs:enumeration value="ZO" />
*/
#[Max(2)]
public string $CausalePagamento;
}

View File

@ -13,16 +13,21 @@ namespace App\DataMapper\EDoc\FatturaPA\Body;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\Validation\Size;
use Spatie\LaravelData\Attributes\Validation\Regex;
class ScontoMaggiorazione extends Data
{
//string options
//SC - Sconto //discount
//MG - Maggiorazione //surcharge
#[Size(2)]
public string $Tipo;
//float 0-100
#[Regex('/^[0-9]{1,3}\.[0-9]{2}$/')]
public float|Optional $Percentuale;
//Amount8DecimalType
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2,8}$/')]
public float|Optional $Importo;
}

View File

@ -12,17 +12,17 @@
namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\Header\IdFiscaleIVA;
class DatiAnagraficiVettore extends Data
{
public IdFiscaleIVA $IdFiscaleIVA;
public function __construct(
public string $IdFiscaleIVA = '',
public string $CodiceFiscale = '',
public string $Anagrafica = '',
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
public \DateTime $DataOraConsegna = new \DateTime(),
){}
public Anagrafica $Anagrafica;
public string|Optional $CodiceFiscale;
//String20Type
public string|Optional $NumeroLicenzaGuida;
}

View File

@ -17,7 +17,7 @@ use Spatie\LaravelData\Data;
class DatiPagamento extends Data
{
//string min4 max4 - optionlist
public string $CondizioniPagamento;
public string $CondizioniPagamento = 'TP02';
public DettaglioPagamento $DettaglioPagamento;
}

View File

@ -36,7 +36,7 @@ class DatiRiepilogo extends Data
public float|Optional $Arrotondamento;
//string options D/I/S
public float|Optional $EsigibilitaIVA;
public string|Optional $EsigibilitaIVA;
//String100LatinType
public string|Optional $RiferimentoNormativo;

View File

@ -12,6 +12,7 @@
namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Data;
use Illuminate\Support\Carbon;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
@ -44,10 +45,10 @@ class DatiTrasporto extends Data
//dateTime
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
public \DateTime|Optional $DataOraRitiro;
public Carbon|Optional $DataOraRitiro;
//date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataInizioTrasporto;
public Carbon|Optional $DataInizioTrasporto;
//[A-Z]{3}
public string|Optional $TipoResa;
@ -55,7 +56,15 @@ class DatiTrasporto extends Data
public Sede|Optional $IndirizzoResa;
//dateTime
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
public \DateTime|Optional $DataOraConsegna;
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public Carbon|Optional $DataOraConsegna;
// public function __construct()
// {
// $this->DataOraConsegna = new \DateTime();
// $this->DataInizioTrasporto = new \DateTime();
// $this->DataInizioTrasporto = new \DateTime();
// }
}

View File

@ -12,6 +12,7 @@
namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Data;
use Illuminate\Support\Carbon;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
@ -19,8 +20,13 @@ use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class DatiVeicoli extends Data
{
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $Data;
public Carbon|Optional $Data;
//String15Type
public string $TotalePercorso;
public function __construct()
{
// $this->Data = new \DateTime();
}
}

View File

@ -35,7 +35,7 @@ class DettaglioLinee extends Data
// <xs:restriction base="xs:decimal">
// <xs:maxInclusive value="100.00" />
// <xs:pattern value="[0-9]{1,3}\.[0-9]{2}" />
// <xs:pattern value="/^[0-9]{1,3}\.[0-9]{2}$/" />
// 0-100
public float $AliquotaIVA;
@ -53,11 +53,11 @@ class DettaglioLinee extends Data
//date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataInizioPeriodo;
public \Illuminate\Support\Carbon|Optional $DataInizioPeriodo;
//date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataFinePeriodo;
public \Illuminate\Support\Carbon|Optional $DataFinePeriodo;
public ScontoMaggiorazione|Optional $ScontoMaggiorazione;

View File

@ -22,7 +22,7 @@ class DettaglioPagamento extends Data
{
//string length 4 - options
public string $ModalitaPagamento;
public string $ModalitaPagamento = 'MP01';
// Amount2DecimalType
public float $ImportoPagamento;
@ -40,7 +40,7 @@ class DettaglioPagamento extends Data
//date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \Datetime|Optional $DataScadenzaPagamento;
public \Illuminate\Support\Carbon|Optional $DataScadenzaPagamento;
//String20Type
public string|Optional $CodUfficioPostale;
@ -77,14 +77,14 @@ class DettaglioPagamento extends Data
//Date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public string|Optional $DataLimitePagamentoAnticipato;
public \Illuminate\Support\Carbon|Optional $DataLimitePagamentoAnticipato;
//Amount2DecimalType
public float|Optional $PenalitaPagamentiRitardati;
//date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataDecorrenzaPenale;
public \Illuminate\Support\Carbon|Optional $DataDecorrenzaPenale;
//String60Type
public string|Optional $CodicePagamento;

View File

@ -22,5 +22,5 @@ class FatturaPrincipale extends Data
public string $NumeroFatturaPrincipale;
//dateTime
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataFatturaPrincipale;
public \Illuminate\Support\Carbon|Optional $DataFatturaPrincipale;
}

View File

@ -12,13 +12,16 @@
namespace App\DataMapper\EDoc\FatturaPA\Generics;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Attributes\Validation\Max;
class CodiceArticolo extends Data
{
//string 35 char
#[Max(35)]
public string $CodiceTipo;
//string 35 char
#[Max(35)]
public string $CodiceValore;
}

View File

@ -11,6 +11,7 @@
namespace App\DataMapper\EDoc\FatturaPA\Generics;
use Spatie\LaravelData\Attributes\Validation\Between;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\WithTransformer;
@ -22,9 +23,10 @@ class DatiDDT extends Data
public string $NumeroDDT;
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime $DataDDT;
public \Illuminate\Support\Carbon $DataDDT;
//int 1-9999
#[Between(1,9999)]
public int|Optional $RiferimentoNumeroLinea;
}

View File

@ -13,23 +13,31 @@ namespace App\DataMapper\EDoc\FatturaPA\Generics;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Attributes\Validation\Between;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class DatiDocumentiCorrelatiType extends Data
{
//String20Type
#[Max(20)]
public string $IdDocumento;
//int 1-9999
#[Between(1,9999)]
public int|Optional $RiferimentoNumeroLinea;
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $Data;
public \Illuminate\Support\Carbon|Optional $Data;
//String20Type
#[Max(20)]
public string|Optional $NumItem;
//String100LatinType
#[Max(100)]
public string|Optional $CodiceCommessaConvenzione;
//String15Type
#[Max(15)]
public string|Optional $CodiceCUP;
//String15Type
#[Max(15)]
public string|Optional $CodiceCIG;
}

View File

@ -11,12 +11,14 @@
namespace App\DataMapper\EDoc\FatturaPA\Generics;
use Spatie\LaravelData\Attributes\Validation\Between;
use Spatie\LaravelData\Data;
class DatiSAL extends Data
{
//int 1-999
#[Between(1,999)]
public int $RiferimentoFase;
}

View File

@ -16,14 +16,25 @@ use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\Sede;
use App\DataMapper\EDoc\FatturaPA\Contatti;
use App\DataMapper\EDoc\FatturaPA\IscrizioneREA;
use App\DataMapper\EDoc\FatturaPA\Header\DatiAnagrafici;
use App\DataMapper\EDoc\FatturaPA\StabileOrganizzazione;
class CedentePrestatore extends Data
{
public DatiAnagrafici $DatiAnagrafici;
public Sede $sede;
public Sede|Optional $StabileOrganizzazione;
public IscrizioneREA|Optional $IscrizioneREA;
public Contatti|Optional $Contatti;
public string|Optional $RiferimentoAmministrazione;
public function __construct(
public DatiAnagrafici $DatiAnagrafici,
public Sede $Sede,
public StabileOrganizzazione|Optional $StabileOrganizzazione,
public IscrizioneREA|Optional $IscrizioneREA,
public Contatti|Optional $Contatti,
public string|Optional $RiferimentoAmministrazione,
){}
}

View File

@ -13,16 +13,19 @@ namespace App\DataMapper\EDoc\FatturaPA\Header;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use CleverIt\UBL\Invoice\FatturaPA\common\Sede;
use App\DataMapper\EDoc\FatturaPA\Sede;
use App\DataMapper\EDoc\FatturaPA\RappresentanteFiscale;
use App\DataMapper\EDoc\FatturaPA\Header\DatiAnagraficiCedenteType;
class CessionarioCommittente extends Data
{
public DatiAnagrafici $DatiAnagrafici;
public DatiAnagraficiCedenteType $DatiAnagrafici;
public Sede $Sede;
/** @var Sede[] */
public array $Sede;
public Sede|Optional $StabileOrganizzazione;
/** @var Sede[] */
public array|Optional $StabileOrganizzazione;
public RappresentanteFiscale|Optional $RappresentanteFiscale;
}

View File

@ -14,31 +14,44 @@ namespace App\DataMapper\EDoc\FatturaPA\Header;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\Anagrafica;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\Validation\Size;
use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Attributes\Validation\Regex;
use App\DataMapper\EDoc\FatturaPA\Header\IdFiscaleIVA;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class DatiAnagrafici extends Data
{
public IdFiscaleIVA $IdFiscaleIVA;
public Anagrafica $Anagrafica;
public function __construct(
// string length 4 - options
public string|Optional $RegimeFiscale;
public Anagrafica $Anagrafica,
//[A-Z0-9]{11,16}
public string|Optional $CodiceFiscale;
public IdFiscaleIVA $IdFiscaleIVA,
//string 60 char
public string|Optional $AlboProfessionale;
// string length 4 - options = 'RF01'
#[Max(4)]
public string|Optional $RegimeFiscale,
//string 2 chat [A-Z]{2}
public string|Optional $ProvinciaAlbo;
#[Regex('/^[A-Z0-9]{11,16}$/')]
public string|Optional $CodiceFiscale,
//string 60 char
public string|Optional $NumeroIscrizioneAlbo;
//string 60 char
#[Max(60)]
public string|Optional $AlboProfessionale,
//Date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataIscrizioneAlbo;
//string 2 char
#[Regex('/^[A-Z]{2}$/')]
#[Size(2)]
public string|Optional $ProvinciaAlbo,
//string 60 char
#[Max(60)]
public string|Optional $NumeroIscrizioneAlbo,
//Date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \Datetime|Optional $DataIscrizioneAlbo,
){}
}

View File

@ -0,0 +1,58 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\DataMapper\EDoc\FatturaPA\Header;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\Anagrafica;
use Spatie\LaravelData\Attributes\WithTransformer;
use App\DataMapper\EDoc\FatturaPA\Header\IdFiscaleIVA;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\Validation\Regex;
use Spatie\LaravelData\Attributes\Validation\Size;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class DatiAnagraficiCedenteType extends Data
{
public function __construct(
public Anagrafica $Anagrafica,
public IdFiscaleIVA|Optional $IdFiscaleIVA,
// string length 4 - options = 'RF01'
#[Size(4)]
public string|Optional $RegimeFiscale,
//[A-Z0-9]{11,16}
#[Regex('/^[A-Z0-9]{11,16}$/')]
public string|Optional $CodiceFiscale,
//string 60 char
#[Max(20)]
public string|Optional $AlboProfessionale,
//string 2 chat [A-Z]{2}
#[Size(2)]
#[Regex('/^[A-Z]{2}$/')]
public string|Optional $ProvinciaAlbo,
//string 60 char
#[Max(60)]
public string|Optional $NumeroIscrizioneAlbo,
//Date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \Datetime|Optional $DataIscrizioneAlbo,
){}
}

View File

@ -12,12 +12,21 @@
namespace App\DataMapper\EDoc\FatturaPA\Header;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\Validation\Regex;
use Spatie\LaravelData\Attributes\Validation\Size;
class DatiTrasmissione extends Data
{
public IdTrasmittente $IdTrasmittente; //IdTrasmittente
#[Max(10)]
public string $ProgressivoInvio = ''; //String
#[Size(5)]
public string $FormatoTrasmissione = ''; //String
#[Regex('/^[A-Z0-9]{6,7}$/')]
public string $CodiceDestinatario = ''; //String

View File

@ -11,14 +11,21 @@
namespace App\DataMapper\EDoc\FatturaPA\Header;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\Validation\Min;
use Spatie\LaravelData\Attributes\Validation\Regex;
use Spatie\LaravelData\Data;
class IdFiscaleIVA extends Data
{
public function __construct(
// #[\Required]
#[Regex('/^[A-Z]{2}$/')]
public string $IdPaese = '',
#[\Required]
public string $IdPaese = '';
#[\Required]
public string $IdCodice = '';
// #[\Required]
#[Min(1)]
#[Max(28)]
public string $IdCodice = '',
){}
}

View File

@ -12,10 +12,17 @@
namespace App\DataMapper\EDoc\FatturaPA\Header;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\Validation\Min;
use Spatie\LaravelData\Attributes\Validation\Regex;
class IdTrasmittente extends Data
{
#[Regex('/^[A-Z]{2}$/')]
public string $IdPaese; //String
#[Min(1)]
#[Max(28)]
public string $IdCodice; //String
}

View File

@ -17,10 +17,14 @@ use Spatie\LaravelData\Optional;
class Sede extends Data
{
public string $Indirizzo = ''; //string - address, 60char limit
public int $CAP = 12345; //[0-9][0-9][0-9][0-9][0-9] ie 12345
public string $Comune = ''; //String 60char limit
public string $Nazione = 'IT'; //String default IT
public string|Optional $Provincia; //String [A-Z]{2}
public string|Optional $NumeroCivico; // regex \p{IsBasicLatin}{1,8})
public string $Nazione = 'IT'; //String default IT
}

View File

@ -11,9 +11,7 @@
namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Data;
class StabileOrganizzazione extends Data
class StabileOrganizzazione extends Sede
{
}

View File

@ -6,7 +6,10 @@ return [
* is an array, it will try to convert from the first format that works,
* and will serialize dates using the first format from the array.
*/
'date_format' => DATE_ATOM,
'date_format' => [
'Y-m-d',
'Y-m-d\TH:i:s.uP',
],
/*
* Global transformers will take complex types and transform them into simple