| 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);        }    }}
 |