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.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using NPOI.OpenXmlFormats.Dml; namespace PRSDesktop { public class MeetingTaskGrid : DynamicDataGrid { public MeetingModel? Model { get; set; } public MeetingTaskGrid() { Options .BeginUpdate() .Clear() .Add(DynamicGridOption.SelectColumns) .EndUpdate(); HiddenColumns.Add(x => x.Kanban.ID); HiddenColumns.Add(x => x.Kanban.Completed); ActionColumns.Add(new DynamicImageColumn(StatusImage)); AddButton("", PRSDesktop.Resources.pencil.AsBitmapImage(), EditTask); AddButton("", PRSDesktop.Resources.delete.AsBitmapImage(), DeleteTask, DynamicGridButtonPosition.Right); } private readonly BitmapImage _status = PRSDesktop.Resources.tick.AsBitmapImage(); private BitmapImage? StatusImage(CoreRow? arg) { return arg == null ? _status : arg.Get(c => c.Kanban.Completed).IsEmpty() ? null : _status; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { var meetingfilter = (Model == null) || (Model.ID == Guid.Empty) ? new Filter().None() : new Filter(x => x.Entity.Meeting.ID).IsEqualTo(Model.ID); criteria.Add(meetingfilter); base.Reload(criteria, columns, ref sort, action); } protected override void DoDoubleClick(object sender) { if (EditKanban()) Refresh(false, true); } private bool EditTask(Button arg1, CoreRow[] arg2) { return EditKanban(); } private bool EditKanban() { if ((Model == null) || (Model.ID == Guid.Empty)) return false; if (!SelectedRows.Any()) return false; var ids = SelectedRows.ToArray().Select(r => r.Get(x => x.Kanban.ID)).ToArray(); var kanbans = new Client().Load(new Filter(x => x.ID).InList(ids)); var kg = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), typeof(Kanban)); return kg.EditItems(kanbans); } private bool DeleteTask(Button arg1, CoreRow[] arg2) { if ((Model == null) || (Model.ID == Guid.Empty)) return false; if (!SelectedRows.Any()) return false; if (MessageBox.Show("This will unlink the selected task from this meeting, but leave the task active.\n\nDo You wish to continue?", "Unlink Task", MessageBoxButton.YesNo) != MessageBoxResult.Yes) return false; var ids = SelectedRows.ToArray().Select(r=>r.Get(x=>x.ID)).ToArray(); var miks = ids.Select(x => new MeetingItemKanban() { ID = x }).ToArray(); new Client().Delete(miks, "Removed from Meeting"); return true; } } }