123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- 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
- {
- /// <summary>
- /// Interaction logic for SupplierPurchaseOrderPanel.xaml
- /// </summary>
- public partial class SupplierPurchaseOrderPanel : UserControl, IPanel<PurchaseOrder>
- {
- private readonly List<Tuple<Guid, string>> _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<PurchaseOrder, Guid>(x => x.ID) : CoreUtils.FullGuid;
- Items.SupplierID = row != null ? row.Get<PurchaseOrder, Guid>(x => x.SupplierLink.ID) : CoreUtils.FullGuid;
- Items.Closed = row != null ? !row.Get<PurchaseOrder, DateTime>(x => x.ClosedDate).IsEmpty() : true; LoadOrder(row);
- Items.Refresh(false, true);
- };
- }
- public bool IsReady { get; set; }
- public event DataModelUpdateEvent OnUpdateDataModel;
- public Dictionary<string, object[]> Selected()
- {
- return new Dictionary<string, object[]> { { 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<PurchaseOrder>(new Filter<PurchaseOrder>(x => x.ID).InList(ids));
- }
- public void Refresh()
- {
- Orders.Refresh(false, true);
- }
- public void Setup()
- {
- settings = new UserConfiguration<PurchaseScreenSettings>().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<Guid, string>(CoreUtils.FullGuid, "All Categories"));
- var query = new MultiQuery();
- query.Add(
- LookupFactory.DefineFilter<PurchaseOrderCategory>(),
- LookupFactory.DefineColumns<PurchaseOrderCategory>(),
- LookupFactory.DefineSort<PurchaseOrderCategory>()
- );
- query.Query();
- LoadLookups<PurchaseOrderCategory>(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<PurchaseOrder, string>(x => x.PONumber);
- SupplierCode.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.SupplierLink.Code);
- SupplierName.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.SupplierLink.Name);
- Description.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.Notes);
- Issued.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.IssuedDate));
- IssuedBy.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.IssuedBy.Name);
- DueDate.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.DueDate));
- ClosedDate.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.ClosedDate));
- }
- private string CheckDate(DateTime date)
- {
- return date.IsEmpty() ? "" : date.ToShortDateString();
- }
- private void LoadLookups<T>(MultiQuery query, List<Tuple<Guid, string>> lookups, Expression<Func<T, string>> display) where T : Entity
- {
- var table = query.Get<T>();
- foreach (var row in table.Rows)
- lookups.Add(new Tuple<Guid, string>(row.Get<T, Guid>(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<PurchaseScreenSettings>().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<PurchaseScreenSettings>().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<PurchaseScreenSettings>().Save(settings);
- }
- }
- }
|