From 34eb936927b0ab72a07b5559d229f694793bbfaf Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sun, 12 May 2024 09:13:14 +1000 Subject: [PATCH] Validation --- app/DataMapper/EDoc/FatturaPA.php | 23 ++------ app/DataMapper/EDoc/FatturaPA/Allegati.php | 5 ++ .../EDoc/FatturaPA/AltriDatiGestionali.php | 8 ++- app/DataMapper/EDoc/FatturaPA/Anagrafica.php | 10 +++- .../EDoc/FatturaPA/Body/DatiBollo.php | 4 ++ .../FatturaPA/Body/DatiCassaPrevidenziale.php | 12 +++- .../FatturaPA/Body/DatiGeneraliDocumento.php | 26 ++++++--- .../EDoc/FatturaPA/Body/DatiRitenuta.php | 9 ++- .../FatturaPA/Body/ScontoMaggiorazione.php | 5 ++ .../EDoc/FatturaPA/DatiAnagraficiVettore.php | 20 +++---- .../EDoc/FatturaPA/DatiPagamento.php | 2 +- .../EDoc/FatturaPA/DatiRiepilogo.php | 2 +- .../EDoc/FatturaPA/DatiTrasporto.php | 17 ++++-- app/DataMapper/EDoc/FatturaPA/DatiVeicoli.php | 8 ++- .../EDoc/FatturaPA/DettaglioLinee.php | 6 +- .../EDoc/FatturaPA/DettaglioPagamento.php | 8 +-- .../EDoc/FatturaPA/FatturaPrincipale.php | 2 +- .../FatturaPA/Generics/CodiceArticolo.php | 3 + .../EDoc/FatturaPA/Generics/DatiDDT.php | 4 +- .../Generics/DatiDocumentiCorrelatiType.php | 10 +++- .../EDoc/FatturaPA/Generics/DatiSAL.php | 2 + .../FatturaPA/Header/CedentePrestatore.php | 25 +++++--- .../Header/CessionarioCommittente.php | 13 +++-- .../EDoc/FatturaPA/Header/DatiAnagrafici.php | 53 ++++++++++------- .../Header/DatiAnagraficiCedenteType.php | 58 +++++++++++++++++++ .../FatturaPA/Header/DatiTrasmissione.php | 9 +++ .../EDoc/FatturaPA/Header/IdFiscaleIVA.php | 17 ++++-- .../EDoc/FatturaPA/Header/IdTrasmittente.php | 7 +++ app/DataMapper/EDoc/FatturaPA/Sede.php | 6 +- .../EDoc/FatturaPA/StabileOrganizzazione.php | 4 +- config/data.php | 5 +- 31 files changed, 283 insertions(+), 100 deletions(-) create mode 100644 app/DataMapper/EDoc/FatturaPA/Header/DatiAnagraficiCedenteType.php diff --git a/app/DataMapper/EDoc/FatturaPA.php b/app/DataMapper/EDoc/FatturaPA.php index 5f9e7702c94e..0283cb372060 100644 --- a/app/DataMapper/EDoc/FatturaPA.php +++ b/app/DataMapper/EDoc/FatturaPA.php @@ -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', - ) { - } } diff --git a/app/DataMapper/EDoc/FatturaPA/Allegati.php b/app/DataMapper/EDoc/FatturaPA/Allegati.php index 76e3825a65e3..c8ca2a09cc7a 100644 --- a/app/DataMapper/EDoc/FatturaPA/Allegati.php +++ b/app/DataMapper/EDoc/FatturaPA/Allegati.php @@ -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; } \ No newline at end of file diff --git a/app/DataMapper/EDoc/FatturaPA/AltriDatiGestionali.php b/app/DataMapper/EDoc/FatturaPA/AltriDatiGestionali.php index 3c0f24c539f5..0697ef93d04a 100644 --- a/app/DataMapper/EDoc/FatturaPA/AltriDatiGestionali.php +++ b/app/DataMapper/EDoc/FatturaPA/AltriDatiGestionali.php @@ -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; } diff --git a/app/DataMapper/EDoc/FatturaPA/Anagrafica.php b/app/DataMapper/EDoc/FatturaPA/Anagrafica.php index 5dcdd0fa30a3..4d3578561d50 100644 --- a/app/DataMapper/EDoc/FatturaPA/Anagrafica.php +++ b/app/DataMapper/EDoc/FatturaPA/Anagrafica.php @@ -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 = ''; } diff --git a/app/DataMapper/EDoc/FatturaPA/Body/DatiBollo.php b/app/DataMapper/EDoc/FatturaPA/Body/DatiBollo.php index de3c9b6aa5c1..4d477aa9cf6f 100644 --- a/app/DataMapper/EDoc/FatturaPA/Body/DatiBollo.php +++ b/app/DataMapper/EDoc/FatturaPA/Body/DatiBollo.php @@ -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; } \ No newline at end of file diff --git a/app/DataMapper/EDoc/FatturaPA/Body/DatiCassaPrevidenziale.php b/app/DataMapper/EDoc/FatturaPA/Body/DatiCassaPrevidenziale.php index fc77e37425eb..90f1c09a911a 100644 --- a/app/DataMapper/EDoc/FatturaPA/Body/DatiCassaPrevidenziale.php +++ b/app/DataMapper/EDoc/FatturaPA/Body/DatiCassaPrevidenziale.php @@ -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; } diff --git a/app/DataMapper/EDoc/FatturaPA/Body/DatiGeneraliDocumento.php b/app/DataMapper/EDoc/FatturaPA/Body/DatiGeneraliDocumento.php index 2c8c3d815419..5117d927314d 100644 --- a/app/DataMapper/EDoc/FatturaPA/Body/DatiGeneraliDocumento.php +++ b/app/DataMapper/EDoc/FatturaPA/Body/DatiGeneraliDocumento.php @@ -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 - public float|Optional $Arrotondamento; + + #[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 - public string|Optional $Art73; + #[Size(2)] + public string|Optional $Art73; + + //length 4 - optional + #[Size(4)] + public string $TipoDocumento = 'TD01'; } diff --git a/app/DataMapper/EDoc/FatturaPA/Body/DatiRitenuta.php b/app/DataMapper/EDoc/FatturaPA/Body/DatiRitenuta.php index f15bc0232894..4ac6d726c4f6 100644 --- a/app/DataMapper/EDoc/FatturaPA/Body/DatiRitenuta.php +++ b/app/DataMapper/EDoc/FatturaPA/Body/DatiRitenuta.php @@ -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; // // - // + // + #[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')] public float $AliquotaRitenuta; /* @@ -58,6 +64,7 @@ class DatiRitenuta extends Data */ + #[Max(2)] public string $CausalePagamento; } diff --git a/app/DataMapper/EDoc/FatturaPA/Body/ScontoMaggiorazione.php b/app/DataMapper/EDoc/FatturaPA/Body/ScontoMaggiorazione.php index 54fe077879ba..6f7fd409217d 100644 --- a/app/DataMapper/EDoc/FatturaPA/Body/ScontoMaggiorazione.php +++ b/app/DataMapper/EDoc/FatturaPA/Body/ScontoMaggiorazione.php @@ -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; } diff --git a/app/DataMapper/EDoc/FatturaPA/DatiAnagraficiVettore.php b/app/DataMapper/EDoc/FatturaPA/DatiAnagraficiVettore.php index 8ed55a0d0da8..239a96ecb74f 100644 --- a/app/DataMapper/EDoc/FatturaPA/DatiAnagraficiVettore.php +++ b/app/DataMapper/EDoc/FatturaPA/DatiAnagraficiVettore.php @@ -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 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 IdFiscaleIVA $IdFiscaleIVA; + + public Anagrafica $Anagrafica; + + public string|Optional $CodiceFiscale; + + //String20Type + public string|Optional $NumeroLicenzaGuida; } diff --git a/app/DataMapper/EDoc/FatturaPA/DatiPagamento.php b/app/DataMapper/EDoc/FatturaPA/DatiPagamento.php index 3e0158e24123..131b7ad7675b 100644 --- a/app/DataMapper/EDoc/FatturaPA/DatiPagamento.php +++ b/app/DataMapper/EDoc/FatturaPA/DatiPagamento.php @@ -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; } \ No newline at end of file diff --git a/app/DataMapper/EDoc/FatturaPA/DatiRiepilogo.php b/app/DataMapper/EDoc/FatturaPA/DatiRiepilogo.php index 00b4296a4677..8e1993eee276 100644 --- a/app/DataMapper/EDoc/FatturaPA/DatiRiepilogo.php +++ b/app/DataMapper/EDoc/FatturaPA/DatiRiepilogo.php @@ -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; diff --git a/app/DataMapper/EDoc/FatturaPA/DatiTrasporto.php b/app/DataMapper/EDoc/FatturaPA/DatiTrasporto.php index c60e7cee51da..736d3e703acb 100644 --- a/app/DataMapper/EDoc/FatturaPA/DatiTrasporto.php +++ b/app/DataMapper/EDoc/FatturaPA/DatiTrasporto.php @@ -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(); +// } } diff --git a/app/DataMapper/EDoc/FatturaPA/DatiVeicoli.php b/app/DataMapper/EDoc/FatturaPA/DatiVeicoli.php index 0400836eeac3..6933ecfd7d19 100644 --- a/app/DataMapper/EDoc/FatturaPA/DatiVeicoli.php +++ b/app/DataMapper/EDoc/FatturaPA/DatiVeicoli.php @@ -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(); + } } \ No newline at end of file diff --git a/app/DataMapper/EDoc/FatturaPA/DettaglioLinee.php b/app/DataMapper/EDoc/FatturaPA/DettaglioLinee.php index 628345ca69ac..960330b36407 100644 --- a/app/DataMapper/EDoc/FatturaPA/DettaglioLinee.php +++ b/app/DataMapper/EDoc/FatturaPA/DettaglioLinee.php @@ -35,7 +35,7 @@ class DettaglioLinee extends Data // // - // + // // 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; diff --git a/app/DataMapper/EDoc/FatturaPA/DettaglioPagamento.php b/app/DataMapper/EDoc/FatturaPA/DettaglioPagamento.php index 34acfa31fe70..fb058afd4fc6 100644 --- a/app/DataMapper/EDoc/FatturaPA/DettaglioPagamento.php +++ b/app/DataMapper/EDoc/FatturaPA/DettaglioPagamento.php @@ -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; diff --git a/app/DataMapper/EDoc/FatturaPA/FatturaPrincipale.php b/app/DataMapper/EDoc/FatturaPA/FatturaPrincipale.php index d9722d0ec284..65e669d90f83 100644 --- a/app/DataMapper/EDoc/FatturaPA/FatturaPrincipale.php +++ b/app/DataMapper/EDoc/FatturaPA/FatturaPrincipale.php @@ -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; } diff --git a/app/DataMapper/EDoc/FatturaPA/Generics/CodiceArticolo.php b/app/DataMapper/EDoc/FatturaPA/Generics/CodiceArticolo.php index 97d0d0fa1a7d..bb5c9320ce3b 100644 --- a/app/DataMapper/EDoc/FatturaPA/Generics/CodiceArticolo.php +++ b/app/DataMapper/EDoc/FatturaPA/Generics/CodiceArticolo.php @@ -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; } diff --git a/app/DataMapper/EDoc/FatturaPA/Generics/DatiDDT.php b/app/DataMapper/EDoc/FatturaPA/Generics/DatiDDT.php index 56fc0df097dc..7ea4a93397e9 100644 --- a/app/DataMapper/EDoc/FatturaPA/Generics/DatiDDT.php +++ b/app/DataMapper/EDoc/FatturaPA/Generics/DatiDDT.php @@ -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; } diff --git a/app/DataMapper/EDoc/FatturaPA/Generics/DatiDocumentiCorrelatiType.php b/app/DataMapper/EDoc/FatturaPA/Generics/DatiDocumentiCorrelatiType.php index 4722994b931b..d787222401c1 100644 --- a/app/DataMapper/EDoc/FatturaPA/Generics/DatiDocumentiCorrelatiType.php +++ b/app/DataMapper/EDoc/FatturaPA/Generics/DatiDocumentiCorrelatiType.php @@ -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; } \ No newline at end of file diff --git a/app/DataMapper/EDoc/FatturaPA/Generics/DatiSAL.php b/app/DataMapper/EDoc/FatturaPA/Generics/DatiSAL.php index cbd2922d715b..9d991e58ad28 100644 --- a/app/DataMapper/EDoc/FatturaPA/Generics/DatiSAL.php +++ b/app/DataMapper/EDoc/FatturaPA/Generics/DatiSAL.php @@ -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; } diff --git a/app/DataMapper/EDoc/FatturaPA/Header/CedentePrestatore.php b/app/DataMapper/EDoc/FatturaPA/Header/CedentePrestatore.php index 4323a597ac3f..5fa2b5210903 100644 --- a/app/DataMapper/EDoc/FatturaPA/Header/CedentePrestatore.php +++ b/app/DataMapper/EDoc/FatturaPA/Header/CedentePrestatore.php @@ -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, + ){} + +} \ No newline at end of file diff --git a/app/DataMapper/EDoc/FatturaPA/Header/CessionarioCommittente.php b/app/DataMapper/EDoc/FatturaPA/Header/CessionarioCommittente.php index 7c2991eda922..730588f738f7 100644 --- a/app/DataMapper/EDoc/FatturaPA/Header/CessionarioCommittente.php +++ b/app/DataMapper/EDoc/FatturaPA/Header/CessionarioCommittente.php @@ -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; + + /** @var Sede[] */ + public array $Sede; - public Sede $Sede; - - public Sede|Optional $StabileOrganizzazione; + /** @var Sede[] */ + public array|Optional $StabileOrganizzazione; public RappresentanteFiscale|Optional $RappresentanteFiscale; } diff --git a/app/DataMapper/EDoc/FatturaPA/Header/DatiAnagrafici.php b/app/DataMapper/EDoc/FatturaPA/Header/DatiAnagrafici.php index d66531dadada..1e923284afbf 100644 --- a/app/DataMapper/EDoc/FatturaPA/Header/DatiAnagrafici.php +++ b/app/DataMapper/EDoc/FatturaPA/Header/DatiAnagrafici.php @@ -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, + + public IdFiscaleIVA $IdFiscaleIVA, + + // string length 4 - options = 'RF01' + #[Max(4)] + public string|Optional $RegimeFiscale, + + #[Regex('/^[A-Z0-9]{11,16}$/')] + public string|Optional $CodiceFiscale, + + //string 60 char + #[Max(60)] + public string|Optional $AlboProfessionale, + + //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, - //[A-Z0-9]{11,16} - public string|Optional $CodiceFiscale; - - //string 60 char - public string|Optional $AlboProfessionale; - - //string 2 chat [A-Z]{2} - public string|Optional $ProvinciaAlbo; - - //string 60 char - public string|Optional $NumeroIscrizioneAlbo; - - //Date - #[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')] - public \DateTime|Optional $DataIscrizioneAlbo; - + ){} } diff --git a/app/DataMapper/EDoc/FatturaPA/Header/DatiAnagraficiCedenteType.php b/app/DataMapper/EDoc/FatturaPA/Header/DatiAnagraficiCedenteType.php new file mode 100644 index 000000000000..6ecb80e59f10 --- /dev/null +++ b/app/DataMapper/EDoc/FatturaPA/Header/DatiAnagraficiCedenteType.php @@ -0,0 +1,58 @@ + 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