Ver código fonte

Added ManufacturingTemplateGroup class
Streamlined Staging Panel "Add Packet" Button

frogsoftware 1 ano atrás
pai
commit
57446143f6

+ 6 - 2
prs.classes/Entities/Manufacturing/ManufacturingTemplate/ManufacturingTemplate.cs

@@ -44,15 +44,18 @@ namespace Comal.Classes
         [EditorSequence(3)]
         [TextBoxEditor]
         public string Name { get; set; }
-
+        
         [EditorSequence(4)]
+        public ManufacturingTemplateGroupLink Group { get; set; }
+
+        [EditorSequence(5)]
         [EnumLookupEditor(typeof(BarcodeType))]
         public BarcodeType Barcode { get; set; }
 
         //[EditorType(EditorClass.)]
         //public PackableList<CoreAttribute> CustomAttributes { get; set; }
 
-        [EditorSequence(5)]
+        [EditorSequence(6)]
         [CheckBoxEditor]
         public bool Active { get; set; }
 
@@ -68,6 +71,7 @@ namespace Comal.Classes
         {
             base.Init();
             Factory = new ManufacturingFactoryLink();
+            Group = new ManufacturingTemplateGroupLink();
             Active = true;
         }
 

+ 66 - 0
prs.classes/Entities/Manufacturing/ManufacturingTemplate/ManufacturingTemplateGroup.cs

@@ -0,0 +1,66 @@
+using System;
+using InABox.Core;
+
+namespace Comal.Classes
+{
+    public interface IManufacturingTemplateGroup : IEntity
+    {
+        string Code { get; set; }
+        string Description { get; set; }
+    }
+
+    public class ManufacturingTemplateGroup : Entity, IRemotable, IPersistent, IManufacturingTemplateGroup
+    {
+        [UniqueCodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)]
+        [EditorSequence(1)]
+        public string Code { get; set; }
+        
+        [TextBoxEditor(Visible = Visible.Default)]
+        [EditorSequence(2)]
+        public string Description { get; set; }
+    }
+
+    public class ManufacturingTemplateGroupLink : EntityLink<ManufacturingTemplateGroup>, IManufacturingTemplateGroup
+    {
+        [LookupEditor(typeof(ManufacturingTemplateGroup))]
+        public override Guid ID { get; set; }
+        
+        [CodeEditor(Visible=Visible.Default, Editable = Editable.Hidden)]
+        [EditorSequence(1)]
+        public string Code { get; set; }
+        
+        [TextBoxEditor(Visible=Visible.Optional, Editable = Editable.Hidden)]
+        [EditorSequence(2)]
+        public string Description { get; set; }
+        
+        public ManufacturingTemplateGroupLink()
+        {
+        }
+
+        public ManufacturingTemplateGroupLink(Func<BaseObject>? entity) : base(entity)
+        {
+        }
+    }
+
+    public class ManufacturingTemplateGroupProducts : Entity, IRemotable, IPersistent,
+        IManyToMany<ManufacturingTemplateGroup, Product>
+    {
+        [PopupEditor(typeof(ManufacturingTemplateGroup))]
+        [EditorSequence(1)]
+        [EntityRelationship(DeleteAction.Cascade)]
+        public ManufacturingTemplateGroupLink TemplateGroup { get; set; }
+        
+        [PopupEditor(typeof(Product))]
+        [EntityRelationship(DeleteAction.Cascade)]
+        [EditorSequence(1)]
+        public ProductLink Product { get; set; }
+
+        protected override void Init()
+        {
+            base.Init();
+            TemplateGroup = new ManufacturingTemplateGroupLink(() => this);
+            Product = new ProductLink(() => this);
+        }
+    }
+    
+}

+ 1 - 1
prs.classes/Entities/Product/Product.cs

@@ -138,7 +138,7 @@ namespace Comal.Classes
         [Caption("Incoming QA")]
         [EditorSequence("Warehousing", 5)]
         public DigitalFormLink DigitalForm { get; set; }
-
+        
         [NullEditor]
         public string Barcodes { get; set; }
 

+ 4 - 2
prs.classes/Entities/Staging/Manufacturing/Packet/StagingManufacturingPacket.cs

@@ -32,13 +32,14 @@ namespace Comal.Classes
         public int Quantity { get; set; }
 
         public int BarcodeQuantity { get; set; }
+        
+        public ManufacturingTemplateGroupLink Group { get; set; }
 
         public ManufacturingTemplateLink Template { get; set; }
 
         [NullEditor]
         public ManufacturingPacketLink ManufacturingPacket { get; set; }
