From 80f858bdf574a2a7e0148e241e79015fd2a47103 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Mon, 14 Nov 2022 10:22:13 +0100 Subject: [PATCH] ZUGFeRDRESTService: formal validation with PRCUST_INV_CHECK_FROM_PORTAL --- .../Controllers/ValidationController.cs | 69 +++++++++++++------ 1 file changed, 49 insertions(+), 20 deletions(-) diff --git a/WEBSERVICES/ZUGFeRDRESTService/Controllers/ValidationController.cs b/WEBSERVICES/ZUGFeRDRESTService/Controllers/ValidationController.cs index 8ebd726a..7c03b15b 100644 --- a/WEBSERVICES/ZUGFeRDRESTService/Controllers/ValidationController.cs +++ b/WEBSERVICES/ZUGFeRDRESTService/Controllers/ValidationController.cs @@ -10,6 +10,7 @@ using static DigitalData.Modules.Interfaces.ZUGFeRDInterface; using static DigitalData.Modules.Interfaces.PropertyValues; using System.Data.SqlClient; using DigitalData.Modules.Database; +using Microsoft.CodeAnalysis.Operations; namespace ZUGFeRDRESTService.Controllers { @@ -20,6 +21,9 @@ namespace ZUGFeRDRESTService.Controllers public const string RESPONSE_OK = "OK"; public const string RESPONSE_ERROR = "ERROR"; + public const string ADDED_WHO = "ZUGFeRD REST Service"; + public const string MESSAGEID_DOMAIN = "test.wisag.de"; + private readonly ZUGFeRDInterface _zugferd; private readonly IDatabase _database; @@ -89,6 +93,9 @@ namespace ZUGFeRDRESTService.Controllers "Die hochgeladene Datei ist eine gültige ZUGFeRD-Rechnung, allerdings fehlen benötigte Daten."); } + Tuple oValidateResult = ValidateBuyerOrderReference(oResult.ValidProperties); + + string oMessage = "Die hochgeladene Datei ist eine gültige-ZUGFeRD Rechnung"; _logger.Debug($"Replying with: [{oMessage}]"); @@ -147,12 +154,14 @@ namespace ZUGFeRDRESTService.Controllers } } - private Tuple ValidateBuyerOrderReference(Dictionary pPropertyMap, List pProperties) + private Tuple ValidateBuyerOrderReference(List pProperties) { + var oMessageId = GetMessageId(); + foreach (var oItem in pProperties) { - var oResult = InsertPropertyMap(oItem); + var oResult = InsertPropertyMap(oItem, oMessageId); if (oResult == false) { @@ -160,40 +169,60 @@ namespace ZUGFeRDRESTService.Controllers } } - // TODO: Execute the Procedure. - // _database.MSSQL.ExecuteNonQuery(""); + try + { + using SqlCommand oCommand = new SqlCommand("PRCUST_INV_CHECK_FROM_PORTAL @MESSAGE_ID, @MSG_OUTPUT"); + oCommand.CommandType = System.Data.CommandType.StoredProcedure; + oCommand.Parameters.Add("MESSAGE_ID", System.Data.SqlDbType.VarChar).Value = oMessageId; + oCommand.Parameters.Add("MSG_OUTPUT", System.Data.SqlDbType.VarChar).Direction = System.Data.ParameterDirection.Output; - // TODO: Return a Status value which will be returned to the caller. - return new Tuple(true, ""); + if (_database.MSSQL.ExecuteNonQuery(oCommand)) + { + string oReturnValue = (string)oCommand.Parameters["MSG_OUTPUT"].Value; + + return new Tuple(true, oReturnValue); + + } + else + { + return new Tuple(false, string.Empty); + + } + } + catch (Exception e) + { + _logger.Error(e); + return new Tuple(false, string.Empty); + } } - public bool InsertPropertyMap(ValidProperty pProperty) + public string GetMessageId() { - try - { - var oCreator = "ZUGFeRD REST Service"; - var oDomain = "test.wisag.de"; - var oMessageId = $"{Guid.NewGuid()}@{oDomain}"; + return $"{Guid.NewGuid()}@{MESSAGEID_DOMAIN}"; + } + public bool InsertPropertyMap(ValidProperty pProperty, string pMessageId) + { + try + { var oSql = $"INSERT INTO {pProperty.TableName} " + "(REFERENCE_GUID, ITEM_DESCRIPTION, ITEM_VALUE, CREATEDWHO, SPEC_NAME, GROUP_COUNTER, IS_REQUIRED) VALUES " + "(@REFERENCE_GUID, @ITEM_DESCRIPTION, @ITEM_VALUE, @CREATEDWHO, @SPEC_NAME, @GROUP_COUNTER, @IS_REQUIRED)"; var oParams = new SqlParameter[] { - new SqlParameter("@REFERENCE_GUID", oMessageId), - new SqlParameter("@ITEM_DESCRIPTION", pProperty.Description), - new SqlParameter("@ITEM_VALUE", pProperty.Value), - new SqlParameter("@CREATEDWHO", oCreator), - new SqlParameter("@GROUP_COUNTER", pProperty.GroupCounter), - new SqlParameter("@SPEC_NAME", pProperty.TableColumn), - new SqlParameter("@IS_REQUIRED", pProperty.ISRequired) + new SqlParameter("@REFERENCE_GUID", pMessageId), + new SqlParameter("@ITEM_DESCRIPTION", pProperty.Description), + new SqlParameter("@ITEM_VALUE", pProperty.Value), + new SqlParameter("@CREATEDWHO", ADDED_WHO), + new SqlParameter("@GROUP_COUNTER", pProperty.GroupCounter), + new SqlParameter("@SPEC_NAME", pProperty.TableColumn), + new SqlParameter("@IS_REQUIRED", pProperty.ISRequired) }; var oCommand = new SqlCommand(oSql); oCommand.Parameters.AddRange(oParams); - return _database.MSSQL.ExecuteNonQuery(oCommand); } catch (Exception ex)