From 563a68826a410e7cf17d984ce5459658f86285df Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Fri, 25 Oct 2024 17:30:27 +0200 Subject: [PATCH] temp 2 --- BeWo/ServiceProxy/Generated.cs | 32 +- .../Accounting/GkvAbrechnungOverview.xaml.cs | 2 +- BeWo/View/Detail/OrganisationView.xaml.cs | 4 +- Dakota/Dakota.csproj | 1 - DakotaUnitTest/GkvObjectUnitTest.cs | 2 +- Host/GkvAbrechnungClient.aspx | 1 + Host/GkvAbrechnungClient.aspx.cs | 100 +++ ...s => GkvAbrechnungClient.aspx.designer.cs} | 34 +- Host/GkvAbrechnungServer.aspx | 1 + ...ew.aspx.cs => GkvAbrechnungServer.aspx.cs} | 758 +++++++++--------- Host/GkvAbrechnungServer.aspx.designer.cs | 17 + Host/GkvAbrechnungView.aspx | 3 - Host/Host.csproj | 18 +- .../ServiceContracts/IAccountingService.cs | 4 +- .../AccountingServiceImp.cs | 64 +- Shared/AppSender/AppRequestSender.cs | 44 + Shared/AppSender/GkvSender.cs | 62 ++ Shared/BeWoEntityEnums.cs | 15 +- Shared/DataContracts/AppRequestDC.cs | 25 + Shared/DataContracts/AppResponseDC.cs | 26 + .../GkvAbrechnungCreateRequestDC.cs | 18 + .../GkvAbrechnungCreateResponseDC.cs | 21 + .../GkvAbrechnung/GkvAbrechnungDC.cs | 4 +- .../GkvAbrechnungGetIKRequestDC.cs | 18 + .../GkvAbrechnungGetIKResponseDC.cs | 22 + .../GkvAbrechnung/GkvAbrechnungRequestDC.cs | 28 - .../GkvAbrechnung/GkvAbrechnungResponseDC.cs | 22 - .../GkvAbrechnungSendRequestDC.cs | 13 +- .../GkvAbrechnungSendResponseDC.cs | 25 +- .../GkvAbrechnungViewFilterDC.cs | 28 +- .../GkvAbrechnung/GkvApp8GetIKRequest.cs | 29 - .../GkvAbrechnung/GkvApp8GetIKResponse.cs | 27 - .../GkvAbrechnung/GkvApp8GetStatusRequest.cs | 20 - .../GkvAbrechnung/GkvApp8GetStatusResponse.cs | 25 - .../GkvAbrechnung/GkvApp8Request.cs | 28 - .../GkvAbrechnung/GkvApp8Response.cs | 29 - .../GkvAbrechnung/GkvApp8SendNewRequest.cs | 20 - .../GkvAbrechnung/GkvApp8SendNewResponse.cs | 25 - .../GkvAbrechnung/GkvClientResultRequestDC.cs | 18 + .../GkvAbrechnung/GkvRequestDC.cs | 22 + .../GkvAbrechnung/GkvResponseDC.cs | 16 + .../GkvAbrechnung/GkvServerGetIKRequestDC.cs | 20 + .../GkvAbrechnung/GkvServerGetIKResponseDC.cs | 21 + .../GkvServerGetStatusRequestDC.cs | 17 + .../GkvServerGetStatusResponseDC.cs | 17 + ...kvApp8ResultDC.cs => GkvServerResultDC.cs} | 2 +- ...App8ResultXml.cs => GkvServerResultXml.cs} | 44 +- .../GkvServerSendNewRequestDC.cs | 17 + .../GkvServerSendNewResponseDC.cs | 20 + .../Exceptions/GkvException.cs | 13 +- Shared/Shared.csproj | 32 +- 51 files changed, 1061 insertions(+), 813 deletions(-) create mode 100644 Host/GkvAbrechnungClient.aspx create mode 100644 Host/GkvAbrechnungClient.aspx.cs rename Host/{GkvAbrechnungView.aspx.designer.cs => GkvAbrechnungClient.aspx.designer.cs} (85%) create mode 100644 Host/GkvAbrechnungServer.aspx rename Host/{GkvAbrechnungView.aspx.cs => GkvAbrechnungServer.aspx.cs} (62%) create mode 100644 Host/GkvAbrechnungServer.aspx.designer.cs delete mode 100644 Host/GkvAbrechnungView.aspx create mode 100644 Shared/AppSender/AppRequestSender.cs create mode 100644 Shared/AppSender/GkvSender.cs create mode 100644 Shared/DataContracts/AppRequestDC.cs create mode 100644 Shared/DataContracts/AppResponseDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvAbrechnungCreateRequestDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvAbrechnungCreateResponseDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvAbrechnungGetIKRequestDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvAbrechnungGetIKResponseDC.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvAbrechnungRequestDC.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvAbrechnungResponseDC.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvApp8GetIKRequest.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvApp8GetIKResponse.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvApp8GetStatusRequest.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvApp8GetStatusResponse.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvApp8Request.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvApp8Response.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvApp8SendNewRequest.cs delete mode 100644 Shared/DataContracts/GkvAbrechnung/GkvApp8SendNewResponse.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvClientResultRequestDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvRequestDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvResponseDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvServerGetIKRequestDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvServerGetIKResponseDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusRequestDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs rename Shared/DataContracts/GkvAbrechnung/{GkvApp8ResultDC.cs => GkvServerResultDC.cs} (94%) rename Shared/DataContracts/GkvAbrechnung/{GkvApp8ResultXml.cs => GkvServerResultXml.cs} (73%) create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvServerSendNewRequestDC.cs create mode 100644 Shared/DataContracts/GkvAbrechnung/GkvServerSendNewResponseDC.cs rename Dakota/Models/DakotaException.cs => Shared/Exceptions/GkvException.cs (53%) diff --git a/BeWo/ServiceProxy/Generated.cs b/BeWo/ServiceProxy/Generated.cs index 411c2d298..011f39f6f 100644 --- a/BeWo/ServiceProxy/Generated.cs +++ b/BeWo/ServiceProxy/Generated.cs @@ -2104,14 +2104,14 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungViewFilterDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungRequestDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungResponseDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateRequestDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateResponseDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKRequest))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8Request))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKResponse))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8Response))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvServerGetIKRequestDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvRequestDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvServerGetIKResponseDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvResponseDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] @@ -6342,14 +6342,14 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvTransferProtokollDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungViewFilterDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungRequestDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungResponseDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateRequestDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateResponseDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKRequest))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8Request))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKResponse))] - [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8Response))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvServerGetIKRequestDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvRequestDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvServerGetIKResponseDC))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvResponseDC))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List))] @@ -9720,7 +9720,7 @@ namespace BeWo.ServiceProxy [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnungResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/CreateNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungRequestDC request); + BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateRequestDC request); [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/UpdateGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/UpdateGkvAbrechnungResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/UpdateGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] @@ -9736,7 +9736,7 @@ namespace BeWo.ServiceProxy [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/SendApp8GetIKRequest", ReplyAction="http://tempuri.org/IAccountingService/SendApp8GetIKRequestResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/SendApp8GetIKRequestBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKResponse SendApp8GetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKRequest req); + BS.Shared.DataContracts.GkvAbrechnung.GkvServerGetIKResponseDC SendApp8GetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvServerGetIKRequestDC req); } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] @@ -9948,7 +9948,7 @@ namespace BeWo.ServiceProxy return base.Channel.GetFilteredGkvAbrechnungen(gkvAbrechnungViewFilter); } - public BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungRequestDC request) + public BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateRequestDC request) { return base.Channel.CreateNewGkvAbrechnung(request); } @@ -9968,7 +9968,7 @@ namespace BeWo.ServiceProxy return base.Channel.SendNewGkvAbrechnung(req); } - public BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKResponse SendApp8GetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvApp8GetIKRequest req) + public BS.Shared.DataContracts.GkvAbrechnung.GkvServerGetIKResponseDC SendApp8GetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvServerGetIKRequestDC req) { return base.Channel.SendApp8GetIKRequest(req); } diff --git a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs index 4852e9d50..0cbac3eb2 100644 --- a/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs +++ b/BeWo/View/Detail/Accounting/GkvAbrechnungOverview.xaml.cs @@ -140,7 +140,7 @@ namespace BeWo.View.Detail.Accounting MainControl.CloseCurrentPopUp(); var gkv_abrechnung = e.Data; - var gkv_filter = new GkvAbrechnungRequestDC(gkv_abrechnung); + var gkv_filter = new GkvAbrechnungCreateRequestDC(gkv_abrechnung); gkv_filter.SelectedInvoiceBases = checked_invoice_bases.Select(x => x.DataContract.InvoiceBaseOid.Value).ToList(); diff --git a/BeWo/View/Detail/OrganisationView.xaml.cs b/BeWo/View/Detail/OrganisationView.xaml.cs index ff6b466a3..d5ef800e6 100644 --- a/BeWo/View/Detail/OrganisationView.xaml.cs +++ b/BeWo/View/Detail/OrganisationView.xaml.cs @@ -314,7 +314,7 @@ namespace BeWo.View.Detail private void IKNumber_Button_Click(object sender, RoutedEventArgs e) { - var req = new GkvApp8GetIKRequest(); + var req = new GkvServerGetIKRequestDC(); req.IKKrankenkasse = ViewModel.IKKrankenkasse; req.Leistungserbringergruppe = ViewModel.Leistungserbringergruppe; @@ -322,7 +322,7 @@ namespace BeWo.View.Detail ServiceFacade.DoAccountingServiceAsync(x => x.SendApp8GetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb))); } - private void IKRequestCallback(GkvApp8GetIKRequest req, GkvApp8GetIKResponse response) + private void IKRequestCallback(GkvServerGetIKRequestDC req, GkvServerGetIKResponseDC response) { if(response is null || !response.Success) { diff --git a/Dakota/Dakota.csproj b/Dakota/Dakota.csproj index de47e4d3f..088829f30 100644 --- a/Dakota/Dakota.csproj +++ b/Dakota/Dakota.csproj @@ -52,7 +52,6 @@ - diff --git a/DakotaUnitTest/GkvObjectUnitTest.cs b/DakotaUnitTest/GkvObjectUnitTest.cs index 6a33f319f..a24086ecd 100644 --- a/DakotaUnitTest/GkvObjectUnitTest.cs +++ b/DakotaUnitTest/GkvObjectUnitTest.cs @@ -21,7 +21,7 @@ namespace DakotaUnitTest [TestMethod] public void ValidateXmlParse() { - var convert = GkvApp8ResultXml.GetResultXml("fehler_example.xml"); + var convert = GkvServerResultXml.GetResultXml("fehler_example.xml"); Assert.IsNotNull(convert); } diff --git a/Host/GkvAbrechnungClient.aspx b/Host/GkvAbrechnungClient.aspx new file mode 100644 index 000000000..c50244dce --- /dev/null +++ b/Host/GkvAbrechnungClient.aspx @@ -0,0 +1 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GkvAbrechnungClient.aspx.cs" Inherits="Host.GkvAbrechnungClient" %> diff --git a/Host/GkvAbrechnungClient.aspx.cs b/Host/GkvAbrechnungClient.aspx.cs new file mode 100644 index 000000000..06de97060 --- /dev/null +++ b/Host/GkvAbrechnungClient.aspx.cs @@ -0,0 +1,100 @@ +using BS.Shared; +using BS.Shared.AppSender; +using BS.Shared.DataContracts.GkvAbrechnung; +using BS.Shared.Exceptions; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace Host +{ + public partial class GkvAbrechnungClient : Page + { + private readonly string INVALID_INPUT = "Ungültige Eingabe"; + + public GkvRequestDC GkvRequest { get; set; } + + public void Sleep() => Thread.Sleep(5000); + + protected void Page_Load(object sender, EventArgs e) + { + try + { + //https://app8.bewoplaner.de/Host/GkvAbrechungServer?tenant=12345 + + var str = new StreamReader(Request.InputStream).ReadToEnd(); + + GkvRequest = GkvSender.DeserializeRequest(str, SendInvalidInputResponse); + + switch (GkvRequest.Type) + { + case RequestType.GkvClientResult: + ClientResult(GkvSender.DeserializeRequest(str, SendInvalidInputResponse)); + return; + default: + SendErrorResponse("RequestType unbekannt."); + return; + } + } + catch (ThreadAbortException eee) + { + + } + catch (Exception ex) + { + var ex_text = ex.Message + "\n" + ex.StackTrace; + SendErrorResponse(ex_text); + } + } + + + + private void ClientResult(GkvClientResultRequestDC req) + { + // Response + var response = new GkvResponseDC(false, "default"); + + try + { + response.Success = true; + } + catch (GkvException e) + { + response.Message = e.Message; + } + catch (Exception e) + { + response.Message = e.Message; + } + + SendResponse(response); + } + + #region Senden + + private void SendInvalidInputResponse() => SendErrorResponse(INVALID_INPUT); + private void SendErrorResponse(string message) + { + var response = new GkvResponseDC(false, message); + + Sleep(); + + SendResponse(GkvSender.SerializeResponse(response)); + } + private void SendResponse(GkvResponseDC res) => SendResponse(GkvSender.SerializeResponse(res)); + private void SendResponse(string str) + { + Response.Write(str); + + Response.End(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Host/GkvAbrechnungView.aspx.designer.cs b/Host/GkvAbrechnungClient.aspx.designer.cs similarity index 85% rename from Host/GkvAbrechnungView.aspx.designer.cs rename to Host/GkvAbrechnungClient.aspx.designer.cs index e85b168f0..f21192b4a 100644 --- a/Host/GkvAbrechnungView.aspx.designer.cs +++ b/Host/GkvAbrechnungClient.aspx.designer.cs @@ -1,17 +1,17 @@ -//------------------------------------------------------------------------------ -// -// Dieser Code wurde von einem Tool generiert. -// -// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn -// der Code neu generiert wird. -// -//------------------------------------------------------------------------------ - -namespace Host -{ - - - public partial class GkvAbrechnungView - { - } -} +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// +// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn +// der Code neu generiert wird. +// +//------------------------------------------------------------------------------ + +namespace Host +{ + + + public partial class GkvAbrechnungClient + { + } +} diff --git a/Host/GkvAbrechnungServer.aspx b/Host/GkvAbrechnungServer.aspx new file mode 100644 index 000000000..cf25d1d71 --- /dev/null +++ b/Host/GkvAbrechnungServer.aspx @@ -0,0 +1 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GkvAbrechnungServer.aspx.cs" Inherits="Host.GkvAbrechnungServer"%> \ No newline at end of file diff --git a/Host/GkvAbrechnungView.aspx.cs b/Host/GkvAbrechnungServer.aspx.cs similarity index 62% rename from Host/GkvAbrechnungView.aspx.cs rename to Host/GkvAbrechnungServer.aspx.cs index 3f6fe23ae..d23f071d6 100644 --- a/Host/GkvAbrechnungView.aspx.cs +++ b/Host/GkvAbrechnungServer.aspx.cs @@ -1,391 +1,369 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Security; -using BeWo.Service.Plugins; -using BS.Shared; -using BS.Shared.Core; -using BS.Shared.DataContracts; - -using BeWo.Data; -using BeWo.Report; -using BeWo.Service.Security; - -using DevExpress.XtraPrinting; -using DevExpress.XtraReports.UI; - -using Page = System.Web.UI.Page; -using System.Text; -using Newtonsoft.Json; -using BS.Shared.DataContracts.GkvAbrechnung; -using System.Net; -using System.Collections.Specialized; -using BeWo.Data.Access; -using BeWo.Service.DCEntityMapper; -using BeWo.Data.Entities; -using BS.Shared.Extensions; -using System.Threading; -using System.Configuration; -using Dakota.Models; -using System.Xml; -using System.Xml.Linq; -using System.Diagnostics; -using System.Xml.Serialization; -using Dakota.Logic; -using System.ComponentModel; - -namespace Host -{ - public partial class GkvAbrechnungView : Page - { - public const int PROCESS_WAITFOREXIT_MS = 10 * 1000; - - private string GETSERVER_URL = "https://support.bewoplaner.de/api/getserver.php?k={0}&t=0"; - private string LOGINSERVER_URL = "{0}/Login.aspx"; - - private string ResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath"); - private string QueueFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungQueueFolderPath"); - private string KostentragerdateiFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvKostentragerdateiFolderPath"); - - public GkvApp8Request GkvRequest { get; set; } - - public void Sleep() => Thread.Sleep(5000); - - protected void Page_Load(object sender, EventArgs e) - { - try - { - //https://app8.bewoplaner.de/Host/GkvAbrechungview?tenant=12345 - - var str = new StreamReader(Request.InputStream).ReadToEnd(); - - if (string.IsNullOrEmpty(str)) - SendErrorResponse("Ungültige Eingabe"); - - GkvRequest = JsonConvert.DeserializeObject(str); - - if (!CheckValues()) - SendErrorResponse("Check Fehlgeschlagen"); - - if (!TryLogin()) - SendErrorResponse("Login Fehlgeschlagen"); - - switch (GkvRequest.Type) - { - case GkvAbrechnungApp8RequestTypeDC.SendNew: - SendNew(JsonConvert.DeserializeObject(str)); - return; - case GkvAbrechnungApp8RequestTypeDC.GetStatus: - GetStatus(JsonConvert.DeserializeObject(str)); - return; - case GkvAbrechnungApp8RequestTypeDC.GetIKNumber: - GetIK(JsonConvert.DeserializeObject(str)); - return; - default: - SendErrorResponse("GkvAbrechnungType unbekannt."); - return; - } - } - catch (ThreadAbortException eee) - { - - } - catch (Exception ex) - { - var ex_text = ex.Message + "\n" + ex.StackTrace; - SendErrorResponse(ex_text); - } - } - - private void SendErrorResponse(string message) - { - var response = new GkvApp8Response(); - - response.Success = false; - response.Message = message; - - Sleep(); - - SendResponse(JsonConvert.SerializeObject(response)); - } - private void SendResponse(object res) => SendResponse(JsonConvert.SerializeObject(res)); - private void SendResponse(string str) - { - Response.Write(str); - - Response.End(); - //Context.ApplicationInstance.CompleteRequest(); - } - - private bool CheckValues() => CheckValues(GkvRequest); - private bool CheckValues(GkvApp8Request request) - { - if (request == null) - return false; - if (request.Type == GkvAbrechnungApp8RequestTypeDC.Default) - return false; - if (string.IsNullOrWhiteSpace(request.Username)) - return false; - if (string.IsNullOrWhiteSpace(request.Tenant)) - return false; - -#if !DEBUG - if (string.IsNullOrWhiteSpace(request.Password)) - return false; -#endif - - return true; - } - - private bool TryLogin() => TryLogin(GkvRequest); - private bool TryLogin(GkvApp8Request gkv_request) - { - var server = GetServerFromTenant(gkv_request.Tenant); - - if (string.IsNullOrEmpty(server)) - return false; - - var loginurl = string.Format(LOGINSERVER_URL, $"https://{server}/service"); - -#if DEBUG - if(server.IndexOf("localhost") > 0) - loginurl = string.Format(LOGINSERVER_URL, $"http://{server}/Host"); -#endif - - bool successful; - byte[] result; - string result_str; - - try - { - using (WebClient client = new WebClient()) - { - var nvc = new NameValueCollection(); - nvc.Add("password", gkv_request.Password); - nvc.Add("username", gkv_request.Username); - nvc.Add("tenant", gkv_request.Tenant); - - result = client.UploadValues(loginurl, "POST", nvc); - result_str = Encoding.Default.GetString(result); - } - } - catch (Exception e) - { - throw new DakotaException($"loginurl: {loginurl} | " + e.ToString()); - } - - successful = Convert.ToBoolean(result_str); - - return successful; - } - - private void SendNew(GkvApp8SendNewRequest req) - { - // Response - var response = new GkvApp8SendNewResponse(false); - - var protokoll = req.GkvTransferProtokoll; - - try - { - var finalpath = SaveFileInFileSystem(req); - - req.GkvTransferProtokoll.SentApp8Success = true; - - response.Success = true; - } - catch (DakotaException e) - { - protokoll.ResultType = GkvTransferResultType.Soft; - protokoll.Fehlerdatum = DateTime.Now; - protokoll.Fehlertitel = "App8"; - protokoll.Fehlernachricht = e.Message; - - response.Message = e.Message; - } - catch (Exception e) - { - protokoll.ResultType = GkvTransferResultType.Soft; - protokoll.Fehlerdatum = DateTime.Now; - protokoll.Fehlertitel = "App8"; - protokoll.Fehlernachricht = e.Message; - - response.Message = e.Message; - } - - response.GkvTransferProtokollDC = protokoll; - - SendResponse(response); - } - private void GetStatus(GkvApp8GetStatusRequest req) - { - var response = new GkvApp8GetStatusResponse(false); - - var tuple_count = req.Oids.Length; - - response.Result = new GkvApp8ResultDC[tuple_count]; - - try - { - // Load XML Info - var results = GetResultFile(GkvRequest.Tenant); - - if (results is object) - for (int i = 0; i < tuple_count; i++) - { - var gkv_transfer_oid = req.Oids[i]; - - if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC)) - { - response.Result[i] = fehlerDC; - } - } - - ClearResultFolder(GkvRequest.Tenant, req.Oids); - - response.Success = true; - } - catch (DakotaException e) - { - response.Message = e.Message; - } - catch (Exception e) - { - response.Message = e.ToString(); - } - - SendResponse(response); - - return; - } - private void GetIK(GkvApp8GetIKRequest req) - { - var ktd_reader = new DakotaKTDReader(KostentragerdateiFolderPath); - - var resolved = ktd_reader.Resolve(req.IKKrankenkasse, req.Abrechnungscode, req.Tarifkennzeichen); - - var response = new GkvApp8GetIKResponse(); - - response.Success = true; - response.Gefunden = resolved is object; - - if (response.Gefunden) - { - response.IKDatenannahmestelle = resolved.Item1; - response.IKKostentrager = resolved.Item2; - response.IKKrankenkasse = resolved.Item3; - response.BezDatenannahmestelle = resolved.Item4; - } - - SendResponse(response); - } - - private string SaveFileInFileSystem(GkvApp8SendNewRequest req) - => SaveFileInFileSystem(req.GkvTransferProtokoll.GkvTransferProtokollOid.Value, GkvRequest.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername, - req.GkvTransferProtokoll.Nutzdatendatei, req.GkvTransferProtokoll.Auftragsdatei); - private string SaveFileInFileSystem(long protokoll_oid, string tenant, string datenannahmestelle, string transfername, string nutzdaten, string auftragsdatei) - { - string root_path = QueueFolderPath; - string file_path = $@"{tenant}_{protokoll_oid}_{datenannahmestelle}_{transfername}"; - - Directory.CreateDirectory(root_path); - - var finalpath = root_path + file_path; - - return SaveFileInFileSystem(finalpath, nutzdaten, auftragsdatei); - } - private string SaveFileInFileSystem(string finalpath, string nutzdaten, string auftragsdatei) - { - File.WriteAllText(finalpath, nutzdaten); - - var auftragsdatei2 = Encoding.GetEncoding("ISO-8859-1").GetBytes(auftragsdatei); - - File.WriteAllBytes(finalpath + ".auf", auftragsdatei2); - - return finalpath; - } - - private string GetServerFromTenant(string tenant) - { -#if DEBUG - // return "localhost:3777"; -#endif - try - { - String url = String.Format(GETSERVER_URL, tenant); - using (WebClient client = new WebClient()) - { - //MessageBox.Show(hostAddress); - byte[] response = client.UploadValues(url, "POST", new NameValueCollection()); - - String server = System.Text.Encoding.ASCII.GetString(response); - - return server; - } - } - catch (Exception ex) - { - return null; - } - } - - private void ClearResultFolder(string tenant, long[] oids) - { - var folder = new DirectoryInfo(Path.Combine(ResultFolderPath, tenant)); - - if (!folder.Exists) - return; - - foreach (var file in folder.GetFiles()) - { - var xml_obj = GkvApp8ResultXml.GetResultXml(file.FullName); - - if (xml_obj is GkvApp8ResultXml xml && oids.Contains(xml.Oid)) - continue; - - file.Delete(); - } - } - private Dictionary GetResultFile(string tenant) - { - try - { - var path = ResultFolderPath; - - if (string.IsNullOrWhiteSpace(path)) - throw new DakotaException("Config GkvAbrechnungResultFolderPath is empty or whitespace"); - - if (string.IsNullOrWhiteSpace(tenant)) - throw new DakotaException("Tenant is empty or whitespace"); - - var folder = new DirectoryInfo(Path.Combine(path, tenant)); - - if (!folder.Exists) - { - return null; - } - - var dict = new Dictionary(); - foreach (var file in folder.GetFiles("*.xml")) - { - var xml = GkvApp8ResultXml.GetResultXml(file.FullName); - - if (xml is null) - continue; - - dict.Add(xml.Oid, GkvApp8ResultXml.ToDC(xml)); - } - return dict; - } - catch (DakotaException e) - { - throw e; - } - catch (Exception e) - { - throw new DakotaException("App8 Server Error: " + e.ToString()); - } - } - } +using BS.Shared; +using BS.Shared.AppSender; +using BS.Shared.DataContracts; +using BS.Shared.DataContracts.GkvAbrechnung; +using BS.Shared.Exceptions; +using Dakota.Logic; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Configuration; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using Page = System.Web.UI.Page; + +namespace Host +{ + public partial class GkvAbrechnungServer : Page + { + public const int PROCESS_WAITFOREXIT_MS = 10 * 1000; + + private readonly string GETSERVER_URL = "https://support.bewoplaner.de/api/getserver.php?k={0}&t=0"; + private readonly string LOGINSERVER_URL = "{0}/Login.aspx"; + private readonly string INVALID_INPUT = "Ungültige Eingabe"; + + + private string ResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath"); + private string QueueFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungQueueFolderPath"); + private string KostentragerdateiFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvKostentragerdateiFolderPath"); + + public GkvRequestDC GkvRequest { get; set; } + + protected void Page_Load(object sender, EventArgs e) + { + try + { + //https://app8.bewoplaner.de/Host/GkvAbrechungServer?tenant=12345 + + var str = new StreamReader(Request.InputStream).ReadToEnd(); + + GkvRequest = GkvSender.DeserializeRequest(str, SendInvalidInputResponse); + + if (!CheckValues(GkvRequest)) + SendErrorResponse("Check Fehlgeschlagen"); + + if (!TryLogin(GkvRequest)) + SendErrorResponse("Login Fehlgeschlagen"); + + switch (GkvRequest.Type) + { + case RequestType.GkvServerSendNew: + SendNew(GkvSender.DeserializeRequest(str, SendInvalidInputResponse)); + return; + + case RequestType.GkvServerGetIKNumber: + GetIK(GkvSender.DeserializeRequest(str, SendInvalidInputResponse)); + return; + + case RequestType.GkvServerGetStatus: + GetStatus(JsonConvert.DeserializeObject(str)); + return; + + default: + SendErrorResponse("RequestType unbekannt."); + return; + } + } + catch (ThreadAbortException eee) + { + + } + catch (Exception ex) + { + var ex_text = ex.Message + "\n" + ex.StackTrace; + SendErrorResponse(ex_text); + } + } + + private bool CheckValues(GkvRequestDC req) + { + if (req == null) + return false; + if (req.Type == RequestType.Default) + return false; + if (string.IsNullOrWhiteSpace(req.Username)) + return false; + if (string.IsNullOrWhiteSpace(req.Tenant)) + return false; + +#if !DEBUG + if (string.IsNullOrWhiteSpace(request.Password)) + return false; +#endif + + return true; + } + private bool TryLogin(GkvRequestDC req) + { + var server = GetServerFromTenant(req.Tenant); + + if (string.IsNullOrEmpty(server)) + return false; + + var loginurl = string.Format(LOGINSERVER_URL, $"https://{server}/service"); + +#if DEBUG + if (server.IndexOf("localhost") > 0) + loginurl = string.Format(LOGINSERVER_URL, $"http://{server}/Host"); +#endif + + bool successful; + byte[] result; + string result_str; + + try + { + using (WebClient client = new WebClient()) + { + var nvc = new NameValueCollection(); + nvc.Add("password", req.Password); + nvc.Add("username", req.Username); + nvc.Add("tenant", req.Tenant); + + result = client.UploadValues(loginurl, "POST", nvc); + result_str = Encoding.Default.GetString(result); + } + } + catch (Exception e) + { + throw new GkvException($"loginurl: {loginurl} | " + e.ToString()); + } + + successful = Convert.ToBoolean(result_str); + + return successful; + } + + private void SendNew(GkvServerSendNewRequestDC req) + { + // Response + var response = new GkvServerSendNewResponseDC(false); + + var protokoll = req.GkvTransferProtokoll; + + try + { + var finalpath = SaveFileInFileSystem(req); + + req.GkvTransferProtokoll.SentApp8Success = true; + + response.Success = true; + } + catch (GkvException e) + { + protokoll.ResultType = GkvTransferResultType.Soft; + protokoll.Fehlerdatum = DateTime.Now; + protokoll.Fehlertitel = "App8"; + protokoll.Fehlernachricht = e.Message; + + response.Message = e.Message; + } + catch (Exception e) + { + protokoll.ResultType = GkvTransferResultType.Soft; + protokoll.Fehlerdatum = DateTime.Now; + protokoll.Fehlertitel = "App8"; + protokoll.Fehlernachricht = e.Message; + + response.Message = e.Message; + } + + response.GkvTransferProtokollDC = protokoll; + + SendResponse(response); + } + private void GetIK(GkvServerGetIKRequestDC req) + { + var ktd_reader = new DakotaKTDReader(KostentragerdateiFolderPath); + + var resolved = ktd_reader.Resolve(req.IKKrankenkasse, req.Abrechnungscode, req.Tarifkennzeichen); + + var response = new GkvServerGetIKResponseDC(); + + response.Success = true; + response.Gefunden = resolved is object; + + if (response.Gefunden) + { + response.IKDatenannahmestelle = resolved.Item1; + response.IKKostentrager = resolved.Item2; + response.IKKrankenkasse = resolved.Item3; + response.BezDatenannahmestelle = resolved.Item4; + } + + SendResponse(response); + } + private void GetStatus(GkvServerGetStatusRequestDC req) + { + var response = new GkvServerGetStatusResponseDC(false); + + var tuple_count = req.Oids.Length; + + response.Result = new GkvApp8ResultDC[tuple_count]; + + try + { + // Load XML Info + var results = GetResultFile(GkvRequest.Tenant); + + if (results is object) + for (int i = 0; i < tuple_count; i++) + { + var gkv_transfer_oid = req.Oids[i]; + + if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC)) + { + response.Result[i] = fehlerDC; + } + } + + ClearResultFolder(GkvRequest.Tenant, req.Oids); + + response.Success = true; + } + catch (DakotaException e) + { + response.Message = e.Message; + } + catch (Exception e) + { + response.Message = e.ToString(); + } + + SendResponse(response); + + return; + } + + private string SaveFileInFileSystem(GkvServerSendNewRequestDC req) + => SaveFileInFileSystem(req.GkvTransferProtokoll.GkvTransferProtokollOid.Value, GkvRequest.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername, + req.GkvTransferProtokoll.Nutzdatendatei, req.GkvTransferProtokoll.Auftragsdatei); + private string SaveFileInFileSystem(long protokoll_oid, string tenant, string datenannahmestelle, string transfername, string nutzdaten, string auftragsdatei) + { + string root_path = QueueFolderPath; + string file_path = $@"{tenant}_{protokoll_oid}_{datenannahmestelle}_{transfername}"; + + Directory.CreateDirectory(root_path); + + var finalpath = root_path + file_path; + + return SaveFileInFileSystem(finalpath, nutzdaten, auftragsdatei); + } + private string SaveFileInFileSystem(string finalpath, string nutzdaten, string auftragsdatei) + { + File.WriteAllText(finalpath, nutzdaten); + + var auftragsdatei2 = Encoding.GetEncoding("ISO-8859-1").GetBytes(auftragsdatei); + + File.WriteAllBytes(finalpath + ".auf", auftragsdatei2); + + return finalpath; + } + + private string GetServerFromTenant(string tenant) + { +#if DEBUG + // return "localhost:3777"; +#endif + try + { + String url = String.Format(GETSERVER_URL, tenant); + using (WebClient client = new WebClient()) + { + //MessageBox.Show(hostAddress); + byte[] response = client.UploadValues(url, "POST", new NameValueCollection()); + + String server = System.Text.Encoding.ASCII.GetString(response); + + return server; + } + } + catch (Exception ex) + { + return null; + } + } + + private void ClearResultFolder(string tenant, long[] oids) + { + var folder = new DirectoryInfo(Path.Combine(ResultFolderPath, tenant)); + + if (!folder.Exists) + return; + + foreach (var file in folder.GetFiles()) + { + var xml_obj = GkvServerResultXml.GetResultXml(file.FullName); + + if (xml_obj is GkvServerResultXml xml && oids.Contains(xml.Oid)) + continue; + + file.Delete(); + } + } + private Dictionary GetResultFile(string tenant) + { + try + { + var path = ResultFolderPath; + + if (string.IsNullOrWhiteSpace(path)) + throw new GkvException("Config GkvAbrechnungResultFolderPath is empty or whitespace"); + + if (string.IsNullOrWhiteSpace(tenant)) + throw new GkvException("Tenant is empty or whitespace"); + + var folder = new DirectoryInfo(Path.Combine(path, tenant)); + + if (!folder.Exists) + { + return null; + } + + var dict = new Dictionary(); + foreach (var file in folder.GetFiles("*.xml")) + { + var xml = GkvServerResultXml.GetResultXml(file.FullName); + + if (xml is null) + continue; + + dict.Add(xml.Oid, GkvServerResultXml.ToDC(xml)); + } + return dict; + } + catch (GkvException e) + { + throw e; + } + catch (Exception e) + { + throw new GkvException("App8 Server Error: " + e.ToString()); + } + } + + + private void Sleep() => Thread.Sleep(5000); + + private void SendInvalidInputResponse() => SendErrorResponse(INVALID_INPUT); + private void SendErrorResponse(string message) + { + var response = new GkvResponseDC(false, message); + + Sleep(); + + SendResponse(GkvSender.SerializeResponse(response)); + } + private void SendResponse(GkvResponseDC res) => SendResponse(GkvSender.SerializeResponse(res)); + private void SendResponse(string str) + { + Response.Write(str); + + Response.End(); + } + } } \ No newline at end of file diff --git a/Host/GkvAbrechnungServer.aspx.designer.cs b/Host/GkvAbrechnungServer.aspx.designer.cs new file mode 100644 index 000000000..01b260aff --- /dev/null +++ b/Host/GkvAbrechnungServer.aspx.designer.cs @@ -0,0 +1,17 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// +// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn +// der Code neu generiert wird. +// +//------------------------------------------------------------------------------ + +namespace Host +{ + + + public partial class GkvAbrechnungServer + { + } +} diff --git a/Host/GkvAbrechnungView.aspx b/Host/GkvAbrechnungView.aspx deleted file mode 100644 index 71c86e535..000000000 --- a/Host/GkvAbrechnungView.aspx +++ /dev/null @@ -1,3 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GkvAbrechnungView.aspx.cs" Inherits="Host.GkvAbrechnungView"%> - -<%@ Register assembly="DevExpress.XtraReports.v23.2.Web.WebForms, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.XtraReports.Web" tagprefix="dxxr" %> diff --git a/Host/Host.csproj b/Host/Host.csproj index 9b74ec34a..41de1c831 100644 --- a/Host/Host.csproj +++ b/Host/Host.csproj @@ -200,7 +200,8 @@ - + + @@ -263,12 +264,19 @@ DX.aspx - - GkvAbrechnungView.aspx + + GkvAbrechnungClient.aspx ASPXCodeBehind - - GkvAbrechnungView.aspx + + GkvAbrechnungClient.aspx + + + GkvAbrechnungServer.aspx + ASPXCodeBehind + + + GkvAbrechnungServer.aspx Login.aspx diff --git a/Service/ServiceContracts/IAccountingService.cs b/Service/ServiceContracts/IAccountingService.cs index 70696383d..b9bf9366a 100644 --- a/Service/ServiceContracts/IAccountingService.cs +++ b/Service/ServiceContracts/IAccountingService.cs @@ -155,7 +155,7 @@ namespace BeWo.Service.ServiceContracts [FaultContract(typeof(BeWoFault))] [OperationContract] - GkvAbrechnungResponseDC CreateNewGkvAbrechnung(GkvAbrechnungRequestDC request); + GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request); [FaultContract(typeof(BeWoFault))] [OperationContract] @@ -171,6 +171,6 @@ namespace BeWo.Service.ServiceContracts [FaultContract(typeof(BeWoFault))] [OperationContract] - GkvApp8GetIKResponse SendApp8GetIKRequest(GkvApp8GetIKRequest req); + GkvServerGetIKResponseDC SendApp8GetIKRequest(GkvServerGetIKRequestDC req); } } \ No newline at end of file diff --git a/Service/ServiceImplementations/AccountingServiceImp.cs b/Service/ServiceImplementations/AccountingServiceImp.cs index 393740bb4..f5636e35e 100644 --- a/Service/ServiceImplementations/AccountingServiceImp.cs +++ b/Service/ServiceImplementations/AccountingServiceImp.cs @@ -25,6 +25,7 @@ using System.Collections.Specialized; using Newtonsoft.Json; using BS.Shared.DataContracts.GkvAbrechnung; using BS.Shared.Extensions; +using BS.Shared.Exceptions; namespace BeWo.Service.ServiceImplementations { @@ -802,9 +803,9 @@ namespace BeWo.Service.ServiceImplementations } } - public GkvAbrechnungResponseDC CreateNewGkvAbrechnung(GkvAbrechnungRequestDC request) + public GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request) { - var response = new GkvAbrechnungResponseDC(); + var response = new GkvAbrechnungCreateResponseDC(); try { @@ -850,7 +851,7 @@ namespace BeWo.Service.ServiceImplementations return response; } - catch (DakotaException exc) + catch (GkvException exc) { response.Error = exc.Message; } @@ -938,7 +939,7 @@ namespace BeWo.Service.ServiceImplementations response.Successful = app8_response.Success; } - catch (DakotaException de) + catch (GkvException de) { protokoll.ResultType = GkvTransferResultType.Soft; protokoll.Fehlerdatum = DateTime.Now; @@ -978,10 +979,10 @@ namespace BeWo.Service.ServiceImplementations var res = SendApp8GetIKRequest(orga); if (!res.Success) - throw new DakotaException(res.Message, "Interner Fehler"); + throw new GkvException(res.Message, "Interner Fehler"); if (!res.Gefunden) - throw new DakotaException($"Für die Organisation \"{orga.Name}\" mit dem IK \"{orga.IKKrankenkasse}\" konnte keine Datenannahmestelle gefunden werden. " + + throw new GkvException($"Für die Organisation \"{orga.Name}\" mit dem IK \"{orga.IKKrankenkasse}\" konnte keine Datenannahmestelle gefunden werden. " + $"Bitte informieren Sie sich bei der Krankenkasse, ob zum elektronischen Datenaustausch " + $"eine seperate Anmeldung benötigt wird."); @@ -990,7 +991,7 @@ namespace BeWo.Service.ServiceImplementations orga.BezDatenannahmestelle = res.BezDatenannahmestelle; if (!DakotaValidator.IsOrganisationInformationValid(orga.IKDatenannahmestelle, orga.IKKostentrager, orga.IKKrankenkasse, orga.BezDatenannahmestelle)) - throw new DakotaException($"Für die Organisation \"{orga.Name}\" konnten die hinterlegten IKs nicht verifiziert werden: \"{orga.BezDatenannahmestelle}\", \"{orga.IKDatenannahmestelle}\", \"{orga.IKKostentrager}\", \"{orga.IKKrankenkasse}\"", "Interner Fehler"); + throw new GkvException($"Für die Organisation \"{orga.Name}\" konnten die hinterlegten IKs nicht verifiziert werden: \"{orga.BezDatenannahmestelle}\", \"{orga.IKDatenannahmestelle}\", \"{orga.IKKostentrager}\", \"{orga.IKKrankenkasse}\"", "Interner Fehler"); DAOFactory.GenericDAO.Update(orga); @@ -1027,7 +1028,7 @@ namespace BeWo.Service.ServiceImplementations if (manager.DakotaFileDict.Count != 1 || manager.DakotaFileDict.First().Value.GetKostenträgerCount() != 1) { - throw new DakotaException("Unerwartete Anzahl an Dakota Files berechnet."); + throw new GkvException("Unerwartete Anzahl an Dakota Files berechnet."); } var file_from_manager = manager.DakotaFileDict.First().Value; @@ -1041,7 +1042,7 @@ namespace BeWo.Service.ServiceImplementations // that indicates the number of bytes in the value. if (nutzdatendatei.Length > 65535) { - throw new DakotaException($"nutzdatendatei - Länger als 65535: {nutzdatendatei.Length}"); + throw new GkvException($"nutzdatendatei - Länger als 65535: {nutzdatendatei.Length}"); } protokoll.IKDatenannahmestelle = file_from_manager.GetIKDatenannahmestelle(); @@ -1061,7 +1062,7 @@ namespace BeWo.Service.ServiceImplementations protokoll.AbsenderBezeichnung = "ownSoft GmbH"; protokoll.EmpfangerBezeichnung = orga.BezDatenannahmestelle; } - catch (DakotaException de) + catch (GkvException de) { if (string.IsNullOrEmpty(de.Title)) de.Title = "Protokoll Erstellung"; @@ -1070,7 +1071,7 @@ namespace BeWo.Service.ServiceImplementations } catch (Exception e) { - throw new DakotaException(e.Message, "Erstellung"); + throw new GkvException(e.Message, "Erstellung"); } } @@ -1085,7 +1086,7 @@ namespace BeWo.Service.ServiceImplementations { transfernummer = DAOFactory.SearchDAO.GetNextTransfernummer(datenannahmestelle); } - else if (state == GkvState.Error || state == GkvState.ErrorFatal) + else if (state == GkvState.Error || state == GkvState.ErrorFatal || state == GkvState.ErrorFolgefehler) { transfernummer = gkvAbrechnung.GkvTransferProtokolle.Last().Transfernummer; } @@ -1109,19 +1110,19 @@ namespace BeWo.Service.ServiceImplementations return new Tuple(d, t); } - private GkvApp8SendNewResponse SendApp8SendNewRequest(GkvTransferProtokoll protokoll) + private GkvServerSendNewResponseDC SendApp8SendNewRequest(GkvTransferProtokoll protokoll) { var gkv_transfer_dc = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll); - var request_app8 = new GkvApp8SendNewRequest + var request_app8 = new GkvServerSendNewRequestDC { GkvTransferProtokoll = gkv_transfer_dc }; - var response_app8 = SendApp8Request(request_app8); + var response_app8 = SendApp8Request(request_app8); if (!response_app8.Success) - throw new DakotaException(response_app8.Message); + throw new GkvException(response_app8.Message); return response_app8; } @@ -1136,11 +1137,10 @@ namespace BeWo.Service.ServiceImplementations { var updateables_len = updateables.Count(); - var request = new GkvApp8GetStatusRequest + var request = new GkvServerGetStatusRequestDC { Tenant = MultitenancyOperationContextExt.Current.Tenant, - Oids = new long[updateables_len], - DebugMode = "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF", + Oids = new long[updateables_len] }; for (int id = 0; id < updateables_len; id++) @@ -1151,10 +1151,10 @@ namespace BeWo.Service.ServiceImplementations request.Oids[id] = gkv_transfer.GkvTransferProtokollOid.Value; } - GkvApp8GetStatusResponse response_app8; + GkvServerGetStatusResponseDC response_app8; try { - response_app8 = SendApp8Request(request); + response_app8 = SendApp8Request(request); } catch (Exception e) { @@ -1190,14 +1190,14 @@ namespace BeWo.Service.ServiceImplementations return allAreUpToDate; } - public GkvApp8GetIKResponse SendApp8GetIKRequest(GkvApp8GetIKRequest req) + public GkvServerGetIKResponseDC SendApp8GetIKRequest(GkvServerGetIKRequestDC req) { try { req.Abrechnungscode = DakotaUtils.GetAbrechnungscode(req.Leistungserbringergruppe); req.Tarifkennzeichen = DakotaUtils.GetTarifkennzeichen(req.Leistungserbringergruppe); - return SendApp8Request(req); + return SendApp8Request(req); } catch (Exception e) { @@ -1205,23 +1205,23 @@ namespace BeWo.Service.ServiceImplementations } } - private GkvApp8GetIKResponse SendApp8GetIKRequest(Organisation orga) + private GkvServerGetIKResponseDC SendApp8GetIKRequest(Organisation orga) { var gruppe = orga.Leistungserbringergruppe; var abr = DakotaUtils.GetAbrechnungscode(gruppe); var tarif = DakotaUtils.GetTarifkennzeichen(gruppe); - var request = new GkvApp8GetIKRequest + var request = new GkvServerGetIKRequestDC { Abrechnungscode = abr, IKKrankenkasse = orga.IKKrankenkasse, Tarifkennzeichen = tarif }; - return SendApp8Request(request); + return SendApp8Request(request); } - private T2 SendApp8Request(T request) where T : GkvApp8Request where T2 : GkvApp8Response + private T2 SendApp8Request(T request) where T : GkvRequestDC where T2 : GkvResponseDC { string url = "https://app8.bewoplaner.de/service/GkvAbrechnungView.aspx"; @@ -1232,17 +1232,13 @@ namespace BeWo.Service.ServiceImplementations var user = LoggedInUserOperationContextExt.Current?.User ?? SessionFacade.LoggedInUser; if (user == null) { - throw new DakotaException("User unbekannt", "KApp"); + throw new GkvException("User unbekannt", "KApp"); } request.Username = user.LoginName; request.Password = user.BCryptPassword; request.Tenant = MultitenancyOperationContextExt.Current.Tenant; -#if DEBUG - request.DebugMode = "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF"; -#endif - return JsonConvert.DeserializeObject(SendApp8Request(url, JsonConvert.SerializeObject(request))); } private string SendApp8Request(string url, string dataString) @@ -1262,11 +1258,11 @@ namespace BeWo.Service.ServiceImplementations } catch (Exception e) { - throw new DakotaException(e.Message, "App8"); + throw new GkvException(e.Message, "App8"); } if (string.IsNullOrEmpty(response_app8_str)) - throw new DakotaException("Leere Antwort", "App8"); + throw new GkvException("Leere Antwort", "App8"); return response_app8_str; } diff --git a/Shared/AppSender/AppRequestSender.cs b/Shared/AppSender/AppRequestSender.cs new file mode 100644 index 000000000..a18f79cbe --- /dev/null +++ b/Shared/AppSender/AppRequestSender.cs @@ -0,0 +1,44 @@ +using BS.Shared.DataContracts; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.AppSender +{ + public static class AppRequestSender + { + public static T2 Send(T request, string url, string tenant) where T : AppRequestDC where T2 : AppResponseDC + { + request.Tenant = tenant; + + var data = JsonConvert.SerializeObject(request); + + var response_app8_str = Send(url, data, tenant); + + if (string.IsNullOrEmpty(response_app8_str)) + return null; + + return JsonConvert.DeserializeObject(response_app8_str); + } + + private static string Send(string url, string dataString, string tenant) + { + string response_app8_str; + + url += "?tenant=" + tenant; + + using (WebClient client = new WebClient()) + { + client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); + + response_app8_str = client.UploadString(url, "POST", dataString); + } + + return response_app8_str; + } + } +} diff --git a/Shared/AppSender/GkvSender.cs b/Shared/AppSender/GkvSender.cs new file mode 100644 index 000000000..e09c59361 --- /dev/null +++ b/Shared/AppSender/GkvSender.cs @@ -0,0 +1,62 @@ +using BS.Shared.DataContracts; +using BS.Shared.DataContracts.GkvAbrechnung; +using BS.Shared.Exceptions; +using Newtonsoft.Json; +using System; +using System.Net; + +namespace BS.Shared.AppSender +{ + public static class GkvSender + { + public static string SerializeResponse(Res response) where Res : AppResponseDC + => JsonConvert.SerializeObject(response); + public static Req DeserializeRequest(string str, Action sendInvalidInputResponse) where Req : AppRequestDC + { + if (str is null) + sendInvalidInputResponse(); + + var deserialize = JsonConvert.DeserializeObject(str); + + if (deserialize is null) + sendInvalidInputResponse(); + + return JsonConvert.DeserializeObject(str); + } + + public static Res SendApp8Request(Req request, string username, string password, string tenant) where Req : GkvRequestDC where Res : GkvResponseDC + { + request.Username = username; + request.Password = password; + + return SendApp8Request(request, tenant); + } + + public static Res SendApp8Request(Req request, string tenant) where Req : GkvRequestDC where Res : GkvResponseDC + { + string url = "https://app8.bewoplaner.de/service/GkvAbrechnungServer.aspx"; + +#if DEBUG + url = "http://localhost:3777/Host/GkvAbrechnungServer.aspx"; +#endif + + Res app8_response; + + try + { + var data = JsonConvert.SerializeObject(request); + + app8_response = AppRequestSender.Send(request, url, tenant); + } + catch (Exception e) + { + throw new GkvException(e.Message, "App8"); + } + + if (app8_response is null) + throw new GkvException("Leere Antwort", "App8"); + + return app8_response; + } + } +} diff --git a/Shared/BeWoEntityEnums.cs b/Shared/BeWoEntityEnums.cs index 698231d7e..8ee3e283f 100644 --- a/Shared/BeWoEntityEnums.cs +++ b/Shared/BeWoEntityEnums.cs @@ -1260,19 +1260,21 @@ namespace BS.Shared AutomaticallyDeleted = 4 } - public enum GkvAbrechnungApp8RequestTypeDC + public enum RequestType { Default, - SendNew, - GetStatus, - GetIKNumber + GkvServerSendNew, + GkvServerGetIKNumber, + GkvServerGetStatus, + GkvClientResult } public enum GkvTransferResultType { - None = 0, // Kein Fehler + Success = 0, // Kein Fehler Soft = 1, // Kann erneut senden - Fatal = 2 // Kann nicht erneut senden + Fatal = 2, // Kann nicht erneut senden + Folgefehler = 3, // Muss neu berechnet werden } public enum GkvState @@ -1280,6 +1282,7 @@ namespace BS.Shared NoSend, Error, ErrorFatal, + ErrorFolgefehler, Paid, WaitingForDakota, WaitingForKrankenkasse, diff --git a/Shared/DataContracts/AppRequestDC.cs b/Shared/DataContracts/AppRequestDC.cs new file mode 100644 index 000000000..c49219567 --- /dev/null +++ b/Shared/DataContracts/AppRequestDC.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts +{ + /// + /// Kann per RequestSender gesendet werden und als ResponseDC empfangen wird. + /// + [DataContract] + public abstract class AppRequestDC : IDataContract + { + [DataMember] public string Tenant { get; set; } + [DataMember] public RequestType Type { get; set; } + + public AppRequestDC(RequestType type, string tenant) + { + Type = type; + Tenant = tenant; + } + } +} diff --git a/Shared/DataContracts/AppResponseDC.cs b/Shared/DataContracts/AppResponseDC.cs new file mode 100644 index 000000000..f088fa02b --- /dev/null +++ b/Shared/DataContracts/AppResponseDC.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts +{ + [DataContract] + public abstract class AppResponseDC : IDataContract + { + [DataMember] public bool Success { get; set; } + [DataMember] public string Message { get; set; } + + public AppResponseDC(bool success) + { + Success = success; + } + + public AppResponseDC(bool success, string message) : this(success) + { + Message = message; + } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungCreateRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungCreateRequestDC.cs new file mode 100644 index 000000000..d6c33850f --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungCreateRequestDC.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + [DataContract] + public class GkvAbrechnungCreateRequestDC : IDataContract + { + public GkvAbrechnungCreateRequestDC() { } + + [DataMember] public GkvAbrechnungDC GkvAbrechnungDC { get; set; } + [DataMember] public List SelectedInvoiceBases { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungCreateResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungCreateResponseDC.cs new file mode 100644 index 000000000..f25fedec3 --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungCreateResponseDC.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + [DataContract] + public class GkvAbrechnungCreateResponseDC : GkvResponseDC + { + public GkvAbrechnungCreateResponseDC(bool success) + : base(success) { } + + public GkvAbrechnungCreateResponseDC(bool success, string message) + : base(success, message) { } + + [DataMember] public GkvAbrechnungDC GkvAbrechnungDC { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungDC.cs index 5b7927daa..9d93bf908 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungDC.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungDC.cs @@ -10,6 +10,8 @@ namespace BS.Shared.DataContracts.GkvAbrechnung [DataContract] public class GkvAbrechnungDC : IDataContract, IGkvAbrechnung { + public GkvAbrechnungDC() { } + [DataMember] public long? GkvAbrechnungOid { get; set; } [DataMember] public long? GkvAbrechnungVersion { get; set; } [DataMember] public string Notice { get; set; } @@ -26,6 +28,6 @@ namespace BS.Shared.DataContracts.GkvAbrechnung [DataMember] public bool IsReady2Send { get; set; } [DataMember] public string SendTooltip { get; set; } - public IGkvTransferProtokoll LastTransferProtokoll => TransferProtokolle?.Last(); + public IGkvTransferProtokoll LastTransferProtokoll => TransferProtokolle?.LastOrDefault(); } } \ No newline at end of file diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungGetIKRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungGetIKRequestDC.cs new file mode 100644 index 000000000..22b699ab8 --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungGetIKRequestDC.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + [DataContract] + public class GkvAbrechnungGetIKRequestDC : IDataContract + { + public GkvAbrechnungGetIKRequestDC() { } + + [DataMember] public string IKKrankenkasse { get; set; } + [DataMember] public string Leistungserbringergruppe { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungGetIKResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungGetIKResponseDC.cs new file mode 100644 index 000000000..438ec984a --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungGetIKResponseDC.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + [DataContract] + public class GkvAbrechnungGetIKResponseDC : GkvResponseDC + { + public GkvAbrechnungGetIKResponseDC(bool success) : base(success) { } + public GkvAbrechnungGetIKResponseDC(bool success, string message) : base(success, message) { } + + [DataMember] public bool Gefunden { get; set; } + [DataMember] public string IKKrankenkasse { get; set; } + [DataMember] public string IKKostentrager { get; set; } + [DataMember] public string IKDatenannahmestelle { get; set; } + [DataMember] public string BezDatenannahmestelle { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungRequestDC.cs deleted file mode 100644 index 3c7468169..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungRequestDC.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - [DataContract] - public class GkvAbrechnungRequestDC : IDataContract - { - public GkvAbrechnungRequestDC(GkvAbrechnungDC gkvAbrechnungDC) : base() - { - GkvAbrechnungDC = gkvAbrechnungDC; - } - public GkvAbrechnungRequestDC() - { - - } - - [DataMember] - public GkvAbrechnungDC GkvAbrechnungDC { get; set; } - - [DataMember] - public List SelectedInvoiceBases { get; set; } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungResponseDC.cs deleted file mode 100644 index bccff2711..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungResponseDC.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - [DataContract] - public class GkvAbrechnungResponseDC : IDataContract - { - [DataMember] - public bool Success { get; set; } - - [DataMember] - public string Error { get; set; } - - [DataMember] - public GkvAbrechnungDC GkvAbrechnungDC { get; set; } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungSendRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungSendRequestDC.cs index 95e905492..cda963008 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungSendRequestDC.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungSendRequestDC.cs @@ -7,10 +7,11 @@ using System.Threading.Tasks; namespace BS.Shared.DataContracts.GkvAbrechnung { - [DataContract] - public class GkvAbrechnungSendRequestDC : IDataContract - { - [DataMember] - public long GkvAbrechnungOid { get; set; } - } + [DataContract] + public class GkvAbrechnungSendRequestDC : IDataContract + { + public GkvAbrechnungSendRequestDC() { } + + [DataMember] public long GkvAbrechnungOid { get; set; } + } } diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungSendResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungSendResponseDC.cs index 4b6dad049..a0f4f0ddc 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungSendResponseDC.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungSendResponseDC.cs @@ -7,19 +7,16 @@ using System.Threading.Tasks; namespace BS.Shared.DataContracts.GkvAbrechnung { - [DataContract] - public class GkvAbrechnungSendResponseDC : IDataContract - { - [DataMember] - public bool Successful { get; set; } + [DataContract] + public class GkvAbrechnungSendResponseDC : GkvResponseDC + { + public GkvAbrechnungSendResponseDC(bool success) + : base(success) { } + + public GkvAbrechnungSendResponseDC(bool success, string message) + : base(success, message) { } - [DataMember] - public string Message { get; set; } - - [DataMember] - public GkvAbrechnungDC GkvAbrechnungDC { get; set; } - - [DataMember] - public GkvTransferProtokollDC TransferProtokoll { get; set; } - } + [DataMember] public GkvAbrechnungDC GkvAbrechnungDC { get; set; } + [DataMember] public GkvTransferProtokollDC TransferProtokoll { get; set; } + } } diff --git a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungViewFilterDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungViewFilterDC.cs index 81c371549..22019eaf2 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungViewFilterDC.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvAbrechnungViewFilterDC.cs @@ -7,24 +7,14 @@ using System.Threading.Tasks; namespace BS.Shared.DataContracts.GkvAbrechnung { - [DataContract] - public class GkvAbrechnungViewFilterDC : IDataContract - { - public GkvAbrechnungViewFilterDC() - { - - } + [DataContract] + public class GkvAbrechnungViewFilterDC : IDataContract + { + public GkvAbrechnungViewFilterDC() { } - [DataMember] - public bool FilterTime { get; set; } - - [DataMember] - public DateTime? Start { get; set; } - - [DataMember] - public DateTime? End { get; set; } - - [DataMember] - public bool FilterForInvoiceDate { get; set; } - } + [DataMember] public bool FilterTime { get; set; } + [DataMember] public DateTime? Start { get; set; } + [DataMember] public DateTime? End { get; set; } + [DataMember] public bool FilterForInvoiceDate { get; set; } + } } diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8GetIKRequest.cs b/Shared/DataContracts/GkvAbrechnung/GkvApp8GetIKRequest.cs deleted file mode 100644 index f155a078f..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8GetIKRequest.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - public class GkvApp8GetIKRequest : GkvApp8Request - { - [DataMember] - public string IKKrankenkasse { get; set; } - - [DataMember] - public string Abrechnungscode { get; set; } - - [DataMember] - public string Tarifkennzeichen { get; set; } - - [DataMember] - public string Leistungserbringergruppe { get; set; } - - public GkvApp8GetIKRequest() - { - Type = GkvAbrechnungApp8RequestTypeDC.GetIKNumber; - } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8GetIKResponse.cs b/Shared/DataContracts/GkvAbrechnung/GkvApp8GetIKResponse.cs deleted file mode 100644 index 2749cf9b4..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8GetIKResponse.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - public class GkvApp8GetIKResponse : GkvApp8Response - { - [DataMember] - public bool Gefunden { get; set; } - - [DataMember] - public string IKKrankenkasse { get; set; } - - [DataMember] - public string IKKostentrager { get; set; } - - [DataMember] - public string IKDatenannahmestelle { get; set; } - - [DataMember] - public string BezDatenannahmestelle { get; set; } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8GetStatusRequest.cs b/Shared/DataContracts/GkvAbrechnung/GkvApp8GetStatusRequest.cs deleted file mode 100644 index 9e97e906b..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8GetStatusRequest.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - public class GkvApp8GetStatusRequest : GkvApp8Request - { - [DataMember] - public long[] Oids { get; set; } - - public GkvApp8GetStatusRequest() - { - Type = GkvAbrechnungApp8RequestTypeDC.GetStatus; - } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8GetStatusResponse.cs b/Shared/DataContracts/GkvAbrechnung/GkvApp8GetStatusResponse.cs deleted file mode 100644 index f79a31965..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8GetStatusResponse.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - public class GkvApp8GetStatusResponse : GkvApp8Response - { - [DataMember] - public GkvApp8ResultDC[] Result { get; set; } - - public GkvApp8GetStatusResponse() - { - - } - - public GkvApp8GetStatusResponse(bool success) : base(success) - { - - } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8Request.cs b/Shared/DataContracts/GkvAbrechnung/GkvApp8Request.cs deleted file mode 100644 index 013f1a0bc..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8Request.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - [DataContract] - public class GkvApp8Request : IDataContract - { - [DataMember] - public string Username { get; set; } - - [DataMember] - public string Password { get; set; } - - [DataMember] - public string Tenant { get; set; } - - [DataMember] - public string DebugMode { get; set; } - - [DataMember] - public GkvAbrechnungApp8RequestTypeDC Type { get; set; } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8Response.cs b/Shared/DataContracts/GkvAbrechnung/GkvApp8Response.cs deleted file mode 100644 index a8ac50a33..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8Response.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - [DataContract] - public class GkvApp8Response : IDataContract - { - [DataMember] - public bool Success { get; set; } - - [DataMember] - public string Message { get; set; } - - public GkvApp8Response() - { - - } - - public GkvApp8Response(bool success) : this() - { - Success = success; - } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8SendNewRequest.cs b/Shared/DataContracts/GkvAbrechnung/GkvApp8SendNewRequest.cs deleted file mode 100644 index c6f4b9af5..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8SendNewRequest.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - public class GkvApp8SendNewRequest : GkvApp8Request - { - [DataMember] - public GkvTransferProtokollDC GkvTransferProtokoll { get; set; } - - public GkvApp8SendNewRequest() - { - Type = GkvAbrechnungApp8RequestTypeDC.SendNew; - } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8SendNewResponse.cs b/Shared/DataContracts/GkvAbrechnung/GkvApp8SendNewResponse.cs deleted file mode 100644 index b58950cec..000000000 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8SendNewResponse.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; - -namespace BS.Shared.DataContracts.GkvAbrechnung -{ - public class GkvApp8SendNewResponse : GkvApp8Response - { - [DataMember] - public GkvTransferProtokollDC GkvTransferProtokollDC { get; set; } - - public GkvApp8SendNewResponse() - { - - } - - public GkvApp8SendNewResponse(bool success) : this() - { - Success = success; - } - } -} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvClientResultRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvClientResultRequestDC.cs new file mode 100644 index 000000000..af7119e0f --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvClientResultRequestDC.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + public class GkvClientResultRequestDC : GkvRequestDC + { + public GkvClientResultRequestDC(string tenant, string username, string password) + : base(RequestType.GkvClientResult, tenant, username, password) { } + + [DataMember] public long Protokoll_Fehler_Oid; + [DataMember] public IList Protokoll_Folgefehler_Oid; + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvRequestDC.cs new file mode 100644 index 000000000..73edbfc93 --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvRequestDC.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + [DataContract] + public class GkvRequestDC : AppRequestDC + { + public GkvRequestDC(RequestType type, string tenant, string username, string password) : base(type, tenant) + { + Username = username; + Password = password; + } + + [DataMember] public string Username { get; set; } + [DataMember] public string Password { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvResponseDC.cs new file mode 100644 index 000000000..d92e065e8 --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvResponseDC.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + [DataContract] + public class GkvResponseDC : AppResponseDC + { + public GkvResponseDC(bool success) : base(success) { } + public GkvResponseDC(bool success, string message) : base(success, message) { } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvServerGetIKRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerGetIKRequestDC.cs new file mode 100644 index 000000000..cc2df0fcf --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerGetIKRequestDC.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + public class GkvServerGetIKRequestDC : GkvRequestDC + { + public GkvServerGetIKRequestDC(string tenant, string username, string password) + : base(RequestType.GkvServerGetIKNumber, tenant, username, password) { } + + [DataMember] public string IKKrankenkasse { get; set; } + [DataMember] public string Abrechnungscode { get; set; } + [DataMember] public string Tarifkennzeichen { get; set; } + [DataMember] public string Leistungserbringergruppe { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvServerGetIKResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerGetIKResponseDC.cs new file mode 100644 index 000000000..f88e848ed --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerGetIKResponseDC.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + public class GkvServerGetIKResponseDC : GkvResponseDC + { + public GkvServerGetIKResponseDC(bool success) : base(success) { } + public GkvServerGetIKResponseDC(bool success, string message) : base(success, message) { } + + [DataMember] public bool Gefunden { get; set; } + [DataMember] public string IKKrankenkasse { get; set; } + [DataMember] public string IKKostentrager { get; set; } + [DataMember] public string IKDatenannahmestelle { get; set; } + [DataMember] public string BezDatenannahmestelle { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusRequestDC.cs new file mode 100644 index 000000000..a502f0bd6 --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusRequestDC.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + public class GkvServerGetStatusRequestDC : GkvRequestDC + { + public GkvServerGetStatusRequestDC(string tenant, string username, string password) + : base(RequestType.GkvServerGetStatus, tenant, username, password) { } + + [DataMember] public long[] Oids { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs new file mode 100644 index 000000000..6fea1bf45 --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerGetStatusResponseDC.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + public class GkvServerGetStatusResponseDC : GkvResponseDC + { + public GkvServerGetStatusResponseDC(bool success) : base(success) { } + public GkvServerGetStatusResponseDC(bool success, string message) : base(success, message) { } + + [DataMember] public GkvServerResultDC[] ResultDC { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8ResultDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerResultDC.cs similarity index 94% rename from Shared/DataContracts/GkvAbrechnung/GkvApp8ResultDC.cs rename to Shared/DataContracts/GkvAbrechnung/GkvServerResultDC.cs index a653a9ee2..f4e5aaaaa 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8ResultDC.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerResultDC.cs @@ -9,7 +9,7 @@ using System.Xml.Linq; namespace BS.Shared.DataContracts.GkvAbrechnung { [DataContract] - public class GkvApp8ResultDC + public class GkvServerResultDC { [DataMember] public long Oid { get; set; } [DataMember] public string Titel { get; set; } diff --git a/Shared/DataContracts/GkvAbrechnung/GkvApp8ResultXml.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerResultXml.cs similarity index 73% rename from Shared/DataContracts/GkvAbrechnung/GkvApp8ResultXml.cs rename to Shared/DataContracts/GkvAbrechnung/GkvServerResultXml.cs index 498408d74..7fd2dfecf 100644 --- a/Shared/DataContracts/GkvAbrechnung/GkvApp8ResultXml.cs +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerResultXml.cs @@ -11,7 +11,7 @@ namespace BS.Shared.DataContracts.GkvAbrechnung { [Serializable()] [XmlRoot("Result")] - public class GkvApp8ResultXml + public class GkvServerResultXml { [XmlAttribute("Oid")] public long Oid { get; set; } @@ -28,15 +28,31 @@ namespace BS.Shared.DataContracts.GkvAbrechnung [XmlElement("Level")] public int Level { get; set; } - public static GkvApp8ResultXml Parse(XElement element) + public static GkvServerResultXml Parse(XElement element) { - var serializer = new XmlSerializer(typeof(GkvApp8ResultXml)); - return (GkvApp8ResultXml)serializer.Deserialize(element.CreateReader()); + var serializer = new XmlSerializer(typeof(GkvServerResultXml)); + return (GkvServerResultXml)serializer.Deserialize(element.CreateReader()); } - public static GkvApp8ResultDC ToDC(GkvApp8ResultXml fehler) + public static GkvServerResultXml GetResultXml(string file_path) { - var dc = new GkvApp8ResultDC(); + try + { + using (var stream = File.OpenRead(file_path)) + { + var serializer = new XmlSerializer(typeof(GkvServerResultXml)); + return serializer.Deserialize(stream) as GkvServerResultXml; + } + } + catch (Exception) + { + return null; + } + } + + public static GkvServerResultDC ToDC(GkvServerResultXml fehler) + { + var dc = new GkvServerResultDC(); dc.Oid = fehler.Oid; dc.Titel = fehler.Titel; @@ -46,21 +62,5 @@ namespace BS.Shared.DataContracts.GkvAbrechnung return dc; } - - public static GkvApp8ResultXml GetResultXml(string file_path) - { - try - { - using (var stream = File.OpenRead(file_path)) - { - var serializer = new XmlSerializer(typeof(GkvApp8ResultXml)); - return serializer.Deserialize(stream) as GkvApp8ResultXml; - } - } - catch (Exception) - { - return null; - } - } } } diff --git a/Shared/DataContracts/GkvAbrechnung/GkvServerSendNewRequestDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerSendNewRequestDC.cs new file mode 100644 index 000000000..956fcd067 --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerSendNewRequestDC.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + public class GkvServerSendNewRequestDC : GkvRequestDC + { + public GkvServerSendNewRequestDC(string tenant, string username, string password) + : base(RequestType.GkvServerSendNew, tenant, username, password) { } + + [DataMember] public GkvTransferProtokollDC GkvTransferProtokoll { get; set; } + } +} diff --git a/Shared/DataContracts/GkvAbrechnung/GkvServerSendNewResponseDC.cs b/Shared/DataContracts/GkvAbrechnung/GkvServerSendNewResponseDC.cs new file mode 100644 index 000000000..28e86bc38 --- /dev/null +++ b/Shared/DataContracts/GkvAbrechnung/GkvServerSendNewResponseDC.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace BS.Shared.DataContracts.GkvAbrechnung +{ + public class GkvServerSendNewResponseDC : GkvResponseDC + { + public GkvServerSendNewResponseDC(bool success) + : base(success) { } + + public GkvServerSendNewResponseDC(bool success, string message) + : base(success, message) { } + + [DataMember] public GkvTransferProtokollDC GkvTransferProtokollDC { get; set; } + } +} diff --git a/Dakota/Models/DakotaException.cs b/Shared/Exceptions/GkvException.cs similarity index 53% rename from Dakota/Models/DakotaException.cs rename to Shared/Exceptions/GkvException.cs index accbee113..38ee54b30 100644 --- a/Dakota/Models/DakotaException.cs +++ b/Shared/Exceptions/GkvException.cs @@ -1,28 +1,27 @@ -using Dakota.Models.Daten; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Dakota.Models +namespace BS.Shared.Exceptions { - public class DakotaException : ArgumentException + public class GkvException : ArgumentException { public string Title { get; set; } public override string Message { get; } - public DakotaException(string message, string title) : this(message) + public GkvException(string message, string title) : this(message) { Title = title; } - public DakotaException(string message) : this() + public GkvException(string message) : this() { Message = message; } - public DakotaException() + public GkvException() { } diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj index bbab1482b..7b3a0006c 100644 --- a/Shared/Shared.csproj +++ b/Shared/Shared.csproj @@ -131,6 +131,7 @@ + @@ -150,6 +151,7 @@ + @@ -173,6 +175,13 @@ + + + + + + + @@ -200,22 +209,20 @@ - - - + + + - - - - - - - + + + + + - + - + @@ -340,6 +347,7 @@ +