From 7937c90694d2e580ffc41b1a2d4a21e6b7d049da Mon Sep 17 00:00:00 2001 From: Michael Mairegger Date: Mon, 30 Sep 2024 08:50:42 +0200 Subject: [PATCH] feat: localization for validation messages --- Resources/ValidatorMessages.Designer.cs | 341 ++++++++++++++++++ Resources/ValidatorMessages.de.resx | 114 ++++++ Resources/ValidatorMessages.resx | 114 ++++++ ...agraficiCessionarioCommittenteValidator.cs | 9 +- Validators/DatiDDTValidator.cs | 3 +- Validators/DatiDocumentoValidator.cs | 5 +- Validators/DatiGeneraliDocumentoValidator.cs | 10 +- Validators/DatiGeneraliValidator.cs | 5 +- Validators/DatiRiepilogoValidator.cs | 11 +- Validators/DatiSALValidator.cs | 5 +- Validators/DatiTrasportoValidator.cs | 7 +- Validators/DettaglioLineeValidator.cs | 12 +- Validators/DettaglioPagamentoValidator.cs | 7 +- Validators/FatturaElettronicaBodyValidator.cs | 15 +- .../FatturaElettronicaHeaderValidator.cs | 8 +- Validators/FatturaOrdinariaValidator.cs | 27 +- Validators/ScontoMaggiorazioneValidator.cs | 7 +- .../CessionarioCommittenteValidator.cs | 7 +- .../Semplificata/DatiBeniServiziValidator.cs | 12 +- .../DatiGeneraliDocumentoValidator.cs | 10 +- .../Semplificata/DatiGeneraliValidator.cs | 7 +- .../FatturaElettronicaBodyValidator.cs | 8 +- .../FatturaElettronicaHeaderValidator.cs | 10 +- .../FatturaSemplificataValidator.cs | 6 +- .../IdentificativiFiscaliValidator.cs | 11 +- 25 files changed, 673 insertions(+), 98 deletions(-) create mode 100644 Resources/ValidatorMessages.Designer.cs create mode 100644 Resources/ValidatorMessages.de.resx create mode 100644 Resources/ValidatorMessages.resx diff --git a/Resources/ValidatorMessages.Designer.cs b/Resources/ValidatorMessages.Designer.cs new file mode 100644 index 00000000..a630b664 --- /dev/null +++ b/Resources/ValidatorMessages.Designer.cs @@ -0,0 +1,341 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FatturaElettronica.Resources { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class ValidatorMessages { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal ValidatorMessages() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FatturaElettronica.Resources.ValidatorMessages", typeof(ValidatorMessages).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to DatiBeniServizi è obbligatorio. + /// + internal static string DatiBeniServiziEObbligatorio { + get { + return ResourceManager.GetString("DatiBeniServiziEObbligatorio", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Natura non presente a fronte di Aliquota IVA pari a 0. + /// + internal static string E00400 { + get { + return ResourceManager.GetString("E00400", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to L’indicazione di un’aliquota IVA pari a zero obbliga all’indicazione della natura dell’operazione che giustifichi la non imponibilità della stessa. + /// + internal static string E00400_S { + get { + return ResourceManager.GetString("E00400_S", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Natura presente a fronte di Aliquota IVA diversa da zero (l’indicazione di un’aliquota IVA diversa da zero qualifica l’operazione come imponibile e quindi non è ammessa la presenza dell’elemento Natura, ad eccezione del caso in cui l’elemento TipoDocumento assume valore TD16). + /// + internal static string E00401 { + get { + return ResourceManager.GetString("E00401", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Natura presente a fronte di Aliquota IVA diversa da zero. + /// + internal static string E00401_S { + get { + return ResourceManager.GetString("E00401_S", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DatiRitenuta non presente a fronte di almeno un blocco DettaglioLinee con Ritenuta uguale a SI. + /// + internal static string E00411 { + get { + return ResourceManager.GetString("E00411", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DatiRitenuta non presente a fronte di DatiCassaPrevidenziale.Ritenuta valorizzato. + /// + internal static string E00415 { + get { + return ResourceManager.GetString("E00415", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IdFiscaleIVA e CodiceFiscale non valorizzati (almeno uno dei due deve essere valorizzato). + /// + internal static string E00417 { + get { + return ResourceManager.GetString("E00417", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IdFiscaleIVA e CodiceFiscale non valorizzati (almeno uno dei due deve essere valorizzato). + /// + internal static string E00417_S { + get { + return ResourceManager.GetString("E00417_S", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data antecedente a una o più date in DatiFattureCollegate. + /// + internal static string E00418 { + get { + return ResourceManager.GetString("E00418", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data antecedente a data fattura rettificata. + /// + internal static string E00418_S { + get { + return ResourceManager.GetString("E00418_S", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to DatiRiepilogo non presente in corrispondenza di almeno un valore DettaglioLinee.AliquiotaIVA o DatiCassaPrevidenziale.AliquotaIVA. + /// + internal static string E00419 { + get { + return ResourceManager.GetString("E00419", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Natura con valore di tipo 'N6' (inversione contabile) a fronte EsigiblitaIVA uguale a 'S' (scissione pagamenti). + /// + internal static string E00420 { + get { + return ResourceManager.GetString("E00420", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ImponibileImporto non calcolato secondo le specifiche tecniche. + /// + internal static string E00422 { + get { + return ResourceManager.GetString("E00422", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to PrezzoTotale non calcolato secondo le specifiche tecniche. + /// + internal static string E00423 { + get { + return ResourceManager.GetString("E00423", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Numero non contiene caratteri numerici. + /// + internal static string E00425 { + get { + return ResourceManager.GetString("E00425", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Natura non presente a fronte di Aliquota IVA pari a 0. + /// + internal static string E00429 { + get { + return ResourceManager.GetString("E00429", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Natura presente a fronte di Aliquota IVA diversa da zero (l’indicazione di un’aliquota IVA diversa da zero qualifica l’operazione come imponibile e quindi non è ammessa la presenza dell’elemento Natura, ad eccezione del caso in cui l’elemento TipoDocumento assume valore TD16). + /// + internal static string E00430 { + get { + return ResourceManager.GetString("E00430", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Percentuale e Importo non presenti a fronte di Tipo valorizzato. + /// + internal static string E00437 { + get { + return ResourceManager.GetString("E00437", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tutti i valori delle aliquote IVA presenti nelle linee di dettaglio di una fattura o nei dati di cassa previdenziale devono essere presenti anche nei dati di riepilogo. + /// + internal static string E00443 { + get { + return ResourceManager.GetString("E00443", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tutti i valori di natura dell’operazione presenti nelle linee di dettaglio di una fattura o nei dati di cassa previdenziale devono essere presenti anche nei dati di riepilogo. + /// + internal static string E00444 { + get { + return ResourceManager.GetString("E00444", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Importo totale superiore al limite previsto per le fatture semplificate ai sensi del DPR 633/72, art. 21bis e DM del 10 maggio 2019. + /// + internal static string E00460 { + get { + return ResourceManager.GetString("E00460", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to I valori TD01, TD02, TD03, TD06, TD16, TD17, TD18, TD19, TD20, TD24, TD25 e TD28 del tipo documento non ammettono l’indicazione in fattura dello stesso soggetto sia come cedente che come cessionario. + /// + internal static string E00471 { + get { + return ResourceManager.GetString("E00471", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Il valore TD07 del tipo documento non ammette l’indicazione in fattura dello stesso soggetto sia come cedente che come cessionario. + /// + internal static string E00471_S { + get { + return ResourceManager.GetString("E00471_S", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to I valori TD21 e TD27 del tipo documento non ammettono l’indicazione in fattura di un cedente diverso dal cessionario. + /// + internal static string E00472 { + get { + return ResourceManager.GetString("E00472", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Per il valore indicato nell’elemento TipoDocumento il valore presente nell’elemento IdPaese non è ammesso (i valori TD17, TD18, TD19 e TD28 del tipo documento non ammettono l’indicazione in fattura di un cedente italiano. Nei casi di TD17 e TD19 è ammessa l’indicazione del valore ‘OO’ nell’elemento IdPaese per operazioni effettuate da soggetti residenti in Livigno e Campione d’Italia.). + /// + internal static string E00473 { + get { + return ResourceManager.GetString("E00473", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Nel tipo documento ‘autofattura per splafonamento’ tutte le linee di dettaglio devo avere un’aliquota IVA diversa da zero. + /// + internal static string E00474 { + get { + return ResourceManager.GetString("E00474", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Per il valore indicato nell’elemento TipoDocumento deve essere presente l’elemento IdFiscaleIVA del cessionario/committente (i tipi documento TD16, TD17, TD18, TD19, TD20, TD22, TD23 e TD28 prevedono obbligatoriamente la presenza della partita IVA del cessionario/committente). + /// + internal static string E00475 { + get { + return ResourceManager.GetString("E00475", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Gli elementi IdPaese e IdPaese non possono essere entrambi valorizzati con codice diverso da IT. + /// + internal static string E00476 { + get { + return ResourceManager.GetString("E00476", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to IdentificativiFiscali è obbligatorio. + /// + internal static string IdentificativiFiscaliEObbligatorio { + get { + return ResourceManager.GetString("IdentificativiFiscaliEObbligatorio", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Valori consentiti {0}-{1}. + /// + internal static string ValidNumberRange_X_Y { + get { + return ResourceManager.GetString("ValidNumberRange_X_Y", resourceCulture); + } + } + } +} diff --git a/Resources/ValidatorMessages.de.resx b/Resources/ValidatorMessages.de.resx new file mode 100644 index 00000000..54ea1b43 --- /dev/null +++ b/Resources/ValidatorMessages.de.resx @@ -0,0 +1,114 @@ + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + IdFiscaleIVA und CodiceFiscale nicht ausgefüllt (mindestens eines der beiden muss ausgefüllt sein) + + + Nummer enthält keine numerischen Zeichen + + + DatiRitenuta nicht vorhanden, obwohl DatiCassaPrevidenziale.Ritenuta ausgefüllt ist + + + Datum liegt vor einem oder mehreren Daten in DatiFattureCollegate + + + Natura nicht vorhanden, obwohl Aliquota IVA gleich 0 ist + + + Natura mit Wert vom Typ 'N6' (Reverse-Charge) bei EsigiblitaIVA gleich 'S' (Split-Payment) + + + PrezzoTotale nicht gemäß den technischen Spezifikationen berechnet + + + Natura nicht vorhanden, obwohl Aliquota IVA gleich 0 ist + + + DatiRitenuta nicht vorhanden, obwohl mindestens ein DettaglioLinee-Block mit Ritenuta gleich SI vorhanden ist + + + ImponibileImporto nicht gemäß den technischen Spezifikationen berechnet + + + Im Dokumententyp 'TD21 Selbstfakturierung für Überschreitung des Höchstbetrags' müssen alle Detailzeilen einen Mehrwertsteuersatz ungleich 0 haben + + + Die Elemente IdPaese und IdPaese können nicht beide mit einem anderen Code als IT ausgefüllt sein + + + Für den angegebenen Wert im Element TipoDocumento muss das Element IdFiscaleIVA des Empfängers/Kommittenten vorhanden sein (die Dokumententypen TD16, TD17, TD18, TD19, TD20, TD22, TD23 und TD28 erfordern zwingend die Angabe der Mehrwertsteuernummer des Empfängers/Kommittenten) + + + Die Werte TD01, TD02, TD03, TD06, TD16, TD17, TD18, TD19, TD20, TD24, TD25 und TD28 des Dokumententyps erlauben nicht die Angabe derselben Person sowohl als Lieferant als auch als Empfänger + + + Die Werte TD21 und TD27 des Dokumententyps erlauben nicht die Angabe eines anderen Lieferanten als des Empfängers + + + Für den angegebenen Wert im Element TipoDocumento ist der Wert im Element IdPaese nicht zulässig (die Werte TD17, TD18, TD19 und TD28 des Dokumententyps erlauben nicht die Angabe eines italienischen Lieferanten. In den Fällen von TD17 und TD19 ist die Angabe des Wertes 'OO' im Element IdPaese für Transaktionen von in Livigno und Campione d'Italia ansässigen Personen zulässig.) + + + Alle Mehrwertsteuersätze in den Detailzeilen einer Rechnung oder in den Daten der Sozialversicherungskasse müssen auch in den Zusammenfassungsdaten vorhanden sein + + + Alle Werte der Natur der Operation in den Detailzeilen einer Rechnung oder in den Daten der Sozialversicherungskasse müssen auch in den Zusammenfassungsdaten vorhanden sein + + + Natura vorhanden, obwohl Aliquota IVA ungleich 0 ist (die Angabe eines Mehrwertsteuersatzes ungleich 0 qualifiziert die Operation als steuerpflichtig und daher ist die Angabe des Elements Natura nicht zulässig, außer im Fall, dass das Element TipoDocumento den Wert TD16 annimmt) + + + Natura vorhanden, obwohl Aliquota IVA ungleich 0 ist (die Angabe eines Mehrwertsteuersatzes ungleich 0 qualifiziert die Operation als steuerpflichtig und daher ist die Angabe des Elements Natura nicht zulässig, außer im Fall, dass das Element TipoDocumento den Wert TD16 annimmt) + + + Prozentsatz und Betrag nicht vorhanden, obwohl Typ ausgefüllt ist + + + Zulässige Werte {0}-{1} + + + DatiBeniServizi ist obligatorisch + + + IdentificativiFiscali ist obligatorisch + + + Datum liegt vor dem Datum der korrigierten Rechnung + + + Natura vorhanden, obwohl Aliquota IVA ungleich 0 ist + + + Die Angabe eines Mehrwertsteuersatzes von 0 erfordert die Angabe der Natur der Operation, die die Nichtbesteuerung rechtfertigt + + + Gesamtbetrag übersteigt das für vereinfachte Rechnungen gemäß DPR 633/72, Art. 21bis und DM vom 10. Mai 2019 vorgesehene Limit + + + Der Wert TD07 des Dokumententyps erlaubt nicht die Angabe derselben Person sowohl als Lieferant als auch als Empfänger + + + IdFiscaleIVA und CodiceFiscale nicht ausgefüllt (mindestens eines der beiden muss ausgefüllt sein) + + + DatiRiepilogo ist in der Korrespondenz mit einem Wert von DettaglioLinee.AliquiotaIVA oder DatiCassaPrevidenziale.AliquotaIVA nicht vorhanden + + diff --git a/Resources/ValidatorMessages.resx b/Resources/ValidatorMessages.resx new file mode 100644 index 00000000..bdc02537 --- /dev/null +++ b/Resources/ValidatorMessages.resx @@ -0,0 +1,114 @@ + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + IdFiscaleIVA e CodiceFiscale non valorizzati (almeno uno dei due deve essere valorizzato) + + + Numero non contiene caratteri numerici + + + DatiRitenuta non presente a fronte di DatiCassaPrevidenziale.Ritenuta valorizzato + + + Data antecedente a una o più date in DatiFattureCollegate + + + Natura non presente a fronte di Aliquota IVA pari a 0 + + + DatiRiepilogo non presente in corrispondenza di almeno un valore DettaglioLinee.AliquiotaIVA o DatiCassaPrevidenziale.AliquotaIVA + + + Natura con valore di tipo 'N6' (inversione contabile) a fronte EsigiblitaIVA uguale a 'S' (scissione pagamenti) + + + PrezzoTotale non calcolato secondo le specifiche tecniche + + + Natura non presente a fronte di Aliquota IVA pari a 0 + + + DatiRitenuta non presente a fronte di almeno un blocco DettaglioLinee con Ritenuta uguale a SI + + + ImponibileImporto non calcolato secondo le specifiche tecniche + + + Nel tipo documento ‘autofattura per splafonamento’ tutte le linee di dettaglio devo avere un’aliquota IVA diversa da zero + + + Gli elementi IdPaese e IdPaese non possono essere entrambi valorizzati con codice diverso da IT + + + Per il valore indicato nell’elemento TipoDocumento deve essere presente l’elemento IdFiscaleIVA del cessionario/committente (i tipi documento TD16, TD17, TD18, TD19, TD20, TD22, TD23 e TD28 prevedono obbligatoriamente la presenza della partita IVA del cessionario/committente) + + + I valori TD01, TD02, TD03, TD06, TD16, TD17, TD18, TD19, TD20, TD24, TD25 e TD28 del tipo documento non ammettono l’indicazione in fattura dello stesso soggetto sia come cedente che come cessionario + + + I valori TD21 e TD27 del tipo documento non ammettono l’indicazione in fattura di un cedente diverso dal cessionario + + + Per il valore indicato nell’elemento TipoDocumento il valore presente nell’elemento IdPaese non è ammesso (i valori TD17, TD18, TD19 e TD28 del tipo documento non ammettono l’indicazione in fattura di un cedente italiano. Nei casi di TD17 e TD19 è ammessa l’indicazione del valore ‘OO’ nell’elemento IdPaese per operazioni effettuate da soggetti residenti in Livigno e Campione d’Italia.) + + + Tutti i valori delle aliquote IVA presenti nelle linee di dettaglio di una fattura o nei dati di cassa previdenziale devono essere presenti anche nei dati di riepilogo + + + Tutti i valori di natura dell’operazione presenti nelle linee di dettaglio di una fattura o nei dati di cassa previdenziale devono essere presenti anche nei dati di riepilogo + + + Natura presente a fronte di Aliquota IVA diversa da zero (l’indicazione di un’aliquota IVA diversa da zero qualifica l’operazione come imponibile e quindi non è ammessa la presenza dell’elemento Natura, ad eccezione del caso in cui l’elemento TipoDocumento assume valore TD16) + + + Natura presente a fronte di Aliquota IVA diversa da zero (l’indicazione di un’aliquota IVA diversa da zero qualifica l’operazione come imponibile e quindi non è ammessa la presenza dell’elemento Natura, ad eccezione del caso in cui l’elemento TipoDocumento assume valore TD16) + + + Percentuale e Importo non presenti a fronte di Tipo valorizzato + + + Valori consentiti {0}-{1} + + + DatiBeniServizi è obbligatorio + + + IdentificativiFiscali è obbligatorio + + + Data antecedente a data fattura rettificata + + + Natura presente a fronte di Aliquota IVA diversa da zero + + + L’indicazione di un’aliquota IVA pari a zero obbliga all’indicazione della natura dell’operazione che giustifichi la non imponibilità della stessa + + + Importo totale superiore al limite previsto per le fatture semplificate ai sensi del DPR 633/72, art. 21bis e DM del 10 maggio 2019 + + + Il valore TD07 del tipo documento non ammette l’indicazione in fattura dello stesso soggetto sia come cedente che come cessionario + + + IdFiscaleIVA e CodiceFiscale non valorizzati (almeno uno dei due deve essere valorizzato) + + diff --git a/Validators/DatiAnagraficiCessionarioCommittenteValidator.cs b/Validators/DatiAnagraficiCessionarioCommittenteValidator.cs index aae74df4..881b9f95 100644 --- a/Validators/DatiAnagraficiCessionarioCommittenteValidator.cs +++ b/Validators/DatiAnagraficiCessionarioCommittenteValidator.cs @@ -1,5 +1,6 @@ using FluentValidation; using FatturaElettronica.Ordinaria.FatturaElettronicaHeader.CessionarioCommittente; +using FatturaElettronica.Resources; namespace FatturaElettronica.Validators { @@ -19,15 +20,13 @@ public DatiAnagraficiCessionarioCommittenteValidator() RuleFor(x => x.CodiceFiscale) .Must((challenge, _) => !(string.IsNullOrEmpty(challenge.CodiceFiscale) && challenge.IdFiscaleIVA.IsEmpty())) - .WithMessage( - "IdFiscaleIVA e CodiceFiscale non valorizzati (almeno uno dei due deve essere valorizzato)") + .WithMessage(ValidatorMessages.E00417) .WithErrorCode("00417"); RuleFor(x => x.IdFiscaleIVA) .Must((challenge, _) => !(string.IsNullOrEmpty(challenge.CodiceFiscale) && challenge.IdFiscaleIVA.IsEmpty())) - .WithMessage( - "IdFiscaleIVA e CodiceFiscale non valorizzati (almeno uno dei due deve essere valorizzato)") + .WithMessage(ValidatorMessages.E00417) .WithErrorCode("00417"); } } -} \ No newline at end of file +} diff --git a/Validators/DatiDDTValidator.cs b/Validators/DatiDDTValidator.cs index 08cce83a..6df48f2f 100644 --- a/Validators/DatiDDTValidator.cs +++ b/Validators/DatiDDTValidator.cs @@ -1,5 +1,6 @@ using FluentValidation; using FatturaElettronica.Ordinaria.FatturaElettronicaBody.DatiGenerali; +using FatturaElettronica.Resources; namespace FatturaElettronica.Validators { @@ -13,7 +14,7 @@ public DatiDDTValidator() .Length(1, 20); RuleForEach(x => x.RiferimentoNumeroLinea) .InclusiveBetween(1, 9999) - .WithMessage("Valori consentiti 1-9999"); + .WithMessage(string.Format(ValidatorMessages.ValidNumberRange_X_Y, 1, 9999)); } } } diff --git a/Validators/DatiDocumentoValidator.cs b/Validators/DatiDocumentoValidator.cs index b88136b9..07480778 100644 --- a/Validators/DatiDocumentoValidator.cs +++ b/Validators/DatiDocumentoValidator.cs @@ -1,4 +1,5 @@ using FatturaElettronica.Common; +using FatturaElettronica.Resources; using FluentValidation; namespace FatturaElettronica.Validators @@ -29,7 +30,7 @@ protected DatiDocumentoValidator() .When(x => !string.IsNullOrEmpty(x.CodiceCIG)); RuleForEach(x => x.RiferimentoNumeroLinea) .InclusiveBetween(1, 9999) - .WithMessage("Valori consentiti 1-9999"); + .WithMessage(string.Format(ValidatorMessages.ValidNumberRange_X_Y, 1, 9999)); } } -} \ No newline at end of file +} diff --git a/Validators/DatiGeneraliDocumentoValidator.cs b/Validators/DatiGeneraliDocumentoValidator.cs index 8d45174e..f4e4c86d 100644 --- a/Validators/DatiGeneraliDocumentoValidator.cs +++ b/Validators/DatiGeneraliDocumentoValidator.cs @@ -1,8 +1,10 @@ using FluentValidation; using FatturaElettronica.Ordinaria.FatturaElettronicaBody.DatiGenerali; -using FatturaElettronica.Tabelle; using System.Linq; using FatturaElettronica.Extensions; +using FatturaElettronica.Resources; +using Divisa = FatturaElettronica.Tabelle.Divisa; +using TipoDocumento = FatturaElettronica.Tabelle.TipoDocumento; namespace FatturaElettronica.Validators { @@ -22,7 +24,7 @@ public DatiGeneraliDocumentoValidator() .Length(1, 20); RuleFor(x => x.Numero) .Matches(@"\d") - .WithMessage("Numero non contiene caratteri numerici") + .WithMessage(ValidatorMessages.E00425) .WithErrorCode("00425"); RuleForEach(x => x.DatiRitenuta) .SetValidator(new DatiRitenutaValidator()); @@ -37,7 +39,7 @@ public DatiGeneraliDocumentoValidator() return (datiCassa.Count(a => a.Ritenuta == "SI") <= 0) || datiGeneraliDocumento.DatiRitenuta.Count > 0; }) - .WithMessage("DatiRitenuta non presente a fronte di DatiCassaPrevidenziale.Ritenuta valorizzato") + .WithMessage(ValidatorMessages.E00415) .WithErrorCode("00415"); RuleForEach(x => x.ScontoMaggiorazione) .SetValidator(new ScontoMaggiorazioneValidator()); @@ -52,4 +54,4 @@ public DatiGeneraliDocumentoValidator() .PrecisionScale(13, 2, false); } } -} \ No newline at end of file +} diff --git a/Validators/DatiGeneraliValidator.cs b/Validators/DatiGeneraliValidator.cs index a37f250f..1d9d7642 100644 --- a/Validators/DatiGeneraliValidator.cs +++ b/Validators/DatiGeneraliValidator.cs @@ -1,6 +1,7 @@ using System.Linq; using FluentValidation; using FatturaElettronica.Ordinaria.FatturaElettronicaBody.DatiGenerali; +using FatturaElettronica.Resources; namespace FatturaElettronica.Validators { @@ -15,7 +16,7 @@ public DatiGeneraliValidator() { return datigenerali.DatiFattureCollegate.All(fc => !(data < fc.Data)); }) - .WithMessage("Data antecedente a una o più date in DatiFattureCollegate") + .WithMessage(ValidatorMessages.E00418) .WithErrorCode("00418"); RuleForEach(x => x.DatiOrdineAcquisto) .SetValidator(new DatiOrdineAcquistoValidator()); @@ -39,4 +40,4 @@ public DatiGeneraliValidator() .SetValidator(new DatiSALValidator()); } } -} \ No newline at end of file +} diff --git a/Validators/DatiRiepilogoValidator.cs b/Validators/DatiRiepilogoValidator.cs index 347fc14f..19a65aff 100644 --- a/Validators/DatiRiepilogoValidator.cs +++ b/Validators/DatiRiepilogoValidator.cs @@ -1,8 +1,10 @@ using FluentValidation; using FatturaElettronica.Ordinaria.FatturaElettronicaBody.DatiBeniServizi; -using FatturaElettronica.Tabelle; using System; using FatturaElettronica.Extensions; +using FatturaElettronica.Resources; +using EsigibilitaIVA = FatturaElettronica.Tabelle.EsigibilitaIVA; +using Natura = FatturaElettronica.Tabelle.Natura; namespace FatturaElettronica.Validators { @@ -16,13 +18,12 @@ public DatiRiepilogoValidator() RuleFor(x => x.Natura) .Must(natura => !string.IsNullOrEmpty(natura)) .When(x => x.AliquotaIVA == 0) - .WithMessage("Natura non presente a fronte di Aliquota IVA pari a 0") + .WithMessage(ValidatorMessages.E00429) .WithErrorCode("00429"); RuleFor(x => x.Natura) .Must(natura => natura == null || !natura.StartsWith("N6")) .When(x => x.EsigibilitaIVA == "S") - .WithMessage( - "Natura con valore di tipo 'N6' (inversione contabile) a fronte EsigiblitaIVA uguale a 'S' (scissione pagamenti)") + .WithMessage(ValidatorMessages.E00420) .WithErrorCode("00420"); RuleFor(x => x.Imposta) .Must((challenge, _) => ImpostaValidateAgainstError00421(challenge)) @@ -51,4 +52,4 @@ private static bool ImpostaValidateAgainstError00421(DatiRiepilogo datiRiepilogo .ToString("0.00"))) <= 0.019m); } } -} \ No newline at end of file +} diff --git a/Validators/DatiSALValidator.cs b/Validators/DatiSALValidator.cs index d51739c8..d1779b4f 100644 --- a/Validators/DatiSALValidator.cs +++ b/Validators/DatiSALValidator.cs @@ -1,4 +1,5 @@ using FatturaElettronica.Ordinaria.FatturaElettronicaBody.DatiGenerali; +using FatturaElettronica.Resources; using FluentValidation; namespace FatturaElettronica.Validators; @@ -9,6 +10,6 @@ public DatiSALValidator() { RuleFor(x => x.RiferimentoFase) .InclusiveBetween(1, 999) - .WithMessage("Valori consentiti 1-999"); + .WithMessage(string.Format(ValidatorMessages.ValidNumberRange_X_Y, 1, 999)); } -} \ No newline at end of file +} diff --git a/Validators/DatiTrasportoValidator.cs b/Validators/DatiTrasportoValidator.cs index 33936b86..ea9d3a51 100644 --- a/Validators/DatiTrasportoValidator.cs +++ b/Validators/DatiTrasportoValidator.cs @@ -1,6 +1,7 @@ using FluentValidation; using FatturaElettronica.Ordinaria.FatturaElettronicaBody.DatiGenerali; -using FatturaElettronica.Tabelle; +using FatturaElettronica.Resources; +using TipoResa = FatturaElettronica.Tabelle.TipoResa; namespace FatturaElettronica.Validators { @@ -39,7 +40,7 @@ public DatiTrasportoValidator() .LessThanOrEqualTo(9999.99m); RuleFor(x=>x.NumeroColli) .InclusiveBetween(1,9999) - .WithMessage("Valori consentiti 1-9999"); + .WithMessage(string.Format(ValidatorMessages.ValidNumberRange_X_Y, 1, 9999)); } } -} \ No newline at end of file +} diff --git a/Validators/DettaglioLineeValidator.cs b/Validators/DettaglioLineeValidator.cs index 29a0d93a..0b643b53 100644 --- a/Validators/DettaglioLineeValidator.cs +++ b/Validators/DettaglioLineeValidator.cs @@ -1,8 +1,10 @@ using System; using FatturaElettronica.Extensions; using FatturaElettronica.Ordinaria.FatturaElettronicaBody.DatiBeniServizi; -using FatturaElettronica.Tabelle; +using FatturaElettronica.Resources; using FluentValidation; +using Natura = FatturaElettronica.Tabelle.Natura; +using TipoCessionePrestazione = FatturaElettronica.Tabelle.TipoCessionePrestazione; namespace FatturaElettronica.Validators { @@ -12,7 +14,7 @@ public DettaglioLineeValidator() { RuleFor(x => x.NumeroLinea) .InclusiveBetween(1, 9999) - .WithMessage("Valori consentiti 1-9999"); + .WithMessage(string.Format(ValidatorMessages.ValidNumberRange_X_Y, 1, 9999)); RuleFor(x => x.TipoCessionePrestazione) .SetValidator(new IsValidValidator()) .When(x => !string.IsNullOrEmpty(x.TipoCessionePrestazione)); @@ -29,7 +31,7 @@ public DettaglioLineeValidator() .SetValidator(new ScontoMaggiorazioneValidator()); RuleFor(x => x.PrezzoTotale) .Must((dettaglioLinee, _) => PrezzoTotaleValidateAgainstError00423(dettaglioLinee)) - .WithMessage("PrezzoTotale non calcolato secondo le specifiche tecniche") + .WithMessage(ValidatorMessages.E00423) .WithErrorCode("00423"); RuleFor(x => x.Ritenuta) .Equal("SI") @@ -40,7 +42,7 @@ public DettaglioLineeValidator() RuleFor(x => x.Natura) .Must(natura => !string.IsNullOrEmpty(natura)) .When(x => x.AliquotaIVA == 0) - .WithMessage("Natura non presente a fronte di Aliquota IVA pari a 0") + .WithMessage(ValidatorMessages.E00400) .WithErrorCode("00400"); RuleFor(x => x.RiferimentoAmministrazione) .Length(1, 20) @@ -80,4 +82,4 @@ private static bool PrezzoTotaleValidateAgainstError00423(DettaglioLinee challen - prezzo * (challenge.Quantita ?? 1)) <= 0.019m; } } -} \ No newline at end of file +} diff --git a/Validators/DettaglioPagamentoValidator.cs b/Validators/DettaglioPagamentoValidator.cs index 92416d78..a3037b0a 100644 --- a/Validators/DettaglioPagamentoValidator.cs +++ b/Validators/DettaglioPagamentoValidator.cs @@ -1,7 +1,8 @@ using FatturaElettronica.Extensions; using FluentValidation; using FatturaElettronica.Ordinaria.FatturaElettronicaBody.DatiPagamento; -using FatturaElettronica.Tabelle; +using FatturaElettronica.Resources; +using ModalitaPagamento = FatturaElettronica.Tabelle.ModalitaPagamento; namespace FatturaElettronica.Validators { @@ -63,7 +64,7 @@ public DettaglioPagamentoValidator() .ScalePrecision2DecimalType(); RuleFor(x => x.GiorniTerminiPagamento) .InclusiveBetween(0, 999) - .WithMessage("Valori consentiti 0-999"); + .WithMessage(string.Format(ValidatorMessages.ValidNumberRange_X_Y, 1, 999)); } } -} \ No newline at end of file +} diff --git a/Validators/FatturaElettronicaBodyValidator.cs b/Validators/FatturaElettronicaBodyValidator.cs index 03aced97..99405bee 100644 --- a/Validators/FatturaElettronicaBodyValidator.cs +++ b/Validators/FatturaElettronicaBodyValidator.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using FatturaElettronica.Ordinaria.FatturaElettronicaBody; +using FatturaElettronica.Resources; using FluentValidation; namespace FatturaElettronica.Validators @@ -15,26 +16,24 @@ public FatturaElettronicaBodyValidator() RuleFor(x => x.DatiBeniServizi) .SetValidator(new DatiBeniServiziValidator()); RuleFor(x => x.DatiBeniServizi) - .Must(x => !x.IsEmpty()).WithMessage("DatiBeniServizi è obbligatorio"); + .Must(x => !x.IsEmpty()).WithMessage(ValidatorMessages.DatiBeniServiziEObbligatorio); RuleFor(x => x.DatiGenerali.DatiGeneraliDocumento.DatiRitenuta) .Must((body, _) => DatiRitenutaAgainstDettaglioLinee(body)) .When(x => x.DatiGenerali.DatiGeneraliDocumento.DatiRitenuta.Count == 0) - .WithMessage( - "DatiRitenuta non presente a fronte di almeno un blocco DettaglioLinee con Ritenuta uguale a SI") + .WithMessage(ValidatorMessages.E00411) .WithErrorCode("00411"); RuleFor(x => x.DatiBeniServizi.DatiRiepilogo) .Must((body, _) => DatiRiepilogoValidateAgainstError00422(body)) - .WithMessage("ImponibileImporto non calcolato secondo le specifiche tecniche") + .WithMessage(ValidatorMessages.E00422) .WithErrorCode("00422"); RuleFor(x => x.DatiBeniServizi.DatiRiepilogo) .Must((body, _) => DatiRiepilogoValidateAgainstError00419(body)) - .WithMessage( - "DatiRiepilogo non presente in corrispondenza di almeno un valore DettaglioLinee.AliquiotaIVA o DatiCassaPrevidenziale.AliquotaIVA") + .WithMessage(ValidatorMessages.E00419) .WithErrorCode("00419"); RuleFor(x => x.DatiGenerali.DatiGeneraliDocumento.TipoDocumento) .Must((body, _) => body.DatiBeniServizi.DettaglioLinee.All(linea => linea.AliquotaIVA != 0)) .When(x => x.DatiGenerali.DatiGeneraliDocumento.TipoDocumento == "TD21") - .WithMessage("Nel tipo documento ‘autofattura per splafonamento’ tutte le linee di dettaglio devo avere un’aliquota IVA diversa da zero") + .WithMessage(ValidatorMessages.E00474) .WithErrorCode("00474"); RuleFor(x => x.DatiVeicoli) .SetValidator(new DatiVeicoliValidator()) @@ -102,4 +101,4 @@ private class Totals public decimal ImportoContrCassa; } } -} \ No newline at end of file +} diff --git a/Validators/FatturaElettronicaHeaderValidator.cs b/Validators/FatturaElettronicaHeaderValidator.cs index 05133e8b..b82c36d4 100644 --- a/Validators/FatturaElettronicaHeaderValidator.cs +++ b/Validators/FatturaElettronicaHeaderValidator.cs @@ -1,6 +1,7 @@ using FatturaElettronica.Ordinaria.FatturaElettronicaHeader; -using FatturaElettronica.Tabelle; +using FatturaElettronica.Resources; using FluentValidation; +using SoggettoEmittente = FatturaElettronica.Tabelle.SoggettoEmittente; namespace FatturaElettronica.Validators { @@ -30,8 +31,7 @@ public FatturaElettronicaHeaderValidator() .WithErrorCode("00313"); RuleFor(x => x) .Must((header, _) => HeaderValidateAgainstError00476(header)) - .WithMessage( - "Gli elementi IdPaese e IdPaese non possono essere entrambi valorizzati con codice diverso da IT") + .WithMessage(ValidatorMessages.E00476) .WithErrorCode("00476"); } @@ -47,4 +47,4 @@ header.CessionarioCommittente.DatiAnagrafici.IdFiscaleIVA is null || return idCedente == "IT" || idCommittente is "IT" or ""; } } -} \ No newline at end of file +} diff --git a/Validators/FatturaOrdinariaValidator.cs b/Validators/FatturaOrdinariaValidator.cs index 91ff0f6a..0f49648a 100644 --- a/Validators/FatturaOrdinariaValidator.cs +++ b/Validators/FatturaOrdinariaValidator.cs @@ -2,6 +2,7 @@ using System.Linq; using FatturaElettronica.Ordinaria; using FatturaElettronica.Ordinaria.FatturaElettronicaBody; +using FatturaElettronica.Resources; using FluentValidation; namespace FatturaElettronica.Validators @@ -14,45 +15,37 @@ public FatturaOrdinariaValidator() .SetValidator(new FatturaElettronicaHeaderValidator()); RuleFor(x => x) .Must((fattura, _) => FatturaValidateAgainstError00475(fattura)) - .WithMessage( - "Per il valore indicato nell’elemento TipoDocumento deve essere presente l’elemento IdFiscaleIVA del cessionario/committente (i tipi documento TD16, TD17, TD18, TD19, TD20, TD22, TD23 e TD28 prevedono obbligatoriamente la presenza della partita IVA del cessionario/committente)") + .WithMessage(ValidatorMessages.E00475) .WithErrorCode("00475"); RuleFor(x => x) .Must((fattura, _) => FatturaValidateAgainstError00471(fattura)) - .WithMessage( - "I valori TD01, TD02, TD03, TD06, TD16, TD17, TD18, TD19, TD20, TD24, TD25 e TD28 del tipo documento non ammettono l’indicazione in fattura dello stesso soggetto sia come cedente che come cessionario") + .WithMessage(ValidatorMessages.E00471) .WithErrorCode("00471"); RuleFor(x => x) .Must((fattura, _) => FatturaValidateAgainstError00472(fattura)) - .WithMessage( - "I valori TD21 e TD27 del tipo documento non ammettono l’indicazione in fattura di un cedente diverso dal cessionario") + .WithMessage(ValidatorMessages.E00472) .WithErrorCode("00472"); RuleFor(x => x) .Must((fattura, _) => FatturaValidateAgainstError00473(fattura)) - .WithMessage( - "Per il valore indicato nell’elemento TipoDocumento il valore presente nell’elemento IdPaese non è ammesso (i valori TD17, TD18, TD19 e TD28 del tipo documento non ammettono l’indicazione in fattura di un cedente italiano. Nei casi di TD17 e TD19 è ammessa l’indicazione del valore ‘OO’ nell’elemento IdPaese per operazioni effettuate da soggetti residenti in Livigno e Campione d’Italia.)") + .WithMessage(ValidatorMessages.E00473) .WithErrorCode("00473"); RuleForEach(x => x.FatturaElettronicaBody) .SetValidator(new FatturaElettronicaBodyValidator()); RuleForEach(x => x.FatturaElettronicaBody) .Must((_, body) => BodyValidateAgainstError00443(body)) - .WithMessage( - "Tutti i valori delle aliquote IVA presenti nelle linee di dettaglio di una fattura o nei dati di cassa previdenziale devono essere presenti anche nei dati di riepilogo") + .WithMessage(ValidatorMessages.E00443) .WithErrorCode("00443"); RuleForEach(x => x.FatturaElettronicaBody) .Must((_, body) => BodyValidateAgainstError00444(body)) - .WithMessage( - "Tutti i valori di natura dell’operazione presenti nelle linee di dettaglio di una fattura o nei dati di cassa previdenziale devono essere presenti anche nei dati di riepilogo") + .WithMessage(ValidatorMessages.E00444) .WithErrorCode("00444"); RuleForEach(x => x.FatturaElettronicaBody) .Must((_, body) => BodyValidateAgainstError00401(body)) - .WithMessage( - "Natura presente a fronte di Aliquota IVA diversa da zero (l’indicazione di un’aliquota IVA diversa da zero qualifica l’operazione come imponibile e quindi non è ammessa la presenza dell’elemento Natura, ad eccezione del caso in cui l’elemento TipoDocumento assume valore TD16)") + .WithMessage(ValidatorMessages.E00401) .WithErrorCode("00401"); RuleForEach(x => x.FatturaElettronicaBody) .Must((_, body) => BodyValidateAgainstError00430(body)) - .WithMessage( - "Natura presente a fronte di Aliquota IVA diversa da zero (l’indicazione di un’aliquota IVA diversa da zero qualifica l’operazione come imponibile e quindi non è ammessa la presenza dell’elemento Natura, ad eccezione del caso in cui l’elemento TipoDocumento assume valore TD16)") + .WithMessage(ValidatorMessages.E00430) .WithErrorCode("00430"); } @@ -180,4 +173,4 @@ private bool BodyValidateAgainstError00430(FatturaElettronicaBody body) x.AliquotaIVA == 0 && !string.IsNullOrEmpty(x.Natura)); } } -} \ No newline at end of file +} diff --git a/Validators/ScontoMaggiorazioneValidator.cs b/Validators/ScontoMaggiorazioneValidator.cs index 94616c83..17195d72 100644 --- a/Validators/ScontoMaggiorazioneValidator.cs +++ b/Validators/ScontoMaggiorazioneValidator.cs @@ -1,6 +1,7 @@ using FluentValidation; -using FatturaElettronica.Common; using FatturaElettronica.Extensions; +using FatturaElettronica.Resources; +using ScontoMaggiorazione = FatturaElettronica.Common.ScontoMaggiorazione; namespace FatturaElettronica.Validators { @@ -13,7 +14,7 @@ public ScontoMaggiorazioneValidator() .SetValidator(new IsValidValidator()); RuleFor(x => x.Tipo) .Must((challenge, _) => challenge.Importo != null || challenge.Percentuale != null) - .WithMessage("Percentuale e Importo non presenti a fronte di Tipo valorizzato") + .WithMessage(ValidatorMessages.E00437) .WithErrorCode("00437"); RuleFor(x => x.Importo) .ScalePrecision8DecimalType(); @@ -21,4 +22,4 @@ public ScontoMaggiorazioneValidator() .ScalePrecisionPercentualeDecimalType(); } } -} \ No newline at end of file +} diff --git a/Validators/Semplificata/CessionarioCommittenteValidator.cs b/Validators/Semplificata/CessionarioCommittenteValidator.cs index d39b871c..79f593e0 100644 --- a/Validators/Semplificata/CessionarioCommittenteValidator.cs +++ b/Validators/Semplificata/CessionarioCommittenteValidator.cs @@ -1,4 +1,5 @@ -using FatturaElettronica.Semplificata.FatturaElettronicaHeader.CessionarioCommittente; +using FatturaElettronica.Resources; +using FatturaElettronica.Semplificata.FatturaElettronicaHeader.CessionarioCommittente; using FluentValidation; namespace FatturaElettronica.Validators.Semplificata @@ -10,10 +11,10 @@ public CessionarioCommittenteValidator() RuleFor(x => x.IdentificativiFiscali) .SetValidator(new IdentificativiFiscaliValidator()); RuleFor(x => x.IdentificativiFiscali) - .Must(x => !x.IsEmpty()).WithMessage("IdentificativiFiscali è obbligatorio"); + .Must(x => !x.IsEmpty()).WithMessage(ValidatorMessages.IdentificativiFiscaliEObbligatorio); RuleFor(x => x.AltriDatiIdentificativi) .SetValidator(new AltriDatiIdentificativiValidator()) .When(x => x.AltriDatiIdentificativi != null && !x.AltriDatiIdentificativi.IsEmpty()); } } -} \ No newline at end of file +} diff --git a/Validators/Semplificata/DatiBeniServiziValidator.cs b/Validators/Semplificata/DatiBeniServiziValidator.cs index 7969407c..c6c6c38d 100644 --- a/Validators/Semplificata/DatiBeniServiziValidator.cs +++ b/Validators/Semplificata/DatiBeniServiziValidator.cs @@ -1,6 +1,7 @@ -using FatturaElettronica.Semplificata.FatturaElettronicaBody.DatiBeniServizi; -using FatturaElettronica.Tabelle; +using FatturaElettronica.Resources; +using FatturaElettronica.Semplificata.FatturaElettronicaBody.DatiBeniServizi; using FluentValidation; +using NaturaSemplificata = FatturaElettronica.Tabelle.NaturaSemplificata; namespace FatturaElettronica.Validators.Semplificata { @@ -19,13 +20,12 @@ public DatiBeniServiziValidator() RuleFor(x => x.Natura) .Must(natura => !string.IsNullOrEmpty(natura)) .When(x => x.DatiIVA.Aliquota == 0m && x.DatiIVA.Imposta == 0m) - .WithMessage( - "L’indicazione di un’aliquota IVA pari a zero obbliga all’indicazione della natura dell’operazione che giustifichi la non imponibilità della stessa") + .WithMessage(ValidatorMessages.E00400_S) .WithErrorCode("00400"); RuleFor(x => x.Natura) .Must(string.IsNullOrEmpty) .When(x => x.DatiIVA.Aliquota > 0m || x.DatiIVA.Imposta > 0m) - .WithMessage("Natura presente a fronte di Aliquota IVA diversa da zero") + .WithMessage(ValidatorMessages.E00401_S) .WithErrorCode("00401"); RuleFor(x => x.Natura) .SetValidator(new IsValidValidator()) @@ -36,4 +36,4 @@ public DatiBeniServiziValidator() .When(x => !string.IsNullOrEmpty(x.RiferimentoNormativo)); } } -} \ No newline at end of file +} diff --git a/Validators/Semplificata/DatiGeneraliDocumentoValidator.cs b/Validators/Semplificata/DatiGeneraliDocumentoValidator.cs index 1f44b029..5a61b961 100644 --- a/Validators/Semplificata/DatiGeneraliDocumentoValidator.cs +++ b/Validators/Semplificata/DatiGeneraliDocumentoValidator.cs @@ -1,6 +1,8 @@ -using FatturaElettronica.Semplificata.FatturaElettronicaBody.DatiGenerali; -using FatturaElettronica.Tabelle; +using FatturaElettronica.Resources; +using FatturaElettronica.Semplificata.FatturaElettronicaBody.DatiGenerali; using FluentValidation; +using Divisa = FatturaElettronica.Tabelle.Divisa; +using TipoDocumentoSemplificata = FatturaElettronica.Tabelle.TipoDocumentoSemplificata; namespace FatturaElettronica.Validators.Semplificata { @@ -20,11 +22,11 @@ public DatiGeneraliDocumentoValidator() .Length(1, 20); RuleFor(x => x.Numero) .Matches(@"\d") - .WithMessage("Numero non contiene caratteri numerici") + .WithMessage(ValidatorMessages.E00425) .WithErrorCode("00425"); RuleFor(x => x.BolloVirtuale) .Equal("SI") .When(x => x.BolloVirtuale != null); } } -} \ No newline at end of file +} diff --git a/Validators/Semplificata/DatiGeneraliValidator.cs b/Validators/Semplificata/DatiGeneraliValidator.cs index 8eecc931..46bac468 100644 --- a/Validators/Semplificata/DatiGeneraliValidator.cs +++ b/Validators/Semplificata/DatiGeneraliValidator.cs @@ -1,4 +1,5 @@ -using FatturaElettronica.Semplificata.FatturaElettronicaBody.DatiGenerali; +using FatturaElettronica.Resources; +using FatturaElettronica.Semplificata.FatturaElettronicaBody.DatiGenerali; using FluentValidation; namespace FatturaElettronica.Validators.Semplificata @@ -14,9 +15,9 @@ public DatiGeneraliValidator() .When(x => x.DatiFatturaRettificata != null && !x.DatiFatturaRettificata.IsEmpty()); RuleFor(x => x.DatiFatturaRettificata.DataFR) .Must((datigenerali, data) => datigenerali.DatiGeneraliDocumento.Data >= data) - .WithMessage("Data antecedente a data fattura rettificata") + .WithMessage(ValidatorMessages.E00418_S) .WithErrorCode("00418") .When(x => !x.DatiFatturaRettificata.IsEmpty()); } } -} \ No newline at end of file +} diff --git a/Validators/Semplificata/FatturaElettronicaBodyValidator.cs b/Validators/Semplificata/FatturaElettronicaBodyValidator.cs index 5ce476d1..98e287af 100644 --- a/Validators/Semplificata/FatturaElettronicaBodyValidator.cs +++ b/Validators/Semplificata/FatturaElettronicaBodyValidator.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using FatturaElettronica.Resources; using FatturaElettronica.Semplificata.FatturaElettronicaBody; using FatturaElettronica.Semplificata.FatturaElettronicaBody.DatiBeniServizi; using FluentValidation; @@ -15,12 +16,11 @@ public FatturaElettronicaBodyValidator() RuleForEach(x => x.DatiBeniServizi) .SetValidator(new DatiBeniServiziValidator()); RuleFor(x => x.DatiBeniServizi) - .NotEmpty().WithMessage("DatiBeniServizi è obbligatorio"); + .NotEmpty().WithMessage(ValidatorMessages.DatiBeniServiziEObbligatorio); RuleFor(x => x.DatiBeniServizi) .Must(ImportoTotaleValidateAgainstError00460) - .WithMessage( - "Importo totale superiore al limite previsto per le fatture semplificate ai sensi del DPR 633/72, art. 21bis e DM del 10 maggio 2019") + .WithMessage(ValidatorMessages.E00460) .WithErrorCode("00460"); RuleForEach(x => x.Allegati) @@ -40,4 +40,4 @@ private static bool ImportoTotaleValidateAgainstError00460(FatturaElettronicaBod return true; } } -} \ No newline at end of file +} diff --git a/Validators/Semplificata/FatturaElettronicaHeaderValidator.cs b/Validators/Semplificata/FatturaElettronicaHeaderValidator.cs index dc01d29a..a60c9c3e 100644 --- a/Validators/Semplificata/FatturaElettronicaHeaderValidator.cs +++ b/Validators/Semplificata/FatturaElettronicaHeaderValidator.cs @@ -1,6 +1,7 @@ -using FatturaElettronica.Semplificata.FatturaElettronicaHeader; -using FatturaElettronica.Tabelle; +using FatturaElettronica.Resources; +using FatturaElettronica.Semplificata.FatturaElettronicaHeader; using FluentValidation; +using SoggettoEmittente = FatturaElettronica.Tabelle.SoggettoEmittente; namespace FatturaElettronica.Validators.Semplificata { @@ -19,8 +20,7 @@ public FatturaElettronicaHeaderValidator() .When(x => !string.IsNullOrEmpty(x.SoggettoEmittente)); RuleFor(x => x) .Must((header, _) => HeaderValidateAgainstError00476(header)) - .WithMessage( - "Gli elementi IdPaese e IdPaese non possono essere entrambi valorizzati con codice diverso da IT") + .WithMessage(ValidatorMessages.E00476) .WithErrorCode("00476"); } @@ -36,4 +36,4 @@ header.CessionarioCommittente.IdentificativiFiscali.IdFiscaleIVA is null || return idCedente == "IT" || idCommittente is "IT" or ""; } } -} \ No newline at end of file +} diff --git a/Validators/Semplificata/FatturaSemplificataValidator.cs b/Validators/Semplificata/FatturaSemplificataValidator.cs index 818ef001..440e3982 100644 --- a/Validators/Semplificata/FatturaSemplificataValidator.cs +++ b/Validators/Semplificata/FatturaSemplificataValidator.cs @@ -1,4 +1,5 @@ using System.Linq; +using FatturaElettronica.Resources; using FatturaElettronica.Semplificata; using FluentValidation; @@ -14,8 +15,7 @@ public FatturaSemplificataValidator() .SetValidator(new FatturaElettronicaBodyValidator()); RuleFor(x => x) .Must((fattura, _) => FatturaValidateAgainstError00471(fattura)) - .WithMessage( - "Il valore TD07 del tipo documento non ammette l’indicazione in fattura dello stesso soggetto sia come cedente che come cessionario") + .WithMessage(ValidatorMessages.E00471_S) .WithErrorCode("00471"); } @@ -30,4 +30,4 @@ private static bool FatturaValidateAgainstError00471(FatturaSemplificata fattura x.DatiGenerali.DatiGeneraliDocumento.TipoDocumento != "TD07"); } } -} \ No newline at end of file +} diff --git a/Validators/Semplificata/IdentificativiFiscaliValidator.cs b/Validators/Semplificata/IdentificativiFiscaliValidator.cs index d93042eb..1650d7a8 100644 --- a/Validators/Semplificata/IdentificativiFiscaliValidator.cs +++ b/Validators/Semplificata/IdentificativiFiscaliValidator.cs @@ -1,4 +1,5 @@ -using FatturaElettronica.Semplificata.FatturaElettronicaHeader.CessionarioCommittente; +using FatturaElettronica.Resources; +using FatturaElettronica.Semplificata.FatturaElettronicaHeader.CessionarioCommittente; using FluentValidation; namespace FatturaElettronica.Validators.Semplificata @@ -16,15 +17,13 @@ public IdentificativiFiscaliValidator() RuleFor(x => x.CodiceFiscale) .Must((challenge, _) => !(string.IsNullOrEmpty(challenge.CodiceFiscale) && challenge.IdFiscaleIVA.IsEmpty())) - .WithMessage( - "IdFiscaleIVA e CodiceFiscale non valorizzati (almeno uno dei due deve essere valorizzato)") + .WithMessage(ValidatorMessages.E00417_S) .WithErrorCode("00417"); RuleFor(x => x.IdFiscaleIVA) .Must((challenge, _) => !(string.IsNullOrEmpty(challenge.CodiceFiscale) && challenge.IdFiscaleIVA.IsEmpty())) - .WithMessage( - "IdFiscaleIVA e CodiceFiscale non valorizzati (almeno uno dei due deve essere valorizzato)") + .WithMessage(ValidatorMessages.E00417_S) .WithErrorCode("00417"); } } -} \ No newline at end of file +}