using System; using System.Collections.Generic; using System.Linq; using Comal.Classes; using InABox.Clients; using InABox.Configuration; using InABox.Core; using InABox.DynamicGrid; using InABox.Wpf; namespace PRSDesktop; public class JobGridSettings : IUserConfigurationSettings { [Obsolete] private CoreFilterDefinition? _currentFilter; [Obsolete] public CoreFilterDefinition? CurrentFilter { get => _currentFilter; set { if (value is not null) { Filters = new DynamicGridSelectedFilterSettings(new List { value }, false, null); } } } public DynamicGridSelectedFilterSettings Filters { get; set; } = new(); } public class ProjectsGrid : DynamicDataGrid { private Guid _statusid = Guid.Empty; private JobGridSettings _settings; public ProjectsGrid() { _settings = new UserConfiguration().Load(); FilterComponent.SetSettings(_settings.Filters, false); FilterComponent.OnFiltersSelected += FilterComponent_OnFilterSelected; HiddenColumns.Add(x => x.ID); HiddenColumns.Add(x => x.JobNumber); HiddenColumns.Add(x => x.Name); HiddenColumns.Add(x => x.Customer.ID); HiddenColumns.Add(x => x.Customer.Code); HiddenColumns.Add(x => x.Customer.Name); HiddenColumns.Add(x => x.SiteAddress.Street); HiddenColumns.Add(x => x.SiteAddress.City); HiddenColumns.Add(x => x.SiteAddress.State); HiddenColumns.Add(x => x.SiteAddress.PostCode); HiddenColumns.Add(x => x.Account.ID); HiddenColumns.Add(x => x.Account.Code); HiddenColumns.Add(x => x.Account.Name); HiddenColumns.Add(x => x.Notes); HiddenColumns.Add(x => x.JobStatus.ID); HiddenColumns.Add(x => x.JobStatus.Active); HiddenColumns.Add(x => x.DefaultScope.ID); ActionColumns.Add(new DynamicMapColumn(this, x => x.SiteAddress.Location)); //ActionColumns.Add(new DynamicMenuColumn(BuildMenu)); } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.RecordCount = true; options.SelectColumns = true; options.FilterRows = true; } // private void BuildMenu(DynamicMenuColumn column, CoreRow? row) // { // if (Security.IsAllowed()) // { // column.AddItem("Cancel all active requisitions", null, CancelJobRequisitions_Click); // } // if (Security.IsAllowed()) // { // column.AddItem("Release Job Reserves", null, ReleaseJobReserves_Click); // } // } // // private void CancelJobRequisitions_Click(CoreRow? obj) // { // var job = obj?.ToObject(); // if (job is null) // { // MessageWindow.ShowMessage("Please select a job.", "No job selected"); // return; // } // // if(MessageWindow.ShowYesNoCancel("Are you sure you wish to do this? This will cancel all requisitions for this job.", "Confirm") != MessageWindowResult.Yes) // { // MessageWindow.ShowMessage("No action taken.", "Process aborted"); // return; // } // // var requisitionItems = Client.Query( // new Filter(x => x.Requisition.Job.ID).IsEqualTo(job.ID) // .And(x => x.Status).IsNotEqualTo(JobRequisitionItemStatus.Cancelled) // .And(x => x.Status).IsNotEqualTo(JobRequisitionItemStatus.Issued) // .And(x => x.Status).IsNotEqualTo(JobRequisitionItemStatus.Archived), // new Columns(x => x.ID) // .Add(x => x.Cancelled)) // .ToList(); // foreach(var jri in requisitionItems) // { // jri.Cancelled = DateTime.Now; // } // Client.Save(requisitionItems, "Cancelled all job requisitions for job"); // MessageWindow.ShowMessage("All job requisitions cancelled.", "Success"); // } // // private void ReleaseJobReserves_Click(CoreRow? obj) // { // var job = obj?.ToObject(); // if (job is null) // { // MessageWindow.ShowMessage("Please select a job.", "No job selected"); // return; // } // // if(MessageWindow.ShowYesNoCancel("Are you sure you wish to do this? This will release all reserves for this job.", "Confirm") != MessageWindowResult.Yes) // { // MessageWindow.ShowMessage("No action taken.", "Process aborted"); // return; // } // // var movements = Client.Query( // new Filter(x => x.Job.ID).IsEqualTo(job.ID), // new Columns(x => x.Units) // .Add(x => x.Location.ID) // .Add(x => x.Product.ID) // .Add(x => x.Style.ID) // .AddDimensionsColumns(x => x.Dimensions) // .Add(x => x.Cost) // .Add(x => x.OrderItem.ID) // .Add(x => x.JobRequisitionItem.ID)) // .ToObjects() // .GroupBy(x => new // { // Location = x.Location.ID, // Product = x.Product.ID, // Style = x.Style.ID, // x.Dimensions, // x.Cost, // OrderItem = x.OrderItem.ID, // JobRequisitionItem = x.JobRequisitionItem.ID // }) // .Select(x => new { x.Key, Units = x.Sum(x => x.Units) }); // // var toSave = new List(); // foreach(var group in movements) // { // var from = new StockMovement(); // from.Location.ID = group.Key.Location; // from.Style.ID = group.Key.Style; // from.Product.ID = group.Key.Product; // from.Dimensions.CopyFrom(group.Key.Dimensions); // // var to = from.CreateMovement(); // // from.Job.ID = job.ID; // // from.Cost = group.Key.Cost; // to.Cost = group.Key.Cost; // from.OrderItem.ID = group.Key.OrderItem; // to.OrderItem.ID = group.Key.OrderItem; // from.JobRequisitionItem.ID = group.Key.JobRequisitionItem; // to.JobRequisitionItem.ID = group.Key.JobRequisitionItem; // // from.Type = StockMovementType.TransferOut; // to.Type = StockMovementType.TransferIn; // to.Transaction = from.Transaction; // // from.Units = -group.Units; // to.Units = group.Units; // // toSave.Add(from); // toSave.Add(to); // } // Client.Save(toSave, "Released all job stock."); // MessageWindow.ShowMessage("All job stock reserves released.", "Success"); // } public Guid StatusID { get => _statusid; set { _statusid = value; } } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { if (_statusid != Guid.Empty) criteria.Add(new Filter(x => x.JobStatus.ID).IsEqualTo(_statusid)); criteria.Add(new Filter(x => x.JobType).IsEqualTo(JobType.Project)); sort = new SortOrder(x => x.JobNumber, SortDirection.Descending); base.Reload(criteria, columns, ref sort, action); } public override DynamicEditorPages LoadEditorPages(Job item) { var pages = new DynamicEditorPages(new IDynamicEditorPage[] { new DynamicManyToManyGrid(), //new DynamicManyToManyGrid(), new DynamicOneToManyGrid(), new JobFormDefinitionGrid(), //new DynamicOneToManyGrid(), }); return pages; } public override Job CreateItem() { var result = base.CreateItem(); var defstatus = new Client().Query(new Filter(x => x.Default).IsEqualTo(true)); if (defstatus.Rows.Any()) result.JobStatus.ID = defstatus.Rows.First().Get(x => x.ID); result.JobType = JobType.Project; return result; } protected override void CustomiseEditor(Job[] items, DynamicGridColumn column, BaseEditor editor) { base.CustomiseEditor(items, column, editor); if(new Column(x => x.Customer.ID).IsEqualTo(column.ColumnName) && editor is CodePopupEditor popup) { popup.CanAdd = Security.CanEdit(); } } protected override Dictionary EditorValueChanged(IDynamicEditorForm editor, Job[] items, string name, object value) { var result = base.EditorValueChanged(editor, items, name, value); if (name.Equals("Customer.ID")) { // false here because a customer has a defaultcontact // and we need to load the lookups before we set the default value var contact = editor.FindEditor("Contact.ID") as ILookupEditorControl; if (contact != null) DefineLookups(contact,items,false); } return result; } private void FilterComponent_OnFilterSelected(DynamicGridSelectedFilterSettings settings) { _settings.Filters = settings; new UserConfiguration().Save(_settings); } }