-
-
+        
         protected override void Init()
         {
             Title = "";
@@ -51,6 +52,7 @@ namespace Comal.Classes
             ManufacturingPacket = new ManufacturingPacketLink();
             ITP = new JobITPLink();
             Template = new ManufacturingTemplateLink();
+            Group = new ManufacturingTemplateGroupLink();
             base.Init();
         }
 

+ 25 - 7
prs.desktop/Panels/Manufacturing/ManufacturingPanel.xaml.cs

@@ -142,13 +142,18 @@ namespace PRSDesktop
             }
             //OrderItems = tables[5]; //.Rows.Select(x => x.ToObject<PurchaseOrderItem>()).ToArray(); 
 
-            Filter<Document>? imageFilter = null;
-            foreach (var Factory in Data.Factories)
-                if (Factory.Thumbnail.IsValid())
-                    imageFilter = imageFilter == null
-                        ? new Filter<Document>(x => x.ID).IsEqualTo(Factory.Thumbnail.ID)
-                        : imageFilter.Or(x => x.ID).IsEqualTo(Factory.Thumbnail.ID);
-            FactoryImages = new Client<Document>().Load(imageFilter);
+            if (Data.Factories.Any())
+            {
+                Filter<Document>? imageFilter = null;
+                foreach (var Factory in Data.Factories)
+                    if (Factory.Thumbnail.IsValid())
+                        imageFilter = imageFilter == null
+                            ? new Filter<Document>(x => x.ID).IsEqualTo(Factory.Thumbnail.ID)
+                            : imageFilter.Or(x => x.ID).IsEqualTo(Factory.Thumbnail.ID);
+                FactoryImages = new Client<Document>().Load(imageFilter);
+            }
+            else
+                FactoryImages = new Document[] { };
 
             var iFact = 1;
             foreach (var Factory in Data.Factories)
@@ -230,6 +235,19 @@ namespace PRSDesktop
 
         public void CreateToolbarButtons(IPanelHost host)
         {
+            host.CreateSetupAction(
+                new PanelAction() 
+                { 
+                    Caption = "Template Groups", 
+                    Image = PRSDesktop.Resources.specifications,
+                    OnExecute =
+                    action =>
+                    {
+                        var list = new MasterList(typeof(ManufacturingTemplateGroup));
+                        list.ShowDialog();
+                    }  
+                }
+            );
         }
 
         public string SectionName => "Manufacturing Packets";

+ 26 - 7
prs.desktop/Panels/Staging/Manufacturing/StagingManufacturingPacketList.xaml.cs

@@ -28,7 +28,7 @@ namespace PRSDesktop
         public event Action<bool>? OnCollapsed;
 
         private StagingSetout? _setout = null;
-
+        
         public StagingSetout? Setout
         {
             get => _setout;
@@ -84,7 +84,7 @@ namespace PRSDesktop
             var item = new StagingManufacturingPacketListItem(packet);
             item.AfterDelete += Item_OnDelete;
             item.OnCollapsed += Item_OnCollapsed;
-            item.Collapsed = false;
+            item.Collapsed = true;
             ManufacturingPacketList.Children.Add(item);
         }
 
@@ -98,23 +98,42 @@ namespace PRSDesktop
             ManufacturingPacketList.Children.Remove(obj);
         }
 
-        public void Add()
+        public void Add(IManufacturingTemplateGroup? group)
         {
             if (Setout is null)
             {
                 MessageBox.Show("Please select a setout first.");
                 return;
             }
+            
             var newPacket = new StagingManufacturingPacket();
+            
+            if (group != null)
+            {
+                newPacket.Group.ID = group.ID;
+                newPacket.Group.Synchronise(group);
+            }
+
             newPacket.StagingSetout.ID = Setout.ID;
 
-            var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), typeof(StagingManufacturingPacket));
-            if (grid.EditItems(new object[] { newPacket }))
-            {
+
+            string serialbase = $"{Setout.Number}-";
+            if (group != null)
+                serialbase = $"{serialbase}{group.Code}-";
+            var pkts = GetPackets().Where(x => x.Serial.StartsWith(serialbase)).ToArray();
+            int iSerial = 1;
+            while (pkts.Any(x => String.Equals(x.Serial, $"{serialbase}{iSerial:D3}")))
+                iSerial++;
+            newPacket.Serial = $"{serialbase}{iSerial:D3}";
+            
+            new Client<StagingManufacturingPacket>().Save(newPacket,"Created from Staging Panel");
+            //var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), typeof(StagingManufacturingPacket));
+            //if (grid.EditItems(new object[] { newPacket }))
+            //{
                 StagingManufacturingPacketListItem.CreateStages(newPacket);
                 AddItem(newPacket);
                 OnCollapsed?.Invoke(Collapsed());
-            }
+            //}
         }
 
         public void Collapse()

