using System; using System.Collections.Generic; using System.Linq; using Comal.Classes; using InABox.Core; using InABox.DynamicGrid; namespace PRSDesktop { public class QuoteGrid : DynamicDataGrid { private Guid _statusid = Guid.Empty; public QuoteGrid() { HiddenColumns.Add(x => x.ID); HiddenColumns.Add(x =>x.Number); HiddenColumns.Add(x =>x.Customer.ID); HiddenColumns.Add(x =>x.Customer.Code); HiddenColumns.Add(x =>x.Customer.Name); HiddenColumns.Add(x =>x.SiteAddress.Street); HiddenColumns.Add(x =>x.SiteAddress.City); HiddenColumns.Add(x =>x.SiteAddress.State); HiddenColumns.Add(x =>x.SiteAddress.PostCode); HiddenColumns.Add(x =>x.Account.ID); HiddenColumns.Add(x =>x.Account.Code); HiddenColumns.Add(x =>x.Account.Name); HiddenColumns.Add(x =>x.Title); HiddenColumns.Add(x =>x.Notes); HiddenColumns.Add(x =>x.Status.ID); HiddenColumns.Add(x =>x.ExTax); } public override DynamicEditorPages LoadEditorPages(Quote item) { var result = base.LoadEditorPages(item); void RemovePage() where T : Entity, new() { var page = result.FirstOrDefault(x => x is IDynamicGrid && x.GetType().GetGenericArguments().Length == 2 && x.GetType().GetGenericArguments().Last() == typeof(T)); if (page != null) result.Remove(page); } RemovePage(); RemovePage(); RemovePage(); RemovePage(); RemovePage(); RemovePage(); result.RemoveAll(x => x is QuoteDocumentGrid); return result; } protected override void DoReconfigure(FluentList options) { base.DoReconfigure(options); options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.SelectColumns, DynamicGridOption.AddRows, DynamicGridOption.EditRows, DynamicGridOption.FilterRows); } protected override void CustomiseEditor(Quote[] items, DynamicGridColumn column, BaseEditor editor) { base.CustomiseEditor(items, column, editor); if(new Column(x => x.Customer.ID).IsEqualTo(column.ColumnName) && editor is CodePopupEditor popup) { popup.CanAdd = Security.CanEdit(); } } public Guid StatusID { get => _statusid; set { _statusid = value; Refresh(false, true); } } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { if (_statusid != Guid.Empty) criteria.Add(new Filter(x => x.Status.ID).IsEqualTo(_statusid)); sort = new SortOrder(x => x.Number, SortDirection.Descending); base.Reload(criteria, columns, ref sort, action); } protected override Dictionary EditorValueChanged(IDynamicEditorForm editor, Quote[] items, string name, object value) { var result = base.EditorValueChanged(editor, items, name, value); if (name.Equals("Customer.ID")) { var contact = editor.FindEditor("Contact.ID"); if (contact != null) contact.Configure(); } return result; } } }