using InABox.Core; using InABox.Database; using InABox.DynamicGrid; using InABox.Wpf; 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() { HiddenColumns.Add(x => x.ID); HiddenColumns.Add(x => x.Data); Refresh = AddButton("", Properties.Resources.refresh.AsBitmapImage(), RefreshItems); Recover = AddButton("Recover", null, RecoverItems); View = AddButton("", Properties.Resources.view.AsBitmapImage(), ViewItems); OnDoubleClick += DeletionsGrid_OnDoubleClick; } protected override void Init() { } protected override void DoReconfigure(FluentList options) { options.BeginUpdate().Clear() .AddRange(DynamicGridOption.DeleteRows, DynamicGridOption.FilterRows, DynamicGridOption.MultiSelect) .EndUpdate(); } 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 recover = MessageWindow.ShowYesNo( "Are you sure you wish to recover these records?", "Confirm Recover"); if(recover) { foreach(var row in rows) { DbFactory.Provider.Recover(row.ToObject()); } MessageWindow.ShowMessage("Records recovered", "Records recovered"); return true; } return false; } private void DoViewItems(CoreRow[] selectedRows) { var rows = SelectedRows.ToList(); if (!rows.Any()) return; else if (rows.Count > 1) { MessageWindow.ShowMessage("Please select only one row", "Error"); 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 delete = MessageWindow.ShowYesNo( "Are you sure you wish to permanently delete these records?\n(This cannot be undone.)", "Confirm Permanent Delete"); if(delete) { DeleteItems(rows); SelectedRows = Array.Empty(); DoChanged(); 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); } public override void SaveItem(Deletion item) { // Cannot save deletions } } }