Explorar el Código

Re-added EntityForm AutoIncrement Formats
Added DatabaseUpdateScript for 7.19 to populate Form Numbers

frogsoftware hace 2 años
padre
commit
71ebcfa1e9

+ 1 - 0
prs.classes/Entities/Assignment/AssignmentForm.cs

@@ -6,5 +6,6 @@ namespace Comal.Classes
     [UserTracking("Digital Forms")]
     public class AssignmentForm : EntityForm<Assignment, AssignmentLink>
     {
+        public override string AutoIncrementFormat() => "A-{0:D6}";
     }
 }

+ 1 - 0
prs.classes/Entities/Employee/EmployeeForm.cs

@@ -5,6 +5,7 @@ namespace Comal.Classes
 {
     public class EmployeeForm : EntityForm<Employee, EmployeeLink>, IDigitalForm<Employee>
     {
+        public override string AutoIncrementFormat() => "E-{0:D6}";
     }
 
     public class EmployeeFormLookups : ILookupDefinition<DigitalForm, EmployeeForm>, ILookupDefinition<DigitalForm, Employee>

+ 1 - 0
prs.classes/Entities/Job/ITP/JobITPForm.cs

@@ -5,6 +5,7 @@ namespace Comal.Classes
 {
     public class JobITPForm : EntityForm<JobITP, JobITPLink>, IDigitalForm<JobITP>, ILicense<ProjectManagementLicense>
     {
+        public override string AutoIncrementFormat() => "I-{0:D6}";
     }
 
     public class JobITPFormLookups : ILookupDefinition<DigitalForm, JobITP>, ILookupDefinition<DigitalForm, JobITPForm>

+ 1 - 0
prs.classes/Entities/Job/JobForm.cs

@@ -4,5 +4,6 @@ namespace Comal.Classes
 {
     public class JobForm : EntityForm<Job, JobLink>, IDigitalForm<Job>, ILicense<ProjectManagementLicense>
     {
+        public override string AutoIncrementFormat() => "J-{0:D6}";
     }
 }

+ 1 - 0
prs.classes/Entities/Kanban/KanbanForm.cs

@@ -4,5 +4,6 @@ namespace Comal.Classes
 {
     public class KanbanForm : EntityForm<Kanban, KanbanLink>, ILicense<TaskManagementLicense>
     {
+        public override string AutoIncrementFormat() => "K-{0:D6}";
     }
 }

+ 1 - 0
prs.classes/Entities/LeaveRequest/LeaveRequestForm.cs

@@ -5,5 +5,6 @@ namespace Comal.Classes
     [Caption("Digital Forms")]
     public class LeaveRequestForm : EntityForm<LeaveRequest, LeaveRequestLink>, ILicense<LeaveManagementLicense>
     {
+        public override string AutoIncrementFormat() => "L-{0:D6}";
     }
 }

+ 1 - 0
prs.classes/Entities/PurchaseOrder/PurchaseOrderItemForm.cs

@@ -4,6 +4,7 @@ namespace Comal.Classes
 {
     public class PurchaseOrderItemForm : EntityForm<PurchaseOrderItem, PurchaseOrderItemLink>, IDigitalForm<PurchaseOrderItem>
     {
+        public override string AutoIncrementFormat() => "O-{0:D6}";
     }
 
     public class PurchaseOrderItemFormLookups : ILookupDefinition<DigitalForm, PurchaseOrderItemForm>

+ 1 - 0
prs.classes/Entities/Timesheet/TimeSheetForm.cs

@@ -4,5 +4,6 @@ namespace Comal.Classes
 {
     public class TimeSheetForm : EntityForm<TimeSheet, TimeSheetLink>
     {
+        public override string AutoIncrementFormat() => "T-{0:D6}";
     }
 }

+ 53 - 0
prs.shared/DatabaseUpdateScripts.cs

@@ -3,6 +3,7 @@ using InABox.Core;
 using InABox.Database;
 using System;
 using System.Collections.Generic;
+using System.Configuration.Provider;
 using System.Linq;
 using System.Linq.Expressions;
 using System.Text;
@@ -10,6 +11,7 @@ using System.Threading.Tasks;
 using Syncfusion.Windows.Tools.Controls;
 using System.Diagnostics.CodeAnalysis;
 using System.Reflection;
+using System.Text.RegularExpressions;
 using FastReport.Utils;
 
 namespace PRS.Shared
@@ -26,6 +28,7 @@ namespace PRS.Shared
             DataUpdater.RegisterUpdateScript("7.00", Update_7_00);
             DataUpdater.RegisterUpdateScript("7.06", Update_7_06);
             DataUpdater.RegisterUpdateScript("7.14", Update_7_14);
+            DataUpdater.RegisterUpdateScript("7.19", Update_7_19);
         }
 
         private static Dictionary<string, Tuple<string, string>> _6_31_module_map = new()
@@ -570,5 +573,55 @@ namespace PRS.Shared
 
             return true;
         }
+
+        /// <summary>
+        /// Trigger the calculation of Digital Form Numbers
+        /// </summary>
+        /// <returns>true (always)</returns>
+        private static bool Update_7_19()
+        {
+            // Find all classes that derive from EntityForm
+            var formtypes = CoreUtils.TypeList(
+                new[]
+                {
+                    typeof(Setout).Assembly
+                },
+                myType =>
+                    myType is { IsClass: true, IsAbstract: false, IsGenericType: false } 
+                    && myType.IsSubclassOf(typeof(Entity)) 
+                    && myType.GetInterfaces().Contains(typeof(IEntityForm))
+            ).ToArray();
+            
+            foreach (var formtype in formtypes)
+            {
+                var columns = Columns.Create(formtype).Add("ID").Add("Number");
+                var forms = DbFactory.Provider.Query(formtype, null, columns);
+                var nullforms = forms.Rows
+                    .Where(r => String.IsNullOrWhiteSpace(r.Get<String>("Number")))
+                    .Select(r=>r.ToObject(formtype))
+                    .OfType<Entity>()
+                    .ToArray();
+
+                if (!nullforms.Any()) 
+                    continue;
+
+                var maxvalue = forms.Rows.Select(r => Regex.Match(r.Get<String>("Number") ?? "", @"(?<=-)\d+")?.Value ?? "0")
+                    .MaxBy(x => x) ?? "0";
+                int.TryParse(maxvalue, out int iNumber);
+
+                String format = null;
+                foreach (var form in nullforms)
+                {
+                    format ??= (form as IStringAutoIncrement)?.AutoIncrementFormat() ?? "{0:D8}";
+                    iNumber++;
+                    CoreUtils.SetPropertyValue(form, "Number", String.Format(format, iNumber));
+                }
+
+                DbFactory.Provider.Save(formtype, nullforms);
+
+            }
+            return true;
+        }
+        
     }
 }

+ 0 - 1
prs.shared/PRS.Shared.csproj

@@ -39,7 +39,6 @@
   </ItemGroup>
 
   <ItemGroup>
-    <Folder Include="Email\" />
     <Folder Include="Resources\" />
   </ItemGroup>