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\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\FatturaElettronicaHeader;
use App\DataMapper\EDoc\FatturaPA\FatturaElettronicaBody; 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 class FatturaPA extends Data
{ {
public FatturaElettronicaHeader $FatturaElettronicaHeader; public FatturaElettronicaHeader $FatturaElettronicaHeader;
public FatturaElettronicaBody $FatturaElettronicaBody; 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 Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\DatiVeicoli; use App\DataMapper\EDoc\FatturaPA\DatiVeicoli;
use App\DataMapper\EDoc\FatturaPA\Body\DatiGenerali; use App\DataMapper\EDoc\FatturaPA\Body\DatiGenerali;
use Spatie\LaravelData\Attributes\Validation\Max;
class Allegati extends Data class Allegati extends Data
{ {
//string 60 //string 60
#[Max(60)]
public string $NomeAttachment; public string $NomeAttachment;
//base64 binary //base64 binary
public mixed $Attachment; public mixed $Attachment;
//string 10 //string 10
#[Max(10)]
public string|Optional $AlgoritmoCompressione; public string|Optional $AlgoritmoCompressione;
//string 10 //string 10
#[Max(10)]
public string|Optional $FormatoAttachment; public string|Optional $FormatoAttachment;
//string 100 //string 100
#[Max(100)]
public string|Optional $DescrizioneAttachment; public string|Optional $DescrizioneAttachment;
} }

View File

@ -12,24 +12,30 @@
namespace App\DataMapper\EDoc\FatturaPA; namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Data; use Spatie\LaravelData\Data;
use Illuminate\Support\Carbon;
use Spatie\LaravelData\Optional; use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Attributes\WithTransformer; use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Attributes\Validation\Regex;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer; use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class AltriDatiGestionali extends Data class AltriDatiGestionali extends Data
{ {
//string 10 //string 10
#[Max(10)]
public string $TipoDato; public string $TipoDato;
//String60LatinType //String60LatinType
#[Max(60)]
public string|Optional $RiferimentoTesto; public string|Optional $RiferimentoTesto;
//Amount8DecimalType //Amount8DecimalType
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2,8}$/')]
public float|Optional $RiferimentoNumero; public float|Optional $RiferimentoNumero;
//date //date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')] #[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; namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Attributes\Validation\Max;
use Spatie\LaravelData\Data; use Spatie\LaravelData\Data;
class Anagrafica extends Data class Anagrafica extends Data
@ -19,13 +20,16 @@ class Anagrafica extends Data
//either Deminominazione OR //either Deminominazione OR
//string length 80 //string length 80
public string $Denominazione; #[Max(80)]
public string $Denominazione = '';
//////////////////////////////////////////// ////////////////////////////////////////////
//2. Nome AND CogNome //2. Nome AND CogNome
//string length 60 //string length 60
public string $Nome; #[Max(60)]
public string $Nome = '';
//string length 60 //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\Data;
use Spatie\LaravelData\Optional; use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\Validation\Size;
use Spatie\LaravelData\Attributes\Validation\Regex;
class DatiBollo extends Data class DatiBollo extends Data
{ {
//SI //SI
#[Size(2)]
public string $BolloVirtuale = 'SI'; public string $BolloVirtuale = 'SI';
//Amount2DecimalType //Amount2DecimalType
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float|Optional $ImportoBollo; public float|Optional $ImportoBollo;
} }

View File

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

View File

@ -14,22 +14,24 @@ namespace App\DataMapper\EDoc\FatturaPA\Body;
use Spatie\LaravelData\Data; use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional; use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\Body\DatiBollo; 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\WithTransformer;
use Spatie\LaravelData\Attributes\Validation\Regex;
use App\DataMapper\EDoc\FatturaPA\Body\DatiRitenuta; use App\DataMapper\EDoc\FatturaPA\Body\DatiRitenuta;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer; use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class DatiGeneraliDocumento extends Data class DatiGeneraliDocumento extends Data
{ {
//length 4 - optional
public string $TipoDocumento;
//string regex [A-Z]{3} //string regex [A-Z]{3}
public string $Divisa; public string $Divisa;
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')] #[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
public \DateTime $Data; public \Illuminate\Support\Carbon $Data;
//string max 20 char //string max 20 char
#[Max(20)]
public string $Numero; public string $Numero;
public DatiRitenuta|Optional $DatiRitenuta; public DatiRitenuta|Optional $DatiRitenuta;
@ -38,15 +40,25 @@ class DatiGeneraliDocumento extends Data
public ScontoMaggiorazione|Optional $ScontoMaggiorazione; public ScontoMaggiorazione|Optional $ScontoMaggiorazione;
//float 2 decimal type //float 2 decimal type
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float|Optional $ImportoTotaleDocumento; public float|Optional $ImportoTotaleDocumento;
//float 2 decimal type //float 2 decimal type
public float|Optional $Arrotondamento;
#[Regex('/^[\-]?[0-9]{1,11}\.[0-9]{2}$/')]
public float|Optional $Arrotondamento;
//string 200char //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 //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 //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';
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -12,6 +12,7 @@
namespace App\DataMapper\EDoc\FatturaPA; namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Data; use Spatie\LaravelData\Data;
use Illuminate\Support\Carbon;
use Spatie\LaravelData\Optional; use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\WithTransformer; use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer; use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
@ -44,10 +45,10 @@ class DatiTrasporto extends Data
//dateTime //dateTime
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')] #[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')]
public \DateTime|Optional $DataOraRitiro; public Carbon|Optional $DataOraRitiro;
//date //date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')] #[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataInizioTrasporto; public Carbon|Optional $DataInizioTrasporto;
//[A-Z]{3} //[A-Z]{3}
public string|Optional $TipoResa; public string|Optional $TipoResa;
@ -55,7 +56,15 @@ class DatiTrasporto extends Data
public Sede|Optional $IndirizzoResa; public Sede|Optional $IndirizzoResa;
//dateTime //dateTime
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d\TH:i:s.uP')] #[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataOraConsegna; 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; namespace App\DataMapper\EDoc\FatturaPA;
use Spatie\LaravelData\Data; use Spatie\LaravelData\Data;
use Illuminate\Support\Carbon;
use Spatie\LaravelData\Optional; use Spatie\LaravelData\Optional;
use Spatie\LaravelData\Attributes\WithTransformer; use Spatie\LaravelData\Attributes\WithTransformer;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer; use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
@ -19,8 +20,13 @@ use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class DatiVeicoli extends Data class DatiVeicoli extends Data
{ {
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')] #[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $Data; public Carbon|Optional $Data;
//String15Type //String15Type
public string $TotalePercorso; 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:restriction base="xs:decimal">
// <xs:maxInclusive value="100.00" /> // <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 // 0-100
public float $AliquotaIVA; public float $AliquotaIVA;
@ -53,11 +53,11 @@ class DettaglioLinee extends Data
//date //date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')] #[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataInizioPeriodo; public \Illuminate\Support\Carbon|Optional $DataInizioPeriodo;
//date //date
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')] #[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')]
public \DateTime|Optional $DataFinePeriodo; public \Illuminate\Support\Carbon|Optional $DataFinePeriodo;
public ScontoMaggiorazione|Optional $ScontoMaggiorazione; public ScontoMaggiorazione|Optional $ScontoMaggiorazione;

View File

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

View File

@ -22,5 +22,5 @@ class FatturaPrincipale extends Data
public string $NumeroFatturaPrincipale; public string $NumeroFatturaPrincipale;
//dateTime //dateTime
#[WithTransformer(DateTimeInterfaceTransformer::class, format: 'Y-m-d')] #[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; namespace App\DataMapper\EDoc\FatturaPA\Generics;
use Spatie\LaravelData\Data; use Spatie\LaravelData\Data;
use Spatie\LaravelData\Attributes\Validation\Max;
class CodiceArticolo extends Data class CodiceArticolo extends Data
{ {
//string 35 char //string 35 char
#[Max(35)]
public string $CodiceTipo; public string $CodiceTipo;
//string 35 char //string 35 char
#[Max(35)]
public string $CodiceValore; public string $CodiceValore;
} }

View File

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

View File

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

View File

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

View File

@ -16,14 +16,25 @@ use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\Sede; use App\DataMapper\EDoc\FatturaPA\Sede;
use App\DataMapper\EDoc\FatturaPA\Contatti; use App\DataMapper\EDoc\FatturaPA\Contatti;
use App\DataMapper\EDoc\FatturaPA\IscrizioneREA; use App\DataMapper\EDoc\FatturaPA\IscrizioneREA;
use App\DataMapper\EDoc\FatturaPA\Header\DatiAnagrafici;
use App\DataMapper\EDoc\FatturaPA\StabileOrganizzazione;
class CedentePrestatore extends Data 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\Data;
use Spatie\LaravelData\Optional; 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\RappresentanteFiscale;
use App\DataMapper\EDoc\FatturaPA\Header\DatiAnagraficiCedenteType;
class CessionarioCommittente extends Data class CessionarioCommittente extends Data
{ {
public DatiAnagrafici $DatiAnagrafici; public DatiAnagraficiCedenteType $DatiAnagrafici;
/** @var Sede[] */
public array $Sede;
public Sede $Sede; /** @var Sede[] */
public array|Optional $StabileOrganizzazione;
public Sede|Optional $StabileOrganizzazione;
public RappresentanteFiscale|Optional $RappresentanteFiscale; public RappresentanteFiscale|Optional $RappresentanteFiscale;
} }

View File

@ -14,31 +14,44 @@ namespace App\DataMapper\EDoc\FatturaPA\Header;
use Spatie\LaravelData\Data; use Spatie\LaravelData\Data;
use Spatie\LaravelData\Optional; use Spatie\LaravelData\Optional;
use App\DataMapper\EDoc\FatturaPA\Anagrafica; 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\WithTransformer;
use Spatie\LaravelData\Attributes\Validation\Regex;
use App\DataMapper\EDoc\FatturaPA\Header\IdFiscaleIVA;
use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer; use Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer;
class DatiAnagrafici extends Data class DatiAnagrafici extends Data
{ {
public IdFiscaleIVA $IdFiscaleIVA; public function __construct(
public Anagrafica $Anagrafica;
// string length 4 - options public Anagrafica $Anagrafica,
public string|Optional $RegimeFiscale;
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;
} }

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; namespace App\DataMapper\EDoc\FatturaPA\Header;
use Spatie\LaravelData\Data; 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 class DatiTrasmissione extends Data
{ {
public IdTrasmittente $IdTrasmittente; //IdTrasmittente public IdTrasmittente $IdTrasmittente; //IdTrasmittente
#[Max(10)]
public string $ProgressivoInvio = ''; //String public string $ProgressivoInvio = ''; //String
#[Size(5)]
public string $FormatoTrasmissione = ''; //String public string $FormatoTrasmissione = ''; //String
#[Regex('/^[A-Z0-9]{6,7}$/')]
public string $CodiceDestinatario = ''; //String public string $CodiceDestinatario = ''; //String

View File

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

View File

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

View File

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

View File

@ -6,7 +6,10 @@ return [
* is an array, it will try to convert from the first format that works, * 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. * 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 * Global transformers will take complex types and transform them into simple