using System; using System.Collections.Generic; using System.Linq; using System.Windows; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; namespace PRSDesktop { public class JobActivitySummaryGrid : DynamicDataGrid { public Guid JobID { get; set; } public JobActivitySummaryGrid() : base() { Options.BeginUpdate(); Options.Clear(); if (Security.CanView()) Options.Add(DynamicGridOption.AddRows); if (Security.CanEdit()) Options.Add(DynamicGridOption.EditRows); if (Security.CanDelete()) Options.Add(DynamicGridOption.DeleteRows); if (Security.CanImport()) Options.Add(DynamicGridOption.ImportData); if (Security.CanExport()) Options.Add(DynamicGridOption.ExportData); Options.Add(DynamicGridOption.FilterRows); Options.Add(DynamicGridOption.MultiSelect); Options.Add(DynamicGridOption.SelectColumns); Options.Add(DynamicGridOption.RecordCount); Options.Add(DynamicGridOption.Print); Options.Add(DynamicGridOption.ShowHelp); Options.EndUpdate(); HiddenColumns.Add(x => x.JobLink.ID); HiddenColumns.Add(x => x.ActivityLink.ID); RowHeight = 30; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { criteria.Add(new Filter(x => x.JobLink.ID).IsEqualTo(JobID)); base.Reload(criteria, columns, ref sort, action); } private DynamicDataGrid? _editgrid; private void CheckEditGrid() { if (_editgrid == null) { var type = DynamicGridUtils.FindDynamicGrid(typeof(DynamicDataGrid<>), typeof(JobActivity)); _editgrid = Activator.CreateInstance(type, new object[] { }) as DynamicDataGrid; _editgrid.OnCustomiseEditor += (sender, items, column, editor) => { if (String.Equals(column.ColumnName, "JobLink.ID")) editor.Editable = Editable.Hidden; else if (String.Equals(column.ColumnName, "ActivityLink.ID")) (editor as ComboLookupEditor).Type = typeof(JobActivityLookup); else if (String.Equals(column.ColumnName, "Duration")) editor.Caption = "Budget"; }; } } protected override void DoAdd(bool OpenEditorOnDirectEdit = false) { if (JobID.Equals(Guid.Empty) || JobID.Equals(CoreUtils.FullGuid)) { MessageBox.Show("Please select a Job first!"); return; } CheckEditGrid(); var activity = new JobActivity(); activity.JobLink.ID = JobID; if (_editgrid.EditItems(new object[] { activity })) Refresh(false, true); } protected override void DoEdit() { Guid[] ids = SelectedRows.Select(row => row.Get(c => c.ActivityLink.ID)).ToArray(); if (!ids.Any()) return; if (JobID.Equals(Guid.Empty) || JobID.Equals(CoreUtils.FullGuid)) { MessageBox.Show("Please select a Job first!"); return; } CheckEditGrid(); List items; using(new WaitCursor()) { var table = new Client().Query( new Filter(x => x.JobLink.ID).IsEqualTo(JobID).And(x => x.ActivityLink.ID).InList(ids), new Columns(x=>x.ID).Add(x=>x.JobLink.ID).Add(x=>x.ActivityLink.ID).Add(x=>x.Duration) ); items = table.Rows.Select(x => x.ToObject()).ToList(); } foreach (Guid id in ids) { if (!items.Any(x => x.ActivityLink.ID == id)) { JobActivity item = new JobActivity(); item.JobLink.ID = JobID; item.ActivityLink.ID = id; items.Add(item); } } if (_editgrid.EditItems(items.ToArray())) Refresh(false, true); } protected override void DoDelete() { Guid[] ids = SelectedRows.Select(row => row.Get(c => c.ActivityLink.ID)).ToArray(); if (!ids.Any()) return; if (JobID.Equals(Guid.Empty) || JobID.Equals(CoreUtils.FullGuid)) { MessageBox.Show("Please select a Job first!"); return; } if (MessageBox.Show("Are you sure you wish to delete these activities?", "Confirm", MessageBoxButton.YesNo) != MessageBoxResult.Yes) return; var items = new Client().Query( new Filter(x => x.JobLink.ID).IsEqualTo(JobID).And(x => x.ActivityLink.ID).InList(ids), new Columns(x => x.ID) ).Rows.Select(x => x.ToObject()); using (new WaitCursor()) new Client().Delete(items.ToArray(),"Deleted from JobActivitySummary"); Refresh(false, true); } } }