|
|
@@ -1,25 +1,142 @@
|
|
|
+using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Windows;
|
|
|
+using System.Windows.Controls;
|
|
|
using Comal.Classes;
|
|
|
+using InABox.Clients;
|
|
|
using InABox.Core;
|
|
|
using InABox.DynamicGrid;
|
|
|
+using InABox.WPF;
|
|
|
|
|
|
-namespace PRSDesktop
|
|
|
+namespace PRSDesktop;
|
|
|
+
|
|
|
+public class MeetingGrid : DynamicDataGrid<Meeting>
|
|
|
{
|
|
|
-
|
|
|
- public class MeetingGrid : DynamicDataGrid<Meeting>
|
|
|
+ public List<MeetingTemplate> Templates { get; set; } = new();
|
|
|
+
|
|
|
+ public MeetingGrid()
|
|
|
+ {
|
|
|
+ Templates = Client.Query(
|
|
|
+ Filter.All<MeetingTemplate>(),
|
|
|
+ RequiredTemplateColumns())
|
|
|
+ .ToList<MeetingTemplate>();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Columns<MeetingTemplate> RequiredTemplateColumns()
|
|
|
+ {
|
|
|
+ return Columns.None<MeetingTemplate>()
|
|
|
+ .Add(x => x.Title)
|
|
|
+ .Add(x => x.Description)
|
|
|
+ .Add(x => x.Activity.ID);
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void DoReconfigure(DynamicGridOptions options)
|
|
|
+ {
|
|
|
+ base.DoReconfigure(options);
|
|
|
+ options.Clear();
|
|
|
+ options.AddRows = true;
|
|
|
+ options.DeleteRows = true;
|
|
|
+ options.EditRows = true;
|
|
|
+ options.FilterRows = true;
|
|
|
+ options.SelectColumns = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void DoAdd(bool openEditorOnDirectEdit = false)
|
|
|
{
|
|
|
- protected override void DoReconfigure(DynamicGridOptions options)
|
|
|
+ if(Templates.Count > 0)
|
|
|
{
|
|
|
- base.DoReconfigure(options);
|
|
|
- options.Clear();
|
|
|
- options.AddRows = true;
|
|
|
- options.DeleteRows = true;
|
|
|
- options.EditRows = true;
|
|
|
- options.FilterRows = true;
|
|
|
- options.SelectColumns = true;
|
|
|
- }
|
|
|
+ var menu = new ContextMenu();
|
|
|
+ menu.AddItem("New Meeting", null, () =>
|
|
|
+ {
|
|
|
+ base.DoAdd(openEditorOnDirectEdit);
|
|
|
+ });
|
|
|
+ menu.AddSeparator();
|
|
|
+ foreach(var template in Templates)
|
|
|
+ {
|
|
|
+ menu.AddItem(template.Title, null, () =>
|
|
|
+ {
|
|
|
+ var meeting = CreateItem();
|
|
|
+ meeting.Title = template.Title;
|
|
|
+ meeting.Description = template.Description;
|
|
|
+ meeting.Activity.CopyFrom(template.Activity);
|
|
|
|
|
|
+ if (EditItems([meeting]))
|
|
|
+ {
|
|
|
+ var data = new MultiQuery()
|
|
|
+ .Add(
|
|
|
+ Filter<MeetingTemplateItem>.Where(x => x.Template.ID).IsEqualTo(template.ID),
|
|
|
+ Columns.None<MeetingTemplateItem>()
|
|
|
+ .Add(x => x.ID)
|
|
|
+ .Add(x => x.Parent.ID)
|
|
|
+ .Add(x => x.Title)
|
|
|
+ .Add(x => x.Notes))
|
|
|
+ .Add(
|
|
|
+ Filter<MeetingTemplateAttendee>.Where(x => x.Template.ID).IsEqualTo(template.ID),
|
|
|
+ Columns.None<MeetingTemplateAttendee>()
|
|
|
+ .Add(x => x.Employee.ID)
|
|
|
+ .Add(x => x.IsAdmin))
|
|
|
+ .Query();
|
|
|
+
|
|
|
+ var meetingItems = new List<MeetingItem>();
|
|
|
+
|
|
|
+ var dictionary = new Dictionary<MeetingItem, MeetingTemplateItem>();
|
|
|
+ var reverseDictionary = new Dictionary<MeetingTemplateItem, MeetingItem>();
|
|
|
+ var templateDictionary = new Dictionary<Guid, MeetingTemplateItem>();
|
|
|
+ foreach(var templateItem in data.GetObjects<MeetingTemplateItem>())
|
|
|
+ {
|
|
|
+ var meetingItem = new MeetingItem();
|
|
|
+ meetingItem.Meeting.CopyFrom(meeting);
|
|
|
+ meetingItem.Title = templateItem.Title;
|
|
|
+ meetingItem.Notes = templateItem.Notes;
|
|
|
+ meetingItems.Add(meetingItem);
|
|
|
+
|
|
|
+ dictionary.Add(meetingItem, templateItem);
|
|
|
+ reverseDictionary.Add(templateItem, meetingItem);
|
|
|
+ templateDictionary.Add(templateItem.ID, templateItem);
|
|
|
+ }
|
|
|
+
|
|
|
+ Client.Save(meetingItems, "Created Meeting Items from Template");
|
|
|
+
|
|
|
+ foreach(var meetingItem in meetingItems)
|
|
|
+ {
|
|
|
+ var templateItem = dictionary[meetingItem];
|
|
|
+ if(templateItem.Parent.ID != Guid.Empty
|
|
|
+ && templateDictionary.TryGetValue(templateItem.Parent.ID, out var parent))
|
|
|
+ {
|
|
|
+ meetingItem.Parent.CopyFrom(reverseDictionary[parent]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Client.Save(meetingItems, "Linked Meeting Item Parents");
|
|
|
+
|
|
|
+ var assignments = new List<Assignment>();
|
|
|
+ foreach(var attendee in data.GetObjects<MeetingTemplateAttendee>())
|
|
|
+ {
|
|
|
+ var assignment = new Assignment();
|
|
|
+ assignment.Employee.CopyFrom(attendee.Employee);
|
|
|
+ assignment.Meeting.Link.CopyFrom(meeting);
|
|
|
+ assignment.Meeting.IsAdmin = attendee.IsAdmin;
|
|
|
+ assignment.Date = meeting.Date;
|
|
|
+ assignment.Booked.Start = meeting.Time.Start;
|
|
|
+ assignment.Booked.Finish = meeting.Time.Finish;
|
|
|
+ assignment.Activity.CopyFrom(meeting.Activity);
|
|
|
+ assignment.Title = meeting.Title;
|
|
|
+ assignment.Description = meeting.Description;
|
|
|
+ assignments.Add(assignment);
|
|
|
+ }
|
|
|
+ Client.Save(assignments, "Created Meeting Assignments from Template");
|
|
|
+
|
|
|
+ AddNewRow(meeting);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.IsOpen = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ base.DoAdd(openEditorOnDirectEdit);
|
|
|
+ }
|
|
|
}
|
|
|
}
|