diff --git a/Host/GkvAbrechnungView.aspx.cs b/Host/GkvAbrechnungView.aspx.cs index 0f867ea21..55f5c2e65 100644 --- a/Host/GkvAbrechnungView.aspx.cs +++ b/Host/GkvAbrechnungView.aspx.cs @@ -31,6 +31,7 @@ using Dakota.Models; using System.Xml; using System.Xml.Linq; using System.Diagnostics; +using System.Xml.Serialization; namespace Host { @@ -44,8 +45,6 @@ namespace Host private string ResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath"); private string QueueFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungQueueFolderPath"); - private string DakotaPath { get; set; } = ConfigurationManager.AppSettings.Get("DakotaPath"); - public GkvApp8Request GkvRequest { get; set; } protected void Page_Load(object sender, EventArgs e) @@ -135,6 +134,12 @@ namespace Host private bool TryLogin() => TryLogin(GkvRequest); private bool TryLogin(GkvApp8Request gkv_request) { + if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF") + { + gkv_request.Tenant = "7375324044"; + return true; + } + var server = GetServerFromTenant(gkv_request.Tenant); var loginurl = string.Format(LOGINSERVER_URL, server); @@ -143,9 +148,6 @@ namespace Host loginurl = string.Format(LOGINSERVER_URL, "http://localhost:3777/Host"); #endif - if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF") - return true; - bool successful = false; try @@ -219,7 +221,7 @@ namespace Host try { // Load XML Info - var results = GetResultFile(req.Tenant); + var results = GetResultFile(GkvRequest.Tenant); if (results is object) for (int i = 0; i < tuple_count; i++) @@ -261,28 +263,6 @@ namespace Host SendResponse(response); } - private void CheckDakotaStatus() => ExecuteDakota("-s", 0); - private void SendViaDakota() => ExecuteDakota("-e", 0, 1); - private int ExecuteDakota(string arg, params int[] accepted_return_codes) - { - var path = DakotaPath; - - var process = Process.Start(path, arg); - - var success = process.WaitForExit(PROCESS_WAITFOREXIT_MS); - - if (!success) - throw new DakotaException($"Execute {arg} Timeout"); - - var returncode = process.ExitCode; - - if (accepted_return_codes is object && accepted_return_codes.Length > 0) - if (accepted_return_codes.All(x => x != returncode)) - throw new DakotaException($"Execute {arg} rc: " + returncode); - - return returncode; - } - private string SaveFileInFileSystem(GkvApp8SendNewRequest req, bool debug_mode = false) => SaveFileInFileSystem(req.GkvTransferProtokoll.GkvTransferProtokollOid.Value, req.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername, req.GkvTransferProtokoll.Nutzdatendatei, req.GkvTransferProtokoll.Auftragsdatei, debug_mode); @@ -319,12 +299,6 @@ namespace Host return finalpath; } - private void DeleteFileInFileSystem(string finalpath) - { - File.Delete(finalpath); - File.Delete(finalpath + ".auf"); - } - private string GetServerFromTenant(string tenant) { try @@ -359,32 +333,56 @@ namespace Host if (string.IsNullOrWhiteSpace(tenant)) throw new DakotaException("Tenant is empty or whitespace"); - var folder = path; - var location = Path.GetFullPath(Path.Combine(folder, $"{tenant}.results.xml")); + var folder = new DirectoryInfo(Path.Combine(path, tenant)); - if (!Directory.Exists(folder)) - Directory.CreateDirectory(folder); - - if (!File.Exists(location)) + if (!folder.Exists) { - Directory.CreateDirectory(folder); - using (File.Create(location)) { }; return null; } + + var dict = new Dictionary(); + foreach (var file in folder.GetFiles("*.xml")) + { + var xml = GetFehlerXmlFromFile(file); - var doc = XDocument.Load(location); + if (xml is null) + continue; - var list = doc?.Root?.Elements("Fehler")? - .Select(GkvApp8FehlerXml.Parse) - .Select(GkvApp8FehlerXml.ToDC) - .ToList(); - - return list?.ToDictionary(dc => dc.Oid); + dict.Add(xml.Oid, GkvApp8FehlerXml.ToDC(xml)); + } + return dict; + } + catch (DakotaException e) + { + throw e; } catch (Exception e) { throw new DakotaException("App8 Server Error: " + e.ToString()); } } + + private GkvApp8FehlerXml GetFehlerXmlFromFile(FileSystemInfo file) + { + if (!file.Exists) + return null; + + using (var stream = File.OpenRead(file.FullName)) + { + var serializer = new XmlSerializer(typeof(GkvApp8FehlerXml)); + return serializer.Deserialize(stream) as GkvApp8FehlerXml; + } + + try + { + + } + catch (Exception) + { + + } + + return null; + } } } \ No newline at end of file