From 8b6f9e9630c908705660a35fb26bd88334431a2c Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Tue, 5 Nov 2024 09:52:36 +0100 Subject: [PATCH] =?UTF-8?q?GetStatus=20FailFollowUpLogic=20Zus=C3=A4tzlich?= =?UTF-8?q?e=20Exception=20Handling=20Test=20Tenant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/Ressources/Icons/ownsoft_logo.png | Bin 0 -> 13647 bytes BeWo/View/Detail/MandatorView.xaml | 454 +++++++++++++++--- DakotaSender/Program.cs | 100 ++-- DakotaSender/Returncodes.cs | 4 +- Data/Access/SearchDAO.cs | 2 +- Host/GkvAbrechnungClient.aspx.cs | 55 +-- Host/GkvAbrechnungServer.aspx.cs | 4 +- Host/Web.config | 1 + Service/Core/Utils.cs | 5 +- .../GkvAbrechnungDC_GkvAbrechnung.cs | 2 +- .../AccountingServiceImp.cs | 93 ++-- .../GkvServerGetStatusResponseDC.cs | 2 +- 12 files changed, 507 insertions(+), 215 deletions(-) create mode 100644 BeWo/Ressources/Icons/ownsoft_logo.png diff --git a/BeWo/Ressources/Icons/ownsoft_logo.png b/BeWo/Ressources/Icons/ownsoft_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a73cd2d11ed733017ca8de222c95d5c4c82e0b36 GIT binary patch literal 13647 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 + @@ -24,13 +28,40 @@ - - + + - - + + - + @@ -42,18 +73,56 @@ - - - + + + - - - + + + - + @@ -72,31 +141,82 @@ - - Zeit in Minuten bis der BeWoPlaner nach Inaktivität gesperrt wird + + Zeit in Minuten bis der BeWoPlaner nach Inaktivität gesperrt wird - + - + Zeit in Minuten bis die Session in der Mobilversion abläuft - + - - + + - + - + @@ -116,40 +236,149 @@ - + - - + + - - + + - + - + - - + + - + - - - + + + - - + + - + @@ -162,38 +391,100 @@ - - - + + @@ -205,7 +496,13 @@ - + @@ -214,10 +511,17 @@ - - + + - + diff --git a/DakotaSender/Program.cs b/DakotaSender/Program.cs index 808255650..d3c4f40e9 100644 --- a/DakotaSender/Program.cs +++ b/DakotaSender/Program.cs @@ -18,6 +18,7 @@ namespace DakotaSender class Program { static readonly string TEST_TENANT = "5000000000"; + static readonly string TEST_TENANT_2 = "7375324044"; static bool time_in_line = false; static bool is_dakota_running = false; @@ -49,6 +50,7 @@ namespace DakotaSender if (is_dakota_running) { + PrintSeperator(); PrintLine($"Verarbeitung im Silent Modus fehlgeschlagen. dakota30.exe läuft (bereits)."); PrintLine("Ignoriere Verarbeitung aktuell. Versuche im nächsten Programm Aufruf erneut."); } @@ -118,6 +120,7 @@ namespace DakotaSender PrintSeperator(); } + static Dictionary>> ScanQueueFolder() { var queue = Config.QueueFolder; @@ -128,46 +131,13 @@ namespace DakotaSender var ten2dat2files = new Dictionary>>(); foreach (var auft in files) { - var nutz_fullname = auft.FullName.Substring(0, auft.FullName.Length - 4); - var nutz = new FileInfo(nutz_fullname); + var file = ScanQueueFile(auft); - if (!nutz.Exists) - { - PrintLine($"{auft.FullName} wird ignoriert. {nutz.FullName} nicht vorhanden"); + if (file is null) continue; - } - PrintLine($"- {auft.FullName}"); - - var split = nutz.Name.Split('_'); - var tenant = split[0]; - var app_oid = long.Parse(split[1]); - var p_oid = long.Parse(split[2]); - var datenannahmestelle = split[3]; - var transfername = split[4]; - - // Muss nachher nur entfernt werden, um andere zu testen - // Ggf Tool einbauen? - if (tenant != TEST_TENANT && tenant != "demo") - { - PrintLine($"{auft.FullName} wird ignoriert. Tenant {tenant} nicht gültig."); - continue; - } - else - { - tenant = TEST_TENANT; - } - - var file = new DakotaSystemFile() - { - SourceAuftragsdatei = auft, - SourceNutzdatendatei = nutz, - Tenant = tenant, - ProtokollOid = p_oid, - ApplicationUserOid = app_oid, - Datenannahmestelle = datenannahmestelle, - Transfername = transfername, - }; + var tenant = file.Tenant; + var datenannahmestelle = file.Datenannahmestelle; if (!ten2dat2files.ContainsKey(tenant)) ten2dat2files.Add(tenant, new Dictionary>()); @@ -183,7 +153,57 @@ namespace DakotaSender if (ten2dat2files.Any()) return ten2dat2files; - PrintLine("Keine Dakota Dateien in Queue gefunden."); + PrintLine("Keine gültigen Dakota Dateien in Queue gefunden."); + return null; + } + static DakotaSystemFile ScanQueueFile(FileInfo auft) + { + try + { + var nutz_fullname = auft.FullName.Substring(0, auft.FullName.Length - 4); + var nutz = new FileInfo(nutz_fullname); + + if (!nutz.Exists) + { + PrintLine($"{auft.FullName} wird ignoriert. {nutz.FullName} nicht vorhanden"); + return null; + } + + PrintLine($"- {auft.FullName}"); + + var split = nutz.Name.Split('_'); + var tenant = split[0]; + var app_oid = long.Parse(split[1]); + var p_oid = long.Parse(split[2]); + var datenannahmestelle = split[3]; + var transfername = split[4]; + + // Muss nachher nur entfernt werden, um andere zu testen + // Ggf Tool einbauen? + if (tenant != TEST_TENANT && tenant != TEST_TENANT_2) + { + PrintLine($"{auft.FullName} wird ignoriert. Tenant {tenant} nicht gültig."); + return null; + } + + var file = new DakotaSystemFile() + { + SourceAuftragsdatei = auft, + SourceNutzdatendatei = nutz, + Tenant = tenant, + ProtokollOid = p_oid, + ApplicationUserOid = app_oid, + Datenannahmestelle = datenannahmestelle, + Transfername = transfername, + }; + + return file; + } + catch(Exception e) + { + PrintException(e); + } + return null; } @@ -381,11 +401,11 @@ namespace DakotaSender else PrintLine("Fehler: " + res.Message); } - catch(GkvException e) + catch (GkvException e) { PrintException(e); } - catch(Exception e) + catch (Exception e) { PrintException(e); } diff --git a/DakotaSender/Returncodes.cs b/DakotaSender/Returncodes.cs index 3963c3a3c..80aa2d98a 100644 --- a/DakotaSender/Returncodes.cs +++ b/DakotaSender/Returncodes.cs @@ -10,8 +10,8 @@ namespace DakotaSender { const int RC_DAKOTA_ALREADY_LOADED = 18; - static readonly int[] AcceptStatusCodes = new int[] { 0 }; - static readonly int[] AcceptSendCodes = new int[] { 0 }; + static readonly int[] AcceptStatusCodes = new int[] { 0, 1, 100, 101 }; + static readonly int[] AcceptSendCodes = new int[] { 0, 1 }; static readonly Dictionary StatusReturncodeToMeaning = new Dictionary() { diff --git a/Data/Access/SearchDAO.cs b/Data/Access/SearchDAO.cs index 2677cad99..947ecca3f 100644 --- a/Data/Access/SearchDAO.cs +++ b/Data/Access/SearchDAO.cs @@ -5956,7 +5956,7 @@ namespace BeWo.Data.Access var t = criteria.List().SingleOrDefault(); - return t + 1?? 0; + return t + 1 ?? 0; } public List LoadBargeldtransaktionshistoryEntriesByTransaktionsOids(List transaktionsOids) diff --git a/Host/GkvAbrechnungClient.aspx.cs b/Host/GkvAbrechnungClient.aspx.cs index 7e1ed695d..5d0efdac2 100644 --- a/Host/GkvAbrechnungClient.aspx.cs +++ b/Host/GkvAbrechnungClient.aspx.cs @@ -75,32 +75,9 @@ namespace Host try { - foreach (var result in req.ResultDCs) - { - HandleResult(result); - } + var service = new AccountingServiceImp(); - var follows = req.ResultDCs.Where(x => x.ResultType == GkvTransferResultType.FailFollowUp); - - if (follows.Any()) - { - var service = new AccountingServiceImp(); - foreach (var follow in follows) - { - var protokoll_oid = follow.ProtokollOid; - var protokoll = DAOFactory.GenericDAO.LoadByID(protokoll_oid); - var abrechnung_oid = protokoll.GkvAbrechnungOid; - - var new_req = new GkvAbrechnungSendRequestDC() { - GkvAbrechnungOid = abrechnung_oid - }; - - var res = service.SendNewGkvAbrechnung(new_req); - - if (!res.Success) - throw new GkvException(res.Message); - } - } + service.HandleGkvServerResults(req.ResultDCs); response.Success = true; } @@ -116,34 +93,6 @@ namespace Host SendResponse(response); } - private void HandleResult(GkvServerResultDC result) - { - var protokoll = DAOFactory.GenericDAO.GetByID(result.ProtokollOid); - - protokoll.ResultType = result.ResultType; - protokoll.Fehlertitel = result.Titel; - protokoll.Fehlerdatum = result.Datum; - protokoll.Fehlernachricht = result.Nachricht; - - switch (result.ResultType) - { - case GkvTransferResultType.Success: - protokoll.SentDakotaSuccess = true; - break; - case GkvTransferResultType.FailSoft: - protokoll.SentApp8Success = false; - break; - case GkvTransferResultType.FailFatal: - protokoll.SentApp8Success = false; - break; - case GkvTransferResultType.FailFollowUp: - protokoll.SentApp8Success = false; - break; - } - - DAOFactory.GenericDAO.Update(protokoll); - } - #region Senden private void SendInvalidInputResponse() => SendErrorResponse(INVALID_INPUT); private void SendErrorResponse(string message) diff --git a/Host/GkvAbrechnungServer.aspx.cs b/Host/GkvAbrechnungServer.aspx.cs index e12f5c692..a3551cc34 100644 --- a/Host/GkvAbrechnungServer.aspx.cs +++ b/Host/GkvAbrechnungServer.aspx.cs @@ -200,7 +200,7 @@ namespace Host var tuple_count = req.Oids.Length; - response.ResultDC = new GkvServerResultDC[tuple_count]; + response.Results = new GkvServerResultDC[tuple_count]; try { @@ -214,7 +214,7 @@ namespace Host if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC)) { - response.ResultDC[i] = fehlerDC; + response.Results[i] = fehlerDC; } } diff --git a/Host/Web.config b/Host/Web.config index 856ea9b0a..1e8c1bf05 100644 --- a/Host/Web.config +++ b/Host/Web.config @@ -241,6 +241,7 @@ + diff --git a/Service/Core/Utils.cs b/Service/Core/Utils.cs index 21bb0c0ee..185bde3aa 100644 --- a/Service/Core/Utils.cs +++ b/Service/Core/Utils.cs @@ -13,13 +13,10 @@ using System.Text; using System.Text.RegularExpressions; using System.Xml; +using BeWo.Data; using BeWo.Data.Entities; using BeWo.Service.ServiceContracts; -using BeWo.Data; -using BeWo.Data.Access; -using BeWo.View.Navigation.Filter; using BS.Shared; -using BS.Shared.DataContracts; using BS.Shared.Extensions; namespace BeWo.Service.Core diff --git a/Service/DCEntityMapper/GkvAbrechnungDC_GkvAbrechnung.cs b/Service/DCEntityMapper/GkvAbrechnungDC_GkvAbrechnung.cs index d22ed2991..890dde0e5 100644 --- a/Service/DCEntityMapper/GkvAbrechnungDC_GkvAbrechnung.cs +++ b/Service/DCEntityMapper/GkvAbrechnungDC_GkvAbrechnung.cs @@ -60,7 +60,7 @@ namespace BeWo.Service.DCEntityMapper break; case BS.Shared.GkvState.ErrorFolgefehler: isReady = false; - tooltip = "Folge Fehler"; + tooltip = "Folgefehler"; break; case BS.Shared.GkvState.Paid: isReady = false; diff --git a/Service/ServiceImplementations/AccountingServiceImp.cs b/Service/ServiceImplementations/AccountingServiceImp.cs index 8db848861..6321a5c48 100644 --- a/Service/ServiceImplementations/AccountingServiceImp.cs +++ b/Service/ServiceImplementations/AccountingServiceImp.cs @@ -1104,7 +1104,7 @@ namespace BeWo.Service.ServiceImplementations } else { - throw new ArgumentException("Versucht Datenaustauschref zu laden, invalid state", nameof(state)); + throw new ArgumentException("Versucht Transfernummer zu laden, invalid state", nameof(state)); } return new Tuple(datenaustauschref, transfernummer); @@ -1178,51 +1178,72 @@ namespace BeWo.Service.ServiceImplementations if (!response_app8.Success) throw new GkvException(response_app8.Message); - bool allAreUpToDate = true; - for (int id = 0; id < updateables_len; id++) - { - var gkv_abrechnung = updateables[id]; - var result = response_app8.ResultDC[id]; + var results = response_app8.Results.Where(x => x is object); - if (result is null) - continue; + if (!results.Any()) + return true; - allAreUpToDate = false; + HandleGkvServerResults(results); - HandleResult(result); - } - - return allAreUpToDate; + return false; } - private void HandleResult(GkvServerResultDC result) + public void HandleGkvServerResults(IEnumerable results) { - var protokoll = DAOFactory.GenericDAO.GetByID(result.ProtokollOid); - - protokoll.ResultType = result.ResultType; - protokoll.Fehlertitel = result.Titel; - protokoll.Fehlerdatum = result.Datum; - protokoll.Fehlernachricht = result.Nachricht; - - switch (result.ResultType) + var protokolls = new List(); + foreach (var result in results) { - case GkvTransferResultType.Success: - protokoll.SentDakotaSuccess = true; - break; - case GkvTransferResultType.FailSoft: - protokoll.SentApp8Success = false; - break; - case GkvTransferResultType.FailFatal: - protokoll.SentApp8Success = false; - break; - case GkvTransferResultType.FailFollowUp: - protokoll.SentApp8Success = false; - break; + var protokoll = DAOFactory.GenericDAO.GetByID(result.ProtokollOid); + + protokoll.ResultType = result.ResultType; + protokoll.Fehlertitel = result.Titel; + protokoll.Fehlerdatum = result.Datum; + protokoll.Fehlernachricht = result.Nachricht; + + switch (result.ResultType) + { + case GkvTransferResultType.Success: + protokoll.SentDakotaSuccess = true; + break; + case GkvTransferResultType.FailSoft: + protokoll.SentApp8Success = false; + break; + case GkvTransferResultType.FailFatal: + protokoll.SentApp8Success = false; + break; + case GkvTransferResultType.FailFollowUp: + protokoll.SentApp8Success = false; + break; + } + + protokolls.Add(protokoll); } - DAOFactory.GenericDAO.Update(protokoll); - } + if(protokolls.Any()) + DAOFactory.GenericDAO.Update(protokolls); + var follows = results.Where(x => x.ResultType == GkvTransferResultType.FailFollowUp); + + if (follows.Any()) + { + foreach (var follow in follows) + { + var protokoll_oid = follow.ProtokollOid; + var protokoll = DAOFactory.GenericDAO.LoadByID(protokoll_oid); + var abrechnung_oid = protokoll.GkvAbrechnungOid; + + var new_req = new GkvAbrechnungSendRequestDC() + { + GkvAbrechnungOid = abrechnung_oid + }; + + var res = SendNewGkvAbrechnung(new_req); + + if (!res.Success) + throw new GkvException(res.Message); + } + } + } private Res SendApp8Request(Req request) where Req : GkvRequestDC where Res : GkvResponseDC { diff --git a/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs index 5288e1664..717dedb39 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs @@ -13,6 +13,6 @@ namespace BS.Shared.DataContracts.GkvAbrechnung public GkvServerGetStatusResponseDC(bool success) : base(success) { } public GkvServerGetStatusResponseDC(bool success, string message) : base(success, message) { } - [DataMember] public GkvServerResultDC[] ResultDC { get; set; } + [DataMember] public GkvServerResultDC[] Results { get; set; } } }