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);
}
}
}