using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using LCU.API.Collections.RepoApi.Domain.Processing; using LCU.Shared.Collections.RepoApiLib.Models; using LCU.Shared.Collections.RepoApiLib.Models.Consumer; namespace LCU.API.Collections.RepoApi.Domain.AlertChecker { public class PaymentReceivedChecker : TransactionHistoryChecker { private readonly List _watchedStatuses = new List { "O4R", "REPO", "SOLD" }; private readonly List _watchedTransactionTypes = new List { "COFR", "POFF", "EXT", "SPMT", "XPMT" }; private const string EmailDestination = "RepoManagerCreditDebits@landmarkcu.com"; public override List CheckForAlert(RepoAccountProcessingSlip slip) { var newEventAlerts = new List(); var results = GetRecentTransactionsFromType(_watchedTransactionTypes, slip.TransactionHistory); if (results != null && _watchedStatuses.Contains(slip.UpdatedRepoAccount.Status)) { var dueDate = slip.Loan?.NextDueDate.ToString(CultureInfo.CurrentCulture) ?? "Unknown"; foreach (var result in results) { newEventAlerts.Add(new EventAlert() { RepoId = slip.UpdatedRepoAccount.RepoId, AccountNo = slip.UpdatedRepoAccount.AccountNo, Message = "Payment Received", SubMessage = FormatTransactionMessage(result), CreatedBy = "Batch", DateAdded = DateTime.Now, EmailRecipient = EmailDestination, EmailBody = CreateEmailBody(slip.UpdatedRepoAccount, result, dueDate) }); } } return newEventAlerts.Count > 0 ? newEventAlerts : null; } private string CreateEmailBody(RepoAccount repoAccount, CoreTransaction coreTransaction, string nextDueDate) { var message = "Loan Payment

"; var member = repoAccount.Borrowers?.First(b => b.OwnershipType == 6); var memberName = "Member Name: " + member?.IndividualName + "
"; var accountNo = "Account No: " + repoAccount.AccountNo + "
"; var paymentAmount = "Payment Amount: " + coreTransaction.amount + "
"; var nextDueDateString = "Next Due Date: " + nextDueDate + "
"; var loanBalance = "Loan Balance: " + coreTransaction.runningBalance + "
"; return string.Concat(message, memberName, accountNo, paymentAmount, nextDueDateString, loanBalance); } } }