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; internal class Update_8_49 : DatabaseUpdateScript { public override VersionNumber Version => new(8, 49); public override bool Update() { MigrateBillApprovals(); return true; } private void MigrateBillApprovals() { var _provider = DbFactory.NewProvider(Logger.Main); Logger.Send(LogType.Information, "", $"Migrating Bill Approvals..."); var _approvals = _provider.Query( new Filter().All(), Columns.Local().Add("Approved") ).ToArray() .ToArray(); Utils.Utils.ProcessInChunks( _approvals, chunk => { foreach(var _approval in chunk) { var _date = (DateTime)(CoreUtils.GetPropertyValue(_approval,"Approved") ?? DateTime.MinValue); _approval.Status = _date.IsEmpty() ? BillApprovalStatus.NotYetApproved : BillApprovalStatus.Approved; } _provider.Save(chunk.Where(x => x.IsChanged())); }, 100, percent => Logger.Send(LogType.Information, "", $"Migrating Bill Approvals: {percent:F2}%") ); Logger.Send(LogType.Information, "", $"Updating Bill Statuses..."); var _bills = _provider.Query( new Filter().All(), Columns.Required().Add(x=>x.ApprovalStatus) ).ToArray(); Utils.Utils.ProcessInChunks( _bills, chunk => { foreach (var _bill in chunk) { var _statuses = _approvals .Where(x => x.Bill.ID == _bill.ID) .Select(x => x.Status) .Distinct() .ToArray(); _bill.ApprovalStatus = Bill.CalculateApprovalStatus(_statuses); } _provider.Save(chunk.Where(x => x.IsChanged())); }, 100, percent => Logger.Send(LogType.Information, "", $"Migrating Bill Statuses: {percent:F2}%") ); Logger.Send(LogType.Information, "", $"Migrating Bill Statuses complete"); } }