using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
using Comal.Classes;
using InABox.Clients;
using InABox.Configuration;
using InABox.Core;
using InABox.DynamicGrid;
using InABox.DynamicGrid.Spreadsheet;
using InABox.WPF;
using Microsoft.Office.Interop.Outlook;
using System.ComponentModel;
using Selection = InABox.Core.Selection;
using PRSDesktop.Panels.Jobs;
namespace PRSDesktop;
public class JobPanelSettings : BaseObject, IGlobalConfigurationSettings
{
[Caption("Milestone Task",IncludePath = false)]
public KanbanTypeLink DocumentMilestoneKanbanType { get; set; }
}
///
/// Interaction logic for JobPanel.xaml
///
public partial class ProjectsPanel_Old : UserControl, IPanel
{
private JobPanelSettings _settings;
private int CurrentPage = -1;
private readonly List> Pages;
private DateTime lastselection = DateTime.MaxValue;
private IDataModelSource modelsource;
// User Settings
private JobScreenSettings settings;
private DispatcherTimer timer;
protected void CreatePage(String caption) where T : class, IMasterDetailPage
{
var header = new DynamicTabItem() { Header = caption };
JobPages.Items.Add(header);
if (Activator.CreateInstance(typeof(T), header) is T page)
Pages.Add(page);
}
public ProjectsPanel_Old()
{
InitializeComponent();
Pages = new List>();
CreatePage>("Details");
CreatePage>("Scopes");
CreatePage>("Documents");
CreatePage>("Stages");
CreatePage>("ITPs");
CreatePage>("Product Mappings");
CreatePage>("Product Styles");
CreatePage>("BOM");
CreatePage>("Requisitions");
CreatePage>("Orders");
CreatePage>("Designs");
CreatePage>("Manufacturing");
CreatePage>("Dispatch");
CreatePage>("Deliveries");
CreatePage>("OnSite");
CreatePage>("Tasks");
CreatePage>("EquipmentTab");
CreatePage>("Employees");
CreatePage>("Trackers");
CreatePage>("Assignments");
CreatePage>("Timesheets");
CreatePage>("Forms");
CreatePage>("Invoices");
CreatePage>("Spreadsheets");
CreatePage>("Summary");
}
private IMasterDetailPage? SelectedPage => Pages.FirstOrDefault(x => x.Tab == JobPages.SelectedTab);
public bool IsReady { get; set; }
public Dictionary Selected()
{
return SelectedPage?.Selected()
?? new Dictionary { { typeof(Job).EntityName(), JobGrid.SelectedRows } };
}
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 = Math.Max(20,settings.AnchorWidth);
JobGrid.OnSelectItem += JobGrid_OnSelectItem;
JobGrid.BeforeRefresh += JobGrid_BeforeRefresh;
JobGrid.AfterRefresh += JobGrid_AfterRefresh;
Scopes.Visibility = Security.CanView() ? Visibility.Visible : Visibility.Collapsed;
Documents.Visibility = Security.CanView() ? Visibility.Visible : Visibility.Collapsed;
Stages.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
ITPs.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
ProductMappings.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
ProductStyles.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
BOM.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Requisitions.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Orders.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Setouts.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Manufacturing.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Dispatch.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Deliveries.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
OnSite.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Tasks.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
EquipmentTab.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Employees.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Trackers.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Assignments.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Timesheets.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
Forms.Visibility = Security.CanView() ? Visibility.Visible : Visibility.Collapsed;
Invoices.Visibility = Security.CanView() ? Visibility.Visible : Visibility.Collapsed;
Spreadsheets.Visibility = Security.CanView() ? Visibility.Visible : Visibility.Collapsed;
Summary.Visibility = ClientFactory.IsSupported() ? Visibility.Visible : Visibility.Collapsed;
JobGrid.ColumnsTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
JobGrid.Refresh(true, false);
timer = new DispatcherTimer();
timer.Tick += Timer_Tick;
timer.Interval = new TimeSpan(0, 0, 0, 0, 100);
timer.IsEnabled = true;
}
private bool _jobGridRefreshing;
private void JobGrid_BeforeRefresh(object sender, BeforeRefreshEventArgs args)
{
_jobGridRefreshing = true;
}
private void JobGrid_AfterRefresh(object sender, AfterRefreshEventArgs args)
{
if (settings.CurrentJob == Guid.Empty)
{
JobGrid.SelectedRows = Array.Empty();
}
else
{
JobGrid.SelectedRows = JobGrid.Data.Rows.Where(x => x.Get(x => x.ID) == settings.CurrentJob).ToArray();
}
_jobGridRefreshing = false;
}
public void Shutdown(CancelEventArgs? cancel)
{
timer.IsEnabled = false;
timer = null;
Details.Content = null;
Scopes.Content = null;
Documents.Content = null;
Stages.Content = null;
ITPs.Content = null;
BOM.Content = null;
Setouts.Content = null;
Requisitions.Content = null;
Orders.Content = null;
Manufacturing.Content = null;
Dispatch.Content = null;
Deliveries.Content = null;
OnSite.Content = null;
Tasks.Content = null;
EquipmentTab.Content = null;
Employees.Content = null;
Trackers.Content = null;
Assignments.Content = null;
Timesheets.Content = null;
Forms.Content = null;
Invoices.Content = null;
Spreadsheets.Content = null;
Summary.Content = null;
}
public void Refresh()
{
JobGrid.Refresh(false, true);
lastselection = DateTime.MinValue;
}
public void CreateToolbarButtons(IPanelHost host)
{
ProjectSetupActions.JobStatuses(host);
ProjectSetupActions.DocumentMilestones(host);
ProjectSetupActions.JobScopeStatuses(host);
ProjectSetupActions.DrawingTemplates(host);
host.CreateSetupSeparator();
ProjectSetupActions.JobSpreadsheetTemplates(host);
host.CreateSetupSeparator();
ProjectSetupActions.SetoutGroups(host);
host.CreateSetupAction(new PanelAction() { Caption = "Job Settings", Image = PRSDesktop.Resources.specifications, OnExecute = JobSettingsClick });
}
private void JobSettingsClick(PanelAction obj)
{
if (DynamicGridUtils.Edit(_settings))
{
new GlobalConfiguration().Save(_settings);
}
}
public event DataModelUpdateEvent? OnUpdateDataModel;
public string SectionName => modelsource?.SectionName ?? "Job Details";
public DataModel DataModel(Selection selection)
{
if (modelsource == null)
{
var row = JobGrid.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)
{
}
private void Timer_Tick(object? sender, EventArgs e)
{
if (lastselection < DateTime.Now.AddMilliseconds(-500) && !_jobGridRefreshing)
{
lastselection = DateTime.MaxValue;
var job = JobGrid.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 void JobGrid_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
{
if (!_jobGridRefreshing)
{
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 (JobGrid.ColumnsTag != newTag)
{
JobGrid.ColumnsTag = newTag;
JobGrid.Refresh(true, true);
}
}
}