using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows; using System.Windows.Controls; using Comal.Classes; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using NPOI.SS.Formula.Functions; namespace PRSDesktop { public class StockLocationGrid : DynamicDataGrid { private bool bShowAll; public Button ShowAllBtn; public Button StockTakeBtn; public StockLocationGrid() { Options.AddRange( DynamicGridOption.MultiSelect, DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns ); ShowAllBtn = AddButton("Show All", PRSDesktop.Resources.parcel.AsBitmapImage(Color.White), ToggleHiddenJobs); if (Security.CanEdit()) StockTakeBtn = AddButton("Stock Take", PRSDesktop.Resources.rack.AsBitmapImage(Color.White), DoStockTake); HiddenColumns.Add(x => x.Job.ID); //HiddenColumns.Add(x => x.Movements); OnCustomiseEditor += CustomiseEditor; } private bool DoStockTake(Button sender, CoreRow[] rows) { if (!rows.Any()) { MessageBox.Show("Please select at least one row for Stocktake!"); return false; } var page = new StockTakeWindow(rows); page.Show(); return true; } private bool ToggleHiddenJobs(Button sender, CoreRow[] rows) { bShowAll = !bShowAll; UpdateButton(sender, PRSDesktop.Resources.parcel.AsBitmapImage(Color.White), bShowAll ? "Active Only" : "Show All"); return true; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { if (!bShowAll) criteria.Add(new Filter(x => x.Active).IsEqualTo(true)); base.Reload(criteria, columns, ref sort, action); } protected override void DoValidate(StockLocation[] items, List errors) { base.DoValidate(items, errors); var bHoldings = false; var bDefault = false; var bTransient = false; foreach (var item in items) { bHoldings = bHoldings; bDefault = bDefault || (item.Default && !item.Active); bTransient = bTransient || (item.Default && item.Type.Equals(StockLocationType.Transient)); } if (bHoldings) errors.Add("Non-Empty locations must always be [Active]!"); if (bDefault) errors.Add("Default locations must always be [Active]!"); if (bTransient) errors.Add("Default locations must always be [Permanent]!"); } private void CustomiseEditor(IDynamicEditorForm sender, StockLocation[]? items, DynamicGridColumn column, BaseEditor editor) { if (string.Equals(column.ColumnName, "Active")) { //var bHasHoldings = items.FirstOrDefault().Holdings != 0; //editor.Editable = bHasHoldings ? Editable.Disabled : Editable.Enabled; //if (bHasHoldings) var item = items?.FirstOrDefault(); if (item is not null) item.Active = true; } } } }