| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | 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 MeetingItemTaskGrid : DynamicDataGrid<MeetingItemKanban>    {            public Guid MeetingID { get; set; }        public Guid MeetingItemID { get; set; }                public MeetingItemTaskGrid()        {            Options.BeginUpdate()                .Clear()                .Add(DynamicGridOption.RecordCount)                .EndUpdate();            HiddenColumns.Add(x => x.Kanban.Completed);            ActionColumns.Add(new DynamicImageColumn(StatusImage));            AddButton("", PRSDesktop.Resources.add.AsBitmapImage(), AddTask);            AddButton("", PRSDesktop.Resources.link.AsBitmapImage(), LinkTask);            AddButton("", PRSDesktop.Resources.pencil.AsBitmapImage(), EditTask);            AddButton("Copy From", null, CopyTasks);            AddButton("", PRSDesktop.Resources.delete.AsBitmapImage(), DeleteTask, DynamicGridButtonPosition.Right);        }        private bool CopyTasks(Button arg1, CoreRow[] arg2)        {            var dlg = new MultiSelectDialog<Meeting>(                new Filter<Meeting>(x=>x.ID).IsNotEqualTo(MeetingID),                 new Columns<Meeting>(x=>x.ID, x=>x.Number, x=>x.Date, x=>x.Time.Finish),                 false            );            if (dlg.ShowDialog() == true)            {                var meeting = dlg.Items().FirstOrDefault();                if (meeting != null)                {                    using (new WaitCursor())                    {                        var compfilter = new Filter<MeetingItemKanban>(x => x.Entity.Meeting.ID).IsEqualTo(meeting.ID);                        compfilter = compfilter.And(new Filter<MeetingItemKanban>(x => x.Kanban.Completed).IsEqualTo(DateTime.MinValue)                            .Or(x => x.Kanban.Completed).IsGreaterThanOrEqualTo(meeting.Date.Add(meeting.Time.Finish))                        );                        var tasks = new Client<MeetingItemKanban>().Query(                            compfilter,                            new Columns<MeetingItemKanban>(x => x.Kanban.ID)                                .Add(x => x.Entity.ID)                        ).Rows.Select(r => r.ToObject<MeetingItemKanban>());                                                List<MeetingItemKanban> miks = new List<MeetingItemKanban>();                                                foreach (MeetingItemKanban task in tasks)                        {                            MeetingItemKanban mik = new MeetingItemKanban();                            mik.Kanban.ID = task.Kanban.ID;                            mik.Entity.ID = MeetingItemID;                            miks.Add(mik);                        }                        if (miks.Any())                        {                            new Client<MeetingItemKanban>().Save(miks, $"Copied from Meeting #{meeting.Number}");                            DoChanged();                            return true;                        }                    }                }            }            return false;        }        protected override DynamicGridColumns LoadColumns()        {            return new DynamicGridColumns()            {                new DynamicGridColumn()                {                    ColumnName = CoreUtils.GetFullPropertyName<MeetingItemKanban, int>(x => x.Kanban.Number, "."),                     Width = 50                },                new DynamicGridColumn()                {                    ColumnName = CoreUtils.GetFullPropertyName<MeetingItemKanban, String>(x => x.Kanban.Title, "."),                     Width = 0                },                new DynamicGridColumn()                {                ColumnName = CoreUtils.GetFullPropertyName<MeetingItemKanban, String>(x => x.Kanban.EmployeeLink.Code, "."),                 Width = 100            }            };        }        private readonly BitmapImage _status = PRSDesktop.Resources.tick.AsBitmapImage();                private BitmapImage? StatusImage(CoreRow? arg)        {            return arg == null                ? _status                : arg.Get<MeetingItemKanban, DateTime>(c => c.Kanban.Completed).IsEmpty()                    ? null                    : _status;        }        private bool AddTask(Button arg1, CoreRow[] arg2)        {            if (MeetingItemID == Guid.Empty)                return false;                        var kg = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), typeof(Kanban));            kg.OnAfterSave += (editor, items) =>            {                List<MeetingItemKanban> miks = new List<MeetingItemKanban>();                foreach (Kanban item in items.Cast<Kanban>())                {                    MeetingItemKanban mik = new MeetingItemKanban();                    mik.Kanban.ID = item.ID;                    mik.Entity.ID = MeetingItemID;                    miks.Add(mik);                }                new Client<MeetingItemKanban>().Save(miks, "");            };                        var kanban = new Kanban();            if (kg.EditItems(new Kanban[] { kanban }) == true)            {                DoChanged();                return true;            }            return false;        }        private bool LinkTask(Button arg1, CoreRow[] arg2)        {            if (MeetingItemID == Guid.Empty)                return false;            var dlg = new MultiSelectDialog<Kanban>(                new Filter<Kanban>(x => x.Completed).IsEqualTo(DateTime.MinValue),                 new Columns<Kanban>(x=>x.ID),                 true            );            if (dlg.ShowDialog() != true)                return false;            if (!dlg.IDs().Any())                return false;                        var miks = new List<MeetingItemKanban>();            foreach (var id in dlg.IDs())            {                var mik = new MeetingItemKanban();                mik.Entity.ID = MeetingItemID;                mik.Kanban.ID = id;                miks.Add(mik);            }            new Client<MeetingItemKanban>().Save(miks, "Added To Meeting");            DoChanged();            return true;        }        private bool EditTask(Button arg1, CoreRow[] arg2)        {            if (MeetingItemID == Guid.Empty)                return false;            if (!SelectedRows.Any())                return false;            var ids = SelectedRows.ToArray().Select(r=>r.Get<MeetingItemKanban,Guid>(x=>x.Kanban.ID)).ToArray();            var kanbans = new Client<Kanban>().Load(new Filter<Kanban>(x => x.ID).InList(ids));            var kg = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), typeof(Kanban));            if (kg.EditItems(kanbans) == true)            {                DoChanged();                return true;            }            return false;        }        private bool DeleteTask(Button arg1, CoreRow[] arg2)        {            if (MeetingItemID == 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<MeetingItemKanban,Guid>(x=>x.ID)).ToArray();            var miks = ids.Select(x => new MeetingItemKanban() { ID = x }).ToArray();            new Client<MeetingItemKanban>().Delete(miks, "Removed from Meeting");            DoChanged();            return true;        }        protected override void Reload(Filters<MeetingItemKanban> criteria, Columns<MeetingItemKanban> columns, ref SortOrder<MeetingItemKanban> sort,            Action<CoreTable, Exception> action)        {            criteria.Add(MeetingItemID == Guid.Empty                ? new Filter<MeetingItemKanban>(x=>x.Entity.ID).None()                : new Filter<MeetingItemKanban>(x => x.Entity.ID).IsEqualTo(MeetingItemID));            base.Reload(criteria, columns, ref sort, action);        }            }}
 |