using InABox.Clients; using InABox.Core; using InABox.Database; using InABox.DynamicGrid; using InABox.WPF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace PRSServer.Forms { public class DeletionsGrid : DynamicGrid { private Button Refresh; private Button Recover; private Button View; public DeletionsGrid() { Options.BeginUpdate().Clear() .AddRange(DynamicGridOption.DeleteRows, DynamicGridOption.FilterRows, DynamicGridOption.MultiSelect) .EndUpdate(); HiddenColumns.Add(x => x.ID); Refresh = AddButton("", Properties.Resources.refresh.AsBitmapImage(), RefreshItems); Recover = AddButton("Recover", null, RecoverItems); View = AddButton("", Properties.Resources.view.AsBitmapImage(), ViewItems); OnDoubleClick += DeletionsGrid_OnDoubleClick; } private void DeletionsGrid_OnDoubleClick(object sender, System.ComponentModel.HandledEventArgs args) { DoViewItems(SelectedRows); } private bool RefreshItems(Button button, CoreRow[] selectedRows) { return true; } private bool RecoverItems(Button button, CoreRow[] selectedRows) { var rows = SelectedRows.ToList(); if (!rows.Any()) return false; var result = MessageBox.Show( "Are you sure you wish to recover these records?", "Confirm Recover", MessageBoxButton.YesNo); if(result == MessageBoxResult.Yes) { foreach(var row in rows) { DbFactory.Provider.Recover(row.ToObject()); } MessageBox.Show("Records recovered"); return true; } return false; } private void DoViewItems(CoreRow[] selectedRows) { var rows = SelectedRows.ToList(); if (!rows.Any()) return; else if (rows.Count > 1) { MessageBox.Show("Please select only one row"); return; ; } var deletion = rows[0].ToObject(); var window = new ViewDeletionWindow(deletion); window.ShowDialog(); } private bool ViewItems(Button button, CoreRow[] selectedRows) { DoViewItems(selectedRows); return false; } protected override void DeleteItems(params CoreRow[] rows) { foreach(var row in rows) { DbFactory.Provider.Purge(row.ToObject()); } } protected override void DoDelete() { var rows = SelectedRows.ToArray(); if (!rows.Any()) return; var result = MessageBox.Show( "Are you sure you wish to permanently delete these records?\n(This cannot be undone.)", "Confirm Permanent Delete", MessageBoxButton.YesNo); if(result == MessageBoxResult.Yes) { DeleteItems(rows); SelectedRows = new CoreRow[] { }; OnChanged?.Invoke(this); Refresh(false, true); SelectItems(null); } } protected override Deletion LoadItem(CoreRow row) { var id = row.Get(x => x.ID); return DbFactory.Provider.Query(new Filter(x => x.ID).IsEqualTo(id)) .Rows.FirstOrDefault()?.ToObject()!; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { if(sort == null) { sort = new SortOrder(x => x.DeletionDate, SortDirection.Descending); } var table = DbFactory.Provider.Query(criteria.Combine(), columns, sort); action(table, null); } protected override void SaveItem(Deletion item) { // Cannot save deletions } } }