ZUGFeRDRESTService: add validation for valid properties

This commit is contained in:
Jonathan Jenne 2023-06-21 13:12:43 +02:00
parent ac336ce94d
commit 36326ba644

View File

@ -10,6 +10,7 @@ using static DigitalData.Modules.Interfaces.ZUGFeRDInterface;
using static DigitalData.Modules.Interfaces.PropertyValues; using static DigitalData.Modules.Interfaces.PropertyValues;
using System.Data.SqlClient; using System.Data.SqlClient;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using FirebirdSql.Data.FirebirdClient;
namespace ZUGFeRDRESTService.Controllers namespace ZUGFeRDRESTService.Controllers
{ {
@ -132,7 +133,7 @@ namespace ZUGFeRDRESTService.Controllers
{ {
_logger.Info("Start processing request to ValidationController"); _logger.Info("Start processing request to ValidationController");
ZugferdResult oZugferdResult; ZugferdResult oZugferdResult = null;
CheckPropertyValuesResult oPropertyResult = new CheckPropertyValuesResult(); CheckPropertyValuesResult oPropertyResult = new CheckPropertyValuesResult();
try try
@ -153,6 +154,8 @@ namespace ZUGFeRDRESTService.Controllers
oZugferdResult = _zugferd.ExtractZUGFeRDFileWithGDPicture(oStream); oZugferdResult = _zugferd.ExtractZUGFeRDFileWithGDPicture(oStream);
_logger.Info("Detected Specification was: [{0}]", oZugferdResult.Specification); _logger.Info("Detected Specification was: [{0}]", oZugferdResult.Specification);
var oFilteredPropertyMap = _zugferd.FilterPropertyMap(_propertyMap, oZugferdResult.Specification); var oFilteredPropertyMap = _zugferd.FilterPropertyMap(_propertyMap, oZugferdResult.Specification);
@ -187,6 +190,13 @@ namespace ZUGFeRDRESTService.Controllers
throw new ZUGFeRDExecption(ErrorType.MissingProperties, "Missing Properties"); throw new ZUGFeRDExecption(ErrorType.MissingProperties, "Missing Properties");
} }
oZugferdResult = _zugferd.ValidateZUGFeRDDocument(oZugferdResult);
if (oZugferdResult.ValidationErrors.Any())
{
throw new ZUGFeRDExecption(ErrorType.ValidationFailed, "Validation Failed");
}
Tuple<bool, string> oValidateResult = ValidateBuyerOrderReference(oPropertyResult.ValidProperties); Tuple<bool, string> oValidateResult = ValidateBuyerOrderReference(oPropertyResult.ValidProperties);
if (oValidateResult.Item1 == false) if (oValidateResult.Item1 == false)
@ -234,6 +244,7 @@ namespace ZUGFeRDRESTService.Controllers
ErrorType.MissingProperties => "Die hochgeladene Datei ist keine gültige ZUGFeRD-Rechnung, es fehlen einige Metadaten.", ErrorType.MissingProperties => "Die hochgeladene Datei ist keine gültige ZUGFeRD-Rechnung, es fehlen einige Metadaten.",
ErrorType.FileTooBig => string.Format("Die hochgeladene Datei überschreitet die zulässige Dateigröße [{0}].", _MaxFileSizeInMegabytes), ErrorType.FileTooBig => string.Format("Die hochgeladene Datei überschreitet die zulässige Dateigröße [{0}].", _MaxFileSizeInMegabytes),
ErrorType.UnsupportedFormat => "Die hochgeladene Datei enthält ein falsches oder nicht unterstütztes ZUGFeRD Format.", ErrorType.UnsupportedFormat => "Die hochgeladene Datei enthält ein falsches oder nicht unterstütztes ZUGFeRD Format.",
ErrorType.ValidationFailed => "Die hochgeladene Datei enthält ungültige Werte.",
_ => "Die hochgeladene Datei kann nicht validiert werden.", _ => "Die hochgeladene Datei kann nicht validiert werden.",
}; };
@ -242,9 +253,12 @@ namespace ZUGFeRDRESTService.Controllers
{ {
// Errors contains the list of missing fields // Errors contains the list of missing fields
ErrorType.MissingProperties => oPropertyResult.MissingProperties, ErrorType.MissingProperties => oPropertyResult.MissingProperties,
ErrorType.ValidationFailed => oZugferdResult.ValidationErrors.Select(e =>
{
return $"Element '{e.ElementName}' mit Wert '{e.ElementValue}': {e.ErrorMessage}";
}).ToList(),
_ => new List<string>() _ => new List<string>()
}; };
_logger.Info($"Responding with message: [{oMessage}]"); _logger.Info($"Responding with message: [{oMessage}]");
return new ValidationResponse() return new ValidationResponse()