+ 68 - 5
prs.desktop/Panels/Staging/StagingPanel.xaml.cs

@@ -15,6 +15,8 @@ using System.ComponentModel;
 using InABox.Scripting;
 using System.Reflection;
 using System.Collections.Immutable;
+using FastReport.Data;
+using Microsoft.Xaml.Behaviors.Core;
 
 namespace PRSDesktop
 {
@@ -82,6 +84,8 @@ public class Module
         /// </summary>
         private List<StagingSetout> selectedSetouts = new();
 
+        private CoreTable? _templateGroups = null;
+
         #region Script Stuff
 
         private MethodInfo? _customiseSetoutsMethod;
@@ -136,7 +140,9 @@ public class Module
         public void Setup()
         {
             _settings = new GlobalConfiguration<StagingPanellSettings>().Load();
-
+            
+            _templateGroups = new Client<ManufacturingTemplateGroup>().Query();
+            
             MarkUpButton.Visibility = Security.IsAllowed<CanMarkUpSetouts>() ? Visibility.Visible : Visibility.Hidden;
             RejectButton.Visibility = Security.IsAllowed<CanApproveSetouts>() ? Visibility.Visible : Visibility.Hidden;
             ApproveButton.Visibility = Security.IsAllowed<CanApproveSetouts>() ? Visibility.Visible : Visibility.Hidden;
@@ -641,7 +647,28 @@ public class Module
 
         public void CreateToolbarButtons(IPanelHost host)
         {
-            host.CreateSetupAction(new PanelAction() { Caption = "Setouts Configuration", Image = PRSDesktop.Resources.specifications, OnExecute = ConfigSettingsClick });
+            host.CreateSetupAction(
+                new PanelAction()
+                {
+                    Caption = "Setouts Configuration", 
+                    Image = PRSDesktop.Resources.specifications,
+                    OnExecute = ConfigSettingsClick
+                }
+            );
+            
+            host.CreateSetupAction(
+                new PanelAction() 
+                { 
+                    Caption = "Template Products", 
+                    Image = PRSDesktop.Resources.specifications,
+                    OnExecute =
+                        action =>
+                        {
+                            var list = new MasterList(typeof(ManufacturingTemplateGroupProducts));
+                            list.ShowDialog();
+                        }  
+                }
+            );
         }
 
         private void ConfigSettingsClick(PanelAction obj)
@@ -727,10 +754,45 @@ public class Module
 
         private void AddPacketButton_Click(object sender, RoutedEventArgs e)
         {
-            ManufacturingPacketList.Add();
-            stagingSetoutGrid.Refresh(false, true);
-        }
+            if (_templateGroups.Rows.Any())
+            {
+                ContextMenu menu = new ContextMenu();
+                foreach (var row in _templateGroups.Rows)
+                {
+                    MenuItem item = new MenuItem()
+                    {
+                        Header =
+                            $"{row.Get<ManufacturingTemplateGroup, String>(x => x.Code)}: {row.Get<ManufacturingTemplateGroup, String>(x => x.Description)}",
+                        Command = new ActionCommand((obj) =>
+                        {
+                            ManufacturingPacketList.Add(row.ToObject<ManufacturingTemplateGroup>());
+                            stagingSetoutGrid.Refresh(false, true);
+                        })
+                    };
+                    menu.Items.Add(item);
+                }
 
+                menu.Items.Add(new Separator());
+                MenuItem misc = new MenuItem()
+                {
+                    Header = "Miscellaneous Item",
+                    Command = new ActionCommand((obj) =>
+                    {
+                        ManufacturingPacketList.Add(null);
+                        stagingSetoutGrid.Refresh(false, true);
+                    })
+                };
+                menu.Items.Add(misc);
+                menu.IsOpen = true;
+            }
+            else
+            {
+                ManufacturingPacketList.Add(null);
+                stagingSetoutGrid.Refresh(false, true);
+            }
+
+        }
+        
         private void CollapsePacketsButton_Click(object sender, RoutedEventArgs e)
         {
             if (ManufacturingPacketList.Collapsed())
@@ -765,5 +827,6 @@ public class Module
                 });
             }
         }
+        
     }
 }