| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 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;
- }
- }
|