using System; using System.Linq; using System.Windows; using System.Windows.Controls; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; namespace PRSDesktop { internal class JobBillOfMaterialsGrid : DynamicDataGrid, IJobControl { private readonly Button _approve; public JobBillOfMaterialsGrid() { HiddenColumns.Add(x => x.Approved); HiddenColumns.Add(x => x.Job.ID); if (Security.IsAllowed()) _approve = AddButton("Approve", null, ApproveClick); } protected override void DoReconfigure(FluentList options) { base.DoReconfigure(options); options.AddRange( DynamicGridOption.AddRows, DynamicGridOption.EditRows, DynamicGridOption.DeleteRows, DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns, DynamicGridOption.RecordCount ); } public Job Job { get; set; } public JobPanelSettings Settings { get; set; } private bool ApproveClick(Button button, CoreRow[] rows) { if (rows == null || !rows.Any()) { MessageBox.Show("Please select a row first!"); return false; } var bom = rows[0].ToObject(); bom.Approved = bom.Approved.IsEmpty() ? DateTime.Now : DateTime.MinValue; UpdateRow(rows[0], "Approved", bom.Approved.IsEmpty() ? null : bom.Approved, true); new Client().Save(bom, bom.Approved.IsEmpty() ? "Cleared Approval" : "Marked as Approved"); UpdateButton(_approve, null, _approve.IsEnabled && !bom.Approved.IsEmpty() ? "Unapprove" : "Approve"); return false; } protected override void SelectItems(CoreRow[] rows) { base.SelectItems(rows); if (rows?.Length == 1) { _approve.Visibility = Visibility.Visible; UpdateButton(_approve, null, _approve.IsEnabled && !rows[0].Get(c => c.Approved).IsEmpty() ? "Unapprove" : "Approve"); } else _approve.Visibility = Visibility.Collapsed; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { criteria.Add(new Filter(x => x.Job.ID).IsEqualTo(Job.ID)); base.Reload(criteria, columns, ref sort, action); } protected override JobBillOfMaterials CreateItem() { var result = base.CreateItem(); result.Job.ID = Job.ID; result.Job.Synchronise(Job); return result; } } }