using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows.Controls; using System.Windows.Threading; using Comal.Classes; using InABox.Core; using InABox.DynamicGrid; using InABox.Wpf; namespace PRSDesktop; public partial class JobScopePanel : UserControl, IPanel, IMasterDetailControl { private enum PageIndex { RequisitionItems = 00, ManufacturingPackets, DeliveryItems, Assignments, Documents, Tasks, Forms, } private int _currentPage = -1; private JobScopeRequisitionItemGrid? _requisitionItemsGrid; private JobScopeAssignmentGrid? _assignmentGrid; private JobScopeDocumentGrid? _documentGrid; private JobScopeKanbanGrid? _kanbanGrid; private JobScopeFormGrid? _formGrid; public JobScopePanel() { InitializeComponent(); } public Job? Master { get => _scopes.Master; set => _scopes.Master = value; } public bool IsReady { get; set; } public event DataModelUpdateEvent? OnUpdateDataModel; public void CreateToolbarButtons(IPanelHost host) { } public void Setup() { _scopes.Refresh(true, false); } public void Shutdown(CancelEventArgs? cancel) { } public void Refresh() { _scopes.Refresh(false, true); RefreshPage(); } private void RefreshPage() { var scope = _scopes.SelectedRows.FirstOrDefault()?.ToObject(); var page = (PageIndex)_pages.SelectedIndex; switch (page) { case PageIndex.RequisitionItems : RefreshGrid(_requisitionItems, ref _requisitionItemsGrid, scope); break; case PageIndex.ManufacturingPackets : break; case PageIndex.DeliveryItems : break; case PageIndex.Assignments : RefreshGrid(_assignments, ref _assignmentGrid, scope); break; case PageIndex.Documents: RefreshGrid(_documents, ref _documentGrid, scope); break; case PageIndex.Tasks: RefreshGrid(_kanbans, ref _kanbanGrid, scope); break; case PageIndex.Forms: RefreshGrid(_forms, ref _formGrid, scope, () => new JobScopeFormGrid(Master)); break; } } public string SectionName => "Job Scopes"; public DataModel DataModel(Selection selection) { var ids = _scopes.ExtractValues(x => x.ID, selection).ToArray(); return new AutoDataModel(new Filter(c => c.ID).InList(ids)); } public Dictionary Selected() { return new Dictionary { { typeof(JobScope).EntityName(), _scopes.Data.Rows.ToArray() } }; } public void Heartbeat(TimeSpan time) { } private void _scopes_OnSelectItem(object sender, DynamicGridSelectionEventArgs e) { RefreshPage(); } private void RefreshGrid(TabItem container, ref T? grid, JobScope? scope) where T : IDynamicGrid, IJobScopeGrid, new() => RefreshGrid(container, ref grid, scope, () => new T()); private void RefreshGrid(TabItem container, ref T? grid, JobScope? scope, Func newGrid) where T : IDynamicGrid, IJobScopeGrid { var bInitialised = grid != null; if (!bInitialised) { grid = newGrid(); container.Content = grid; } grid.Scope = scope; grid.Refresh(!bInitialised, true); } private void _pages_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { RefreshPage(); } }