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);
- }
-
- }
- }
|