using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Windows.Controls; using System.Windows.Input; using Comal.Classes; using InABox.Configuration; using InABox.Core; using InABox.DynamicGrid; namespace PRSDesktop { /// /// Interaction logic for SupplierPurchaseOrderPanel.xaml /// public partial class SupplierPurchaseOrderPanel : UserControl, IPanel { private readonly List> _categories = new(); private PurchaseScreenSettings settings; public SupplierPurchaseOrderPanel() { InitializeComponent(); Orders.HiddenColumns.Add(x => x.SupplierLink.ID); Orders.HiddenColumns.Add(x => x.PONumber); Orders.HiddenColumns.Add(x => x.SupplierLink.Code); Orders.HiddenColumns.Add(x => x.SupplierLink.Name); Orders.HiddenColumns.Add(x => x.Notes); Orders.HiddenColumns.Add(x => x.IssuedDate); Orders.HiddenColumns.Add(x => x.IssuedBy.Name); Orders.HiddenColumns.Add(x => x.DueDate); Orders.HiddenColumns.Add(x => x.ClosedDate); Orders.OnSelectItem += (o, e) => { var row = e.Rows?.FirstOrDefault(); Items.OrderID = row != null ? row.Get(x => x.ID) : CoreUtils.FullGuid; Items.SupplierID = row != null ? row.Get(x => x.SupplierLink.ID) : CoreUtils.FullGuid; Items.Closed = row != null ? !row.Get(x => x.ClosedDate).IsEmpty() : true; LoadOrder(row); Items.Refresh(false, true); }; } public bool IsReady { get; set; } public event DataModelUpdateEvent OnUpdateDataModel; public Dictionary Selected() { return new Dictionary { { typeof(PurchaseOrder).EntityName(), Orders.SelectedRows } }; } public void CreateToolbarButtons(IPanelHost host) { // } public string SectionName => "Purchase Orders"; public DataModel DataModel(Selection selection) { var ids = Orders.ExtractValues(x => x.ID, selection).ToArray(); return new BaseDataModel(new Filter(x => x.ID).InList(ids)); } public void Refresh() { Orders.Refresh(false, true); } public void Setup() { settings = new UserConfiguration().Load(); SplitPanel.View = settings.ViewType == ScreenViewType.Register ? DynamicSplitPanelView.Master : settings.ViewType == ScreenViewType.Details ? DynamicSplitPanelView.Detail : DynamicSplitPanelView.Combined; SplitPanel.MasterWidth = settings.PurchaseColumnWidth; StatusList.SelectedIndex = settings.ShowAll ? 1 : 0; StatusList.SelectionChanged += StatusList_SelectionChanged; _categories.Add(new Tuple(CoreUtils.FullGuid, "All Categories")); var query = new MultiQuery(); query.Add( LookupFactory.DefineFilter(), LookupFactory.DefineColumns(), LookupFactory.DefineSort() ); query.Query(); LoadLookups(query, _categories, x => x.Description); CategoryList.ItemsSource = _categories; CategoryList.SelectedValue = _categories.Any(x => x.Item1 == settings.SelectedCategory) ? settings.SelectedCategory : CoreUtils.FullGuid; Orders.SelectedCategory = (Guid)CategoryList.SelectedValue; CategoryList.SelectionChanged += CategoryList_SelectionChanged; Orders.ColumnsTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : ""; Orders.Refresh(true, false); Items.Refresh(true, false); } public void Shutdown() { } public void Heartbeat(TimeSpan time) { } private void LoadOrder(CoreRow row) { Number.Text = row == null ? "" : row.Get(x => x.PONumber); SupplierCode.Text = row == null ? "" : row.Get(x => x.SupplierLink.Code); SupplierName.Text = row == null ? "" : row.Get(x => x.SupplierLink.Name); Description.Text = row == null ? "" : row.Get(x => x.Notes); Issued.Text = row == null ? "" : CheckDate(row.Get(x => x.IssuedDate)); IssuedBy.Text = row == null ? "" : row.Get(x => x.IssuedBy.Name); DueDate.Text = row == null ? "" : CheckDate(row.Get(x => x.DueDate)); ClosedDate.Text = row == null ? "" : CheckDate(row.Get(x => x.ClosedDate)); } private string CheckDate(DateTime date) { return date.IsEmpty() ? "" : date.ToShortDateString(); } private void LoadLookups(MultiQuery query, List> lookups, Expression> display) where T : Entity { var table = query.Get(); foreach (var row in table.Rows) lookups.Add(new Tuple(row.Get(c => c.ID), row.Get(display))); } private void CategoryList_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!IsReady) return; Orders.SelectedCategory = (Guid)CategoryList.SelectedValue; settings.SelectedCategory = Orders.SelectedCategory; new UserConfiguration().Save(settings); Refresh(); } private void StatusList_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!IsReady) return; Orders.ShowAll = StatusList.SelectedIndex == 1; settings.ShowAll = Orders.ShowAll; new UserConfiguration().Save(settings); Refresh(); } private void Search_KeyUp(object sender, KeyEventArgs e) { } private void SplitPanel_OnChanged(object sender, DynamicSplitPanelChangedArgs e) { settings.ViewType = SplitPanel.View == DynamicSplitPanelView.Master ? ScreenViewType.Register : SplitPanel.View == DynamicSplitPanelView.Detail ? ScreenViewType.Details : ScreenViewType.Combined; settings.PurchaseColumnWidth = SplitPanel.MasterWidth; var newTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : ""; if (Orders.ColumnsTag != newTag) { Orders.ColumnsTag = newTag; Orders.Refresh(true, true); } new UserConfiguration().Save(settings); } } }