ZUGFeRD REST Service: LanguageID in HTTPPost-Methode

This commit is contained in:
2026-03-17 10:30:08 +01:00
parent 6936d45209
commit 64ae4e9c76
2 changed files with 69 additions and 12 deletions

View File

@@ -1,6 +1,7 @@
using DigitalData.Modules.Interfaces; using DigitalData.Modules.Interfaces;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -47,7 +48,14 @@ namespace ZUGFeRDRESTService.Controllers
public const string REFERENCES_Rejection_30012 = "REFERENCES_Rejection_30012"; public const string REFERENCES_Rejection_30012 = "REFERENCES_Rejection_30012";
public const string AMOUNT_CALC_REJECTION = "AMOUNT_CALC_REJECTION"; public const string AMOUNT_CALC_REJECTION = "AMOUNT_CALC_REJECTION";
public const string GERMAN = "de-DE";
public const string ENGLISH = "en-US";
public const string FRENCH = "fr-FR";
public const string SPAIN = "es-ES";
private List<string> _ValidationErrors; private List<string> _ValidationErrors;
private List<string> _AllowedLanguageCodes;
private string _UserLanguageCode = "de-DE";
private const int MAX_FILE_SIZE_DEFAULT = 25; private const int MAX_FILE_SIZE_DEFAULT = 25;
@@ -128,6 +136,14 @@ namespace ZUGFeRDRESTService.Controllers
AMOUNT_CALC_REJECTION AMOUNT_CALC_REJECTION
}; };
_AllowedLanguageCodes = new List<string>()
{
GERMAN,
ENGLISH,
FRENCH,
SPAIN,
};
_logger.Debug("Validation Controller initialized!"); _logger.Debug("Validation Controller initialized!");
} }
@@ -191,14 +207,41 @@ namespace ZUGFeRDRESTService.Controllers
/// </summary> /// </summary>
/// <param name="file">This parameter's name needs to correspond to the html form's file-input name</param> /// <param name="file">This parameter's name needs to correspond to the html form's file-input name</param>
/// <param name="user_id">This is the email address which the user supplied</param> /// <param name="user_id">This is the email address which the user supplied</param>
/// <param name="language_id">This is language code which the user supplied (en-US, de-DE)</param>
[HttpPost] [HttpPost]
public ValidationResponse Post(IFormFile file, string user_id) public ValidationResponse Post(IFormFile file, string user_id, string language_id = null)
{ {
_logger.Info("Start processing request to ValidationController"); _logger.Info("Start processing request to ValidationController");
ZugferdResult oZugferdResult = null; ZugferdResult oZugferdResult = null;
CheckPropertyValuesResult oPropertyResult = new CheckPropertyValuesResult(); CheckPropertyValuesResult oPropertyResult = new CheckPropertyValuesResult();
if (!string.IsNullOrEmpty(user_id))
{
_logger.Info("UserID set to [{0}].", user_id);
}
else
{
_logger.Info("UserID is empty!");
}
if (string.IsNullOrEmpty(language_id))
{
_logger.Info("Language code was empty. Set to default 'de-DE'");
// DEFAULT-Sprache = Deutsch de-DE
_UserLanguageCode = GERMAN;
}
else if (_AllowedLanguageCodes.Contains(language_id))
{
_logger.Info("Language code is allowed. Set to [{0}].", language_id);
_UserLanguageCode = language_id;
}
else
{
_logger.Info("Language code was unknown: [{0}]. Set to default 'de-DE'", language_id);
_UserLanguageCode = GERMAN;
}
try try
{ {
using Stream oStream = file.OpenReadStream(); using Stream oStream = file.OpenReadStream();
@@ -299,7 +342,7 @@ namespace ZUGFeRDRESTService.Controllers
}; };
} }
} }
} }
catch (ZUGFeRDExecption ex) catch (ZUGFeRDExecption ex)
{ {
@@ -611,7 +654,7 @@ namespace ZUGFeRDRESTService.Controllers
return oReplaceParam1; return oReplaceParam1;
} }
public string GetMessageId() private string GetMessageId()
{ {
return $"{Guid.NewGuid()}@{MESSAGEID_DOMAIN}"; return $"{Guid.NewGuid()}@{MESSAGEID_DOMAIN}";
} }
@@ -772,7 +815,7 @@ namespace ZUGFeRDRESTService.Controllers
return oDataTable; return oDataTable;
} }
public bool DeleteExistingPropertyValues(string pMessageId) private bool DeleteExistingPropertyValues(string pMessageId)
{ {
try try
{ {
@@ -816,18 +859,15 @@ namespace ZUGFeRDRESTService.Controllers
return true; return true;
} }
/// <summary> /// <summary>
/// Ermittelt die Ausgabe-nachricht für einen Fehlercode /// Ermittelt die Ausgabe-nachricht für einen Fehlercode
/// </summary> /// </summary>
public string GetRejectionMessage(string pErrorCode) private string GetRejectionMessage(string pErrorCode)
{ {
_logger.Info("GetRejectionMessage() - errorCode.ToString(): '" + pErrorCode.ToString() + "'"); _logger.Info("GetRejectionMessage() - errorCode.ToString(): '" + pErrorCode.ToString() + "'");
if (_RecjectionMessageList == null) return string.Empty; if (_RecjectionMessageList == null) return string.Empty;
// Sprache wird man vielleicht mal auswählen können
var language = "de-DE";
var searchTitle = string.Empty; var searchTitle = string.Empty;
if (pErrorCode.Contains("2000")) if (pErrorCode.Contains("2000"))
@@ -844,11 +884,23 @@ namespace ZUGFeRDRESTService.Controllers
} }
else else
{ {
// else-Fall muss noch geklärt werden. searchTitle = "ZUGFERD_Rejection_20006_Web";
searchTitle = "AMOUNT_CALC_REJECTION_Web"; }
// Sprachgenauen Text suchen.
var messageItem = _RecjectionMessageList.Where(i => i.Title.Equals(searchTitle, StringComparison.OrdinalIgnoreCase) &&
i.Language.Equals(_UserLanguageCode, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
if (messageItem == null &&
!_UserLanguageCode.Equals(GERMAN, StringComparison.OrdinalIgnoreCase)) {
_logger.Info("GetRejectionMessage() - Es wurde kein passender Text für die Sprache [{0}] gefunden.", _UserLanguageCode);
// Wenn kein sprachgenauer Text vorliegt, hole den deutschen Text.
messageItem = _RecjectionMessageList.Where(i => i.Title.Equals(searchTitle, StringComparison.OrdinalIgnoreCase) &&
i.Language.Equals(GERMAN, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
} }
var messageItem = _RecjectionMessageList.Where(i => i.Title.Equals(searchTitle, StringComparison.OrdinalIgnoreCase) && i.Language.Equals(language, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
if (messageItem != null) if (messageItem != null)
{ {
_logger.Info("GetRejectionMessage() - messageItem: '" + messageItem.String1 + "'"); _logger.Info("GetRejectionMessage() - messageItem: '" + messageItem.String1 + "'");

View File

@@ -15,7 +15,12 @@
<label>Benutzerkennung/Email:</label> <label>Benutzerkennung/Email:</label>
<input type="email" name="user_id" required /> <input type="email" name="user_id" required />
</p> </p>
<p>
<label>Sprachcode (de-DE etc.):</label>
<input type="text" name="language_id" value="de-DE" required />
</p>
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>