using System.Linq; using LCU.API.Collections.CollectionsApiLib.Models; namespace LCU.API.Collections.RepoApi.Domain.Extensions { public static class TemenosAccountExtensions { public const string UserStatusFieldOld = "User Status Code 1"; public const int OpenCaseStatus = 33; public const int CaseTypeRepossession = 7; public static bool HasOldIntellectStatus(this TemenosAccount recoveryAccount) { return recoveryAccount?.CustomFieldMap != null && recoveryAccount.CustomFieldMap.ContainsKey(UserStatusFieldOld) && !string.IsNullOrWhiteSpace(recoveryAccount.CustomFieldMap[UserStatusFieldOld]); } /** * CaseId of 0 corresponds to "An open case with a valid RepoStatus" */ public static bool HasRecoveryCase(this TemenosAccount recoveryAccount, int caseId) { if (recoveryAccount?.Cases == null || !recoveryAccount.Cases.Any()) { return false; } return caseId == 0 ? recoveryAccount.HasOpenRecoveryCase() : recoveryAccount.HasSpecificCase(caseId); } public static bool HasOpenRecoveryCase(this TemenosAccount recoveryAccount) { TemenosCase selectedCase = null; if (recoveryAccount?.Cases == null || !recoveryAccount.Cases.Any()) { return false; } selectedCase = recoveryAccount.Cases .FirstOrDefault(x => x.CaseStatusId == OpenCaseStatus && x.RepoStatus != RepoStatus.UNKNOWN); return (selectedCase != null); } public static bool HasSpecificCase(this TemenosAccount recoveryAccount, int caseId) { TemenosCase selectedCase = null; if (recoveryAccount?.Cases == null || !recoveryAccount.Cases.Any()) { return false; } selectedCase = recoveryAccount.Cases.FirstOrDefault(x => x.CaseId == caseId); return (selectedCase != null); } public static TemenosCase FindRecoveryCaseOrDefault(this TemenosAccount recoveryAccount, int caseId) { TemenosCase selectedCase = null; if (recoveryAccount?.Cases == null || !recoveryAccount.Cases.Any()) { return null; } if (caseId > 0) { selectedCase = recoveryAccount.Cases.FirstOrDefault(x => x.CaseId == caseId); } else { selectedCase = recoveryAccount.Cases .Where(x => x.CaseStatusId == OpenCaseStatus && x.RepoStatus != RepoStatus.UNKNOWN && x.CaseTypeId == CaseTypeRepossession && x.RepoStatus != RepoStatus.INELIGIBLE) .OrderByDescending(x => x.CreatedDate).FirstOrDefault(); } return selectedCase; } } }