diff --git a/BeWo/DebugConfig.cs b/BeWo/DebugConfig.cs index f10d0d6cd..ed19b9f16 100644 --- a/BeWo/DebugConfig.cs +++ b/BeWo/DebugConfig.cs @@ -24,7 +24,7 @@ namespace BeWo { #if DEBUG - return _CurrentConfig ?? (_CurrentConfig = null); + return _CurrentConfig ?? (_CurrentConfig = SimpleAutoLogin); #endif @@ -35,6 +35,10 @@ namespace BeWo public DebugConfigMode DebugConfigMode { get; set; } + public static string Username { get; set; } = "m1"; + public static string Password { get; set; } = "bewobewo"; + public static string Profilename { get; set; } = "5000000000"; + public bool AutoLogin { get; set; } public UIContext? SelectView { get; set; } /// diff --git a/BeWo/LoginControl.xaml.cs b/BeWo/LoginControl.xaml.cs index 51576c656..5cbb008a5 100644 --- a/BeWo/LoginControl.xaml.cs +++ b/BeWo/LoginControl.xaml.cs @@ -31,6 +31,7 @@ using BeWo.View; using BeWo.View.Detail; using BS.Shared.Translation; using Path = System.IO.Path; +using System.Linq; namespace BeWo { @@ -198,6 +199,11 @@ namespace BeWo { #if DEBUG //selectedProfile = ReadSelectedProfile(); + + if (DebugConfig.CurrentConfig is DebugConfig current && !string.IsNullOrWhiteSpace(DebugConfig.Profilename)) + { + selectedProfile = ProfileList.FirstOrDefault(x => x.Name == DebugConfig.Profilename); + } #else selectedProfile = ReadSelectedProfile(); #endif @@ -712,9 +718,18 @@ namespace BeWo } #if DEBUG - if (DebugConfig.CurrentConfig is object && DebugConfig.CurrentConfig.AutoLogin) + + + if (DebugConfig.CurrentConfig is DebugConfig current) { - button_login_Click(this, new RoutedEventArgs()); + if (!string.IsNullOrWhiteSpace(DebugConfig.Username)) + TextBox_Username.Text = DebugConfig.Username; + + if (!string.IsNullOrWhiteSpace(DebugConfig.Password)) + PasswordBox_Password.Password = DebugConfig.Password; + + if (current.AutoLogin) + button_login_Click(this, new RoutedEventArgs()); } #endif } diff --git a/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml b/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml index d8751f878..04e2ce4eb 100644 --- a/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml +++ b/BeWo/View/Controls/GkvAbrechnungDetailControl.xaml @@ -403,19 +403,19 @@ ReadOnly="True" /> + FieldName="SentDakotaSuccess" + Header="Sent Dakota" + IsEnabledBinding="{Binding Source=false}" /> + + - + + diff --git a/BeWo/ViewModel/GkvAbrechnungVM.cs b/BeWo/ViewModel/GkvAbrechnungVM.cs index f12423e1b..2c60f25f8 100644 --- a/BeWo/ViewModel/GkvAbrechnungVM.cs +++ b/BeWo/ViewModel/GkvAbrechnungVM.cs @@ -273,7 +273,7 @@ namespace BeWo.ViewModel } } #endregion - public IGkvTransferProtokoll LastTransferProtokoll => TransferProtokolle?.Last(); + public IGkvTransferProtokoll LastTransferProtokoll => TransferProtokolle?.LastOrDefault(); public string RecipientString { @@ -291,9 +291,10 @@ namespace BeWo.ViewModel { get { - var last = TransferProtokolle?.LastOrDefault(); + if (!(LastTransferProtokoll is GkvTransferProtokollDC last)) + return null; - if (last is null || string.IsNullOrWhiteSpace(last.Fehlernachricht)) + if (string.IsNullOrWhiteSpace(last.Fehlernachricht)) return null; if (string.IsNullOrWhiteSpace(last.Fehlertitel)) @@ -306,12 +307,10 @@ namespace BeWo.ViewModel { get { - var last = TransferProtokolle?.LastOrDefault(); + if (LastTransferProtokoll is GkvTransferProtokollDC last) + return last.ErstelltAm; - if (last is null) - return null; - - return last.ErstelltAm; + return null; } } public bool IsReady2Send diff --git a/DakotaSender/FileController.cs b/DakotaSender/FileController.cs index 1a3692e0b..cff8b00a1 100644 --- a/DakotaSender/FileController.cs +++ b/DakotaSender/FileController.cs @@ -63,7 +63,7 @@ namespace DakotaSender internal static void SaveAsXmlFileInResultFolder(GkvServerResultDC result, string tenant, long user) { - Program.Print($"Speichere Protokoll Oid \'{result.ProtokollOid}\' als Xml. "); + Program.Print($"Speichere Protokoll \'{result.ProtokollOid}\' als Xml. "); var xml = GkvServerResultXml.ToXml(result, user); diff --git a/DakotaSender/Program.cs b/DakotaSender/Program.cs index 2d7952ae3..a659a5a5c 100644 --- a/DakotaSender/Program.cs +++ b/DakotaSender/Program.cs @@ -17,7 +17,7 @@ namespace DakotaSender { class Program { - static readonly string TEST_TENANT = "7375324044"; + static readonly string TEST_TENANT = "5000000000"; static bool time_in_line = false; static bool is_dakota_running = false; @@ -52,6 +52,8 @@ namespace DakotaSender PrintLine($"Verarbeitung im Silent Modus fehlgeschlagen. dakota30.exe läuft (bereits)."); PrintLine("Ignoriere Verarbeitung aktuell. Versuche im nächsten Programm Aufruf erneut."); } + + PrintSeperator(); } PrintEnd(); @@ -59,7 +61,7 @@ namespace DakotaSender internal static void PrintTitle() { - PrintWithTime("\n", false); + PrintLine(); PrintSeperator(); PrintLine("Dakota Sender Modul"); PrintSeperator(); @@ -70,7 +72,7 @@ namespace DakotaSender PrintLine("Ende"); PrintSeperator(); } - internal static void PrintLine() => PrintLine(null); + internal static void PrintLine() => PrintWithTime("\n", false); internal static void PrintLine(string line) { PrintWithTime(line + "\n", !time_in_line); @@ -92,16 +94,14 @@ namespace DakotaSender } internal static void PrintFileInfo(DakotaSystemFile file) { - PrintLine($"Verarbeite Datei: {file.SourceNutzdatendatei.Name}"); - PrintLine($"- Tenant: {file.Tenant}"); - PrintLine($"- Protokoll Oid: {file.ProtokollOid}"); - PrintLine($"- Datenannahmestelle: {file.Datenannahmestelle}"); + Print($"Verarbeite Datei: {file.SourceNutzdatendatei.Name}"); + PrintLine($"(T:{file.Tenant}, U:{file.ApplicationUserOid}, P:{file.ProtokollOid}, D:{file.Datenannahmestelle})"); } internal static void PrintException(Exception e) => PrintLine(e.ToString()); static void CheckDakotaStatus() { - PrintLine("Überprüfe Dakota Status"); + PrintLine("Überprüfe Dakota Status:"); var code = ExecuteDakota("-s"); @@ -137,7 +137,7 @@ namespace DakotaSender continue; } - PrintLine($"{auft.FullName} gefunden."); + PrintLine($"- {auft.FullName}"); var split = nutz.Name.Split('_'); var tenant = split[0]; @@ -189,16 +189,22 @@ namespace DakotaSender static void HandleQueueFiles() { - PrintLine("Scanne Dakota Dateien"); + PrintLine("Scanne Dakota Dateien:"); var ten2dat2files = ScanQueueFolder(); + PrintSeperator(); + if (ten2dat2files is null) + { return; + } ten2user2req = new Dictionary>(); + PrintLine("Bearbeite Queue"); PrintSeperator(); + foreach (var kv in ten2dat2files) { var ten = kv.Key; @@ -209,7 +215,7 @@ namespace DakotaSender var dat = kv2.Key; var files = kv2.Value; - PrintLine($"Bearbeite Datenannahmestelle {dat} für Tenant {ten}."); + PrintLine($"Bearbeite Datenannahmestelle \'{dat}\' für Tenant \'{ten}\':"); HandleQueueFiles(files); @@ -218,6 +224,9 @@ namespace DakotaSender CheckDakotaStatus(); } } + + PrintLine("Bearbeitung Queue beendet"); + PrintSeperator(); } static void HandleQueueFiles(List files) { @@ -299,7 +308,12 @@ namespace DakotaSender var user2req = ten2user2req[tenant]; if (!user2req.ContainsKey(user)) - user2req.Add(user, new GkvClientResultRequestDC()); + user2req.Add(user, new GkvClientResultRequestDC() + { + UserOid = file.ApplicationUserOid, + Tenant = file.Tenant, + GkvSecretKey = Config.GkvSecretKey + }); var req = user2req[user]; @@ -319,7 +333,10 @@ namespace DakotaSender static void HandleResults() { - if (ten2user2req is null) + PrintLine("Sende Ergebnisse:"); + PrintSeperator(); + + if (ten2user2req is null || !ten2user2req.Any()) return; var task = HandleResultsAsync(); @@ -340,8 +357,6 @@ namespace DakotaSender var task = HandleResult(req, tenant, user); - task.Start(); - tasks.Add(task); } } @@ -350,12 +365,18 @@ namespace DakotaSender } static async Task HandleResult(GkvClientResultRequestDC req, string tenant, long user) { + var res = new GkvResponseDC(false, "empty"); + try { - var res = await GkvSender.SendKundenAppClientRequestAsync(req, tenant, user); + PrintLine($"Sende Ergebnis an: Tenant: {req.Tenant}, User; {req.UserOid}"); + + res = await GkvSender.SendKundenAppClientRequestAsync(req, tenant, user); if (res.Success) - return; + PrintLine("Erfolgreich!"); + else + PrintLine("Fehler: " + res.Message); } catch(GkvException e) { @@ -366,10 +387,17 @@ namespace DakotaSender PrintException(e); } + PrintSeperator(); + + if (res.Success) + return; + foreach (var result in req.ResultDCs) { FileController.SaveAsXmlFileInResultFolder(result, tenant, user); } + + PrintSeperator(); } static int ExecuteDakota(string arg) diff --git a/Data/DefaultHibernateSessionManager.cs b/Data/DefaultHibernateSessionManager.cs index a2192ab66..8e0f3ca3f 100644 --- a/Data/DefaultHibernateSessionManager.cs +++ b/Data/DefaultHibernateSessionManager.cs @@ -170,6 +170,7 @@ namespace BeWo.Data } catch (Exception e) { + //throw new FaultException("ttttt" + e.ToString()); throw new FaultException(e.StackTrace + e.InnerException?.Message ?? string.Empty); } } diff --git a/Data/Entities/GkvAbrechnung.cs b/Data/Entities/GkvAbrechnung.cs index 0df73bcdf..ccfeed9c2 100644 --- a/Data/Entities/GkvAbrechnung.cs +++ b/Data/Entities/GkvAbrechnung.cs @@ -26,9 +26,9 @@ namespace BeWo.Data.Entities public virtual IList InvoiceBases { get; set; } public virtual IList GkvTransferProtokolle { get; set; } - public IGkvTransferProtokoll LastTransferProtokoll { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public virtual IGkvTransferProtokoll LastTransferProtokoll => GkvTransferProtokolle?.LastOrDefault(); - public virtual Organisation GetOrganisation() + public virtual Organisation GetOrganisation() { return InvoiceBases.First().CostBearer2SupportConcept.CostBearer.Organisation; } diff --git a/Data/WCFHibernateSessionManager.cs b/Data/WCFHibernateSessionManager.cs index f67528f24..ae63d1fb8 100644 --- a/Data/WCFHibernateSessionManager.cs +++ b/Data/WCFHibernateSessionManager.cs @@ -60,8 +60,9 @@ namespace BeWo.Data } catch (Exception e) { - //String path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SessionFactoryError.txt"); - //System.IO.File.AppendAllText(path, String.Format("{0:dd.MM.yyyy HH:mm:ss}", DateTime.Now) + "\n" + e.Message + "\n" + e.StackTrace); + String path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SessionFactoryError.txt"); + System.IO.File.AppendAllText(@"C:\BeWoPlaner\service\Host\logs\WCFSessionError.txt", String.Format("SessionFactory get {0:dd.MM.yyyy HH:mm:ss}", DateTime.Now) + "\n" + e.Message + "\n" + e.StackTrace); + Debug.WriteLine("<<<<< " + e.StackTrace + (e.InnerException != null ? e.InnerException.Message : string.Empty)); throw new FaultException(e.StackTrace + e.InnerException != null ? e.InnerException.Message : string.Empty); } @@ -157,6 +158,8 @@ namespace BeWo.Data } catch (Exception e) { + File.AppendAllText(@"C:\BeWoPlaner\service\Host\logs\WCFSessionError.txt", String.Format("OpenSession {0:dd.MM.yyyy HH:mm:ss}", DateTime.Now) + "\n" + e.Message + "\n" + e.StackTrace); + throw new FaultException(e.StackTrace + e.InnerException?.Message ?? string.Empty); } } diff --git a/Host/GkvAbrechnungClient.aspx.cs b/Host/GkvAbrechnungClient.aspx.cs index 6dcb4b6ce..3d408bc52 100644 --- a/Host/GkvAbrechnungClient.aspx.cs +++ b/Host/GkvAbrechnungClient.aspx.cs @@ -108,12 +108,17 @@ namespace Host 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 diff --git a/Model/Changes_2024_06_20 GKV_SentSuccess.txt b/Model/Changes_2024_06_20 GKV_SentSuccess.txt deleted file mode 100644 index 8618ca45c..000000000 --- a/Model/Changes_2024_06_20 GKV_SentSuccess.txt +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `gkvtransferprotokoll` -ADD COLUMN `SentSuccess` TINYINT NULL AFTER `Auftragsdatei`; diff --git a/Model/Changes_2024_08_05 CustomerFalldaten.txt b/Model/Changes_2024_08_05 CustomerFalldaten.txt deleted file mode 100644 index 191fbb2b7..000000000 --- a/Model/Changes_2024_08_05 CustomerFalldaten.txt +++ /dev/null @@ -1,75 +0,0 @@ -CREATE TABLE `CustomerFalldaten` ( -`Oid` bigint NOT NULL AUTO_INCREMENT, -`InsTs` datetime DEFAULT NULL, -`InsUser` varchar(256) DEFAULT NULL, -`Notice` varchar(1024) DEFAULT NULL, -`Tid` int DEFAULT NULL, -`UdpUser` varchar(256) DEFAULT NULL, -`Version` bigint DEFAULT NULL, -`IsActive` tinyint DEFAULT NULL, -`SystemEntryID` int DEFAULT NULL, -`EigenesAktenzeichen` varchar(256), -`Auftragseingang` datetime DEFAULT NULL, -`AuftragsherkunftValueListEntryOid` bigint DEFAULT NULL, -`VermittlungsgrundlageValueListEntryOid` bigint DEFAULT NULL, -`Tagessatze` decimal(18,10) DEFAULT NULL, -`Tagessatzhohe` decimal(18,10) DEFAULT NULL, -`HoheDerGeldstrafe` decimal(18,10) DEFAULT NULL, -`ZuLeistendeArbeitsstunden` decimal(18,10) DEFAULT NULL, -`Hinweis` varchar(256), -`Termin` datetime DEFAULT NULL, -`FalldatenBearbeitungsstatus` int DEFAULT NULL, -`Auftragsruckgabe` varchar(256), -`Verlauf` varchar(256), -`AbgeleisteteStunden` decimal(18,10) DEFAULT NULL, -`ErsparteHafttage` decimal(18,10) DEFAULT NULL, -`GeleisteteRatenzahlung` decimal(18,10) DEFAULT NULL, -`Bemerkung` varchar(256), -`GeleisteteEinmalzahlung` decimal(18,10) DEFAULT NULL, -`GrundArbeitsunfahig` tinyint, -`GrundSuchtproblem` tinyint, -`GrundPsychischeProbleme` tinyint, -`GrundKeineMotivation` tinyint, -`GrundInHaft` tinyint, -`GrundUnbekannt` tinyint, -`GrundKeinKontakt` tinyint, -`GrundNichtAngetreten` tinyint, -`GrundAbbruchDerTatigkeit` tinyint, -`GrundWiderruf` tinyint, -`Grund459StPO` tinyint, -`GrundAusbleibenDerZahlung` tinyint, -`BesonderheitMehrfacheBeauftragung` tinyint, -`BesonderheitMehrfacheVermittlung` tinyint, -`BesonderheitVermittlungAusHaft` tinyint, -`BesonderheitDurchBGBWAufgesucht` tinyint, -PRIMARY KEY (`Oid`) -) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; - -ALTER TABLE `customer` -ADD COLUMN `CustomerFalldatenOid` BIGINT NULL DEFAULT NULL AFTER `VersichertenStatus`; - -ALTER TABLE `customer` -ADD INDEX `FK_CUSTOMERFALLDATEN_idx` (`CustomerFalldatenOid` ASC) VISIBLE; - -ALTER TABLE `customer` -ADD CONSTRAINT `FK_CUSTOMERFALLDATEN` - FOREIGN KEY (`CustomerFalldatenOid`) - REFERENCES `customerfalldaten` (`Oid`) - ON DELETE RESTRICT - ON UPDATE RESTRICT; - -ALTER TABLE `customerfalldaten` -ADD INDEX `FK_AUFTRAGSHERKUNFT_idx` (`AuftragsherkunftValueListEntryOid` ASC) VISIBLE, -ADD INDEX `FK_VERMITTLUNGSGRUNDLAGE_idx` (`VermittlungsgrundlageValueListEntryOid` ASC) VISIBLE; - -ALTER TABLE `customerfalldaten` -ADD CONSTRAINT `FK_AUFTRAGSHERKUNFT` - FOREIGN KEY (`AuftragsherkunftValueListEntryOid`) - REFERENCES `valuelistentry` (`Oid`) - ON DELETE RESTRICT - ON UPDATE RESTRICT, -ADD CONSTRAINT `FK_VERMITTLUNGSGRUNDLAGE` - FOREIGN KEY (`VermittlungsgrundlageValueListEntryOid`) - REFERENCES `valuelistentry` (`Oid`) - ON DELETE RESTRICT - ON UPDATE RESTRICT; diff --git a/Model/Changes_2024_09_30 GkvAbrechnung UrbelegeGesendet.txt b/Model/Changes_2024_09_30 GkvAbrechnung UrbelegeGesendet.txt deleted file mode 100644 index f608bac9c..000000000 --- a/Model/Changes_2024_09_30 GkvAbrechnung UrbelegeGesendet.txt +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `gkvabrechnung` -ADD COLUMN `UrbelegeGesendet` TINYINT NULL DEFAULT NULL AFTER `Bezahlt`; diff --git a/Model/Changes_2024_10_09 GkvAbrechnung Verfahrensstufe.txt b/Model/Changes_2024_10_09 GkvAbrechnung Verfahrensstufe.txt deleted file mode 100644 index d3b839674..000000000 --- a/Model/Changes_2024_10_09 GkvAbrechnung Verfahrensstufe.txt +++ /dev/null @@ -1,5 +0,0 @@ -ALTER TABLE `organisation` -ADD COLUMN `Verfahrensstufe` INT NULL DEFAULT 0 AFTER `BusinessPartnerId`; - -ALTER TABLE `gkvabrechnung` -ADD COLUMN `Verfahrensstufe` INT NULL DEFAULT 0 AFTER `ErstelltAm`; diff --git a/Model/Changes_2024_10_23 GkvUpdate.txt b/Model/Changes_2024_10_23 GkvUpdate.txt deleted file mode 100644 index 39e91fc70..000000000 --- a/Model/Changes_2024_10_23 GkvUpdate.txt +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE `gkvtransferprotokoll` -ADD COLUMN `SentDakotaSuccess` TINYINT NOT NULL DEFAULT 0 AFTER `SentApp8Success`, -CHANGE COLUMN `Fehlerlevel` `ResultType` INT NULL DEFAULT NULL AFTER `SentDakotaSuccess`, -CHANGE COLUMN `SentSuccess` `SentApp8Success` TINYINT NOT NULL DEFAULT 0 ; diff --git a/Model/Changes_2024_05_15 ALLE GKV TABELLEN.txt b/Model/Changes_2024_10_31 ALLE GKV TABELLEN.txt similarity index 89% rename from Model/Changes_2024_05_15 ALLE GKV TABELLEN.txt rename to Model/Changes_2024_10_31 ALLE GKV TABELLEN.txt index b7e01eb6e..e6e047d6c 100644 --- a/Model/Changes_2024_05_15 ALLE GKV TABELLEN.txt +++ b/Model/Changes_2024_10_31 ALLE GKV TABELLEN.txt @@ -12,9 +12,11 @@ CREATE TABLE `gkvabrechnung` ( `AbrechnungsZeitraumEnde` datetime DEFAULT NULL, `Betrag` decimal(18,10) DEFAULT NULL, `Bezahlt` tinyint DEFAULT NULL, + `UrbelegeGesendet` tinyint DEFAULT NULL, `ErstelltAm` datetime DEFAULT NULL, + `Verfahrensstufe` int DEFAULT '0', PRIMARY KEY (`Oid`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; +) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `gkvabrechnung2invoicebase` ( `GkvAbrechnungOid` bigint NOT NULL, @@ -52,11 +54,13 @@ CREATE TABLE `gkvtransferprotokoll` ( `Dateigrosse` int DEFAULT NULL, `Nutzdatendatei` text, `Auftragsdatei` varchar(1024) DEFAULT NULL, + `SentApp8Success` tinyint NOT NULL DEFAULT '0', + `SentDakotaSuccess` tinyint NOT NULL DEFAULT '0', + `ResultType` int DEFAULT NULL, `Fehlertitel` varchar(256) DEFAULT NULL, `Fehlerdatum` datetime DEFAULT NULL, `Fehlernachricht` varchar(4096) DEFAULT NULL, - `Fehlerlevel` int DEFAULT NULL, PRIMARY KEY (`Oid`), KEY `FK_GKVTRANSFERPROTOKOLL_GKVABRECHNUNG` (`GkvAbrechnungOid`), CONSTRAINT `FK_GKVTRANSFERPROTOKOLL_GKVABRECHNUNG` FOREIGN KEY (`GkvAbrechnungOid`) REFERENCES `gkvabrechnung` (`Oid`) -) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=latin1; \ No newline at end of file diff --git a/Model/Changes_2024_09_22 CustomerFalldatenDrop.txt b/Model/Changes_2024_10_31 CustomerFalldaten DROPP.txt similarity index 84% rename from Model/Changes_2024_09_22 CustomerFalldatenDrop.txt rename to Model/Changes_2024_10_31 CustomerFalldaten DROPP.txt index c76b27084..ba336d4e0 100644 --- a/Model/Changes_2024_09_22 CustomerFalldatenDrop.txt +++ b/Model/Changes_2024_10_31 CustomerFalldaten DROPP.txt @@ -6,3 +6,4 @@ DROP INDEX `FK_CUSTOMERFALLDATEN_idx` ; ; +DROP TABLE `customerfalldaten`; diff --git a/Service/ServiceImplementations/AccountingServiceImp.cs b/Service/ServiceImplementations/AccountingServiceImp.cs index 6801aaffb..8db848861 100644 --- a/Service/ServiceImplementations/AccountingServiceImp.cs +++ b/Service/ServiceImplementations/AccountingServiceImp.cs @@ -1170,6 +1170,8 @@ namespace BeWo.Service.ServiceImplementations } catch (Exception e) { + throw e; + return true; } @@ -1187,21 +1189,40 @@ namespace BeWo.Service.ServiceImplementations allAreUpToDate = false; - var gkv_abrechnung_entity = DAOFactory.GenericDAO.LoadByID(gkv_abrechnung.GkvAbrechnungOid.Value); - - var protokoll = gkv_abrechnung_entity.GkvTransferProtokolle.First(x => x.Oid == result.ProtokollOid); - - protokoll.ResultType = result.ResultType; - protokoll.Fehlerdatum = result.Datum; - protokoll.Fehlernachricht = result.Nachricht; - protokoll.Fehlertitel = result.Titel; - - DAOFactory.GenericDAO.Update(gkv_abrechnung_entity); + HandleResult(result); } return allAreUpToDate; } + 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); + } + private Res SendApp8Request(Req request) where Req : GkvRequestDC where Res : GkvResponseDC { diff --git a/Service/UnitOfWork/HibernateSessionContextInitializer.cs b/Service/UnitOfWork/HibernateSessionContextInitializer.cs index d11cccb17..aec664bfd 100644 --- a/Service/UnitOfWork/HibernateSessionContextInitializer.cs +++ b/Service/UnitOfWork/HibernateSessionContextInitializer.cs @@ -33,8 +33,9 @@ namespace BeWo.Service.UnitOfWork WCFHibernateSessionManager.OpenSession(); return lExt; } - catch (Exception) + catch (Exception e) { + throw new FaultException(e.ToString()); return null; } } diff --git a/Shared/AppSender/GkvSender.cs b/Shared/AppSender/GkvSender.cs index 9fac7142f..0598b81a8 100644 --- a/Shared/AppSender/GkvSender.cs +++ b/Shared/AppSender/GkvSender.cs @@ -12,7 +12,7 @@ namespace BS.Shared.AppSender { private static readonly string GKVCLIENT_URL = "{0}/GkvAbrechnungClient.aspx"; - public static string SerializeResponse(Res response) where Res : AppResponseDC + public static string SerializeResponse(Res response) where Res : GkvResponseDC => JsonConvert.SerializeObject(response); public static Req DeserializeRequest(string str, Action sendInvalidInputResponse) where Req : AppRequestDC { @@ -60,7 +60,7 @@ namespace BS.Shared.AppSender return app8_response; } - public static async Task SendKundenAppClientRequestAsync(Req request, string tenant, long useroid) where Req : AppRequestDC where Res : AppResponseDC + public static async Task SendKundenAppClientRequestAsync(Req request, string tenant, long useroid) where Req : AppRequestDC where Res : GkvResponseDC { string server = AppRequestSender.GetServerFromTenant(tenant); diff --git a/Shared/Core/DakotaValidator.cs b/Shared/Core/DakotaValidator.cs index b8fd0e33a..873283dc3 100644 --- a/Shared/Core/DakotaValidator.cs +++ b/Shared/Core/DakotaValidator.cs @@ -70,7 +70,7 @@ namespace BS.Shared.Core error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Kostenträger Kennzeichen: \"{orga.IKKostentrager}\"."; else if (!IsIKNumberValid(orga.IKDatenannahmestelle)) error = $"Die Organisation \"{orga.Name}\" hat kein gültiges IK Datenannahmestelle Kennzeichen: \"{orga.IKDatenannahmestelle}\"."; - else if (!string.IsNullOrEmpty(orga.BezDatenannahmestelle)) + else if (string.IsNullOrWhiteSpace(orga.BezDatenannahmestelle)) error = $"Die Organisation \"{orga.Name}\" hat keine gültige Bezeichnung Datenannahmestelle: \"{orga.BezDatenannahmestelle}\"."; if (error != null) diff --git a/Shared/DataContracts/GkvAbrechnung/GkvRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvRequestDC.cs index 47d314fc9..215005839 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvRequestDC.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvRequestDC.cs @@ -10,6 +10,8 @@ namespace BS.Shared.DataContracts.GkvAbrechnung [DataContract] public class GkvRequestDC : AppRequestDC { + public GkvRequestDC() : base(RequestType.Default) { } + public GkvRequestDC(RequestType type) : base(type) { } public GkvRequestDC(RequestType type, string tenant, string username, string password) : base(type, tenant) diff --git a/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs index 6fea1bf45..5288e1664 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs @@ -9,6 +9,7 @@ namespace BS.Shared.DataContracts.GkvAbrechnung { public class GkvServerGetStatusResponseDC : GkvResponseDC { + public GkvServerGetStatusResponseDC() : base() { } public GkvServerGetStatusResponseDC(bool success) : base(success) { } public GkvServerGetStatusResponseDC(bool success, string message) : base(success, message) { }