using InABox.Configuration; using InABox.Core; using InABox.DynamicGrid; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PRSDesktop { public class ManufacturingPanelProperties : BaseObject, IGlobalConfigurationSettings { [ScriptEditor] public string PickingListOptimisationScript { get; set; } = ""; public static string PickingListOptimisationMethodName() => "CustomisePickingList"; public static string DefaultPickingListOptimisationScript() { return @"using InABox.Core; using Comal.Classes; using PRSDesktop; using System; using System.Collections.Generic; using System.Linq; using System.Text; public class Module { public List? " + PickingListOptimisationMethodName() + @"(Requisition requisition, List requisitionItems) { return requisitionItems; } }"; } } public class ManufacturingPanelPropertiesGrid : DynamicItemsListGrid { public ManufacturingPanelPropertiesGrid() { OnCustomiseEditor += ManufacturingPanelPropertiesGrid_OnCustomiseEditor; } private void ManufacturingPanelPropertiesGrid_OnCustomiseEditor(IDynamicEditorForm sender, ManufacturingPanelProperties[]? items, DynamicGridColumn column, BaseEditor editor) { if (items?.FirstOrDefault() is not ManufacturingPanelProperties properties) return; if (column.ColumnName == nameof(ManufacturingPanelProperties.PickingListOptimisationScript) && editor is ScriptEditor scriptEditor) { scriptEditor.Type = ScriptEditorType.TemplateEditor; scriptEditor.OnEditorClicked += () => { var script = properties.PickingListOptimisationScript.NotWhiteSpaceOr() ?? ManufacturingPanelProperties.DefaultPickingListOptimisationScript(); var editor = new ScriptEditorWindow(script, SyntaxLanguage.CSharp); if (editor.ShowDialog() == true) { sender.SetEditorValue(column.ColumnName, editor.Script); properties.PickingListOptimisationScript = editor.Script; } }; } } } }