| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- 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; }
- }
- /// <summary>
- /// Interaction logic for ServicesPanel.xaml
- /// </summary>
- public partial class ServicePanel_Old : UserControl, IPanel<Job>
- {
- private int CurrentPage = -1;
- private readonly List<IMasterDetailPage<Job>> Pages;
- private IMasterDetailPage<Job>? 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<IMasterDetailPage<Job>>
- {
- new JobDetailPanel<JobDetails>(Details),
- new JobDetailPanel<JobPickingListPanel>(Requisitions),
- new JobDetailPanel<InvoicePanel>(Invoices),
- new JobDetailGrid<JobFormGrid, JobForm>(Forms),
- new JobDetailGrid<JobOrderGrid, PurchaseOrderItem>(Orders),
- new JobDetailGrid<JobAssignmentGrid, Assignment>(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<Job, Guid>(x => x.ID) : CoreUtils.FullGuid;
- return new JobDetailsDataModel(new Filter<Job>(x => x.ID).IsEqualTo(jobid));
- }
- return modelsource.DataModel(selection);
- }
- public void Heartbeat(TimeSpan time)
- {
- }
- public void Setup()
- {
- settings = new UserConfiguration<ServiceScreenSettings>().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<PurchaseOrderItem>() ? Visibility.Visible : Visibility.Collapsed;
- Requisitions.Visibility = ClientFactory.IsSupported<Requisition>() ? Visibility.Visible : Visibility.Collapsed;
- Assignments.Visibility = ClientFactory.IsSupported<Assignment>() ? Visibility.Visible : Visibility.Collapsed;
- Forms.Visibility = Security.CanView<JobForm>() ? Visibility.Visible : Visibility.Collapsed;
- Invoices.Visibility = Security.CanView<Invoice>() ? 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<Job>() ?? 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<CoreRow>();
- }
- else
- {
- ServiceGrid.SelectedRows = ServiceGrid.Data.Rows.Where(x => x.Get<Job, Guid>(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<Job, Guid>(x => x.ID) ?? Guid.Empty;
- new UserConfiguration<ServiceScreenSettings>().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<ServiceScreenSettings>().Save(settings);
- var newTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
- if (ServiceGrid.ColumnsTag != newTag)
- {
- ServiceGrid.ColumnsTag = newTag;
- ServiceGrid.Refresh(true, true);
- }
- }
- public Dictionary<string, object[]> Selected()
- {
- return SelectedPage?.Selected()
- ?? new Dictionary<string, object[]> { { typeof(Job).EntityName(), ServiceGrid.SelectedRows } };
- }
- public void Shutdown(CancelEventArgs? cancel)
- {
- }
- #endregion
- }
|