using System; using System.Collections.Generic; using System.Linq; using LCU.API.Collections.RepoApi.Domain.Extensions; using LCU.API.Collections.RepoApi.Domain.Processing; using LCU.API.Collections.RepoApi.Extensions; using LCU.Shared.Collections.RepoApiLib.Models; namespace LCU.API.Collections.RepoApi.Domain.AlertChecker { public class AuctionVinDifferentChecker : IAlertChecker { public List CheckForAlert(RepoAccountProcessingSlip slip) { var newEventAlerts = new List(); var repoManagerVins = slip.UpdatedRepoAccount.GetCollateralVinList(); foreach (var auctionAssignment in slip.AuctionAssignments) { if (auctionAssignment?.AutoIMS?.VIN != null && !repoManagerVins.Contains(auctionAssignment.AutoIMS.VIN.Trim().ToUpper())) { newEventAlerts.Add( new EventAlert() { RepoId = slip.UpdatedRepoAccount.RepoId, AccountNo = slip.UpdatedRepoAccount.AccountNo, Message = "Auction VIN Different", SubMessage = FormatSubMessage(auctionAssignment.AutoIMS.VIN.Trim().ToUpper(), repoManagerVins), CreatedBy = "Batch", DateAdded = DateTime.Now } ); } } return newEventAlerts.Count > 0 ? newEventAlerts : null; } private static string FormatSubMessage(string auctionAssignmentVin, IReadOnlyCollection vins) { if (vins.Count() == 1) { return $"Auction Assignment VIN: {auctionAssignmentVin} differs from RepoManager VIN: {vins.First()}"; } var repoVins = vins.Aggregate((x, y) => x + ", " + y); return $"Auction Assignment VIN: {auctionAssignmentVin} is not among RepoManager VINs: {repoVins}"; } } }