123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- using System;
- using System.Linq;
- using System.Threading;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Media;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.Wpf;
- using InABox.WPF;
- namespace PRSDesktop;
- public class KanbanSubscriberGrid(Kanban kanban) : DynamicDataGrid<KanbanSubscriber>
- {
- public Kanban Kanban { get; set; } = kanban;
- protected override void Init()
- {
- base.Init();
- HiddenColumns.Add(x => x.Manager);
- HiddenColumns.Add(x => x.Assignee);
- HiddenColumns.Add(x => x.Observer);
- HiddenColumns.Add(x => x.Employee.ID);
- AddButton("Select Team", PRSDesktop.Resources.team.AsBitmapImage(), SelectTeamClick);
- }
- #region UI Component
- private class UIComponent : DynamicGridGridUIComponent<KanbanSubscriber>
- {
- protected override Brush? GetCellBackground(CoreRow row, DynamicColumnBase column)
- {
- if(row.Get<KanbanSubscriber, bool>(x => x.Manager) || row.Get<KanbanSubscriber, bool>(x => x.Assignee))
- {
- return Colors.Gainsboro.ToBrush(0.5);
- }
- else
- {
- return null;
- }
- }
- }
- protected override IDynamicGridUIComponent<KanbanSubscriber> CreateUIComponent()
- {
- return new UIComponent { Parent = this };
- }
- #endregion
- protected override void DoReconfigure(DynamicGridOptions options)
- {
- base.DoReconfigure(options);
- options.RecordCount = true;
- options.AddRows = true;
- options.DeleteRows = true;
- options.SelectColumns = true;
- options.MultiSelect = true;
- }
- public override KanbanSubscriber CreateItem()
- {
- var result = base.CreateItem();
- result.Kanban.CopyFrom(Kanban);
- result.Observer = true;
- return result;
- }
- protected override void DoEdit()
- {
- if(SelectedRows.Any(r => r.Get<KanbanSubscriber, bool>(c => c.Manager) || r.Get<KanbanSubscriber, bool>(c => c.Assignee)))
- {
- MessageWindow.ShowMessage("You cannot edit an Assignee or Manager!", "Invalid operation");
- return;
- }
- base.DoEdit();
- }
- protected override bool CanDeleteItems(params CoreRow[] rows)
- {
- var result = base.CanDeleteItems(rows);
- if (result)
- {
- result = !rows.Any(r => r.Get<KanbanSubscriber, bool>(c => c.Manager) || r.Get<KanbanSubscriber, bool>(c => c.Assignee));
- if (!result)
- MessageWindow.ShowMessage("You cannot delete an Assignee or Manager!", "Invalid operation");
- }
- return result;
- }
- private bool SelectTeamClick(Button arg1, CoreRow[] arg2)
- {
- var dlg = new MultiSelectDialog<Team>(LookupFactory.DefineFilter<Team>(), Columns.None<Team>());
- if (dlg.ShowDialog())
- {
- var items = LoadItems(Data.Rows).ToList();
- var observers = items.Where(x => x.Observer)
- .Select(x => x.Employee.ID)
- .ToArray();
- var mr = MessageWindowResult.No;
- if (observers.Length != 0)
- mr = MessageWindow.ShowYesNoCancel("Do you want to clear the existing subscriber list?", "Clear Subscribers", image: MessageWindow.QuestionImage);
- if (mr == MessageWindowResult.Cancel) return false;
- if (mr == MessageWindowResult.Yes)
- {
- Client.Delete(items.Where(x => !x.Manager && !x.Assignee), "Selected team.");
- foreach (var item in items)
- item.Observer = false;
- }
- var emps = Client.Query(
- new Filter<EmployeeTeam>(x => x.TeamLink.ID).InList(dlg.IDs()),
- Columns.None<EmployeeTeam>().Add(x => x.EmployeeLink.ID, x => x.EmployeeLink.Code, x => x.EmployeeLink.Name),
- new SortOrder<EmployeeTeam>(x => x.EmployeeLink.Name));
- foreach (var membership in emps.ToObjects<EmployeeTeam>())
- {
- var subscriber = items.FirstOrDefault(x => x.Employee.ID == membership.EmployeeLink.ID);
- if (subscriber == null)
- {
- subscriber = new KanbanSubscriber();
- subscriber.Kanban.CopyFrom(Kanban);
- items.Add(subscriber);
- }
- subscriber.Employee.ID = membership.EmployeeLink.ID;
- subscriber.Employee.Synchronise(membership.EmployeeLink);
- subscriber.Observer = true;
- }
- Client.Save(items, "Selected team.");
- return true;
- }
- return false;
- }
- protected override void Reload(Filters<KanbanSubscriber> criteria, Columns<KanbanSubscriber> columns, ref SortOrder<KanbanSubscriber>? sort, CancellationToken token, Action<CoreTable?, Exception?> action)
- {
- criteria.Add(new Filter<KanbanSubscriber>(x => x.Kanban.ID).IsEqualTo(Kanban.ID));
- base.Reload(criteria, columns, ref sort, token, action);
- }
- }
|