using FastReport; using InABox.Clients; using InABox.Core; using InABox.Database; using InABox.DynamicGrid; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace PRSServer.Forms { class DeletedEntityGrid : DynamicGrid, ISpecificGrid where T : Entity, new() { private Deletion Deletion { get; set; } public DeletedEntityGrid(Deletion deletion) { Deletion = deletion; HiddenColumns.Add(x => x.ID); Options.BeginUpdate().Clear() .AddRange(DynamicGridOption.EditRows).EndUpdate(); } protected override DynamicGridColumns LoadColumns() { var result = base.LoadColumns(); result.RemoveAll(x => { var prop = CoreUtils.GetProperty(typeof(T), x.ColumnName); return prop.GetCustomAttribute() != null && prop.GetCustomAttribute() != null; }); return result; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder sort, Action action) { try { var table = DbFactory.Provider.QueryDeleted(Deletion, criteria.Combine(), columns, sort); action(table, null); } catch(Exception e) { action(null, e); } } protected override T LoadItem(CoreRow row) { var id = row.Get(x => x.ID); var filter = new Filter(x => x.ID).IsEqualTo(id); return DbFactory.Provider.QueryDeleted(Deletion, filter, null).Rows.FirstOrDefault()?.ToObject(); } protected override void DoEdit() { if (!SelectedRows.Any()) return; var item = LoadItem(SelectedRows.First()); var editor = new DynamicEditorForm(typeof(T)); editor.ReadOnly = true; editor.OnDefineLookups += sender => DefineLookups(sender, Array.Empty()); editor.Items = new BaseObject[] { item }; editor.ShowDialog(); } protected override void SaveItem(T item) { // No saving allowed } protected override void DeleteItems(params CoreRow[] rows) { // No deleting allowed } } }