12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using Comal.Classes;
- using InABox.Core;
- using InABox.Database;
- namespace PRS.Shared;
- public class Update_7_37 : DatabaseUpdateScript
- {
- public override VersionNumber Version => new VersionNumber(7, 37);
-
- public override bool Update()
- {
- UpdateDigitalFormFlags();
- UpdateJobLeads();
- return true;
- }
- private void UpdateDigitalFormFlags()
- {
-
- // 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 filter = Filter.Create(formtype, "Processed").IsEqualTo(true)
- .And("FormProcessed").IsEqualTo(DateTime.MinValue);
- var columns = Columns.None(formtype)
- .Add("ID")
- .Add("Processed")
- .Add("FormProcessed")
- .Add("LastUpdate");
- var forms = DbFactory.NewProvider(Logger.Main).Query(formtype, filter, columns)
- .Rows
- .Select(r => r.ToObject(formtype))
- .OfType<Entity>()
- .ToArray();
- if (!forms.Any())
- continue;
-
- foreach (var form in forms)
- {
- var lastupdate = CoreUtils.GetPropertyValue(form, "LastUpdate");
- CoreUtils.SetPropertyValue(form,"FormProcessed", lastupdate);
- CoreUtils.SetPropertyValue(form,"Processed", false);
- }
- DbFactory.NewProvider(Logger.Main).Save(formtype, forms);
- Logger.Send(LogType.Information, "", $"{forms.Length} {formtype.Name}s processed");
- }
- }
- private static void UpdateJobLeads()
- {
- List<Job> jobs;
- IColumns columns = Columns.None<Job>().Add(x => x.ID)
- .Add(x => x.ProjectLead.ID)
- .Add(x => x.SiteLead.ID)
- .Add("ManagerLink.ID")
- .Add("EmployeeLink.ID");
- jobs = DbFactory.NewProvider(Logger.Main).Query(
- typeof(Job),
- null,
- columns
- ).ToObjects<Job>().ToList();
- foreach (var item in jobs)
- {
- item.ProjectLead.ID = CoreUtils.GetPropertyValue(item, "ManagerLink.ID") is Guid _mgr ? _mgr : Guid.Empty;
- CoreUtils.SetPropertyValue(jobs, "ManagerLink.ID", Guid.Empty);
- item.SiteLead.ID = CoreUtils.GetPropertyValue(item, "EmployeeLink.ID") is Guid _emp ? _emp : Guid.Empty;
- CoreUtils.SetPropertyValue(jobs, "EmployeeLink.ID", Guid.Empty);
- }
- var updates = jobs.Where(x => x.IsChanged()).ToArray();
- if (updates.Any())
- DbFactory.NewProvider(Logger.Main).Save(updates);
- Logger.Send(LogType.Information, "", $"{jobs.Count} {typeof(Job).Name}s processed");
- }
- }
|