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 RepoNotMovedChecker : IAlertChecker { private readonly int _dayCount; private const string RepoStatus = "REPO"; private const int DaysBeforeSendEmail = 14; private const string EmailDestination = "RepoManagerAdmin@landmarkcu.com"; public RepoNotMovedChecker(int dayCount = 30) { _dayCount = dayCount; } public List CheckForAlert(RepoAccountProcessingSlip slip) { var daysInStatus = slip.UpdatedRepoAccount.GetDaysInStatus(RepoStatus); if (slip.UpdatedRepoAccount.Status.ToUpper() != RepoStatus || slip.UpdatedRepoAccount.Collaterals == null || !slip.UpdatedRepoAccount.Collaterals.Any() || daysInStatus < _dayCount) { return null; } foreach (var collateral in slip.UpdatedRepoAccount.Collaterals) { if (collateral.AuctionAssignmentToCollaterals != null && collateral.AuctionAssignmentToCollaterals.Any()) { var assignment = collateral.AuctionAssignmentToCollaterals .Where(x => x.AuctionAssignment != null && x.AuctionAssignment.DateSubmitted == null) .ToList(); if (assignment.Any() && daysInStatus >= _dayCount) { return new List { new EventAlert() { RepoId = slip.UpdatedRepoAccount.RepoId, AccountNo = slip.UpdatedRepoAccount.AccountNo, Message = "Repo Not Moved", CreatedBy = "Batch", DateAdded = DateTime.Now, EmailRecipient = daysInStatus == DaysBeforeSendEmail ? EmailDestination : null, EmailBody = daysInStatus == DaysBeforeSendEmail ? string.Format("{0} Account status REPO, Not Moved for extended time.", slip.UpdatedRepoAccount.AccountNo) : null } }; } } } return null; } } }