1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using Comal.Classes;
- using InABox.Core;
- using InABox.Database;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace PRS.Shared.Database_Update_Scripts;
- public class Update_8_02 : DatabaseUpdateScript
- {
- public override VersionNumber Version => new(8, 2);
- private static void PopulateDone()
- {
- var requiItems = DbFactory.NewProvider(Logger.Main).Query<RequisitionItem>(
- new Filter<RequisitionItem>(x => x.Done).IsEqualTo(false).And(x => x.Picked).IsNotEqualTo(DateTime.MinValue),
- Columns.None<RequisitionItem>().Add(x => x.ID).Add(x => x.Picked).Add(x => x.Done))
- .ToList<RequisitionItem>();
- Logger.Send(LogType.Information, "", $"Populating Done flag for {requiItems.Count} RequisitionItems");
- foreach(var item in requiItems)
- {
- item.Done = item.Picked != DateTime.MinValue;
- }
- Logger.Send(LogType.Information, "", $"Done populating Done flag!");
- DbFactory.NewProvider(Logger.Main).Save(requiItems);
- }
- private static void UpdateUndeliveredItems()
- {
- var requisitions = DbFactory.NewProvider(Logger.Main).Query(
- new Filter<Requisition>(x => x.TakenBy.ID).IsNotEqualTo(Guid.Empty),
- Columns.None<Requisition>().Add(x => x.ID).Add(x => x.Filled))
- .ToObjects<Requisition>()
- .ToDictionary(x => x.ID, x => x);
- var requiIDs = requisitions.Keys.ToArray();
- var deliveryItems = DbFactory.NewProvider(Logger.Main).Query(
- new Filter<DeliveryItem>(x => x.DeliveredDate).IsEqualTo(DateTime.MinValue)
- .And(x => x.RequisitionLink.ID).InList(requiIDs),
- Columns.None<DeliveryItem>().Add(x => x.ID)
- .Add(x => x.RequisitionLink.ID))
- .ToArray<DeliveryItem>();
- Logger.Send(LogType.Information, "", $"Found {deliveryItems.Length} undelivered DeliveryItems linked to Taken requisitions.");
- foreach(var item in deliveryItems)
- {
- if(requisitions.TryGetValue(item.RequisitionLink.ID, out var requi))
- {
- item.DeliveredDate = requi.Filled;
- }
- }
- DbFactory.NewProvider(Logger.Main).Save(deliveryItems);
- Logger.Send(LogType.Information, "", $"Updated DeliveryItem.DeliveredDate = Requisition.Filled");
- }
- private static void PopulateManufacturingPacketStageDescription()
- {
- var table = DbFactory.NewProvider(Logger.Main).Query(
- new Filter<ManufacturingPacketStage>(x => x.Description).IsEqualTo(null),
- Columns.None<ManufacturingPacketStage>().Add(x => x.ID)
- .Add(x => x.Form.Description));
- Logger.Send(LogType.Information, "", $"Populating Description for {table.Rows.Count} ManufacturingPacketStages");
- for(int i = 0; i < table.Rows.Count; i += 1000)
- {
- Logger.Send(LogType.Information, "", $"{(double)i / (double)table.Rows.Count * 100.0:F2}%");
- var mpStages = new List<ManufacturingPacketStage>(1000);
- for(int j = i; j < Math.Min(i + 1000, table.Rows.Count); j++)
- {
- mpStages.Add(table.Rows[j].ToObject<ManufacturingPacketStage>());
- }
- foreach(var stage in mpStages)
- {
- stage.Description = stage.Form.Description;
- }
- DbFactory.NewProvider(Logger.Main).Save(mpStages);
- }
- Logger.Send(LogType.Information, "", $"Done populating Description!");
- }
- public override bool Update()
- {
- PopulateDone();
- UpdateUndeliveredItems();
- PopulateManufacturingPacketStageDescription();
- return true;
- }
- }
|