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 JobDocumentSetFolderTree : DynamicTreeView { public Guid JobID { get; set; } public JobDocumentSetFolderTree() : base() { Options.AddRange(DynamicTreeOption.Add, DynamicTreeOption.Edit, DynamicTreeOption.Delete); MaxRowHeight = 60D; OnContextMenuOpening += JobDocumentSetFolderTree_OnContextMenuOpening; } private void JobDocumentSetFolderTree_OnContextMenuOpening(DynamicTreeNode node, ContextMenu menu) { if(node.ID != CoreUtils.FullGuid) { menu.AddItem("Add Child Folder", null, node, AddChildFolder_Click); } } private void AddChildFolder_Click(DynamicTreeNode node) { AddItem(node); } protected override Expression> ID => x => x.ID; protected override Expression> ParentID => x => x.Parent.ID; protected override Expression> Description => x => x.Name; protected override void DoRefresh(Action action) { try { var data = new Client().Query( new Filter(x => x.Job.ID).IsEqualTo(JobID), new Columns( x => x.ID, x => x.Parent.ID, x => x.Name, x => x.Documents) ); var newRow = data.NewRow(); newRow.Set(x => x.ID, CoreUtils.FullGuid); newRow.Set(x => x.Parent.ID, Guid.Empty); newRow.Set(x => x.Name, "All Items"); newRow.Set(x => x.Documents, int.MaxValue); data.Rows.Insert(0, newRow); action(data, null); } catch(Exception e) { action(null, e); } } protected override JobDocumentSetFolder DoCreateItem(Guid parent) { if (JobID == Guid.Empty) throw new Exception("Please Select a Job First!"); var folder = base.DoCreateItem(parent); folder.Job.ID = JobID; folder.Name = "New Folder"; return folder; } protected override JobDocumentSetFolder? DoLoadItem(Guid id) { if (id == CoreUtils.FullGuid) { MessageBox.Show("This item cannot be edited."); return null; } var folder = new Client().Query( new Filter(x => x.ID).IsEqualTo(id) ).Rows.FirstOrDefault()?.ToObject(); if(folder == null) { Logger.Send(LogType.Error, "", $"Cannot load JobDocumentSetFolder: {id} does not exist!"); } return folder; } protected override void DoSaveItem(JobDocumentSetFolder folder) { if (folder.ID != CoreUtils.FullGuid) { new Client().Save(folder, "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: Job Document Set Folder {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 JobDocumentSetFolder() { ID = id }, "Deleted by User"); return true; } } }