using Comal.Classes;
using InABox.Clients;
using InABox.Configuration;
using InABox.Core;
using InABox.DynamicGrid;
using InABox.Wpf;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
namespace PRSDesktop;
public class ServiceScreenSettings : IUserConfigurationSettings
{
public Guid CurrentJob { get; set; }
public Guid JobStatus { get; set; }
public ScreenViewType ViewType { get; set; }
public double AnchorWidth { get; set; }
}
///
/// Interaction logic for ServicesPanel.xaml
///
public partial class ServicePanel_Old : UserControl, IPanel
{
private int CurrentPage = -1;
private readonly List> Pages;
private IMasterDetailPage? SelectedPage => Pages.FirstOrDefault(x => x.Tab == JobPages.SelectedTab);
private DateTime lastselection = DateTime.MaxValue;
private DispatcherTimer timer;
private ServiceScreenSettings settings;
public ServicePanel_Old()
{
InitializeComponent();
Pages = new List>
{
new JobDetailPanel(Details),
new JobDetailPanel(Requisitions),
new JobDetailPanel(Invoices),
new JobDetailGrid(Forms),
new JobDetailGrid(Orders),
new JobDetailGrid(Assignments),
};
}
#region IPanel
public bool IsReady { get; set; }
public string SectionName => "Service";
public event DataModelUpdateEvent? OnUpdateDataModel;
public void CreateToolbarButtons(IPanelHost host)
{
}
private IDataModelSource modelsource;
public DataModel DataModel(Selection selection)
{
if (modelsource == null)
{
var row = ServiceGrid.SelectedRows.FirstOrDefault();
var jobid = row != null ? row.Get(x => x.ID) : CoreUtils.FullGuid;
return new JobDetailsDataModel(new Filter(x => x.ID).IsEqualTo(jobid));
}
return modelsource.DataModel(selection);
}
public void Heartbeat(TimeSpan time)
{
}
public void Setup()
{
settings = new UserConfiguration().Load();
SplitPanel.View = settings.ViewType == ScreenViewType.Register ? DynamicSplitPanelView.Master :
settings.ViewType == ScreenViewType.Details ? DynamicSplitPanelView.Detail : DynamicSplitPanelView.Combined;
SplitPanel.AnchorWidth = settings.AnchorWidth;
ServiceGrid.OnSelectItem += ServiceGrid_OnSelectItem;
ServiceGrid.BeforeRefresh += ServiceGrid_BeforeRefresh;
ServiceGrid.AfterRefresh += ServiceGrid_AfterRefresh;
Orders.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Requisitions.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Assignments.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Forms.Visibility = Security.CanView() ? Visibility.Visible : Visibility.Collapsed;
Invoices.Visibility = Security.CanView() ? Visibility.Visible : Visibility.Collapsed;
ServiceGrid.Refresh(true, false);
ServiceGrid.ColumnsTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
ServiceGrid.Refresh(true, false);
timer = new DispatcherTimer();
timer.Tick += Timer_Tick;
timer.Interval = new TimeSpan(0, 0, 0, 0, 100);
timer.IsEnabled = true;
}
public void Refresh()
{
ServiceGrid.Refresh(false, true);
lastselection = DateTime.MinValue;
}
private void Timer_Tick(object? sender, EventArgs e)
{
if (lastselection < DateTime.Now.AddMilliseconds(-500) && !_serviceGridRefreshing)
{
lastselection = DateTime.MaxValue;
var job = ServiceGrid.SelectedRows.FirstOrDefault()?.ToObject() ?? new Job();
var dataModelSource = SelectedPage?.Refresh(job);
if (JobPages.SelectedIndex != CurrentPage)
{
if(dataModelSource is not null)
{
modelsource = dataModelSource;
OnUpdateDataModel?.Invoke(dataModelSource.SectionName, dataModelSource.DataModel(Selection.None));
}
CurrentPage = JobPages.SelectedIndex;
}
}
}
private bool _serviceGridRefreshing;
private void ServiceGrid_BeforeRefresh(object sender, BeforeRefreshEventArgs args)
{
_serviceGridRefreshing = true;
}
private void ServiceGrid_AfterRefresh(object sender, AfterRefreshEventArgs args)
{
if (settings.CurrentJob == Guid.Empty)
{
ServiceGrid.SelectedRows = Array.Empty();
}
else
{
ServiceGrid.SelectedRows = ServiceGrid.Data.Rows.Where(x => x.Get(x => x.ID) == settings.CurrentJob).ToArray();
}
_serviceGridRefreshing = false;
}
private void ServiceGrid_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
{
if (!_serviceGridRefreshing)
{
lastselection = DateTime.Now;
settings.CurrentJob = e.Rows?.FirstOrDefault()?.Get(x => x.ID) ?? Guid.Empty;
new UserConfiguration().Save(settings);
}
}
private void JobPages_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source == JobPages)
lastselection = DateTime.MinValue;
}
private void SplitPanel_OnChanged(object sender, DynamicSplitPanelSettings e)
{
settings.ViewType = SplitPanel.View == DynamicSplitPanelView.Master ? ScreenViewType.Register :
SplitPanel.View == DynamicSplitPanelView.Detail ? ScreenViewType.Details : ScreenViewType.Combined;
settings.AnchorWidth = SplitPanel.AnchorWidth;
new UserConfiguration().Save(settings);
var newTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
if (ServiceGrid.ColumnsTag != newTag)
{
ServiceGrid.ColumnsTag = newTag;
ServiceGrid.Refresh(true, true);
}
}
public Dictionary Selected()
{
return SelectedPage?.Selected()
?? new Dictionary { { typeof(Job).EntityName(), ServiceGrid.SelectedRows } };
}
public void Shutdown(CancelEventArgs? cancel)
{
}
#endregion
}