Explorar o código

Merge branch 'Logikal-V2' into frank

frankvandenbos hai 2 meses
pai
achega
c9747a2af8

+ 2 - 1
prs.desktop/Integrations/Logikal/Classes/LogikalBOMItem.cs

@@ -4,9 +4,10 @@ using System.Collections.Generic;
 namespace PRSDesktop.Integrations.Logikal
 {
 
-    public class LogikalBOM : ILogikalBOM<LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass,
+    public class LogikalBOM : ILogikalBOM<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass,
         LogikalLabour>
     {
+        public IEnumerable<LogikalProductGroup> Groups { get; set; }
         public IEnumerable<LogikalFinish> Finishes { get; set; }
         public IEnumerable<LogikalProfile> Profiles { get; set; }
         public IEnumerable<LogikalGasket> Gaskets { get; set; }

+ 4 - 1
prs.desktop/Integrations/Logikal/Classes/LogikalElevationDetail.cs

@@ -5,13 +5,16 @@ using InABox.Integration.Logikal;
 namespace PRSDesktop.Integrations.Logikal;
 
 public class LogikalElevationDetail : LogikalElevationSummary,
-    ILogikalElevationDetail<LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass,
+    ILogikalElevationDetail<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass,
         LogikalLabour>
 {
         
     [NullEditor]
     public byte[]? Drawing { get; set; }
 
+    [NullEditor]
+    public IEnumerable<LogikalProductGroup> Groups { get; set; }
+    
     [NullEditor]
     public IEnumerable<LogikalFinish> Finishes { get; set; }
         

+ 16 - 1
prs.desktop/Integrations/Logikal/Classes/LogikalFinish.cs

@@ -4,12 +4,24 @@ using System.Collections.Generic;
 
 namespace PRSDesktop.Integrations.Logikal
 {
+
+    public enum LogikalFinishType
+    {
+        Mill = 0,
+        Powdercoated = 1,
+        Anodised = 2,
+        Galvanised = 3,
+        Stainless = 4
+    }
+    
     public class LogikalFinish : LogikalItem, ILogikalFinish
     {
 
         public String Code { get; set; }
 
         public String Description { get; set; }
+        
+        public double Price { get; set; }
 
         public override  void ValidateQuery(string sql, List<string> errors)
         {
@@ -20,9 +32,12 @@ namespace PRSDesktop.Integrations.Logikal
         public static String SQL = $@"
 select distinct 
     c.[ColorName] as {nameof(Code)}, 
-    c.ColorDescription as {nameof(Description)} 
+    c.[ColorDescription] as {nameof(Description)} 
+    b.[PriceCoating] as {nameof(Price)}
 from 
     Colors c
+left outer join
+        profilebars b on c.[ColorId] = b.[LK_ColorId]
 where
     coalesce(c.[ColorName],'') <> ''";
 

+ 17 - 0
prs.desktop/Integrations/Logikal/Classes/LogikalProductGroup.cs

@@ -0,0 +1,17 @@
+using InABox.Integration.Logikal;
+
+namespace PRSDesktop.Integrations.Logikal;
+
+public class LogikalProductGroup : ILogikalProductGroup
+{
+    public string Code { get; set; }
+    public string Description { get; set; }
+    
+    public static string SQL =  $@"
+select distinct
+    cast(d.[DiscountGroup] as text) as {nameof(Code)},
+    d.[name] as {nameof(Description)}
+from
+    EstimationDiscounts d
+";
+}

+ 33 - 3
prs.desktop/Integrations/Logikal/LogikalClient.cs

@@ -117,8 +117,8 @@ public class LogikalClient : IDisposable
             { LogikalMethod.Projects, typeof(LogikalProjectsResponse<LogikalProject>) },
             { LogikalMethod.Phases, typeof(LogikalPhasesResponse<LogikalPhase>) },
             { LogikalMethod.ElevationSummary, typeof(LogikalElevationSummaryResponse<LogikalElevationSummary>) },
-            { LogikalMethod.ElevationDetail, typeof(LogikalElevationDetailResponse<LogikalElevationDetail,LogikalFinish,LogikalProfile,LogikalGasket,LogikalComponent, LogikalGlass, LogikalLabour>) },
-            { LogikalMethod.BOM, typeof(LogikalBOMResponse<LogikalBOM,LogikalFinish,LogikalProfile,LogikalGasket,LogikalComponent, LogikalGlass, LogikalLabour>) },
+            { LogikalMethod.ElevationDetail, typeof(LogikalElevationDetailResponse<LogikalElevationDetail,LogikalProductGroup, LogikalFinish,LogikalProfile,LogikalGasket,LogikalComponent, LogikalGlass, LogikalLabour>) },
+            { LogikalMethod.BOM, typeof(LogikalBOMResponse<LogikalBOM,LogikalProductGroup, LogikalFinish,LogikalProfile,LogikalGasket,LogikalComponent, LogikalGlass, LogikalLabour>) },
             { LogikalMethod.Error, typeof(LogikalErrorResponse) },
         };
 
@@ -487,6 +487,7 @@ public class LogikalClient : IDisposable
                     .Error(response => { })
                     .Success<LogikalBOMResponse<
                         LogikalBOM,
+                        LogikalProductGroup,
                         LogikalFinish,
                         LogikalProfile,
                         LogikalGasket,
@@ -544,6 +545,7 @@ public class LogikalClient : IDisposable
                 _result = Send(_request)
                     .Success<LogikalElevationDetailResponse<
                         LogikalElevationDetail,
+                        LogikalProductGroup,
                         LogikalFinish,
                         LogikalProfile,
                         LogikalGasket,
@@ -578,7 +580,7 @@ public class LogikalClient : IDisposable
             : 1.0;
     }
 
-    private void ExtractBOMData(IEnumerable<ILogikalBOM<LogikalFinish,LogikalProfile,LogikalGasket,LogikalComponent,LogikalGlass,LogikalLabour>> elevations, bool optimised, bool includeexcel)
+    private void ExtractBOMData(IEnumerable<ILogikalBOM<LogikalProductGroup, LogikalFinish,LogikalProfile,LogikalGasket,LogikalComponent,LogikalGlass,LogikalLabour>> elevations, bool optimised, bool includeexcel)
     {
         foreach (var elevation in elevations)
         {
@@ -592,6 +594,34 @@ public class LogikalClient : IDisposable
 
                 _connection.Open();
 
+                using (var _data = new SQLiteCommand(_connection))
+                {
+                    _data.CommandText = LogikalProductGroup.SQL.Replace('\n', ' ');
+                    try
+                    {
+                        using (var _reader = _data.ExecuteReader())
+                        {
+                            DataTable _dt = new DataTable();
+                            _dt.Load(_reader);
+                            List<LogikalProductGroup> _groups = new List<LogikalProductGroup>();
+                            foreach (DataRow row in _dt.Rows)
+                            {
+                                var _group = new LogikalProductGroup();
+                                _group.Code = CheckValue<string>(row[nameof(LogikalFinish.Code)]);
+                                _group.Description = CheckValue<string>(row[nameof(LogikalFinish.Description)]);
+                                _groups.Add(_group);
+                            }
+
+                            elevation.Groups = _groups;
+                        }
+
+                    }
+                    catch (Exception e)
+                    {
+                        throw new Exception($"Error: {e.Message}\nQuery: {_data.CommandText}\nTrace: {e.StackTrace}");
+                    }
+                }
+
                 // Get Finishes
                 using (var _data = new SQLiteCommand(_connection))
                 {

+ 5 - 5
prs.desktop/Integrations/Logikal/LogikalElevationSelection.xaml.cs

@@ -32,9 +32,9 @@ public partial class LogikalElevationSelection : Window
 
     private LogikalElevationSelectionType _type;
 
-    private Func<LogikalProject, ILogikalBOM<LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,LogikalGlass,LogikalLabour>[],bool> _callback;
+    private Func<LogikalProject, ILogikalBOM<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,LogikalGlass,LogikalLabour>[],bool> _callback;
 
-    public LogikalElevationSelection(Job? job, LogikalElevationSelectionType type, Func<LogikalProject, ILogikalBOM<LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,LogikalGlass,LogikalLabour>[],bool> callback)
+    public LogikalElevationSelection(Job? job, LogikalElevationSelectionType type, Func<LogikalProject, ILogikalBOM<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,LogikalGlass,LogikalLabour>[],bool> callback)
     {
         
         _type = type;
@@ -149,7 +149,7 @@ public partial class LogikalElevationSelection : Window
             LogikalClient.Instance.GetBillOfMaterials(Elevations.ProjectID, ids, true, true)
                 .Always(UpdateStatus)
                 .Error(error => { MessageWindow.ShowMessage(error.Message, "Error"); })
-                .Success<LogikalBOMResponse<LogikalBOM, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass, LogikalLabour>>(
+                .Success<LogikalBOMResponse<LogikalBOM, LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass, LogikalLabour>>(
                     response =>
                     {
                         close = _callback(_project,[response.BOM]);
@@ -161,13 +161,13 @@ public partial class LogikalElevationSelection : Window
             LogikalClient.Instance.GetElevationDetails(Elevations.ProjectID, ids, true, true)
                 .Always(UpdateStatus)
                 //.Error(error => { MessageWindow.ShowMessage(error.Message, "Error"); })
-                .Success<LogikalElevationDetailResponse<LogikalElevationDetail, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,
+                .Success<LogikalElevationDetailResponse<LogikalElevationDetail, LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,
                     LogikalGlass, LogikalLabour>>(
                     response =>
                     {
                         bok = bok && _callback(_project,
                             response.Elevations
-                                .OfType<ILogikalBOM<LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass, LogikalLabour>>()
+                                .OfType<ILogikalBOM<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass, LogikalLabour>>()
                                 .ToArray());
                     });
             close = bok;

+ 2 - 1
prs.desktop/Integrations/V6/Classes/V6BOM.cs

@@ -3,8 +3,9 @@ using InABox.Integration.V6;
 
 namespace PRSDesktop.Integrations.V6;
 
-public class V6BOM : IV6BOM<V6Finish,V6Profile,V6Gasket,V6Component,V6Glass,V6Labour>
+public class V6BOM : IV6BOM<V6ProductGroup, V6Finish,V6Profile,V6Gasket,V6Component,V6Glass,V6Labour>
 {
+    public IEnumerable<V6ProductGroup> Groups { get; set; }
     public IEnumerable<V6Finish> Finishes { get; set; }
     public IEnumerable<V6Profile> Profiles { get; set; }
     public IEnumerable<V6Gasket> Gaskets { get; set; }

+ 7 - 0
prs.desktop/Integrations/V6/Classes/V6ProductGroup.cs

@@ -0,0 +1,7 @@
+using InABox.Integration.V6;
+
+namespace PRSDesktop.Integrations.V6;
+
+public class V6ProductGroup : V6BOMItem, IV6ProductGroup
+{
+}

+ 1 - 1
prs.desktop/Panels/Staging/Setouts/StagingSetoutGrid.cs

@@ -604,7 +604,7 @@ public class StagingSetoutGrid : DynamicDataGrid<StagingSetout>
             List<LogikalGlass> glass = new();
             List<LogikalLabour> labour = new();
             
-            Dictionary<ILogikalBOM<LogikalFinish,LogikalProfile,LogikalGasket,LogikalComponent,LogikalGlass,LogikalLabour>,List<StagingSetoutComponent>> comps = new();
+            Dictionary<ILogikalBOM<LogikalProductGroup, LogikalFinish,LogikalProfile,LogikalGasket,LogikalComponent,LogikalGlass,LogikalLabour>,List<StagingSetoutComponent>> comps = new();
             
             foreach (var elevation in elevations)
             {

+ 18 - 0
prs.logikal/Classes/LogikalBOM.cs

@@ -0,0 +1,18 @@
+using System.Collections.Generic;
+using InABox.Integration.Logikal;
+
+namespace PRSLogikal
+{
+    public class LogikalBOM : ILogikalBOM<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass, LogikalLabour>
+    {
+        public IEnumerable<LogikalProductGroup> Groups { get; set; }
+        public IEnumerable<LogikalFinish> Finishes { get; set; }
+        public IEnumerable<LogikalProfile> Profiles { get; set; }
+        public IEnumerable<LogikalGasket> Gaskets { get; set; }
+        public IEnumerable<LogikalComponent> Components { get; set; }
+        public IEnumerable<LogikalGlass> Glass { get; set; }
+        public IEnumerable<LogikalLabour> Labour { get; set; }
+        public byte[] ExcelData { get; set; }
+        public byte[] SQLiteData { get; set; }
+    }
+}

+ 2 - 13
prs.logikal/Classes/LogikalElevationDetail.cs

@@ -4,9 +4,10 @@ using InABox.Integration.Logikal;
 namespace PRSLogikal
 {
     public class LogikalElevationDetail : LogikalElevationSummary,
-        ILogikalElevationDetail<LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass,
+        ILogikalElevationDetail<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass,
             LogikalLabour>
     {
+        public IEnumerable<LogikalProductGroup> Groups { get; set; }
         public IEnumerable<LogikalFinish> Finishes { get; set; }
         public IEnumerable<LogikalProfile> Profiles { get; set; }
         public IEnumerable<LogikalGasket> Gaskets { get; set; }
@@ -17,16 +18,4 @@ namespace PRSLogikal
         public byte[] SQLiteData { get; set; }
         public byte[] Drawing { get; set; }
     }
-    
-    public class LogikalBOM : ILogikalBOM<LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass, LogikalLabour>
-    {
-        public IEnumerable<LogikalFinish> Finishes { get; set; }
-        public IEnumerable<LogikalProfile> Profiles { get; set; }
-        public IEnumerable<LogikalGasket> Gaskets { get; set; }
-        public IEnumerable<LogikalComponent> Components { get; set; }
-        public IEnumerable<LogikalGlass> Glass { get; set; }
-        public IEnumerable<LogikalLabour> Labour { get; set; }
-        public byte[] ExcelData { get; set; }
-        public byte[] SQLiteData { get; set; }
-    }
 }

+ 10 - 0
prs.logikal/Classes/LogikalProductGroup.cs

@@ -0,0 +1,10 @@
+using InABox.Integration.Logikal;
+
+namespace PRSLogikal
+{
+    public class LogikalProductGroup : ILogikalProductGroup
+    {
+        public string Code { get; set; }
+        public string Description { get; set; }
+    }
+}

+ 2 - 0
prs.logikal/PRSLogikal.csproj

@@ -77,6 +77,7 @@
       <DependentUpon>App.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Classes\LogikalBOM.cs" />
     <Compile Include="Classes\LogikalComponent.cs" />
     <Compile Include="Classes\LogikalElevationSummary.cs" />
     <Compile Include="Classes\LogikalElevationDetail.cs" />
@@ -84,6 +85,7 @@
     <Compile Include="Classes\LogikalGasket.cs" />
     <Compile Include="Classes\LogikalGlass.cs" />
     <Compile Include="Classes\LogikalLabour.cs" />
+    <Compile Include="Classes\LogikalProductGroup.cs" />
     <Compile Include="Classes\LogikalProfile.cs" />
     <Compile Include="Classes\LogikalPhase.cs" />
     <Compile Include="Classes\LogikalProject.cs" />