Bläddra i källkod

Renamed ManufacturingSection.QAForm and ManufacturingTemplateStage.QAForm into DigitalForm

Kenric Nugteren 4 dagar sedan
förälder
incheckning
9cf6d393d0

+ 1 - 1
prs.classes/Entities/Employee/EmployeeFormSubscription.cs

@@ -7,6 +7,6 @@ namespace Comal.Classes
     {
         public EmployeeLink Employee { get; set; }
 
-        public QAFormLink Form { get; set; }
+        public DigitalFormLink Form { get; set; }
     }
 }

+ 6 - 1
prs.classes/Entities/Manufacturing/ManufacturingFactory/ManufacturingSection.cs

@@ -1,4 +1,5 @@
 using InABox.Core;
+using System;
 
 namespace Comal.Classes
 {
@@ -29,9 +30,13 @@ namespace Comal.Classes
         [NullEditor]
         public string QualityChecks { get; set; }
 
-        [EditorSequence(6)]
+        [NullEditor]
+        [Obsolete("Replaced by DigitalForm")]
         public QAFormLink QAForm { get; set; }
 
+        [EditorSequence(6)]
+        public DigitalFormLink DigitalForm { get; set; }
+
         [Comment("Type of Document to show on Factory Floor, pulled from the Products on the ManufacturingPacket Components")]
         [EditorSequence(7)]
         public DocumentTypeLink ProductDocumentType { get; set; }

+ 4 - 1
prs.classes/Entities/Manufacturing/ManufacturingTemplate/ManufacturingTemplateStage.cs

@@ -26,9 +26,12 @@ namespace Comal.Classes
         [EnumLookupEditor(typeof(SequenceType))]
         public SequenceType SequenceType { get; set; } = SequenceType.Link;
 
-        [EditorSequence(4)]
+        [Obsolete("Replaced by DigitalForm")]
         public QAFormLink QAForm { get; set; }
 
+        [EditorSequence(4)]
+        public DigitalFormLink DigitalForm { get; set; }
+
         [NullEditor]
         public string QualityChecks { get; set; }
 

+ 10 - 10
prs.desktop/Panels/Factory/FactoryPanel.xaml.cs

@@ -121,8 +121,8 @@ namespace PRSDesktop
                     .Add(x => x.Activity.ID)
                     .Add(x => x.Factory.Name)
                     .Add(x => x.ProductDocumentType.ID)
-                    .Add(x => x.QAForm.ID)
-                    .Add(x => x.QAForm.Description),
+                    .Add(x => x.DigitalForm.ID)
+                    .Add(x => x.DigitalForm.Description),
                 new SortOrder<ManufacturingSection>(x => x.Factory.Sequence).ThenBy(x => x.Sequence));
 
             setups.Add<ManufacturingTrolley>(
@@ -1195,7 +1195,7 @@ namespace PRSDesktop
                     stage.Completed = DateTime.Now;
                     if(stage.Form.ID == Guid.Empty)
                     {
-                        stage.Form.ID = CurrentSection.QAForm.ID;
+                        stage.Form.ID = CurrentSection.DigitalForm.ID;
                     }
                     if(stage.Form.ID != Guid.Empty)
                     {
@@ -2219,7 +2219,7 @@ namespace PRSDesktop
 
             Questions ??=
                 Client.Query(
-                    Filter<QAQuestion>.Where(x => x.QAForm.Active).IsEqualTo(true),
+                    Filter<QAQuestion>.Where(x => x.Form.Active).IsEqualTo(true),
                     Columns.None<QAQuestion>())
                 .ToArray<QAQuestion>();
 
@@ -2229,7 +2229,7 @@ namespace PRSDesktop
                     Columns.None<ManufacturingTemplateStage>()
                         .Add(x => x.Template.ID)
                         .Add(x => x.Section.ID)
-                        .Add(x => x.QAForm.ID))
+                        .Add(x => x.DigitalForm.ID))
                 .ToArray<ManufacturingTemplateStage>();
             var tstage = TemplateStages.FirstOrDefault(x =>
                 x.Template.ID == packet.ManufacturingTemplateLink.ID
@@ -2241,18 +2241,18 @@ namespace PRSDesktop
                     return [];
                 if (section)
                 {
-                    return Questions.Where(x => x.QAForm.ID == CurrentSection.QAForm.ID || x.QAForm.ID == tstage.QAForm.ID);
+                    return Questions.Where(x => x.Form.ID == CurrentSection.DigitalForm.ID || x.Form.ID == tstage.DigitalForm.ID);
                 }
                 else
                 {
-                    return Questions.Where(x => x.QAForm.ID == tstage.QAForm.ID);
+                    return Questions.Where(x => x.Form.ID == tstage.DigitalForm.ID);
                 }
             }
             else
             {
                 if (section)
                 {
-                    return Questions.Where(x => x.QAForm.ID == CurrentSection.QAForm.ID);
+                    return Questions.Where(x => x.Form.ID == CurrentSection.DigitalForm.ID);
                 }
                 else
                 {
@@ -2276,9 +2276,9 @@ namespace PRSDesktop
                 var stage = GetPacketStage(ck.PacketID);
                 if (stage is not null)
                 {
-                    stage.Form.ID = CurrentSection.QAForm.ID;
+                    stage.Form.ID = CurrentSection.DigitalForm.ID;
                     stage.FormData = Serialization.Serialize(values);
-                    stage.Description = CurrentSection.QAForm.Description;
+                    stage.Description = CurrentSection.DigitalForm.Description;
                     updates.Add(stage);
                 }
             }

+ 105 - 0
prs.shared/Database Update Scripts/Update_8_58.cs

@@ -0,0 +1,105 @@
+using Comal.Classes;
+using InABox.Core;
+using InABox.Database;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PRS.Shared.Database_Update_Scripts;
+
+internal class Update_8_58 : DatabaseUpdateScript
+{
+    public override VersionNumber Version => new(8, 58);
+
+    private static void UpdateTimeSheets(IProvider provider)
+    {
+        Logger.Send(LogType.Information, "", $"Migrating TimeSheet.Processed -> TimeSheet.Posted");
+
+        var timeSheets = provider.Query(
+            Filter<TimeSheet>.Where(x => x.Processed).IsNotEqualTo(DateTime.MinValue)
+                .And(x => x.Posted).IsEqualTo(DateTime.MinValue),
+            Columns.None<TimeSheet>()
+                .Add(x => x.ID)
+                .Add(x => x.Processed)
+                .Add(x => x.Posted))
+            .ToArray<TimeSheet>();
+        Logger.Send(LogType.Information, "", $"Migrating TimeSheet.Processed -> TimeSheet.Posted: {timeSheets.Length} items");
+        Utils.Utils.ProcessInChunks(
+            timeSheets,
+            chunk =>
+            {
+                foreach (var timeSheet in chunk)
+                {
+                    timeSheet.Posted = timeSheet.Processed;
+                }
+                provider.Save(chunk);
+            },
+            200,
+            percentage => Logger.Send(LogType.Information, "", $"Migrating TimeSheet.Processed: {percentage:F2}%");
+    }
+
+    private static void ConvertLink<T, TFromLink, TToLink>(IProvider provider, Expression<Func<T, TFromLink>> fromLink, Expression<Func<T, TToLink>> toLink)
+        where T : Entity, new()
+        where TFromLink : IEntityLink
+        where TToLink : IEntityLink
+    {
+        var fromColumn = Column<T>.SubColumn(fromLink, new Column<TFromLink>(x => x.ID));
+        var toColumn = Column<T>.SubColumn(toLink, new Column<TToLink>(x => x.ID));
+
+        Logger.Send(LogType.Information, "", $"Migrating {typeof(T).Name}.{fromColumn.Property} -> {typeof(T).Name}.{toColumn.Property}");
+
+        var items = provider.Query(
+            Filter<T>.Where<Guid>(fromColumn).IsNotEqualTo(Guid.Empty)
+                .And<Guid>(toColumn).IsEqualTo(Guid.Empty),
+            Columns.None<T>()
+                .Add(x => x.ID)
+                .Add(fromColumn)
+                .Add(toColumn))
+            .ToArray<T>();
+        Logger.Send(LogType.Information, "", $"Migrating {typeof(T).Name}.{fromColumn.Property} -> {typeof(T).Name}.{toColumn.Property}: {items.Length} items");
+
+        Utils.Utils.ProcessInChunks(
+            items,
+            chunk =>
+            {
+                foreach (var item in chunk)
+                {
+                    toColumn.PropertyDefinition.Setter()(
+                        item,
+                        fromColumn.PropertyDefinition.Getter()(item));
+                }
+                provider.Save(chunk);
+            },
+            200,
+            percentage => Logger.Send(LogType.Information, "", $"Migrating {typeof(T).Name}.{fromColumn.Property}: {percentage:F2}%"));
+    }
+    private static void ConvertLink<T, TLink>(IProvider provider, Expression<Func<T, TLink>> fromLink, Expression<Func<T, TLink>> toLink)
+        where T : Entity, new()
+        where TLink : IEntityLink
+    {
+        ConvertLink<T, TLink, TLink>(provider, fromLink, toLink);
+    }
+
+    public override bool Update()
+    {
+        var provider = DbFactory.NewProvider(Logger.Main);
+
+        UpdateTimeSheets(provider);
+
+        ConvertLink<Assignment, JobLink>(provider, x => x.JobLink, x => x.Job);
+        ConvertLink<EquipmentAssignment, JobLink>(provider, x => x.JobLink, x => x.Job);
+        ConvertLink<Kanban, JobLink>(provider, x => x.JobLink, x => x.Job);
+        ConvertLink<Requisition, JobLink>(provider, x => x.JobLink, x => x.Job);
+        ConvertLink<RequisitionItem, JobLink>(provider, x => x.JobLink, x => x.Job);
+        ConvertLink<Setout, JobLink>(provider, x => x.JobLink, x => x.Job);
+        ConvertLink<JobBillOfMaterialsActivity, JobLink>(provider, x => x.JobLink, x => x.Job);
+
+        ConvertLink<ManufacturingSection, QAFormLink, DigitalFormLink>(provider, x => x.QAForm, x => x.DigitalForm);
+        ConvertLink<ManufacturingTemplateStage, QAFormLink, DigitalFormLink>(provider, x => x.QAForm, x => x.DigitalForm);
+
+        return true;
+    }
+}