- Debug kann auch Fatal Fehler erneut senden
- Schickt nicht direkt per Dakota, sondern legt erstmal in Appsettings.QueueFolderPath Datei an
This commit is contained in:
@@ -106,6 +106,8 @@ namespace BeWo.View.Detail.Accounting
|
||||
CriteriaOperator.FromLambda<GkvAbrechnungDC>(gkv => gkv.AbrechnungsZeitraumStart <= filter_start && filter_ende <= gkv.AbrechnungsZeitraumEnde));
|
||||
}
|
||||
}
|
||||
|
||||
gridView.BestFitColumns();
|
||||
}
|
||||
|
||||
private void UpdateGkvAbrechnungList(IList<GkvAbrechnungDC> dcList)
|
||||
@@ -120,8 +122,6 @@ namespace BeWo.View.Detail.Accounting
|
||||
datagrid_gkvAbrechnungen.Visibility = Visibility.Visible;
|
||||
|
||||
UpdateDataGridFilter();
|
||||
|
||||
gridView.BestFitColumns();
|
||||
});
|
||||
|
||||
|
||||
@@ -233,7 +233,13 @@ namespace BeWo.View.Detail.Accounting
|
||||
|
||||
var state = dc.GetState();
|
||||
|
||||
var can_send = state == GkvState.NoSend || state == GkvState.Error;
|
||||
var can_send = false;
|
||||
|
||||
can_send |= state == GkvState.NoSend;
|
||||
can_send |= state == GkvState.Error;
|
||||
#if DEBUG
|
||||
can_send |= state == GkvState.ErrorFatal;
|
||||
#endif
|
||||
|
||||
if (!can_send)
|
||||
{
|
||||
|
||||
@@ -36,10 +36,14 @@ 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 GkvAbrechnungResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath");
|
||||
private string ResultFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungResultFolderPath");
|
||||
private string QueueFolderPath { get; set; } = ConfigurationManager.AppSettings.Get("GkvAbrechnungQueueFolderPath");
|
||||
|
||||
private string DakotaPath { get; set; } = ConfigurationManager.AppSettings.Get("DakotaPath");
|
||||
|
||||
public GkvApp8Request GkvRequest { get; set; }
|
||||
@@ -139,7 +143,7 @@ namespace Host
|
||||
loginurl = string.Format(LOGINSERVER_URL, "http://localhost:3777/Host");
|
||||
#endif
|
||||
|
||||
if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF")
|
||||
if (gkv_request.Tenant == "demo" && gkv_request.Username == "demo" && gkv_request.DebugMode == "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF")
|
||||
return true;
|
||||
|
||||
bool successful = false;
|
||||
@@ -158,7 +162,7 @@ namespace Host
|
||||
successful = BitConverter.ToBoolean(loginresponse, 0);
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -168,38 +172,14 @@ namespace Host
|
||||
|
||||
private void SendNew(GkvApp8SendNewRequest req)
|
||||
{
|
||||
var debug_mode = false;
|
||||
|
||||
#if DEBUG
|
||||
debug_mode = true;
|
||||
#endif
|
||||
|
||||
// Response
|
||||
var response = new GkvApp8SendNewResponse(false);
|
||||
|
||||
bool saved_in_filesystem = false;
|
||||
bool send_success = false;
|
||||
var protokoll = req.GkvTransferProtokoll;
|
||||
|
||||
string path = string.Empty;
|
||||
try
|
||||
{
|
||||
//var test = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
|
||||
|
||||
//throw new DakotaException(test);
|
||||
|
||||
// Check Dakota Status
|
||||
CheckDakotaStatus();
|
||||
|
||||
// Save File
|
||||
path = SaveFileInFileSystem(req, debug_mode);
|
||||
saved_in_filesystem = true;
|
||||
|
||||
if (req.SendDirect)
|
||||
{
|
||||
// Dakota Send
|
||||
SendViaDakota();
|
||||
}
|
||||
send_success = true;
|
||||
SaveFileInFileSystem(req, true);
|
||||
|
||||
req.GkvTransferProtokoll.SentSuccess = true;
|
||||
|
||||
@@ -207,27 +187,24 @@ namespace Host
|
||||
}
|
||||
catch (DakotaException e)
|
||||
{
|
||||
req.GkvTransferProtokoll.Fehlerdatum = DateTime.Now;
|
||||
req.GkvTransferProtokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
|
||||
req.GkvTransferProtokoll.Fehlertitel = "App8";
|
||||
req.GkvTransferProtokoll.Fehlernachricht = e.Message;
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
|
||||
protokoll.Fehlertitel = "App8";
|
||||
protokoll.Fehlernachricht = e.Message;
|
||||
|
||||
response.Message = e.Message;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
req.GkvTransferProtokoll.Fehlerdatum = DateTime.Now;
|
||||
req.GkvTransferProtokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
|
||||
req.GkvTransferProtokoll.Fehlertitel = "App8";
|
||||
req.GkvTransferProtokoll.Fehlernachricht = e.Message;
|
||||
protokoll.Fehlerdatum = DateTime.Now;
|
||||
protokoll.Fehlerlevel = GkvTransferFehlerlevel.Soft;
|
||||
protokoll.Fehlertitel = "App8";
|
||||
protokoll.Fehlernachricht = e.Message;
|
||||
|
||||
response.Message = e.Message;
|
||||
}
|
||||
|
||||
if (!send_success && saved_in_filesystem)
|
||||
DeleteFileInFileSystem(path);
|
||||
|
||||
response.GkvTransferProtokollDC = req.GkvTransferProtokoll;
|
||||
response.GkvTransferProtokollDC = protokoll;
|
||||
|
||||
SendResponse(response);
|
||||
}
|
||||
@@ -244,15 +221,16 @@ namespace Host
|
||||
// Load XML Info
|
||||
var results = GetResultFile(req.Tenant);
|
||||
|
||||
for (int i = 0; i < tuple_count; i++)
|
||||
{
|
||||
var gkv_transfer_oid = req.Oids[i];
|
||||
|
||||
if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC))
|
||||
if (results is object)
|
||||
for (int i = 0; i < tuple_count; i++)
|
||||
{
|
||||
response.Fehler[i] = fehlerDC;
|
||||
var gkv_transfer_oid = req.Oids[i];
|
||||
|
||||
if (results.TryGetValue(gkv_transfer_oid, out var fehlerDC))
|
||||
{
|
||||
response.Fehler[i] = fehlerDC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
response.Success = true;
|
||||
}
|
||||
@@ -283,7 +261,7 @@ namespace Host
|
||||
SendResponse(response);
|
||||
}
|
||||
|
||||
private void CheckDakotaStatus() => ExecuteDakota("-s", 0);
|
||||
private void CheckDakotaStatus() => ExecuteDakota("-s", 0);
|
||||
private void SendViaDakota() => ExecuteDakota("-e", 0, 1);
|
||||
private int ExecuteDakota(string arg, params int[] accepted_return_codes)
|
||||
{
|
||||
@@ -291,7 +269,10 @@ namespace Host
|
||||
|
||||
var process = Process.Start(path, arg);
|
||||
|
||||
process.WaitForExit();
|
||||
var success = process.WaitForExit(PROCESS_WAITFOREXIT_MS);
|
||||
|
||||
if (!success)
|
||||
throw new DakotaException($"Execute {arg} Timeout");
|
||||
|
||||
var returncode = process.ExitCode;
|
||||
|
||||
@@ -303,21 +284,22 @@ namespace Host
|
||||
}
|
||||
|
||||
private string SaveFileInFileSystem(GkvApp8SendNewRequest req, bool debug_mode = false)
|
||||
=> SaveFileInFileSystem(req.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername,
|
||||
=> SaveFileInFileSystem(req.GkvTransferProtokoll.GkvTransferProtokollOid.Value, req.Tenant, req.GkvTransferProtokoll.IKDatenannahmestelle, req.GkvTransferProtokoll.Transfername,
|
||||
req.GkvTransferProtokoll.Nutzdatendatei, req.GkvTransferProtokoll.Auftragsdatei, debug_mode);
|
||||
private string SaveFileInFileSystem(string tenant, string datenannahmestelle, string transfername, string nutzdaten, string auftragsdatei, bool debug_mode = false)
|
||||
private string SaveFileInFileSystem(long protokoll_oid, string tenant, string datenannahmestelle, string transfername, string nutzdaten, string auftragsdatei, bool debug_mode = false)
|
||||
{
|
||||
string root_path;
|
||||
string file_path;
|
||||
if (debug_mode)
|
||||
{
|
||||
root_path = $@"C:\GkvAbrechnung\";
|
||||
file_path = $@"{tenant}-{datenannahmestelle}-{transfername}";
|
||||
root_path = QueueFolderPath;
|
||||
file_path = $@"{tenant}_{protokoll_oid}_{datenannahmestelle}_{transfername}";
|
||||
}
|
||||
else
|
||||
{
|
||||
root_path = $@"C:\GkvAbrechnung\{tenant}\{datenannahmestelle}\";
|
||||
file_path = $@"{transfername}";
|
||||
throw new DakotaException("No Debugmode impl");
|
||||
//root_path = $@"C:\GkvAbrechnung\{tenant}\{datenannahmestelle}\";
|
||||
//file_path = $@"{transfername}";
|
||||
}
|
||||
|
||||
Directory.CreateDirectory(root_path);
|
||||
@@ -369,16 +351,19 @@ namespace Host
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(GkvAbrechnungResultFolderPath))
|
||||
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 path = GkvAbrechnungResultFolderPath;
|
||||
var folder = path;
|
||||
var location = Path.GetFullPath(Path.Combine(folder, $"{tenant}.results.xml"));
|
||||
|
||||
var folder = Path.Combine(path, tenant);
|
||||
var location = Path.Combine(folder, "results.xml");
|
||||
if (!Directory.Exists(folder))
|
||||
Directory.CreateDirectory(folder);
|
||||
|
||||
if (!File.Exists(location))
|
||||
{
|
||||
@@ -386,20 +371,19 @@ namespace Host
|
||||
using (File.Create(location)) { };
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
var doc = XDocument.Load(location);
|
||||
|
||||
var list = doc.Root.Elements("Fehler")
|
||||
var list = doc?.Root?.Elements("Fehler")?
|
||||
.Select(GkvApp8FehlerXml.Parse)
|
||||
.Select(GkvApp8FehlerXml.ToDC)
|
||||
.ToList();
|
||||
|
||||
return list.ToDictionary(dc => dc.Oid);
|
||||
return list?.ToDictionary(dc => dc.Oid);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new DakotaException("App8 Server Error: " + e.Message);
|
||||
throw new DakotaException("App8 Server Error: " + e.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,6 +237,7 @@
|
||||
<add key="OpenrouteServiceApiUrlGeocode" value="https://api.openrouteservice.org/geocode/search" />
|
||||
<add key="OpenrouteServiceApiKey" value="5b3ce3597851110001cf62484b0917529e9a4008acda819dc06e47e8" />
|
||||
<add key="GkvAbrechnungResultFolderPath" value="C:\GkvAbrechnung\Results\" />
|
||||
<add key="GkvAbrechnungQueueFolderPath" value="C:\GkvAbrechnung\Queue\" />
|
||||
<add key="DakotaPath" value="C:\Program Files (x86)\ITSG\dakotale\dakota30.exe" />
|
||||
</appSettings>
|
||||
<devExpress>
|
||||
|
||||
@@ -865,6 +865,13 @@ namespace BeWo.Service.ServiceImplementations
|
||||
return response;
|
||||
}
|
||||
|
||||
if (entity.GkvTransferProtokolle is null)
|
||||
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
|
||||
|
||||
entity.GkvTransferProtokolle.Add(protokoll);
|
||||
|
||||
DAOFactory.GenericDAO.Update(entity);
|
||||
|
||||
var app8_response = SendApp8SendNewRequest(protokoll, user.LoginName, user.RC2EncryptedHash);
|
||||
|
||||
var app8_protokoll = app8_response.GkvTransferProtokollDC;
|
||||
@@ -888,11 +895,6 @@ namespace BeWo.Service.ServiceImplementations
|
||||
protokoll.Fehlertitel = "Erstellung (kritisch)";
|
||||
}
|
||||
|
||||
if (entity.GkvTransferProtokolle is null)
|
||||
entity.GkvTransferProtokolle = new List<GkvTransferProtokoll>();
|
||||
|
||||
entity.GkvTransferProtokolle.Add(protokoll);
|
||||
|
||||
DAOFactory.GenericDAO.Update(entity);
|
||||
|
||||
response.TransferProtokoll = MapperFactory.GkvTransferProtokollDC_GkvTransferprotokoll.MapToNewDC(protokoll);
|
||||
@@ -910,7 +912,7 @@ namespace BeWo.Service.ServiceImplementations
|
||||
|
||||
var state = GkvAbrechnung.GetState(gkvAbrechnung);
|
||||
|
||||
if (state == GkvState.Waiting || state == GkvState.OldAndNoFeedback || state == GkvState.Paid || state == GkvState.ErrorFatal)
|
||||
if (state == GkvState.Waiting || state == GkvState.OldAndNoFeedback || state == GkvState.Paid)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -1008,7 +1010,7 @@ namespace BeWo.Service.ServiceImplementations
|
||||
{
|
||||
transfernummer = DAOFactory.SearchDAO.GetNextTransfernummer(datenannahmestelle);
|
||||
}
|
||||
else if (state == GkvState.Error)
|
||||
else if (state == GkvState.Error || state == GkvState.ErrorFatal)
|
||||
{
|
||||
transfernummer = gkvAbrechnung.GkvTransferProtokolle.Last().Transfernummer;
|
||||
}
|
||||
@@ -1076,16 +1078,13 @@ namespace BeWo.Service.ServiceImplementations
|
||||
|
||||
var url = "https://app8.bewoplaner.de/service/GkvAbrechnungView.aspx";
|
||||
|
||||
#if DEBUG
|
||||
url = "http://localhost:3777/Host/GkvAbrechnungView.aspx";
|
||||
#endif
|
||||
|
||||
var request = new GkvApp8GetStatusRequest
|
||||
{
|
||||
Username = loginName,
|
||||
Password = hashed_password,
|
||||
Tenant = MultitenancyOperationContextExt.Current.Tenant,
|
||||
Oids = new long[updateables_len]
|
||||
Oids = new long[updateables_len],
|
||||
DebugMode = "fozc4897b6ztvf978AFCRRG244fvFV2532fvf324AF",
|
||||
};
|
||||
|
||||
for (int id = 0; id < updateables_len; id++)
|
||||
@@ -1096,16 +1095,21 @@ namespace BeWo.Service.ServiceImplementations
|
||||
request.Oids[id] = gkv_transfer.GkvTransferProtokollOid.Value;
|
||||
}
|
||||
|
||||
var response_app8_str = SendApp8Request(url, JsonConvert.SerializeObject(request));
|
||||
GkvApp8GetStatusResponse response_app8;
|
||||
try
|
||||
{
|
||||
var response_app8_str = SendApp8Request(url, JsonConvert.SerializeObject(request));
|
||||
|
||||
var response_app8 = JsonConvert.DeserializeObject<GkvApp8GetStatusResponse>(response_app8_str);
|
||||
|
||||
if (!response_app8.Success)
|
||||
response_app8 = JsonConvert.DeserializeObject<GkvApp8GetStatusResponse>(response_app8_str);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
return true;
|
||||
throw new NotImplementedException("App 8 Anfrage nicht erfolgreich");
|
||||
}
|
||||
|
||||
if (!response_app8.Success)
|
||||
throw new DakotaException(response_app8.Message);
|
||||
|
||||
bool allAreUpToDate = true;
|
||||
for (int id = 0; id < updateables_len; id++)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user