using System; using System.Collections.Generic; using System.Linq; using System.Windows.Controls; using System.Windows.Media.Imaging; using Comal.Classes; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; namespace PRSDesktop { public class LeaveRequestGrid : DynamicDataGrid { public bool FutureOnly = true; private bool InProgressOnly = true; public LeaveRequestGrid() { Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns); ActionColumns.Add(new DynamicImageColumn(PRSDesktop.Resources.contract.AsBitmapImage(), FormAction) { Position = DynamicActionColumnPosition.End }); AddButton("Include Complete", null, IncompleteOnlyClick); AddButton("Include History", null, ToggleAllRequests); } private bool FormAction(CoreRow? row) { if (row is null) return false; var leaveRequestID = row.Get(x => x.ID); var menu = new ContextMenu(); DynamicGridUtils.PopulateFormMenu(menu, leaveRequestID, () => row.ToObject()); menu.IsOpen = true; return false; } private bool IncompleteOnlyClick(Button btn, CoreRow[] arg2) { InProgressOnly = !InProgressOnly; UpdateButton(btn, null, InProgressOnly ? "Include Complete" : "In Progress Only"); return true; } private bool ToggleAllRequests(Button btn, CoreRow[] rows) { FutureOnly = !FutureOnly; UpdateButton(btn, null, FutureOnly ? "Include History" : "Future Only"); return true; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { if (InProgressOnly) criteria.Add(new Filter(x => x.Status).IsEqualTo(LeaveRequestStatus.InProgress)); if (FutureOnly) criteria.Add(new Filter(x => x.To).IsGreaterThanOrEqualTo(DateTime.Today)); base.Reload(criteria, columns, ref sort, action); } protected override Dictionary EditorValueChanged(IDynamicEditorForm editor, LeaveRequest[] items, string name, object value) { var result = base.EditorValueChanged(editor, items, name, value); if (name == "LeaveType.ID") { ReloadForms(editor, items.FirstOrDefault(), x => x.Activity.ID, value != null ? (Guid)value : Guid.Empty); } else if (name.Equals("EmployeeLink.ID")) { var activity = editor.FindEditor("LeaveType.ID") as ILookupEditorControl; if (activity != null) DefineLookups(activity, items); } return result; } protected override void AfterLoad(IDynamicEditorForm editor, LeaveRequest[] items) { base.AfterLoad(editor, items); if (items.FirstOrDefault().ID == Guid.Empty) ReloadForms(editor, items.FirstOrDefault(), x => x.Activity.ID, items.FirstOrDefault().LeaveType.ID); } protected override BaseEditor? GetEditor(object item, DynamicGridColumn column) { var result = base.GetEditor(item, column); if (result == null) return null; if (!Security.IsAllowed() && (column.ColumnName.Equals("Approved") || column.ColumnName.Equals("Status"))) result.Editable = Editable.Disabled; return result; } } }