| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- using System;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.Integration.Logikal;
- using InABox.WPF;
- namespace PRSDesktop;
- public delegate void LogikalResponseEvent(LogikalResponse response);
- public delegate LogikalClient LogikalClientEvent(object sender);
- public abstract class LogikalGrid<T> : DynamicItemsListGrid<T> where T : BaseObject, new()
- {
- public LogikalClient? Client { get; set; }
- public event LogikalClientEvent ClientRequired;
- public event LogikalResponseEvent? ResponseReceived;
-
- protected void NotifyResponseReceived(LogikalResponse response)
- {
- if (ResponseReceived != null)
- {
- Dispatcher.BeginInvoke(
- () =>
- {
- ResponseReceived?.Invoke(response);
- });
- }
- }
-
- public LogikalGrid()
- {
- Refresh(true, false);
- }
- protected override void DoReconfigure(DynamicGridOptions options)
- {
- base.DoReconfigure(options);
- options.FilterRows = true;
- options.HideDatabaseFilters = true;
- }
- protected virtual void BeforeGet()
- {
-
- }
- protected abstract void DoGet(LogikalClient client, IProgress<string> progress);
- protected virtual void AfterGet()
- {
- Refresh(false, true);
- }
-
- public void Get()
- {
- Client ??= ClientRequired?.Invoke(this);
- Client ??= new LogikalClient();
- BeforeGet();
-
- Progress.ShowModal("Please wait", progress =>
- {
- try
- {
- if (Client.Ready)
- {
- progress.Report("Retrieving Data");
- DoGet(Client, progress);
- }
- else
- {
- progress.Report("Connecting to Logikal");
- Client.Connect()
- .Always(NotifyResponseReceived)
- .Success<LogikalConnectResponse>(c =>
- {
- progress.Report("Logging In");
- Client.Login()
- .Always(NotifyResponseReceived)
- .Success<LogikalLoginResponse>(l =>
- {
- progress.Report("Retrieving Data");
- DoGet(Client, progress);
- });
- });
- }
- }
- catch (Exception e)
- {
- Logger.Send(LogType.Error, "", $"Error retrieving data from Logikal: {e.Message}\n{e.StackTrace}");
- }
-
-
- });
-
- AfterGet();
-
- }
- }
|