using System; using System.Collections.Generic; using System.Linq; using System.Windows; 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; protected override void Init() { base.Init(); HiddenColumns.Add(x=>x.OpenForms); HiddenColumns.Add(x=>x.FormCount); ActionColumns.Add(new DynamicImageColumn(FormImage, FormAction) { Position = DynamicActionColumnPosition.End, ToolTip = FormToolTip}); } private readonly BitmapImage _openforms = PRSDesktop.Resources.warning.AsBitmapImage(); private readonly BitmapImage _completedforms = PRSDesktop.Resources.contract.AsBitmapImage(); private BitmapImage? FormImage(CoreRow? row) { return row == null ? _completedforms : row?.Get(x => x.OpenForms) != 0 ? _openforms : row?.Get(x => x.FormCount) != 0 ? _completedforms : null; } 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 FrameworkElement? FormToolTip(DynamicActionColumn column, CoreRow? row) { if (row == null) return column.TextToolTip("Leave Request Form Status?"); int open = row.Get(x => x.OpenForms); int total = row.Get(x => x.FormCount); if (open != 0) return column.TextToolTip($"{open} incomplete forms"); if (total != 0) return column.TextToolTip($"{total} forms"); return null; } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.RecordCount = true; options.FilterRows = true; options.SelectColumns = true; } 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.First().ID == Guid.Empty) ReloadForms(editor, items.First(), x => x.Activity.ID, items.First().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 = result.CloneEditor(); result.Editable = Editable.Disabled; } return result; } } }