using System; using System.Linq; using System.Linq.Expressions; using System.Windows; using System.Windows.Controls; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; namespace PRSDesktop { public class MeetingItemTree : DynamicTreeView { public MeetingModel? Model { get; set; } public MeetingItemTree() { Options.AddRange(DynamicTreeOption.Add, DynamicTreeOption.Edit, DynamicTreeOption.Delete); MaxRowHeight = 30D; OnContextMenuOpening += MeetingItemTree_OnContextMenuOpening; } private void MeetingItemTree_OnContextMenuOpening(DynamicTreeNode node, ContextMenu menu) { if(node.ID != CoreUtils.FullGuid) { menu.AddItem("Add Child Item", null, node, (n) => DoAddItem(n.ID,true)); } } protected override Expression> ID => x => x.ID; protected override Expression> ParentID => x => x.Parent.ID; protected override Expression> Description => x => x.Title; protected override void DoRefresh(Action action) { try { CoreTable data; if (Model != null) { data = new Client().Query( new Filter(x => x.Meeting.ID).IsEqualTo(Model.ID) ); } else { { data = new CoreTable(); data.Columns.Add(new CoreColumn(CoreUtils.GetFullPropertyName(x => x.ID, "."))); data.Columns.Add(new CoreColumn(CoreUtils.GetFullPropertyName(x => x.Parent.ID, "."))); data.Columns.Add(new CoreColumn(CoreUtils.GetFullPropertyName(x => x.Title, "."))); } } // var newRow = data.NewRow(); // newRow.Set(x => x.ID, CoreUtils.FullGuid); // newRow.Set(x => x.Parent.ID, Guid.Empty); // newRow.Set(x => x.Title, "All Items"); // data.Rows.Insert(0, newRow); action(data, null); } catch(Exception e) { action(null, e); } } protected override MeetingItem DoCreateItem(Guid parent) { if (Model == null) throw new Exception("Please Select a Meeting First!"); var item = base.DoCreateItem(parent); item.Meeting.ID = Model.ID; item.Title = "New Agenda Item"; return item; } protected override MeetingItem? DoLoadItem(Guid id) { // if (id == CoreUtils.FullGuid) // { // MessageBox.Show("This item cannot be edited."); // return null; // } var result = new Client().Query( new Filter(x => x.ID).IsEqualTo(id) ).Rows.FirstOrDefault()?.ToObject(); if(result == null) { Logger.Send(LogType.Error, "", $"Cannot load MeetingItem: {id} does not exist!"); } return result; } protected override void DoSaveItem(MeetingItem item) { //if (item.ID != CoreUtils.FullGuid) //{ new Client().Save(item, "Edited by User"); //} } protected override bool DoDeleteItem(Guid id) { // if(id == CoreUtils.FullGuid) // { // MessageBox.Show("This folder cannot be deleted."); // return false; // } CoreRow? row = Data.Rows.FirstOrDefault(r=>r.Get(x => x.ID) == id); if(row == null) { MessageBox.Show("Error: Row does not exist!"); Logger.Send(LogType.Error, ClientFactory.UserID, $"Error: Meeting Item {id} does not exist or is not loaded"); return false; } // if (row.Get(x => x.Documents) > 0) // { // MessageBox.Show("This folder is not empty, and cannot be deleted!"); // return false; // } new Client().Delete(new MeetingItem() { ID = id }, "Deleted by User"); return true; } } }