GkvAccountingService -> Besseres Load Balance
This commit is contained in:
@@ -2101,7 +2101,6 @@ namespace BeWo.ServiceProxy
|
|||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceInvoicePeriodDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceInvoicePeriodDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceNumberDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceNumberDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceNumberDC>))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceNumberDC>))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AppResponseDC))]
|
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.InvoiceType))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.InvoiceType))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvTransferResultType))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvTransferResultType))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC))]
|
||||||
@@ -2116,6 +2115,7 @@ namespace BeWo.ServiceProxy
|
|||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC))]
|
||||||
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AppResponseDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<System.DateTime>))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<System.DateTime>))]
|
||||||
@@ -6379,7 +6379,6 @@ namespace BeWo.ServiceProxy
|
|||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceInvoicePeriodDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.ServiceInvoicePeriodDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceNumberDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.InvoiceNumberDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceNumberDC>))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceNumberDC>))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AppResponseDC))]
|
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.InvoiceType))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.InvoiceType))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvTransferResultType))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.GkvTransferResultType))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC))]
|
||||||
@@ -6394,6 +6393,7 @@ namespace BeWo.ServiceProxy
|
|||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC))]
|
||||||
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.AppResponseDC))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.MemoryStream))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.IO.Stream))]
|
||||||
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<System.DateTime>))]
|
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<System.DateTime>))]
|
||||||
@@ -9751,38 +9751,6 @@ namespace BeWo.ServiceProxy
|
|||||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/StorniereInvoiceBases", ReplyAction="http://tempuri.org/IAccountingService/StorniereInvoiceBasesResponse")]
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/StorniereInvoiceBases", ReplyAction="http://tempuri.org/IAccountingService/StorniereInvoiceBasesResponse")]
|
||||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/StorniereInvoiceBasesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/StorniereInvoiceBasesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
void StorniereInvoiceBases(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceBaseDC> invoices);
|
void StorniereInvoiceBases(System.Collections.Generic.List<BS.Shared.DataContracts.InvoiceBaseDC> invoices);
|
||||||
|
|
||||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/GetGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/GetGkvAbrechnungResponse")]
|
|
||||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/GetGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
|
||||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC GetGkvAbrechnung(long oid);
|
|
||||||
|
|
||||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/GetAllGkvAbrechnungen", ReplyAction="http://tempuri.org/IAccountingService/GetAllGkvAbrechnungenResponse")]
|
|
||||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/GetAllGkvAbrechnungenBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
|
||||||
System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC> GetAllGkvAbrechnungen();
|
|
||||||
|
|
||||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/GetFilteredGkvAbrechnungen", ReplyAction="http://tempuri.org/IAccountingService/GetFilteredGkvAbrechnungenResponse")]
|
|
||||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/GetFilteredGkvAbrechnungenBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
|
||||||
System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC> GetFilteredGkvAbrechnungen(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter);
|
|
||||||
|
|
||||||
[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.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")]
|
|
||||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC UpdateGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC abrechnung);
|
|
||||||
|
|
||||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/DeleteGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/DeleteGkvAbrechnungResponse")]
|
|
||||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/DeleteGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
|
||||||
void DeleteGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC abrechnung);
|
|
||||||
|
|
||||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/SendNewGkvAbrechnung", ReplyAction="http://tempuri.org/IAccountingService/SendNewGkvAbrechnungResponse")]
|
|
||||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/SendNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
|
||||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC req);
|
|
||||||
|
|
||||||
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccountingService/SendGetIKRequest", ReplyAction="http://tempuri.org/IAccountingService/SendGetIKRequestResponse")]
|
|
||||||
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IAccountingService/SendGetIKRequestBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
|
||||||
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC SendGetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC req);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||||
@@ -9978,6 +9946,80 @@ namespace BeWo.ServiceProxy
|
|||||||
{
|
{
|
||||||
base.Channel.StorniereInvoiceBases(invoices);
|
base.Channel.StorniereInvoiceBases(invoices);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||||
|
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="BeWo.ServiceProxy.IGkvAccountingService")]
|
||||||
|
public interface IGkvAccountingService
|
||||||
|
{
|
||||||
|
|
||||||
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/GetGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/GetGkvAbrechnungResponse")]
|
||||||
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/GetGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
|
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC GetGkvAbrechnung(long oid);
|
||||||
|
|
||||||
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/GetAllGkvAbrechnungen", ReplyAction="http://tempuri.org/IGkvAccountingService/GetAllGkvAbrechnungenResponse")]
|
||||||
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/GetAllGkvAbrechnungenBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
|
System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC> GetAllGkvAbrechnungen();
|
||||||
|
|
||||||
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/GetFilteredGkvAbrechnungen", ReplyAction="http://tempuri.org/IGkvAccountingService/GetFilteredGkvAbrechnungenResponse")]
|
||||||
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/GetFilteredGkvAbrechnungenBeWoFaultFault" +
|
||||||
|
"", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
|
System.Collections.Generic.List<BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC> GetFilteredGkvAbrechnungen(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter);
|
||||||
|
|
||||||
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/CreateNewGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/CreateNewGkvAbrechnungResponse")]
|
||||||
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/CreateNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
|
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungCreateRequestDC request);
|
||||||
|
|
||||||
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/UpdateGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/UpdateGkvAbrechnungResponse")]
|
||||||
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/UpdateGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
|
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC UpdateGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC abrechnung);
|
||||||
|
|
||||||
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/DeleteGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/DeleteGkvAbrechnungResponse")]
|
||||||
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/DeleteGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
|
void DeleteGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC abrechnung);
|
||||||
|
|
||||||
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/SendNewGkvAbrechnung", ReplyAction="http://tempuri.org/IGkvAccountingService/SendNewGkvAbrechnungResponse")]
|
||||||
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/SendNewGkvAbrechnungBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
|
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungSendRequestDC req);
|
||||||
|
|
||||||
|
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IGkvAccountingService/SendGetIKRequest", ReplyAction="http://tempuri.org/IGkvAccountingService/SendGetIKRequestResponse")]
|
||||||
|
[System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IGkvAccountingService/SendGetIKRequestBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")]
|
||||||
|
BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKResponseDC SendGetIKRequest(BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungGetIKRequestDC req);
|
||||||
|
}
|
||||||
|
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||||
|
public interface IGkvAccountingServiceChannel : BeWo.ServiceProxy.IGkvAccountingService, System.ServiceModel.IClientChannel
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
|
||||||
|
public partial class GkvAccountingServiceClient : System.ServiceModel.ClientBase<BeWo.ServiceProxy.IGkvAccountingService>, BeWo.ServiceProxy.IGkvAccountingService
|
||||||
|
{
|
||||||
|
|
||||||
|
public GkvAccountingServiceClient()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public GkvAccountingServiceClient(string endpointConfigurationName) :
|
||||||
|
base(endpointConfigurationName)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public GkvAccountingServiceClient(string endpointConfigurationName, string remoteAddress) :
|
||||||
|
base(endpointConfigurationName, remoteAddress)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public GkvAccountingServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
|
||||||
|
base(endpointConfigurationName, remoteAddress)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public GkvAccountingServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
|
||||||
|
base(binding, remoteAddress)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC GetGkvAbrechnung(long oid)
|
public BS.Shared.DataContracts.GkvAbrechnung.GkvAbrechnungDC GetGkvAbrechnung(long oid)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ namespace BeWo.ServiceProxy
|
|||||||
{ typeof(IAnalysisService), new EndpointAddress(_ServerName + "AnalysisService.svc") },
|
{ typeof(IAnalysisService), new EndpointAddress(_ServerName + "AnalysisService.svc") },
|
||||||
{ typeof(IMailService), new EndpointAddress(_ServerName + "MailService.svc") },
|
{ typeof(IMailService), new EndpointAddress(_ServerName + "MailService.svc") },
|
||||||
{ typeof(IAccountingService), new EndpointAddress(_ServerName + "AccountingService.svc") },
|
{ typeof(IAccountingService), new EndpointAddress(_ServerName + "AccountingService.svc") },
|
||||||
|
{ typeof(IGkvAccountingService), new EndpointAddress(_ServerName + "GkvAccountingService.svc") },
|
||||||
{ typeof(IReportService), new EndpointAddress(_ServerName + "ReportService.svc") }
|
{ typeof(IReportService), new EndpointAddress(_ServerName + "ReportService.svc") }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -232,21 +233,19 @@ namespace BeWo.ServiceProxy
|
|||||||
return default(T);
|
return default(T);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DoWohnheimServiceAsync<T>(Func<ICustomerService, T> pFunc, Action<T> pCallBack, bool showWaitDialog)
|
#region Wohnheim
|
||||||
|
public static void DoWohnheimServiceAsync<T>(Func<ICustomerService, T> pFunc, Action<T> pCallBack, bool showWaitDialog)
|
||||||
{
|
{
|
||||||
DoAsync<CustomerServiceClient, ICustomerService, T>(pFunc, pCallBack, showWaitDialog);
|
DoAsync<CustomerServiceClient, ICustomerService, T>(pFunc, pCallBack, showWaitDialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DoWohnheimServiceAsync<T>(Func<ICustomerService, T> pFunc, Action<T> pCallBack)
|
public static void DoWohnheimServiceAsync<T>(Func<ICustomerService, T> pFunc, Action<T> pCallBack)
|
||||||
{
|
{
|
||||||
DoAsync<CustomerServiceClient, ICustomerService, T>(pFunc, pCallBack, true);
|
DoAsync<CustomerServiceClient, ICustomerService, T>(pFunc, pCallBack, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DoWohnheimServiceAsync(Action<ICustomerService> pAction)
|
public static void DoWohnheimServiceAsync(Action<ICustomerService> pAction)
|
||||||
{
|
{
|
||||||
DoAsync<CustomerServiceClient,ICustomerService>(pAction, true);
|
DoAsync<CustomerServiceClient,ICustomerService>(pAction, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DoWohnheimServiceSync(Action<ICustomerService> pAction)
|
public static void DoWohnheimServiceSync(Action<ICustomerService> pAction)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -258,12 +257,11 @@ namespace BeWo.ServiceProxy
|
|||||||
ShowErrorMessage(e);
|
ShowErrorMessage(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static T DoWohnheimServiceSync<T>(Func<ICustomerService, T> pFunc)
|
||||||
public static T DoWohnheimServiceSync<T>(Func<IOperationsService, T> pFunc)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return pFunc.Invoke(GetInstance<OperationsServiceClient, IOperationsService>());
|
return pFunc.Invoke(GetInstance<CustomerServiceClient, ICustomerService>());
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -272,8 +270,49 @@ namespace BeWo.ServiceProxy
|
|||||||
|
|
||||||
return default(T);
|
return default(T);
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public static void DoMailServiceAsync<T>(Func<IMailService, T> pFunc, Action<T> pCallBack)
|
#region GkvAccounting
|
||||||
|
public static void DoGkvAccountingServiceAsync<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack, bool showWaitDialog)
|
||||||
|
{
|
||||||
|
DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, pCallBack, showWaitDialog);
|
||||||
|
}
|
||||||
|
public static void DoGkvAccountingServiceAsync<T>(Func<IGkvAccountingService, T> pFunc, Action<T> pCallBack)
|
||||||
|
{
|
||||||
|
DoAsync<GkvAccountingServiceClient, IGkvAccountingService, T>(pFunc, pCallBack, true);
|
||||||
|
}
|
||||||
|
public static void DoGkvAccountingServiceAsync(Action<IGkvAccountingService> pAction)
|
||||||
|
{
|
||||||
|
DoAsync<GkvAccountingServiceClient, IGkvAccountingService>(pAction, true);
|
||||||
|
}
|
||||||
|
public static void DoGkvAccountingServiceSync(Action<IGkvAccountingService> pAction)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pAction.Invoke(GetInstance<GkvAccountingServiceClient, IGkvAccountingService>());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
ShowErrorMessage(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static T DoGkvAccountingServiceSync<T>(Func<IGkvAccountingService, T> pFunc)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return pFunc.Invoke(GetInstance<GkvAccountingServiceClient, IGkvAccountingService>());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
ShowErrorMessage(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
public static void DoMailServiceAsync<T>(Func<IMailService, T> pFunc, Action<T> pCallBack)
|
||||||
{
|
{
|
||||||
DoAsync<MailServiceClient, IMailService, T>(pFunc, pCallBack, true);
|
DoAsync<MailServiceClient, IMailService, T>(pFunc, pCallBack, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
svcutil.exe /noConfig /edb /n:*,BeWo.ServiceProxy /out:ServiceProxy\Generated.cs /ct:System.Collections.Generic.List`1 /r:..\Shared\bin\Debug\BS.Shared.dll http://localhost:3777/Host/EmployeeService.svc?wsdl http://localhost:3777/Host/CustomerService.svc?wsdl http://localhost:3777/Host/UserService.svc?wsdl http://localhost:3777/Host/StreamingService.svc?wsdl http://localhost:3777/Host/ValueListService.svc?wsdl http://localhost:3777/Host/DownloadService.svc?wsdl http://localhost:3777/Host/ResourceService.svc?wsdl http://localhost:3777/Host/OperationsService.svc?wsdl http://localhost:3777/Host/AnalysisService.svc?wsdl http://localhost:3777/Host/MailService.svc?wsdl http://localhost:3777/Host/AccountingService.svc?wsdl http://localhost:3777/Host/ReportService.svc?wsdl http://localhost:3777/Host/QueryService.svc?wsdl
|
svcutil.exe /noConfig /edb /n:*,BeWo.ServiceProxy /out:ServiceProxy\Generated.cs /ct:System.Collections.Generic.List`1 /r:..\Shared\bin\Debug\BS.Shared.dll http://localhost:3777/Host/EmployeeService.svc?wsdl http://localhost:3777/Host/CustomerService.svc?wsdl http://localhost:3777/Host/UserService.svc?wsdl http://localhost:3777/Host/StreamingService.svc?wsdl http://localhost:3777/Host/ValueListService.svc?wsdl http://localhost:3777/Host/DownloadService.svc?wsdl http://localhost:3777/Host/ResourceService.svc?wsdl http://localhost:3777/Host/OperationsService.svc?wsdl http://localhost:3777/Host/AnalysisService.svc?wsdl http://localhost:3777/Host/MailService.svc?wsdl http://localhost:3777/Host/AccountingService.svc?wsdl http://localhost:3777/Host/GkvAccountingService.svc?wsdl http://localhost:3777/Host/ReportService.svc?wsdl http://localhost:3777/Host/QueryService.svc?wsdl
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ namespace BeWo.View.Detail.Accounting
|
|||||||
{
|
{
|
||||||
_IsRequesting = true;
|
_IsRequesting = true;
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(s => s.GetFilteredGkvAbrechnungen(null), UpdateGkvAbrechnungList);
|
ServiceFacade.DoGkvAccountingServiceAsync(s => s.GetFilteredGkvAbrechnungen(null), UpdateGkvAbrechnungList);
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
@@ -185,7 +185,7 @@ namespace BeWo.View.Detail.Accounting
|
|||||||
SelectedInvoiceBases = checked_invoice_bases.Select(x => x.DataContract.InvoiceBaseOid.Value).ToList()
|
SelectedInvoiceBases = checked_invoice_bases.Select(x => x.DataContract.InvoiceBaseOid.Value).ToList()
|
||||||
};
|
};
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(x => x.CreateNewGkvAbrechnung(gkv_filter),
|
ServiceFacade.DoGkvAccountingServiceAsync(x => x.CreateNewGkvAbrechnung(gkv_filter),
|
||||||
cb => Dispatcher.BeginInvoke(DispatcherPriority.Normal,
|
cb => Dispatcher.BeginInvoke(DispatcherPriority.Normal,
|
||||||
(Action)delegate
|
(Action)delegate
|
||||||
{
|
{
|
||||||
@@ -235,7 +235,7 @@ namespace BeWo.View.Detail.Accounting
|
|||||||
{
|
{
|
||||||
var dc_in = vm.CommitToDataContract();
|
var dc_in = vm.CommitToDataContract();
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(() => {
|
Dispatcher.Invoke(() => {
|
||||||
vm.UpdateByDataContract(dc_out);
|
vm.UpdateByDataContract(dc_out);
|
||||||
@@ -268,7 +268,7 @@ namespace BeWo.View.Detail.Accounting
|
|||||||
{
|
{
|
||||||
_Viewmodel.VMList.Remove(vm);
|
_Viewmodel.VMList.Remove(vm);
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(s => s.DeleteGkvAbrechnung(vm.CommitToDataContract()));
|
ServiceFacade.DoGkvAccountingServiceAsync(s => s.DeleteGkvAbrechnung(vm.CommitToDataContract()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void NewButton_OnClick(object sender, RoutedEventArgs e)
|
private void NewButton_OnClick(object sender, RoutedEventArgs e)
|
||||||
@@ -361,7 +361,7 @@ namespace BeWo.View.Detail.Accounting
|
|||||||
|
|
||||||
dc_in.Bezahlt = b;
|
dc_in.Bezahlt = b;
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(() => {
|
Dispatcher.Invoke(() => {
|
||||||
vm.UpdateByDataContract(dc_out);
|
vm.UpdateByDataContract(dc_out);
|
||||||
@@ -375,7 +375,7 @@ namespace BeWo.View.Detail.Accounting
|
|||||||
|
|
||||||
dc_in.UrbelegeGesendet = b;
|
dc_in.UrbelegeGesendet = b;
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(() => {
|
Dispatcher.Invoke(() => {
|
||||||
vm.UpdateByDataContract(dc_out);
|
vm.UpdateByDataContract(dc_out);
|
||||||
@@ -387,7 +387,7 @@ namespace BeWo.View.Detail.Accounting
|
|||||||
{
|
{
|
||||||
var dc_in = vm.CommitToDataContract();
|
var dc_in = vm.CommitToDataContract();
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
ServiceFacade.DoGkvAccountingServiceAsync(x => x.UpdateGkvAbrechnung(dc_in), dc_out =>
|
||||||
{
|
{
|
||||||
Dispatcher.Invoke(() => {
|
Dispatcher.Invoke(() => {
|
||||||
vm.UpdateByDataContract(dc_out);
|
vm.UpdateByDataContract(dc_out);
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ namespace BeWo.View.Detail
|
|||||||
req.IKKrankenkasse = ViewModel.IKKrankenkasse;
|
req.IKKrankenkasse = ViewModel.IKKrankenkasse;
|
||||||
req.Leistungserbringergruppe = ViewModel.Leistungserbringergruppe;
|
req.Leistungserbringergruppe = ViewModel.Leistungserbringergruppe;
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(x => x.SendGetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb)));
|
ServiceFacade.DoGkvAccountingServiceAsync(x => x.SendGetIKRequest(req), cb => Dispatcher.Invoke(() => IKRequestCallback(req, cb)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void IKRequestCallback(GkvAbrechnungGetIKRequestDC req, GkvAbrechnungGetIKResponseDC response)
|
private void IKRequestCallback(GkvAbrechnungGetIKRequestDC req, GkvAbrechnungGetIKResponseDC response)
|
||||||
|
|||||||
@@ -452,7 +452,7 @@ namespace BeWo.ViewModel
|
|||||||
|
|
||||||
req.GkvAbrechnungOid = GkvAbrechnungOid.Value;
|
req.GkvAbrechnungOid = GkvAbrechnungOid.Value;
|
||||||
|
|
||||||
ServiceFacade.DoAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
|
ServiceFacade.DoGkvAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
|
||||||
cb => Application.Current.Dispatch(() => UpdateBySendResponse(cb)), true);
|
cb => Application.Current.Dispatch(() => UpdateBySendResponse(cb)), true);
|
||||||
}
|
}
|
||||||
public void UpdateBySendResponse(GkvAbrechnungSendResponseDC cb)
|
public void UpdateBySendResponse(GkvAbrechnungSendResponseDC cb)
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IResourceService" name="BeWoBasicEndpoint" />
|
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IResourceService" name="BeWoBasicEndpoint" />
|
||||||
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IOperationsService" name="OperationsServiceEndpoint" />
|
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IOperationsService" name="OperationsServiceEndpoint" />
|
||||||
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IAccountingService" name="AccountingServiceEndpoint" />
|
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IAccountingService" name="AccountingServiceEndpoint" />
|
||||||
|
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IGkvAccountingService" name="GkvAccountingServiceEndpoint" />
|
||||||
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IAnalysisService" name="AnalysisServiceEndpoint" />
|
<endpoint behaviorConfiguration="BeWoServiceBehavior" binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IAnalysisService" name="AnalysisServiceEndpoint" />
|
||||||
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IMailService" name="MailServiceEndpoint" />
|
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IMailService" name="MailServiceEndpoint" />
|
||||||
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IReportService" name="ReportServiceEndpoint" />
|
<endpoint binding="basicHttpBinding" bindingConfiguration="BeWoBasicEndpoint" contract="BeWo.ServiceProxy.IReportService" name="ReportServiceEndpoint" />
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ using BS.Shared.DataContracts;
|
|||||||
using BS.Shared.DataContracts.GkvAbrechnung;
|
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||||
using BS.Shared.Exceptions;
|
using BS.Shared.Exceptions;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using NHibernate.Dialect.Function;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
@@ -93,7 +94,7 @@ namespace Host
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var service = new AccountingServiceImp();
|
var service = new GkvAccountingServiceImp();
|
||||||
|
|
||||||
service.HandleGkvServerResults(req.ResultDCs);
|
service.HandleGkvServerResults(req.ResultDCs);
|
||||||
|
|
||||||
|
|||||||
1
Host/GkvAccountingService.svc
Normal file
1
Host/GkvAccountingService.svc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<%@ ServiceHost Language="C#" Debug="true" Service="BeWo.Service.ServiceImplementations.GkvAccountingServiceImp" %>
|
||||||
@@ -168,6 +168,7 @@
|
|||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Content Include="GkvAccountingService.svc" />
|
||||||
<Content Include="Admin.aspx" />
|
<Content Include="Admin.aspx" />
|
||||||
<Content Include="AnalysisService.svc" />
|
<Content Include="AnalysisService.svc" />
|
||||||
<Content Include="Content\BeWoMobilTheme.min.css" />
|
<Content Include="Content\BeWoMobilTheme.min.css" />
|
||||||
|
|||||||
@@ -169,6 +169,9 @@
|
|||||||
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.AccountingServiceImp">
|
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.AccountingServiceImp">
|
||||||
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="AccountingServiceEndpoint" contract="BeWo.Service.ServiceContracts.IAccountingService" />
|
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="AccountingServiceEndpoint" contract="BeWo.Service.ServiceContracts.IAccountingService" />
|
||||||
</service>
|
</service>
|
||||||
|
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.GkvAccountingServiceImp">
|
||||||
|
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="GkvAccountingServiceEndpoint" contract="BeWo.Service.ServiceContracts.IGkvAccountingService" />
|
||||||
|
</service>
|
||||||
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.MailServiceImp">
|
<service behaviorConfiguration="returnFaults" name="BeWo.Service.ServiceImplementations.MailServiceImp">
|
||||||
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="MailServiceEndpoint" contract="BeWo.Service.ServiceContracts.IMailService" />
|
<endpoint behaviorConfiguration="SecurityAndSessionBehavior" binding="basicHttpBinding" bindingConfiguration="TransportSecurity" name="MailServiceEndpoint" contract="BeWo.Service.ServiceContracts.IMailService" />
|
||||||
</service>
|
</service>
|
||||||
|
|||||||
@@ -482,6 +482,7 @@
|
|||||||
<Compile Include="ServiceContracts\BeWoFault.cs" />
|
<Compile Include="ServiceContracts\BeWoFault.cs" />
|
||||||
<Compile Include="ServiceContracts\IAccountingService.cs" />
|
<Compile Include="ServiceContracts\IAccountingService.cs" />
|
||||||
<Compile Include="ServiceContracts\IAnalysisService.cs" />
|
<Compile Include="ServiceContracts\IAnalysisService.cs" />
|
||||||
|
<Compile Include="ServiceContracts\IGkvAccountingService.cs" />
|
||||||
<Compile Include="ServiceContracts\IMailService.cs" />
|
<Compile Include="ServiceContracts\IMailService.cs" />
|
||||||
<Compile Include="ServiceContracts\IOperationsService.cs" />
|
<Compile Include="ServiceContracts\IOperationsService.cs" />
|
||||||
<Compile Include="ServiceContracts\IDownloadService.cs" />
|
<Compile Include="ServiceContracts\IDownloadService.cs" />
|
||||||
@@ -493,6 +494,7 @@
|
|||||||
<Compile Include="ServiceContracts\IResourceService.cs" />
|
<Compile Include="ServiceContracts\IResourceService.cs" />
|
||||||
<Compile Include="ServiceImplementations\AccountingServiceImp.cs" />
|
<Compile Include="ServiceImplementations\AccountingServiceImp.cs" />
|
||||||
<Compile Include="ServiceImplementations\AnalysisServiceImp.cs" />
|
<Compile Include="ServiceImplementations\AnalysisServiceImp.cs" />
|
||||||
|
<Compile Include="ServiceImplementations\GkvAccountingServiceImp.cs" />
|
||||||
<Compile Include="ServiceImplementations\MailServiceImp.cs" />
|
<Compile Include="ServiceImplementations\MailServiceImp.cs" />
|
||||||
<Compile Include="ServiceImplementations\OperationsServiceImp.cs" />
|
<Compile Include="ServiceImplementations\OperationsServiceImp.cs" />
|
||||||
<Compile Include="ServiceImplementations\QueryServiceImp.cs" />
|
<Compile Include="ServiceImplementations\QueryServiceImp.cs" />
|
||||||
|
|||||||
@@ -140,37 +140,5 @@ namespace BeWo.Service.ServiceContracts
|
|||||||
[FaultContract(typeof(BeWoFault))]
|
[FaultContract(typeof(BeWoFault))]
|
||||||
[OperationContract]
|
[OperationContract]
|
||||||
void StorniereInvoiceBases(List<InvoiceBaseDC> invoices);
|
void StorniereInvoiceBases(List<InvoiceBaseDC> invoices);
|
||||||
|
|
||||||
[FaultContract(typeof(BeWoFault))]
|
|
||||||
[OperationContract]
|
|
||||||
GkvAbrechnungDC GetGkvAbrechnung(long oid);
|
|
||||||
|
|
||||||
[FaultContract(typeof(BeWoFault))]
|
|
||||||
[OperationContract]
|
|
||||||
List<GkvAbrechnungDC> GetAllGkvAbrechnungen();
|
|
||||||
|
|
||||||
[FaultContract(typeof(BeWoFault))]
|
|
||||||
[OperationContract]
|
|
||||||
List<GkvAbrechnungDC> GetFilteredGkvAbrechnungen(GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter);
|
|
||||||
|
|
||||||
[FaultContract(typeof(BeWoFault))]
|
|
||||||
[OperationContract]
|
|
||||||
GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request);
|
|
||||||
|
|
||||||
[FaultContract(typeof(BeWoFault))]
|
|
||||||
[OperationContract]
|
|
||||||
GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung);
|
|
||||||
|
|
||||||
[FaultContract(typeof(BeWoFault))]
|
|
||||||
[OperationContract]
|
|
||||||
void DeleteGkvAbrechnung(GkvAbrechnungDC abrechnung);
|
|
||||||
|
|
||||||
[FaultContract(typeof(BeWoFault))]
|
|
||||||
[OperationContract]
|
|
||||||
GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req);
|
|
||||||
|
|
||||||
[FaultContract(typeof(BeWoFault))]
|
|
||||||
[OperationContract]
|
|
||||||
GkvAbrechnungGetIKResponseDC SendGetIKRequest(GkvAbrechnungGetIKRequestDC req);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
46
Service/ServiceContracts/IGkvAccountingService.cs
Normal file
46
Service/ServiceContracts/IGkvAccountingService.cs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.ServiceModel;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BeWo.Service.ServiceContracts
|
||||||
|
{
|
||||||
|
[ServiceContract]
|
||||||
|
public interface IGkvAccountingService
|
||||||
|
{
|
||||||
|
[FaultContract(typeof(BeWoFault))]
|
||||||
|
[OperationContract]
|
||||||
|
GkvAbrechnungDC GetGkvAbrechnung(long oid);
|
||||||
|
|
||||||
|
[FaultContract(typeof(BeWoFault))]
|
||||||
|
[OperationContract]
|
||||||
|
List<GkvAbrechnungDC> GetAllGkvAbrechnungen();
|
||||||
|
|
||||||
|
[FaultContract(typeof(BeWoFault))]
|
||||||
|
[OperationContract]
|
||||||
|
List<GkvAbrechnungDC> GetFilteredGkvAbrechnungen(GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter);
|
||||||
|
|
||||||
|
[FaultContract(typeof(BeWoFault))]
|
||||||
|
[OperationContract]
|
||||||
|
GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request);
|
||||||
|
|
||||||
|
[FaultContract(typeof(BeWoFault))]
|
||||||
|
[OperationContract]
|
||||||
|
GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung);
|
||||||
|
|
||||||
|
[FaultContract(typeof(BeWoFault))]
|
||||||
|
[OperationContract]
|
||||||
|
void DeleteGkvAbrechnung(GkvAbrechnungDC abrechnung);
|
||||||
|
|
||||||
|
[FaultContract(typeof(BeWoFault))]
|
||||||
|
[OperationContract]
|
||||||
|
GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req);
|
||||||
|
|
||||||
|
[FaultContract(typeof(BeWoFault))]
|
||||||
|
[OperationContract]
|
||||||
|
GkvAbrechnungGetIKResponseDC SendGetIKRequest(GkvAbrechnungGetIKRequestDC req);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -745,600 +745,5 @@ namespace BeWo.Service.ServiceImplementations
|
|||||||
throw Utils.CreateBeWoFaultException(e);
|
throw Utils.CreateBeWoFaultException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region GKV
|
|
||||||
public GkvAbrechnungDC GetGkvAbrechnung(long oid)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var gkv = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(oid);
|
|
||||||
|
|
||||||
var dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv);
|
|
||||||
|
|
||||||
return dc;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw Utils.CreateBeWoFaultException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public List<GkvAbrechnungDC> GetFilteredGkvAbrechnungen(GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (gkvAbrechnungViewFilter == null || !gkvAbrechnungViewFilter.FilterTime)
|
|
||||||
return GetAllGkvAbrechnungen();
|
|
||||||
|
|
||||||
var start = gkvAbrechnungViewFilter.Start;
|
|
||||||
var end = gkvAbrechnungViewFilter.End;
|
|
||||||
var filter = gkvAbrechnungViewFilter.FilterForInvoiceDate;
|
|
||||||
|
|
||||||
return GetGkvAbrechnungen(() => DAOFactory.SearchDAO.GetGkvAbrechnungen(start, end, filter));
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw Utils.CreateBeWoFaultException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public List<GkvAbrechnungDC> GetAllGkvAbrechnungen()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return GetGkvAbrechnungen(() => DAOFactory.GenericDAO.GetAllActive<GkvAbrechnung>());
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw Utils.CreateBeWoFaultException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private List<GkvAbrechnungDC> GetGkvAbrechnungen(Func<IEnumerable<GkvAbrechnung>> get_entities)
|
|
||||||
{
|
|
||||||
var entities = get_entities();
|
|
||||||
|
|
||||||
var dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entities);
|
|
||||||
|
|
||||||
var updateables = dcs.Where(x => x.IsWaiting()).ToArray();
|
|
||||||
|
|
||||||
if (!updateables.Any())
|
|
||||||
return dcs;
|
|
||||||
|
|
||||||
var isUpToDate = SendApp8GetStatusRequest(updateables);
|
|
||||||
|
|
||||||
if (isUpToDate)
|
|
||||||
return dcs;
|
|
||||||
|
|
||||||
entities = get_entities();
|
|
||||||
|
|
||||||
dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entities);
|
|
||||||
|
|
||||||
return dcs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request)
|
|
||||||
{
|
|
||||||
var response = new GkvAbrechnungCreateResponseDC();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var invoice_bases = DAOFactory.GenericDAO.LoadByIDs<InvoiceBase>(request.SelectedInvoiceBases);
|
|
||||||
|
|
||||||
ValidatorExtended.ValidateGkvAbrechnung(request.GkvAbrechnungDC, invoice_bases);
|
|
||||||
|
|
||||||
var gkv_abrechnung = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewEntity(request.GkvAbrechnungDC);
|
|
||||||
|
|
||||||
if (gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Hour == 0)
|
|
||||||
{
|
|
||||||
gkv_abrechnung.AbrechnungsZeitraumEnde = gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Date.AddDays(1).AddMilliseconds(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
var orga = gkv_abrechnung.Organisation;
|
|
||||||
|
|
||||||
gkv_abrechnung.Verfahrensstufe = orga.Verfahrensstufe;
|
|
||||||
|
|
||||||
decimal gesamt = 0;
|
|
||||||
foreach (var invoicebase_oid in request.SelectedInvoiceBases)
|
|
||||||
{
|
|
||||||
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase_oid);
|
|
||||||
|
|
||||||
foreach (var peroid in service.ServiceInvoicePeriodList)
|
|
||||||
{
|
|
||||||
foreach (var invoice in peroid.InvoiceItemList)
|
|
||||||
{
|
|
||||||
gesamt += invoice.AmountTotal.Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gkv_abrechnung.Betrag = gesamt;
|
|
||||||
gkv_abrechnung.Bezahlt = false;
|
|
||||||
|
|
||||||
gkv_abrechnung.ErstelltAm = DateTime.Now;
|
|
||||||
|
|
||||||
DAOFactory.GenericDAO.Insert(gkv_abrechnung);
|
|
||||||
|
|
||||||
var gkv_abrechnung_dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv_abrechnung);
|
|
||||||
|
|
||||||
response.Success = true;
|
|
||||||
response.GkvAbrechnungDC = gkv_abrechnung_dc;
|
|
||||||
}
|
|
||||||
catch (GkvException exc)
|
|
||||||
{
|
|
||||||
MailUtils.SendGkvModuleErrorMail("CreateNewGkvAbrechnung", exc, Tenant);
|
|
||||||
|
|
||||||
if (exc.Title.IsNotNullOrWhiteSpace())
|
|
||||||
response.TitleMessage = exc.Title;
|
|
||||||
response.Message = exc.Message;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
MailUtils.SendGkvModuleErrorMail("CreateNewGkvAbrechnung", e, Tenant);
|
|
||||||
|
|
||||||
throw Utils.CreateBeWoFaultException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
public GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var entity = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(abrechnung.GkvAbrechnungOid.Value);
|
|
||||||
|
|
||||||
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MergeWithEntity(abrechnung, entity);
|
|
||||||
|
|
||||||
foreach (var invoice in entity.InvoiceBases)
|
|
||||||
{
|
|
||||||
invoice.IsPaid = entity.Bezahlt;
|
|
||||||
}
|
|
||||||
|
|
||||||
DAOFactory.GenericDAO.Update(entity);
|
|
||||||
|
|
||||||
return MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw Utils.CreateBeWoFaultException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void DeleteGkvAbrechnung(GkvAbrechnungDC abrechnung)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ServiceLogic.SetActivationType<GkvAbrechnung>(abrechnung.GkvAbrechnungOid.Value, abrechnung.GkvAbrechnungVersion.Value, ActivationTypeId.Deleted);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw Utils.CreateBeWoFaultException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req)
|
|
||||||
{
|
|
||||||
var response = new GkvAbrechnungSendResponseDC();
|
|
||||||
|
|
||||||
var oid = req.GkvAbrechnungOid;
|
|
||||||
|
|
||||||
var entity = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(oid);
|
|
||||||
|
|
||||||
var state = entity.GetState();
|
|
||||||
|
|
||||||
if (entity.IsWaiting() || state == GkvState.Paid)
|
|
||||||
{
|
|
||||||
response.Message = "Validierung fehlgeschlagen";
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
var protokoll = CreateGkvTransferProtokoll(entity, out var error);
|
|
||||||
if (error is object)
|
|
||||||
{
|
|
||||||
MailUtils.SendGkvModuleErrorMail("SendNewGkvAbrechnung - CreateGkvTransferProtokoll", error, Tenant);
|
|
||||||
|
|
||||||
response.TitleMessage = "Protokoll Erstellung";
|
|
||||||
response.Message = error;
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entity.GkvTransferProtokolle is null)
|
|
||||||
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
|
|
||||||
|
|
||||||
entity.GkvTransferProtokolle.Add(protokoll);
|
|
||||||
|
|
||||||
// Protokoll braucht Oid
|
|
||||||
DAOFactory.GenericDAO.Update(entity);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var app8_response = SendApp8SendNewRequest(protokoll);
|
|
||||||
|
|
||||||
var app8_protokoll = app8_response.GkvTransferProtokollDC;
|
|
||||||
|
|
||||||
MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MergeWithEntity(app8_protokoll, protokoll);
|
|
||||||
|
|
||||||
response.Success = app8_response.Success;
|
|
||||||
response.Message = app8_response.Message;
|
|
||||||
}
|
|
||||||
catch (GkvException de)
|
|
||||||
{
|
|
||||||
protokoll.ResultType = GkvTransferResultType.FailSoft;
|
|
||||||
protokoll.Fehlerdatum = DateTime.Now;
|
|
||||||
protokoll.Fehlernachricht = de.Message;
|
|
||||||
protokoll.Fehlertitel = de.Title ?? "Default";
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
protokoll.ResultType = GkvTransferResultType.FailFatal;
|
|
||||||
protokoll.Fehlerdatum = DateTime.Now;
|
|
||||||
protokoll.Fehlernachricht = e.ToString();
|
|
||||||
protokoll.Fehlertitel = "Erstellung (kritisch)";
|
|
||||||
}
|
|
||||||
|
|
||||||
DAOFactory.GenericDAO.Update(entity);
|
|
||||||
|
|
||||||
response.TransferProtokoll = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
|
||||||
response.GkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
public GkvAbrechnungGetIKResponseDC SendGetIKRequest(GkvAbrechnungGetIKRequestDC req)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var app8req = new GkvServerGetIKRequestDC
|
|
||||||
{
|
|
||||||
IKKrankenkasse = req.IKKrankenkasse,
|
|
||||||
Leistungserbringergruppe = req.Leistungserbringergruppe,
|
|
||||||
Abrechnungscode = DakotaUtils.GetAbrechnungscode(req.Leistungserbringergruppe),
|
|
||||||
Tarifkennzeichen = DakotaUtils.GetTarifkennzeichen(req.Leistungserbringergruppe)
|
|
||||||
};
|
|
||||||
|
|
||||||
var app8res = SendApp8Request<GkvServerGetIKRequestDC, GkvServerGetIKResponseDC>(app8req);
|
|
||||||
|
|
||||||
// Erstelle Response
|
|
||||||
var res = new GkvAbrechnungGetIKResponseDC
|
|
||||||
{
|
|
||||||
BezDatenannahmestelle = app8res.BezDatenannahmestelle,
|
|
||||||
Gefunden = app8res.Gefunden,
|
|
||||||
IKDatenannahmestelle = app8res.IKDatenannahmestelle,
|
|
||||||
IKKostentrager = app8res.IKKostentrager,
|
|
||||||
IKKrankenkasse = app8res.IKKrankenkasse,
|
|
||||||
Message = app8res.Message,
|
|
||||||
Success = app8res.Success
|
|
||||||
};
|
|
||||||
|
|
||||||
// Schaue, ob IK Krankenkassen bereits bei einer anderen Organisation hinterlegt ist
|
|
||||||
if (res.Gefunden)
|
|
||||||
{
|
|
||||||
// Holt alle Organisationen
|
|
||||||
var orgas = DAOFactory.SearchDAO.GetAllOrganisationByIKKrankenkasse(req.IKKrankenkasse);
|
|
||||||
|
|
||||||
// Entfernt sich selber
|
|
||||||
if (req.OrganisationOid is long oid)
|
|
||||||
{
|
|
||||||
orgas.RemoveAll(x => x.Oid == oid);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (orgas.Any())
|
|
||||||
{
|
|
||||||
res.BereitsEnthalten = true;
|
|
||||||
res.BereitsEnthaltenBei = orgas.Select(x => x.Name).ToList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw Utils.CreateBeWoFaultException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private GkvTransferProtokoll CreateGkvTransferProtokoll(GkvAbrechnung gkvAbrechnung, out string error)
|
|
||||||
{
|
|
||||||
var protokoll = new GkvTransferProtokoll
|
|
||||||
{
|
|
||||||
ErstelltAm = DateTime.Now,
|
|
||||||
GkvAbrechnungOid = gkvAbrechnung.Oid.Value
|
|
||||||
};
|
|
||||||
|
|
||||||
error = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ValidatorExtended.ValidateGkvAbrechnung(gkvAbrechnung, gkvAbrechnung.InvoiceBases);
|
|
||||||
|
|
||||||
var manager = new DakotaManager();
|
|
||||||
var mandatordc = new OperationsServiceImp().GetMandator();
|
|
||||||
|
|
||||||
Validator.ValidateMandator(mandatordc);
|
|
||||||
|
|
||||||
var gkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkvAbrechnung);
|
|
||||||
var orgadc = gkvAbrechnungDC.Organisation;
|
|
||||||
|
|
||||||
Validator.ValidateOrganisation(orgadc);
|
|
||||||
|
|
||||||
var datenannahmestelle = orgadc.IKDatenannahmestelle;
|
|
||||||
var (datenaustauschreferenz, transfernummer) = GetNextDatenaustauschreferenzTransfernummer(gkvAbrechnung, datenannahmestelle);
|
|
||||||
var (dat_short, tra_short) = ClearDatenaustauschreferenzTransfernummer(datenaustauschreferenz, transfernummer);
|
|
||||||
|
|
||||||
var first_cost = gkvAbrechnung.InvoiceBases.First().CostBearer2SupportConcept.SupportConcept.Customer;
|
|
||||||
|
|
||||||
var plugin = PluginLoader.FindClass<AccountingService>();
|
|
||||||
var addressInfo = plugin.GetAddressInformation(first_cost.Oid);
|
|
||||||
|
|
||||||
foreach (var invoicebase in gkvAbrechnung.InvoiceBases)
|
|
||||||
{
|
|
||||||
var customer = invoicebase.CostBearer2SupportConcept.SupportConcept.Customer;
|
|
||||||
|
|
||||||
var addressInfo2 = plugin.GetAddressInformation(customer.Oid);
|
|
||||||
|
|
||||||
if (addressInfo.IKLeistungserbringer != addressInfo2.IKLeistungserbringer)
|
|
||||||
{
|
|
||||||
throw new GkvException($"Klient '{first_cost.Person.LastNameFirstName}' ({addressInfo.IKLeistungserbringer}) und '{customer.Person.LastNameFirstName}' ({addressInfo2.IKLeistungserbringer}) verweisen auf unterschiedliche Leistungserbringer.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var invoicebase in gkvAbrechnung.InvoiceBases)
|
|
||||||
{
|
|
||||||
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase.Oid.Value);
|
|
||||||
var orga2 = invoicebase.CostBearer2SupportConcept.CostBearer.Organisation;
|
|
||||||
var customer = invoicebase.CostBearer2SupportConcept.SupportConcept.Customer;
|
|
||||||
|
|
||||||
var invoicebase_dc = MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDC(invoicebase);
|
|
||||||
|
|
||||||
var servicedc = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(service);
|
|
||||||
var customerdc = MapperFactory.CustomerDC_Customer.MapToNewDC(customer);
|
|
||||||
|
|
||||||
Validator.ValidateCustomer(customerdc);
|
|
||||||
|
|
||||||
manager.Add(servicedc, orgadc, customerdc, addressInfo, dat_short, tra_short);
|
|
||||||
}
|
|
||||||
|
|
||||||
manager.Apply();
|
|
||||||
|
|
||||||
if (manager.DakotaFileDict.Count != 1 || manager.DakotaFileDict.First().Value.GetKostenträgerCount() != 1)
|
|
||||||
{
|
|
||||||
var msg = "Unerwartete Anzahl an Dakota Files berechnet.";
|
|
||||||
|
|
||||||
throw new GkvException(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
var file_from_manager = manager.DakotaFileDict.First().Value;
|
|
||||||
|
|
||||||
var nutzdatendatei = file_from_manager.GetNutzdatendatei();
|
|
||||||
|
|
||||||
// https://dev.mysql.com/doc/refman/8.3/en/string-type-syntax.html
|
|
||||||
// A TEXT column with a maximum length of 16,777,215 (224 − 1) characters.
|
|
||||||
// The effective maximum length is less if the value contains multibyte characters.
|
|
||||||
// Each MEDIUMTEXT value is stored using a 3-byte length prefix that indicates the number of bytes in the value.
|
|
||||||
//
|
|
||||||
// Type | Maximum length
|
|
||||||
// -----------+-------------------------------------
|
|
||||||
// TINYTEXT | 255(2^8−1) bytes
|
|
||||||
// TEXT | 65,535(2^16−1) bytes = 64 KiB
|
|
||||||
// MEDIUMTEXT | 16,777,215(2^24−1) bytes = 16 MiB
|
|
||||||
// LONGTEXT | 4,294,967,295(2^32−1) bytes = 4 GiB
|
|
||||||
if (nutzdatendatei.Length > 16777215)
|
|
||||||
{
|
|
||||||
var msg = $"nutzdatendatei - Länger als 16777215: {nutzdatendatei.Length}";
|
|
||||||
|
|
||||||
throw new GkvException(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
protokoll.Datenaustauschreferenz = datenaustauschreferenz;
|
|
||||||
protokoll.Transfernummer = transfernummer;
|
|
||||||
|
|
||||||
protokoll.IKDatenannahmestelle = file_from_manager.GetIKDatenannahmestelle();
|
|
||||||
protokoll.IKKostentrager = file_from_manager.GetIKKostenträger();
|
|
||||||
protokoll.IKLeistungserbringer = file_from_manager.GetIKLeistungserbringer();
|
|
||||||
protokoll.IKKrankenkasse = file_from_manager.GetIKVersichertenKarte();
|
|
||||||
|
|
||||||
protokoll.Rechnungsnummer = file_from_manager.GetRechnungsnummer();
|
|
||||||
protokoll.Auftragsdatei = file_from_manager.GetAuftragsdatei();
|
|
||||||
protokoll.Nutzdatendatei = nutzdatendatei;
|
|
||||||
protokoll.Transfername = file_from_manager.GetTransferName();
|
|
||||||
protokoll.Dateigrosse = nutzdatendatei.Length;
|
|
||||||
|
|
||||||
protokoll.Dateityp = "Nutzdatendatei";
|
|
||||||
protokoll.Dateiname = protokoll.Transfername;
|
|
||||||
|
|
||||||
protokoll.AbsenderBezeichnung = "ownSoft GmbH";
|
|
||||||
protokoll.EmpfangerBezeichnung = orgadc.BezDatenannahmestelle;
|
|
||||||
|
|
||||||
return protokoll;
|
|
||||||
}
|
|
||||||
catch (GkvException de)
|
|
||||||
{
|
|
||||||
error = de.ToString();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
error = e.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Tuple<int, int> GetNextDatenaustauschreferenzTransfernummer(GkvAbrechnung gkvAbrechnung, string datenannahmestelle)
|
|
||||||
{
|
|
||||||
var datenaustauschref = DAOFactory.SearchDAO.GetNextDatenaustauschreferenz(datenannahmestelle);
|
|
||||||
int transfernummer;
|
|
||||||
|
|
||||||
var state = gkvAbrechnung.GetState();
|
|
||||||
|
|
||||||
if (state == GkvState.NoSend)
|
|
||||||
{
|
|
||||||
transfernummer = DAOFactory.SearchDAO.GetNextTransfernummer(datenannahmestelle);
|
|
||||||
}
|
|
||||||
else if (state == GkvState.ErrorSoft || state == GkvState.ErrorFatal || state == GkvState.ErrorFolgefehler)
|
|
||||||
{
|
|
||||||
transfernummer = gkvAbrechnung.GkvTransferProtokolle.Last().Transfernummer;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new ArgumentException($"Versucht Transfernummer zu laden, invalid state: {state}", nameof(state));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Tuple<int, int>(datenaustauschref, transfernummer);
|
|
||||||
}
|
|
||||||
private Tuple<int, int> ClearDatenaustauschreferenzTransfernummer(int datenaustauschreferenz, int transfernummer)
|
|
||||||
{
|
|
||||||
int d = datenaustauschreferenz % 99999;
|
|
||||||
int t = transfernummer % 1000;
|
|
||||||
|
|
||||||
if (d == 0)
|
|
||||||
{
|
|
||||||
d = 99999;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Tuple<int, int>(d, t);
|
|
||||||
}
|
|
||||||
|
|
||||||
private GkvServerSendNewResponseDC SendApp8SendNewRequest(GkvTransferProtokoll protokoll)
|
|
||||||
{
|
|
||||||
var gkv_transfer_dc = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
|
||||||
|
|
||||||
var request_app8 = new GkvServerSendNewRequestDC
|
|
||||||
{
|
|
||||||
Protokoll = gkv_transfer_dc
|
|
||||||
};
|
|
||||||
|
|
||||||
var response_app8 = SendApp8Request<GkvServerSendNewRequestDC, GkvServerSendNewResponseDC>(request_app8);
|
|
||||||
|
|
||||||
if (!response_app8.Success)
|
|
||||||
throw new GkvException(response_app8.Message);
|
|
||||||
|
|
||||||
return response_app8;
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="updateables"></param>
|
|
||||||
/// <param name="loginName"></param>
|
|
||||||
/// <param name="hashed_password"></param>
|
|
||||||
/// <returns>Returns true, if the states are all up to date. False otherwise.</returns>
|
|
||||||
private bool SendApp8GetStatusRequest(GkvAbrechnungDC[] updateables)
|
|
||||||
{
|
|
||||||
var updateables_len = updateables.Count();
|
|
||||||
|
|
||||||
var request = new GkvServerGetStatusRequestDC
|
|
||||||
{
|
|
||||||
Tenant = MultitenancyOperationContextExt.Current.Tenant,
|
|
||||||
Oids = new long[updateables_len]
|
|
||||||
};
|
|
||||||
|
|
||||||
for (int id = 0; id < updateables_len; id++)
|
|
||||||
{
|
|
||||||
var gkv_abrechnung = updateables[id];
|
|
||||||
var gkv_transfer = gkv_abrechnung.TransferProtokolle.Last();
|
|
||||||
|
|
||||||
request.Oids[id] = gkv_transfer.GkvTransferProtokollOid.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
GkvServerGetStatusResponseDC response_app8;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
response_app8 = SendApp8Request<GkvServerGetStatusRequestDC, GkvServerGetStatusResponseDC>(request);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
MailUtils.SendGkvModuleErrorMail("GkvServerGetStatusRequest Error", e, Tenant);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!response_app8.Success)
|
|
||||||
throw new GkvException("Success false - " + response_app8.Message);
|
|
||||||
|
|
||||||
if (response_app8.Results is null)
|
|
||||||
throw new GkvException("Result null - " + response_app8.Message);
|
|
||||||
|
|
||||||
var results = response_app8.Results.Where(x => x is object);
|
|
||||||
|
|
||||||
if (!results.Any())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
HandleGkvServerResults(results);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void HandleGkvServerResults(IEnumerable<GkvServerResultDC> results)
|
|
||||||
{
|
|
||||||
var protokolls = new List<GkvTransferProtokoll>();
|
|
||||||
foreach (var result in results)
|
|
||||||
{
|
|
||||||
var protokoll = DAOFactory.GenericDAO.GetByID<GkvTransferProtokoll>(result.ProtokollOid);
|
|
||||||
|
|
||||||
protokoll.ResultType = result.ResultType;
|
|
||||||
protokoll.Fehlertitel = result.Titel;
|
|
||||||
protokoll.Fehlerdatum = result.Datum;
|
|
||||||
protokoll.Fehlernachricht = result.Nachricht;
|
|
||||||
|
|
||||||
switch (result.ResultType)
|
|
||||||
{
|
|
||||||
case GkvTransferResultType.Success:
|
|
||||||
protokoll.SentDakotaSuccess = true;
|
|
||||||
break;
|
|
||||||
case GkvTransferResultType.FailSoft:
|
|
||||||
protokoll.SentApp8Success = false;
|
|
||||||
break;
|
|
||||||
case GkvTransferResultType.FailFatal:
|
|
||||||
protokoll.SentApp8Success = false;
|
|
||||||
break;
|
|
||||||
case GkvTransferResultType.FailFollowUp:
|
|
||||||
protokoll.SentApp8Success = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
protokolls.Add(protokoll);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (protokolls.Any())
|
|
||||||
DAOFactory.GenericDAO.Update(protokolls);
|
|
||||||
|
|
||||||
var follows = results.Where(x => x.ResultType == GkvTransferResultType.FailFollowUp);
|
|
||||||
|
|
||||||
if (follows.Any())
|
|
||||||
{
|
|
||||||
foreach (var follow in follows)
|
|
||||||
{
|
|
||||||
var protokoll_oid = follow.ProtokollOid;
|
|
||||||
var protokoll = DAOFactory.GenericDAO.LoadByID<GkvTransferProtokoll>(protokoll_oid);
|
|
||||||
var abrechnung_oid = protokoll.GkvAbrechnungOid;
|
|
||||||
|
|
||||||
var new_req = new GkvAbrechnungSendRequestDC()
|
|
||||||
{
|
|
||||||
GkvAbrechnungOid = abrechnung_oid
|
|
||||||
};
|
|
||||||
|
|
||||||
var res = SendNewGkvAbrechnung(new_req);
|
|
||||||
|
|
||||||
if (!res.Success)
|
|
||||||
throw new GkvException("Success - " + res.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Res SendApp8Request<Req, Res>(Req request) where Req : GkvServerRequestDC where Res : GkvResponseDC
|
|
||||||
{
|
|
||||||
var user = LoggedInUserOperationContextExt.Current?.User ?? SessionFacade.LoggedInUser;
|
|
||||||
if (user == null)
|
|
||||||
{
|
|
||||||
throw new GkvException("User unbekannt", "KundenApp");
|
|
||||||
}
|
|
||||||
|
|
||||||
request.Username = user.LoginName;
|
|
||||||
request.Password = user.BCryptPassword;
|
|
||||||
request.Tenant = MultitenancyOperationContextExt.Current.Tenant;
|
|
||||||
|
|
||||||
if (request is GkvServerSendNewRequestDC send_new_req)
|
|
||||||
{
|
|
||||||
send_new_req.ApplicationUserOid = user.Oid.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return GkvSender.SendApp8Request<Req, Res>(request, request.Tenant);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
624
Service/ServiceImplementations/GkvAccountingServiceImp.cs
Normal file
624
Service/ServiceImplementations/GkvAccountingServiceImp.cs
Normal file
@@ -0,0 +1,624 @@
|
|||||||
|
using BeWo.Data;
|
||||||
|
using BeWo.Data.Access;
|
||||||
|
using BeWo.Data.Entities;
|
||||||
|
using BeWo.Service.Core;
|
||||||
|
using BeWo.Service.DCEntityMapper;
|
||||||
|
using BeWo.Service.Plugins;
|
||||||
|
using BeWo.Service.ServiceContracts;
|
||||||
|
using BS.Shared;
|
||||||
|
using BS.Shared.AppSender;
|
||||||
|
using BS.Shared.Core;
|
||||||
|
using BS.Shared.DataContracts.GkvAbrechnung;
|
||||||
|
using BS.Shared.Exceptions;
|
||||||
|
using BS.Shared.Extensions;
|
||||||
|
using Dakota;
|
||||||
|
using Dakota.Logic;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.ServiceModel;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using Utils = BeWo.Service.Core.Utils;
|
||||||
|
|
||||||
|
namespace BeWo.Service.ServiceImplementations
|
||||||
|
{
|
||||||
|
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
|
||||||
|
public class GkvAccountingServiceImp : IGkvAccountingService
|
||||||
|
{
|
||||||
|
public string Tenant => MultitenancyOperationContextExt.Current?.Tenant;
|
||||||
|
|
||||||
|
public GkvAbrechnungDC GetGkvAbrechnung(long oid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var gkv = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(oid);
|
||||||
|
|
||||||
|
var dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv);
|
||||||
|
|
||||||
|
return dc;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw Utils.CreateBeWoFaultException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public List<GkvAbrechnungDC> GetFilteredGkvAbrechnungen(GkvAbrechnungViewFilterDC gkvAbrechnungViewFilter)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (gkvAbrechnungViewFilter == null || !gkvAbrechnungViewFilter.FilterTime)
|
||||||
|
return GetAllGkvAbrechnungen();
|
||||||
|
|
||||||
|
var start = gkvAbrechnungViewFilter.Start;
|
||||||
|
var end = gkvAbrechnungViewFilter.End;
|
||||||
|
var filter = gkvAbrechnungViewFilter.FilterForInvoiceDate;
|
||||||
|
|
||||||
|
return GetGkvAbrechnungen(() => DAOFactory.SearchDAO.GetGkvAbrechnungen(start, end, filter));
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw Utils.CreateBeWoFaultException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public List<GkvAbrechnungDC> GetAllGkvAbrechnungen()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return GetGkvAbrechnungen(() => DAOFactory.GenericDAO.GetAllActive<GkvAbrechnung>());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw Utils.CreateBeWoFaultException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private List<GkvAbrechnungDC> GetGkvAbrechnungen(Func<IEnumerable<GkvAbrechnung>> get_entities)
|
||||||
|
{
|
||||||
|
var entities = get_entities();
|
||||||
|
|
||||||
|
var dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entities);
|
||||||
|
|
||||||
|
var updateables = dcs.Where(x => x.IsWaiting()).ToArray();
|
||||||
|
|
||||||
|
if (!updateables.Any())
|
||||||
|
return dcs;
|
||||||
|
|
||||||
|
var isUpToDate = SendApp8GetStatusRequest(updateables);
|
||||||
|
|
||||||
|
if (isUpToDate)
|
||||||
|
return dcs;
|
||||||
|
|
||||||
|
entities = get_entities();
|
||||||
|
|
||||||
|
dcs = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDCs(entities);
|
||||||
|
|
||||||
|
return dcs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GkvAbrechnungCreateResponseDC CreateNewGkvAbrechnung(GkvAbrechnungCreateRequestDC request)
|
||||||
|
{
|
||||||
|
var response = new GkvAbrechnungCreateResponseDC();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var invoice_bases = DAOFactory.GenericDAO.LoadByIDs<InvoiceBase>(request.SelectedInvoiceBases);
|
||||||
|
|
||||||
|
ValidatorExtended.ValidateGkvAbrechnung(request.GkvAbrechnungDC, invoice_bases);
|
||||||
|
|
||||||
|
var gkv_abrechnung = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewEntity(request.GkvAbrechnungDC);
|
||||||
|
|
||||||
|
if (gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Hour == 0)
|
||||||
|
{
|
||||||
|
gkv_abrechnung.AbrechnungsZeitraumEnde = gkv_abrechnung.AbrechnungsZeitraumEnde.Value.Date.AddDays(1).AddMilliseconds(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var orga = gkv_abrechnung.Organisation;
|
||||||
|
|
||||||
|
gkv_abrechnung.Verfahrensstufe = orga.Verfahrensstufe;
|
||||||
|
|
||||||
|
decimal gesamt = 0;
|
||||||
|
foreach (var invoicebase_oid in request.SelectedInvoiceBases)
|
||||||
|
{
|
||||||
|
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase_oid);
|
||||||
|
|
||||||
|
foreach (var peroid in service.ServiceInvoicePeriodList)
|
||||||
|
{
|
||||||
|
foreach (var invoice in peroid.InvoiceItemList)
|
||||||
|
{
|
||||||
|
gesamt += invoice.AmountTotal.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gkv_abrechnung.Betrag = gesamt;
|
||||||
|
gkv_abrechnung.Bezahlt = false;
|
||||||
|
|
||||||
|
gkv_abrechnung.ErstelltAm = DateTime.Now;
|
||||||
|
|
||||||
|
DAOFactory.GenericDAO.Insert(gkv_abrechnung);
|
||||||
|
|
||||||
|
var gkv_abrechnung_dc = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkv_abrechnung);
|
||||||
|
|
||||||
|
response.Success = true;
|
||||||
|
response.GkvAbrechnungDC = gkv_abrechnung_dc;
|
||||||
|
}
|
||||||
|
catch (GkvException exc)
|
||||||
|
{
|
||||||
|
MailUtils.SendGkvModuleErrorMail("CreateNewGkvAbrechnung", exc, Tenant);
|
||||||
|
|
||||||
|
if (exc.Title.IsNotNullOrWhiteSpace())
|
||||||
|
response.TitleMessage = exc.Title;
|
||||||
|
response.Message = exc.Message;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
MailUtils.SendGkvModuleErrorMail("CreateNewGkvAbrechnung", e, Tenant);
|
||||||
|
|
||||||
|
throw Utils.CreateBeWoFaultException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
public GkvAbrechnungDC UpdateGkvAbrechnung(GkvAbrechnungDC abrechnung)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var entity = DAOFactory.GenericDAO.GetByID<GkvAbrechnung>(abrechnung.GkvAbrechnungOid.Value);
|
||||||
|
|
||||||
|
MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MergeWithEntity(abrechnung, entity);
|
||||||
|
|
||||||
|
foreach (var invoice in entity.InvoiceBases)
|
||||||
|
{
|
||||||
|
invoice.IsPaid = entity.Bezahlt;
|
||||||
|
}
|
||||||
|
|
||||||
|
DAOFactory.GenericDAO.Update(entity);
|
||||||
|
|
||||||
|
return MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw Utils.CreateBeWoFaultException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void DeleteGkvAbrechnung(GkvAbrechnungDC abrechnung)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ServiceLogic.SetActivationType<GkvAbrechnung>(abrechnung.GkvAbrechnungOid.Value, abrechnung.GkvAbrechnungVersion.Value, ActivationTypeId.Deleted);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw Utils.CreateBeWoFaultException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public GkvAbrechnungSendResponseDC SendNewGkvAbrechnung(GkvAbrechnungSendRequestDC req)
|
||||||
|
{
|
||||||
|
var response = new GkvAbrechnungSendResponseDC();
|
||||||
|
|
||||||
|
var oid = req.GkvAbrechnungOid;
|
||||||
|
|
||||||
|
var entity = DAOFactory.GenericDAO.LoadByID<GkvAbrechnung>(oid);
|
||||||
|
|
||||||
|
var state = entity.GetState();
|
||||||
|
|
||||||
|
if (entity.IsWaiting() || state == GkvState.Paid)
|
||||||
|
{
|
||||||
|
response.Message = "Validierung fehlgeschlagen";
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
var protokoll = CreateGkvTransferProtokoll(entity, out var error);
|
||||||
|
if (error is object)
|
||||||
|
{
|
||||||
|
MailUtils.SendGkvModuleErrorMail("SendNewGkvAbrechnung - CreateGkvTransferProtokoll", error, Tenant);
|
||||||
|
|
||||||
|
response.TitleMessage = "Protokoll Erstellung";
|
||||||
|
response.Message = error;
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity.GkvTransferProtokolle is null)
|
||||||
|
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
|
||||||
|
|
||||||
|
entity.GkvTransferProtokolle.Add(protokoll);
|
||||||
|
|
||||||
|
// Protokoll braucht Oid
|
||||||
|
DAOFactory.GenericDAO.Update(entity);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var app8_response = SendApp8SendNewRequest(protokoll);
|
||||||
|
|
||||||
|
var app8_protokoll = app8_response.GkvTransferProtokollDC;
|
||||||
|
|
||||||
|
MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MergeWithEntity(app8_protokoll, protokoll);
|
||||||
|
|
||||||
|
response.Success = app8_response.Success;
|
||||||
|
response.Message = app8_response.Message;
|
||||||
|
}
|
||||||
|
catch (GkvException de)
|
||||||
|
{
|
||||||
|
protokoll.ResultType = GkvTransferResultType.FailSoft;
|
||||||
|
protokoll.Fehlerdatum = DateTime.Now;
|
||||||
|
protokoll.Fehlernachricht = de.Message;
|
||||||
|
protokoll.Fehlertitel = de.Title ?? "Default";
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
protokoll.ResultType = GkvTransferResultType.FailFatal;
|
||||||
|
protokoll.Fehlerdatum = DateTime.Now;
|
||||||
|
protokoll.Fehlernachricht = e.ToString();
|
||||||
|
protokoll.Fehlertitel = "Erstellung (kritisch)";
|
||||||
|
}
|
||||||
|
|
||||||
|
DAOFactory.GenericDAO.Update(entity);
|
||||||
|
|
||||||
|
response.TransferProtokoll = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
||||||
|
response.GkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(entity);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
public GkvAbrechnungGetIKResponseDC SendGetIKRequest(GkvAbrechnungGetIKRequestDC req)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var app8req = new GkvServerGetIKRequestDC
|
||||||
|
{
|
||||||
|
IKKrankenkasse = req.IKKrankenkasse,
|
||||||
|
Leistungserbringergruppe = req.Leistungserbringergruppe,
|
||||||
|
Abrechnungscode = DakotaUtils.GetAbrechnungscode(req.Leistungserbringergruppe),
|
||||||
|
Tarifkennzeichen = DakotaUtils.GetTarifkennzeichen(req.Leistungserbringergruppe)
|
||||||
|
};
|
||||||
|
|
||||||
|
var app8res = SendApp8Request<GkvServerGetIKRequestDC, GkvServerGetIKResponseDC>(app8req);
|
||||||
|
|
||||||
|
// Erstelle Response
|
||||||
|
var res = new GkvAbrechnungGetIKResponseDC
|
||||||
|
{
|
||||||
|
BezDatenannahmestelle = app8res.BezDatenannahmestelle,
|
||||||
|
Gefunden = app8res.Gefunden,
|
||||||
|
IKDatenannahmestelle = app8res.IKDatenannahmestelle,
|
||||||
|
IKKostentrager = app8res.IKKostentrager,
|
||||||
|
IKKrankenkasse = app8res.IKKrankenkasse,
|
||||||
|
Message = app8res.Message,
|
||||||
|
Success = app8res.Success
|
||||||
|
};
|
||||||
|
|
||||||
|
// Schaue, ob IK Krankenkassen bereits bei einer anderen Organisation hinterlegt ist
|
||||||
|
if (res.Gefunden)
|
||||||
|
{
|
||||||
|
// Holt alle Organisationen
|
||||||
|
var orgas = DAOFactory.SearchDAO.GetAllOrganisationByIKKrankenkasse(req.IKKrankenkasse);
|
||||||
|
|
||||||
|
// Entfernt sich selber
|
||||||
|
if (req.OrganisationOid is long oid)
|
||||||
|
{
|
||||||
|
orgas.RemoveAll(x => x.Oid == oid);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (orgas.Any())
|
||||||
|
{
|
||||||
|
res.BereitsEnthalten = true;
|
||||||
|
res.BereitsEnthaltenBei = orgas.Select(x => x.Name).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
throw Utils.CreateBeWoFaultException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private GkvTransferProtokoll CreateGkvTransferProtokoll(GkvAbrechnung gkvAbrechnung, out string error)
|
||||||
|
{
|
||||||
|
var protokoll = new GkvTransferProtokoll
|
||||||
|
{
|
||||||
|
ErstelltAm = DateTime.Now,
|
||||||
|
GkvAbrechnungOid = gkvAbrechnung.Oid.Value
|
||||||
|
};
|
||||||
|
|
||||||
|
error = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ValidatorExtended.ValidateGkvAbrechnung(gkvAbrechnung, gkvAbrechnung.InvoiceBases);
|
||||||
|
|
||||||
|
var manager = new DakotaManager();
|
||||||
|
var mandatordc = new OperationsServiceImp().GetMandator();
|
||||||
|
|
||||||
|
Validator.ValidateMandator(mandatordc);
|
||||||
|
|
||||||
|
var gkvAbrechnungDC = MapperFactory.GkvAbrechnungDC_GkvAbrechnung.MapToNewDC(gkvAbrechnung);
|
||||||
|
var orgadc = gkvAbrechnungDC.Organisation;
|
||||||
|
|
||||||
|
Validator.ValidateOrganisation(orgadc);
|
||||||
|
|
||||||
|
var datenannahmestelle = orgadc.IKDatenannahmestelle;
|
||||||
|
var (datenaustauschreferenz, transfernummer) = GetNextDatenaustauschreferenzTransfernummer(gkvAbrechnung, datenannahmestelle);
|
||||||
|
var (dat_short, tra_short) = ClearDatenaustauschreferenzTransfernummer(datenaustauschreferenz, transfernummer);
|
||||||
|
|
||||||
|
var first_cost = gkvAbrechnung.InvoiceBases.First().CostBearer2SupportConcept.SupportConcept.Customer;
|
||||||
|
|
||||||
|
var plugin = PluginLoader.FindClass<AccountingService>();
|
||||||
|
var addressInfo = plugin.GetAddressInformation(first_cost.Oid);
|
||||||
|
|
||||||
|
foreach (var invoicebase in gkvAbrechnung.InvoiceBases)
|
||||||
|
{
|
||||||
|
var customer = invoicebase.CostBearer2SupportConcept.SupportConcept.Customer;
|
||||||
|
|
||||||
|
var addressInfo2 = plugin.GetAddressInformation(customer.Oid);
|
||||||
|
|
||||||
|
if (addressInfo.IKLeistungserbringer != addressInfo2.IKLeistungserbringer)
|
||||||
|
{
|
||||||
|
throw new GkvException($"Klient '{first_cost.Person.LastNameFirstName}' ({addressInfo.IKLeistungserbringer}) und '{customer.Person.LastNameFirstName}' ({addressInfo2.IKLeistungserbringer}) verweisen auf unterschiedliche Leistungserbringer.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var invoicebase in gkvAbrechnung.InvoiceBases)
|
||||||
|
{
|
||||||
|
var service = DAOFactory.SearchDAO.GetServiceInvoiceByInvoiceBaseOid(invoicebase.Oid.Value);
|
||||||
|
var orga2 = invoicebase.CostBearer2SupportConcept.CostBearer.Organisation;
|
||||||
|
var customer = invoicebase.CostBearer2SupportConcept.SupportConcept.Customer;
|
||||||
|
|
||||||
|
var invoicebase_dc = MapperFactory.InvoiceBaseDC_InvoiceBase.MapToNewDC(invoicebase);
|
||||||
|
|
||||||
|
var servicedc = MapperFactory.ServiceInvoiceDC_ServiceInvoice.MapToNewDC(service);
|
||||||
|
var customerdc = MapperFactory.CustomerDC_Customer.MapToNewDC(customer);
|
||||||
|
|
||||||
|
Validator.ValidateCustomer(customerdc);
|
||||||
|
|
||||||
|
manager.Add(servicedc, orgadc, customerdc, addressInfo, dat_short, tra_short);
|
||||||
|
}
|
||||||
|
|
||||||
|
manager.Apply();
|
||||||
|
|
||||||
|
if (manager.DakotaFileDict.Count != 1 || manager.DakotaFileDict.First().Value.GetKostenträgerCount() != 1)
|
||||||
|
{
|
||||||
|
var msg = "Unerwartete Anzahl an Dakota Files berechnet.";
|
||||||
|
|
||||||
|
throw new GkvException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_from_manager = manager.DakotaFileDict.First().Value;
|
||||||
|
|
||||||
|
var nutzdatendatei = file_from_manager.GetNutzdatendatei();
|
||||||
|
|
||||||
|
// https://dev.mysql.com/doc/refman/8.3/en/string-type-syntax.html
|
||||||
|
// A TEXT column with a maximum length of 16,777,215 (224 − 1) characters.
|
||||||
|
// The effective maximum length is less if the value contains multibyte characters.
|
||||||
|
// Each MEDIUMTEXT value is stored using a 3-byte length prefix that indicates the number of bytes in the value.
|
||||||
|
//
|
||||||
|
// Type | Maximum length
|
||||||
|
// -----------+-------------------------------------
|
||||||
|
// TINYTEXT | 255(2^8−1) bytes
|
||||||
|
// TEXT | 65,535(2^16−1) bytes = 64 KiB
|
||||||
|
// MEDIUMTEXT | 16,777,215(2^24−1) bytes = 16 MiB
|
||||||
|
// LONGTEXT | 4,294,967,295(2^32−1) bytes = 4 GiB
|
||||||
|
if (nutzdatendatei.Length > 16777215)
|
||||||
|
{
|
||||||
|
var msg = $"nutzdatendatei - Länger als 16777215: {nutzdatendatei.Length}";
|
||||||
|
|
||||||
|
throw new GkvException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
protokoll.Datenaustauschreferenz = datenaustauschreferenz;
|
||||||
|
protokoll.Transfernummer = transfernummer;
|
||||||
|
|
||||||
|
protokoll.IKDatenannahmestelle = file_from_manager.GetIKDatenannahmestelle();
|
||||||
|
protokoll.IKKostentrager = file_from_manager.GetIKKostenträger();
|
||||||
|
protokoll.IKLeistungserbringer = file_from_manager.GetIKLeistungserbringer();
|
||||||
|
protokoll.IKKrankenkasse = file_from_manager.GetIKVersichertenKarte();
|
||||||
|
|
||||||
|
protokoll.Rechnungsnummer = file_from_manager.GetRechnungsnummer();
|
||||||
|
protokoll.Auftragsdatei = file_from_manager.GetAuftragsdatei();
|
||||||
|
protokoll.Nutzdatendatei = nutzdatendatei;
|
||||||
|
protokoll.Transfername = file_from_manager.GetTransferName();
|
||||||
|
protokoll.Dateigrosse = nutzdatendatei.Length;
|
||||||
|
|
||||||
|
protokoll.Dateityp = "Nutzdatendatei";
|
||||||
|
protokoll.Dateiname = protokoll.Transfername;
|
||||||
|
|
||||||
|
protokoll.AbsenderBezeichnung = "ownSoft GmbH";
|
||||||
|
protokoll.EmpfangerBezeichnung = orgadc.BezDatenannahmestelle;
|
||||||
|
|
||||||
|
return protokoll;
|
||||||
|
}
|
||||||
|
catch (GkvException de)
|
||||||
|
{
|
||||||
|
error = de.ToString();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
error = e.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Tuple<int, int> GetNextDatenaustauschreferenzTransfernummer(GkvAbrechnung gkvAbrechnung, string datenannahmestelle)
|
||||||
|
{
|
||||||
|
var datenaustauschref = DAOFactory.SearchDAO.GetNextDatenaustauschreferenz(datenannahmestelle);
|
||||||
|
int transfernummer;
|
||||||
|
|
||||||
|
var state = gkvAbrechnung.GetState();
|
||||||
|
|
||||||
|
if (state == GkvState.NoSend)
|
||||||
|
{
|
||||||
|
transfernummer = DAOFactory.SearchDAO.GetNextTransfernummer(datenannahmestelle);
|
||||||
|
}
|
||||||
|
else if (state == GkvState.ErrorSoft || state == GkvState.ErrorFatal || state == GkvState.ErrorFolgefehler)
|
||||||
|
{
|
||||||
|
transfernummer = gkvAbrechnung.GkvTransferProtokolle.Last().Transfernummer;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new ArgumentException($"Versucht Transfernummer zu laden, invalid state: {state}", nameof(state));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Tuple<int, int>(datenaustauschref, transfernummer);
|
||||||
|
}
|
||||||
|
private Tuple<int, int> ClearDatenaustauschreferenzTransfernummer(int datenaustauschreferenz, int transfernummer)
|
||||||
|
{
|
||||||
|
int d = datenaustauschreferenz % 99999;
|
||||||
|
int t = transfernummer % 1000;
|
||||||
|
|
||||||
|
if (d == 0)
|
||||||
|
{
|
||||||
|
d = 99999;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Tuple<int, int>(d, t);
|
||||||
|
}
|
||||||
|
|
||||||
|
private GkvServerSendNewResponseDC SendApp8SendNewRequest(GkvTransferProtokoll protokoll)
|
||||||
|
{
|
||||||
|
var gkv_transfer_dc = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
||||||
|
|
||||||
|
var request_app8 = new GkvServerSendNewRequestDC
|
||||||
|
{
|
||||||
|
Protokoll = gkv_transfer_dc
|
||||||
|
};
|
||||||
|
|
||||||
|
var response_app8 = SendApp8Request<GkvServerSendNewRequestDC, GkvServerSendNewResponseDC>(request_app8);
|
||||||
|
|
||||||
|
if (!response_app8.Success)
|
||||||
|
throw new GkvException(response_app8.Message);
|
||||||
|
|
||||||
|
return response_app8;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="updateables"></param>
|
||||||
|
/// <param name="loginName"></param>
|
||||||
|
/// <param name="hashed_password"></param>
|
||||||
|
/// <returns>Returns true, if the states are all up to date. False otherwise.</returns>
|
||||||
|
private bool SendApp8GetStatusRequest(GkvAbrechnungDC[] updateables)
|
||||||
|
{
|
||||||
|
var updateables_len = updateables.Count();
|
||||||
|
|
||||||
|
var request = new GkvServerGetStatusRequestDC
|
||||||
|
{
|
||||||
|
Tenant = MultitenancyOperationContextExt.Current.Tenant,
|
||||||
|
Oids = new long[updateables_len]
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int id = 0; id < updateables_len; id++)
|
||||||
|
{
|
||||||
|
var gkv_abrechnung = updateables[id];
|
||||||
|
var gkv_transfer = gkv_abrechnung.TransferProtokolle.Last();
|
||||||
|
|
||||||
|
request.Oids[id] = gkv_transfer.GkvTransferProtokollOid.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
GkvServerGetStatusResponseDC response_app8;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
response_app8 = SendApp8Request<GkvServerGetStatusRequestDC, GkvServerGetStatusResponseDC>(request);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
MailUtils.SendGkvModuleErrorMail("GkvServerGetStatusRequest Error", e, Tenant);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!response_app8.Success)
|
||||||
|
throw new GkvException("Success false - " + response_app8.Message);
|
||||||
|
|
||||||
|
if (response_app8.Results is null)
|
||||||
|
throw new GkvException("Result null - " + response_app8.Message);
|
||||||
|
|
||||||
|
var results = response_app8.Results.Where(x => x is object);
|
||||||
|
|
||||||
|
if (!results.Any())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
HandleGkvServerResults(results);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void HandleGkvServerResults(IEnumerable<GkvServerResultDC> results)
|
||||||
|
{
|
||||||
|
var protokolls = new List<GkvTransferProtokoll>();
|
||||||
|
foreach (var result in results)
|
||||||
|
{
|
||||||
|
var protokoll = DAOFactory.GenericDAO.GetByID<GkvTransferProtokoll>(result.ProtokollOid);
|
||||||
|
|
||||||
|
protokoll.ResultType = result.ResultType;
|
||||||
|
protokoll.Fehlertitel = result.Titel;
|
||||||
|
protokoll.Fehlerdatum = result.Datum;
|
||||||
|
protokoll.Fehlernachricht = result.Nachricht;
|
||||||
|
|
||||||
|
switch (result.ResultType)
|
||||||
|
{
|
||||||
|
case GkvTransferResultType.Success:
|
||||||
|
protokoll.SentDakotaSuccess = true;
|
||||||
|
break;
|
||||||
|
case GkvTransferResultType.FailSoft:
|
||||||
|
protokoll.SentApp8Success = false;
|
||||||
|
break;
|
||||||
|
case GkvTransferResultType.FailFatal:
|
||||||
|
protokoll.SentApp8Success = false;
|
||||||
|
break;
|
||||||
|
case GkvTransferResultType.FailFollowUp:
|
||||||
|
protokoll.SentApp8Success = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
protokolls.Add(protokoll);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (protokolls.Any())
|
||||||
|
DAOFactory.GenericDAO.Update(protokolls);
|
||||||
|
|
||||||
|
var follows = results.Where(x => x.ResultType == GkvTransferResultType.FailFollowUp);
|
||||||
|
|
||||||
|
if (follows.Any())
|
||||||
|
{
|
||||||
|
foreach (var follow in follows)
|
||||||
|
{
|
||||||
|
var protokoll_oid = follow.ProtokollOid;
|
||||||
|
var protokoll = DAOFactory.GenericDAO.LoadByID<GkvTransferProtokoll>(protokoll_oid);
|
||||||
|
var abrechnung_oid = protokoll.GkvAbrechnungOid;
|
||||||
|
|
||||||
|
var new_req = new GkvAbrechnungSendRequestDC()
|
||||||
|
{
|
||||||
|
GkvAbrechnungOid = abrechnung_oid
|
||||||
|
};
|
||||||
|
|
||||||
|
var res = SendNewGkvAbrechnung(new_req);
|
||||||
|
|
||||||
|
if (!res.Success)
|
||||||
|
throw new GkvException("Success - " + res.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Res SendApp8Request<Req, Res>(Req request) where Req : GkvServerRequestDC where Res : GkvResponseDC
|
||||||
|
{
|
||||||
|
var user = LoggedInUserOperationContextExt.Current?.User ?? SessionFacade.LoggedInUser;
|
||||||
|
if (user == null)
|
||||||
|
{
|
||||||
|
throw new GkvException("User unbekannt", "KundenApp");
|
||||||
|
}
|
||||||
|
|
||||||
|
request.Username = user.LoginName;
|
||||||
|
request.Password = user.BCryptPassword;
|
||||||
|
request.Tenant = MultitenancyOperationContextExt.Current.Tenant;
|
||||||
|
|
||||||
|
if (request is GkvServerSendNewRequestDC send_new_req)
|
||||||
|
{
|
||||||
|
send_new_req.ApplicationUserOid = user.Oid.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GkvSender.SendApp8Request<Req, Res>(request, request.Tenant);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user