| 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.Provider.Query<RequisitionItem>(            new Filter<RequisitionItem>(x => x.Done).IsEqualTo(false).And(x => x.Picked).IsNotEqualTo(DateTime.MinValue),            new Columns<RequisitionItem>(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.Provider.Save(requiItems);    }    private static void UpdateUndeliveredItems()    {        var requisitions = DbFactory.Provider.Query(            new Filter<Requisition>(x => x.TakenBy.ID).IsNotEqualTo(Guid.Empty),            new Columns<Requisition>(x => x.ID).Add(x => x.Filled))            .ToObjects<Requisition>()            .ToDictionary(x => x.ID, x => x);        var requiIDs = requisitions.Keys.ToArray();        var deliveryItems = DbFactory.Provider.Query(            new Filter<DeliveryItem>(x => x.DeliveredDate).IsEqualTo(DateTime.MinValue)                .And(x => x.RequisitionLink.ID).InList(requiIDs),            new Columns<DeliveryItem>(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.Provider.Save(deliveryItems);        Logger.Send(LogType.Information, "", $"Updated DeliveryItem.DeliveredDate = Requisition.Filled");    }    private static void PopulateManufacturingPacketStageDescription()    {        var table = DbFactory.Provider.Query(            new Filter<ManufacturingPacketStage>(x => x.Description).IsEqualTo(null),            new Columns<ManufacturingPacketStage>(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.Provider.Save(mpStages);        }        Logger.Send(LogType.Information, "", $"Done populating Description!");    }    public override bool Update()    {        PopulateDone();        UpdateUndeliveredItems();        PopulateManufacturingPacketStageDescription();        return true;    }}
 |