using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; namespace PRSDesktop { internal class CostSheetKitGrid : DynamicDataGrid { public CostSheetKitGrid() { Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.AddRows, DynamicGridOption.DeleteRows, DynamicGridOption.EditRows, DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns, DynamicGridOption.MultiSelect, DynamicGridOption.ImportData); AddButton("Update Sections", PRSDesktop.Resources.kitgroup.AsBitmapImage(), UpdateSections); AddButton("Show Items", PRSDesktop.Resources.product.AsBitmapImage(), ShowItems); HiddenColumns.Add(x => x.LastUpdate); HiddenColumns.Add(x => x.CostSheet.ID); HiddenColumns.Add(x => x.Kit.ID); HiddenColumns.Add(x => x.Section.ID); } public ICostSheet CostSheet { get; set; } private bool ShowItems(Button sender, CoreRow[] rows) { if (rows == null || rows.Length != 1) { MessageBox.Show("Please select a single row!"); return false; } var kitid = rows.First().Get(x => x.Kit.ID); var msd = new MultiSelectDialog( new Filter(x => x.Kit.ID).IsEqualTo(kitid), new Columns() ); msd.ShowDialog(); return false; } private bool UpdateSections(Button arg1, CoreRow[] arg2) { using (new WaitCursor()) { // Save Existing Section/Kit values var values = new Dictionary>(); foreach (var row in Data.Rows) { var sectionid = row.Get(x => x.Section.ID); if (!values.ContainsKey(sectionid)) values[sectionid] = new List(); values[sectionid].Add(row.Get(x => x.Kit.ID)); var kit = new CostSheetKit { ID = row.Get(x => x.ID) }; new Client().Delete(kit, ""); } var sections = new Client().Query( null, null, new SortOrder(x => x.Sequence) ); var updates = new List(); foreach (var row in sections.Rows) { var sectionid = row.Get(x => x.ID); var iCount = row.Get(x => x.Quantity); if (values.ContainsKey(sectionid) && iCount < values[sectionid].Count) iCount = values[sectionid].Count; for (var i = 0; i < iCount; i++) { var kit = new CostSheetKit(); kit.CostSheet.ID = CostSheet != null ? CostSheet.ID : Guid.Empty; kit.Section.ID = sectionid; kit.Sequence = row.Get(x => x.Sequence); if (values.ContainsKey(sectionid) && i < values[sectionid].Count) kit.Kit.ID = values[sectionid][i]; updates.Add(kit); } } new Client().Save(updates, ""); } return true; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { criteria.Add(new Filter(x => x.CostSheet.ID).IsEqualTo(CostSheet != null ? CostSheet.ID : CoreUtils.FullGuid)); base.Reload(criteria, columns, ref sort, action); } protected override CostSheetKit CreateItem() { var result = base.CreateItem(); result.CostSheet.ID = CostSheet != null ? CostSheet.ID : Guid.Empty; return result; } protected override BaseEditor? GetEditor(object item, DynamicGridColumn column) { if (column.ColumnName.Equals("CostSheet.ID")) return new NullEditor(); return base.GetEditor(item, column); } protected override void CustomiseExportColumns(List columnnames) { base.CustomiseExportColumns(columnnames); var costsheet = CoreUtils.GetFullPropertyName(x => x.CostSheet.Code, "."); if (columnnames.Contains(costsheet)) columnnames.Remove(costsheet); } protected override string CustomiseExportFileName(string filename) { return CostSheet != null ? CostSheet.Code : base.CustomiseExportFileName(filename); } protected override string CustomiseImportFileName(string filename) { return CostSheet != null ? CostSheet.Code : base.CustomiseExportFileName(filename); } protected override bool CustomiseImportItem(CostSheetKit item) { if (CostSheet == null) return false; var result = base.CustomiseImportItem(item); if (result) item.CostSheet.ID = CostSheet.ID; return result; } } }