| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Windows.Controls;
 
- using System.Windows.Documents;
 
- using System.Windows.Forms;
 
- using System.Windows.Media.Imaging;
 
- using Comal.Classes;
 
- using FastReport.Dialog;
 
- using InABox.Clients;
 
- using InABox.Core;
 
- using InABox.DynamicGrid;
 
- using InABox.DynamicGrid.Spreadsheet;
 
- using InABox.WPF;
 
- using PRSServer;
 
- namespace PRSDesktop
 
- {
 
-     #region Old Stuff
 
-     
 
-         // public class DynamicSpreadsheetColumnGrid : DynamicItemsListGrid<CoreSpreadsheetColumn>
 
-     // {
 
-     //     
 
-     //     public DynamicSpreadsheetColumnGrid() 
 
-     //     {
 
-     //         OnCustomiseEditor += (form, i, column, editor) =>
 
-     //         {
 
-     //             if (editor is ButtonEditor propeditor)
 
-     //                 propeditor.OnClick += (o, e) => PropertiesClick(o, i.FirstOrDefault());
 
-     //         };
 
-     //     }
 
-     //
 
-     //     private void PropertiesClick(object editor, CoreSpreadsheetColumn? item)
 
-     //     {
 
-     //         if (item == null)
 
-     //             return;
 
-     //         var properties = item.GetProperties();
 
-     //         var gridtype = typeof(DynamicItemsListGrid<>).MakeGenericType(properties.GetType());
 
-     //         var grid = Activator.CreateInstance(gridtype) as IDynamicItemsListGrid;
 
-     //         
 
-     //         if (grid == null)
 
-     //             return;
 
-     //
 
-     //         var expeditor = grid.MasterColumns.FirstOrDefault(x => x.Editor is ExpressionEditor)?.Editor as ExpressionEditor;
 
-     //         if (expeditor != null)
 
-     //             expeditor.OnGetVariables += () => Items.Select(x => x.Code);
 
-     //         
 
-     //         grid.Items = new List<CoreSpreadsheetColumnProperties>() { properties };
 
-     //         
 
-     //         if (grid.EditItems(new[] { properties }))
 
-     //             item.Properties = Serialization.Serialize(properties);
 
-     //     }
 
-     // }
 
-     
 
-     // public partial class DynamicSpreadsheetGrid : UserControl
 
-     // {
 
-     //     public DynamicSpreadsheetGrid()
 
-     //     {
 
-     //         InitializeComponent();
 
-     //         _sheet.ActiveGrid.Model.RowsInserted += OnInsertRows;
 
-     //     }
 
-     //     
 
-     //     private CoreSpreadsheet _spreadsheet = null;
 
-     //     public CoreSpreadsheet Spreadsheet
 
-     //     {
 
-     //         get => _spreadsheet;
 
-     //         set
 
-     //         {
 
-     //             _spreadsheet = value;
 
-     //             Load();
 
-     //         }
 
-     //     }
 
-     //
 
-     //
 
-     //     private void SetHeader(CoreSpreadsheetColumn column, int col)
 
-     //     {
 
-     //         var range = _sheet.ActiveSheet.Range[1, col];
 
-     //         _sheet.ActiveGrid.SetCellValue(range, String.IsNullOrWhiteSpace(column.GetProperties().Header) ? column.Code : column.GetProperties().Header);
 
-     //         
 
-     //         range.CellStyle.ColorIndex = ExcelKnownColors.Light_blue;
 
-     //         
 
-     //         range.Borders.LineStyle = ExcelLineStyle.Hair;
 
-     //         range.Borders.Color = ExcelKnownColors.Grey_80_percent;
 
-     //         
 
-     //         range.CellStyle.Locked = true;
 
-     //         
 
-     //         _sheet.FormatOrientation(90);
 
-     //         _sheet.ActiveGrid.InvalidateCell(range.Row, range.Column);
 
-     //     }
 
-     //
 
-     //     private void FormatRow(CoreSpreadsheetColumn column, int row, int col)
 
-     //     {
 
-     //         var range = _sheet.ActiveSheet.Range[row, col];
 
-     //         var properties = column.GetProperties();
 
-     //         if (String.IsNullOrWhiteSpace(properties.Expression))
 
-     //         {
 
-     //             range.CellStyle.ColorIndex = Syncfusion.XlsIO.ExcelKnownColors.Light_yellow;
 
-     //             range.CellStyle.Locked = false;           
 
-     //         }
 
-     //         else
 
-     //         {
 
-     //             _sheet.ActiveGrid.SetCellValue(range, properties.Expression);
 
-     //             range.CellStyle.ColorIndex = Syncfusion.XlsIO.ExcelKnownColors.Grey_25_percent;
 
-     //             range.CellStyle.Locked = true;
 
-     //         }
 
-     //         
 
-     //         range.Borders.LineStyle = ExcelLineStyle.Hair;
 
-     //         range.Borders.Color = ExcelKnownColors.Grey_80_percent;
 
-     //         
 
-     //         _sheet.ActiveGrid.InvalidateCell(range.Row, range.Column);
 
-     //     }
 
-     //     
 
-     //     public void Load()
 
-     //     {
 
-     //
 
-     //         var grid = _sheet.ActiveGrid;
 
-     //         // Set the Header Row
 
-     //         int iColumn = 1;
 
-     //         foreach (var column in _spreadsheet.GetColumns())
 
-     //             SetHeader(column, iColumn++);
 
-     //         _sheet.ActiveSheet.AutofitRow(1);
 
-     //         _sheet.Workbook.ActiveSheet.Range[0, 1].FreezePanes();
 
-     //         _sheet.ActiveGrid.FrozenRows = 1;
 
-     //         _sheet.ActiveGrid.FrozenColumns = 0;
 
-     //         
 
-     //         _sheet.ProtectSheet(_sheet.ActiveSheet, Guid.NewGuid().ToString(), ExcelSheetProtection.InsertingRows | ExcelSheetProtection.DeletingRows);
 
-     //         
 
-     //     }
 
-     //
 
-     //     private void OnInsertRows(object sender, GridRangeInsertedEventArgs e)
 
-     //     {
 
-     //         foreach (var col in _spreadsheet.GetColumns())
 
-     //         {
 
-     //
 
-     //         }
 
-     //     }
 
-     //     
 
-     // }
 
-     
 
-     #endregion 
 
-     
 
-     public abstract class SpreadsheetGrid<TSpreadsheet, TEntity, TEntityLink> : DynamicDataGrid<TSpreadsheet>
 
-         where TEntity : Entity, IPersistent, IRemotable, new()
 
-         where TEntityLink : EntityLink<TEntity>, new()
 
-         where TSpreadsheet : EntitySpreadsheet<TEntity, TEntityLink>, new()
 
-     {
 
-         public Guid ParentID { get; set; }
 
-         protected override void Init()
 
-         {
 
-             base.Init();
 
-             ActionColumns.Add(new DynamicImageColumn(EditImage, EditSpreadsheet) { Position = DynamicActionColumnPosition.Start });
 
-             HiddenColumns.Add(x => x.Superceded);
 
-             ActionColumns.Add(new DynamicImageColumn(SupercededImage, SupercedeDocument));
 
-         }
 
-         protected override void DoReconfigure(FluentList<DynamicGridOption> options)
 
-         {
 
-             base.DoReconfigure(options);
 
-             options.BeginUpdate().Clear().Add(DynamicGridOption.AddRows)
 
-                 .Add(DynamicGridOption.EditRows)
 
-                 .Add(DynamicGridOption.DeleteRows)
 
-                 .Add(DynamicGridOption.RecordCount)
 
-                 .EndUpdate();
 
-         }
 
-         protected override void Reload(Filters<TSpreadsheet> criteria, Columns<TSpreadsheet> columns, ref SortOrder<TSpreadsheet>? sort,
 
-             Action<CoreTable?, Exception?> action)
 
-         {
 
-             if ((ParentID == Guid.Empty) || (ParentID == CoreUtils.FullGuid))
 
-                 criteria.Add(new Filter<TSpreadsheet>(x => x.ID).None());
 
-             else
 
-                 criteria.Add(new Filter<TSpreadsheet>(x => x.Parent.ID).IsEqualTo(ParentID));
 
-             base.Reload(criteria, columns, ref sort, action);
 
-         }
 
-         private BitmapImage SupercededImage(CoreRow? row)
 
-         {
 
-             if (row == null)
 
-                 return PRSDesktop.Resources.tick.AsBitmapImage();
 
-             if (row.Get<TSpreadsheet, DateTime>(x => x.Superceded) != DateTime.MinValue)
 
-                 return PRSDesktop.Resources.warning.AsBitmapImage();
 
-             return PRSDesktop.Resources.tick.AsBitmapImage();
 
-         }
 
-         private bool SupercedeDocument(CoreRow? row)
 
-         {
 
-             var id = row.Get<TSpreadsheet, Guid>(x => x.ID);
 
-             var superceded = row.Get<TSpreadsheet, DateTime>(x => x.Superceded);
 
-             var spreadsheet = new TSpreadsheet()
 
-             {
 
-                 ID = id,
 
-                 Superceded = superceded.IsEmpty() ? DateTime.Now : DateTime.MinValue
 
-             };
 
-             new Client<TSpreadsheet>().Save(spreadsheet, "");
 
-             return true;
 
-         }
 
-         private BitmapImage EditImage(CoreRow? arg)
 
-         {
 
-             return PRSDesktop.Resources.pencil.AsBitmapImage();
 
-         }
 
-         private bool EditSpreadsheet(CoreRow? row)
 
-         {
 
-             var spreadsheet = LoadItem(row);
 
-             var window = new SpreadsheetWindow(spreadsheet);
 
-             window.OnSave += SaveSpreadsheet;
 
-             window.ShowDialog();
 
-             Refresh(false, true);
 
-             return false;
 
-         }
 
-         protected override void DoDoubleClick(object sender)
 
-         {
 
-             if (SelectedRows.Any()) 
 
-                 EditSpreadsheet(SelectedRows.First());
 
-             else
 
-                 base.DoDoubleClick(sender);
 
-         }
 
-         protected override TSpreadsheet CreateItem()
 
-         {
 
-             var result = base.CreateItem();
 
-             result.Parent.ID = ParentID;
 
-             return result;
 
-         }
 
-         private void CreateMenu(ContextMenu parent, string header, Guid id)
 
-         {
 
-             var menu = new MenuItem();
 
-             menu.Header = header;
 
-             menu.Tag = id;
 
-             menu.IsCheckable = false;
 
-             menu.Click += (o, e) => { LoadSpreadsheet(id); };
 
-             parent.Items.Add(menu);
 
-         }
 
-         private void LoadSpreadsheet(Guid id)
 
-         {
 
-             TSpreadsheet spreadsheet = CreateItem();
 
-             if (id != Guid.Empty)
 
-             {
 
-                 var template = new Client<SpreadsheetTemplate>().Query(new Filter<SpreadsheetTemplate>(x => x.ID).IsEqualTo(id)).Rows
 
-                     .FirstOrDefault()
 
-                     ?.ToObject<SpreadsheetTemplate>();
 
-                 spreadsheet.Code = template.Code;
 
-                 spreadsheet.Description = template.Description;
 
-                 spreadsheet.Data = template.Data;
 
-             }
 
-             var window = new SpreadsheetWindow(spreadsheet);
 
-             window.OnSave += SaveSpreadsheet;
 
-             window.ShowDialog();
 
-             Refresh(false, true);
 
-         }
 
-         private void SaveSpreadsheet(object sender, SpreadsheetSaveArgs args)
 
-         {
 
-             TSpreadsheet? sheet = args.Spreadsheet as TSpreadsheet;
 
-             if (sheet == null)
 
-                 return;
 
-             
 
-             if (args.SaveAs || Guid.Equals(sheet.ID,Guid.Empty))
 
-             {
 
-                 sheet.ID = Guid.Empty;
 
-                 sheet.CommitChanges();
 
-                 sheet.Data = args.Data;
 
-                 EditItems(new TSpreadsheet[] { sheet });
 
-             }
 
-             else
 
-             {
 
-                 sheet.Data = args.Data;
 
-                 new Client<TSpreadsheet>().Save(args.Spreadsheet as TSpreadsheet, "Saved by PRS Spreadsheet");                
 
-             }
 
-         }
 
-         private Dictionary<Guid, String> templates = null;
 
-         
 
-         protected override void DoAdd(bool OpenEditorOnDirectEdit = false)
 
-         {
 
-             if ((ParentID == Guid.Empty) || (ParentID == CoreUtils.FullGuid))
 
-             {
 
-                 MessageBox.Show($"No {typeof(TEntity).EntityName().Split(".").Last()} selected!");
 
-                 return;
 
-             }
 
-             
 
-             var menu = new ContextMenu();
 
-             if (templates == null)
 
-             {
 
-                 templates = new Client<SpreadsheetTemplate>().Query(
 
-                     new Filter<SpreadsheetTemplate>(x => x.AppliesTo).IsEqualTo(typeof(TEntity).EntityName().Split(".").Last())
 
-                         .And(x=>x.Active).IsEqualTo(true)
 
-                 ).ToDictionary<SpreadsheetTemplate, Guid, String>(
 
-                     x => x.ID,
 
-                     (r) => String.Format("{0}: {1}", r.Get<SpreadsheetTemplate, String>(c => c.Code),
 
-                         r.Get<SpreadsheetTemplate, String>(c => c.Description))
 
-                 );
 
-             }
 
-             if (templates.Keys.Any())
 
-             {
 
-                 CreateMenu(menu, "Blank Spreadsheet", Guid.Empty);
 
-                 menu.Items.Add(new Separator());
 
-                 foreach (var key in templates.Keys)
 
-                     CreateMenu(menu, templates[key], key);
 
-                 menu.IsOpen = true;
 
-             }
 
-             else
 
-                 LoadSpreadsheet(Guid.Empty);
 
-         }
 
-     }
 
- }
 
 
  |