using Landmark.OLA.Models.Loan.Enums; namespace Landmark.OLA.Models.Loan { public static class LoanPurpose { //Acceptable values taken from CRIF database /* select p.shortname, p.name, p.productid, lp.name, lp.[description], lp.loanpurposeid, lp.isactivefl from v_RptProduct_v001 as p inner join v_RptProductLoanPurpose_v001 as plp on plp.productid = p.productid inner join v_RptLoanPurpose_v001 as lp on lp.loanpurposeid = plp.loanpurposeid order by p.productid */ private static readonly List _ccPurposes = new List { Purpose.Other, Purpose.Consolidation, Purpose.Reestablish_Credit}; private static readonly List _eqPurposes = new List { Purpose.Home_Improvement, Purpose.Home_Purchase, Purpose.Home_Refinance, Purpose.Other, Purpose.Cash_Out_Refinance }; private static readonly List _mfgHomePurposes = new List { Purpose.Home_Improvement, Purpose.Purchase_Manufactured_Home, Purpose.Home_Refinance, Purpose.Other, Purpose.Cash_Out_Refinance }; private static readonly List _vPurposes = new List { Purpose.Purchase, Purpose.Cash_Out_Refinance, Purpose.Refinance_Vehicle }; private static readonly List _mPurposes = new List { Purpose.Purchase, Purpose.Refinance_Vehicle }; private static readonly List _pPurposes = new List { Purpose.Purchase, Purpose.Refinance_Vehicle }; private static readonly List _tPurposes = new List { Purpose.Purchase, Purpose.Refinance_Vehicle }; private static readonly List _sPurposes = new List { Purpose.Other, Purpose.Consolidation}; public static Dictionary> TypePurposes => new Dictionary> { { LoanType.CC_CashBack, _ccPurposes }, { LoanType.CC_Rewards, _ccPurposes }, { LoanType.CC_Student, _ccPurposes }, { LoanType.CC_Secure, _ccPurposes }, { LoanType.EQ_HELOC_Flex, _eqPurposes }, { LoanType.EQ_Mtg_Refi_Express, _eqPurposes }, { LoanType.EQ_Home_Equity_Fixed, _eqPurposes }, { LoanType.EQ_Mfg_Home_With_or_Without_Land, _mfgHomePurposes }, { LoanType.V_Vehicle, _vPurposes }, { LoanType.V_VehiclePreapproval, _vPurposes }, { LoanType.M_Boat, _mPurposes }, { LoanType.P_Powersport, _pPurposes }, { LoanType.T_TrailerMotorhome, _tPurposes }, { LoanType.S_Signature, _sPurposes }, { LoanType.S_Special, _sPurposes }, }; public static bool IsValidPurposeForType(LoanType? type, Purpose? purpose) { if (!type.HasValue) throw new ArgumentException("LoanType cannot be null"); if (!purpose.HasValue) throw new ArgumentException("Purpose cannot be null"); return IsValidPurposeForType(type.Value, purpose.Value); } public static bool IsValidPurposeForType(LoanType type, Purpose purpose) { return TypePurposes[type].Contains(purpose); } //Enum names and values based on CRIF's v_RptProductLoanPurpose_v001 table //joined with v_RptProductLoanPurpose_v001 //to find purposes that are active and in use /* select distinct lp.loanpurposeid, lp.name,lp.[description] from v_RptLoanPurpose_v001 as lp inner join v_RptProductLoanPurpose_v001 as plp on lp.loanpurposeid = plp.loanpurposeid where isactivefl = 1 */ public enum Purpose { Home_Improvement = 3, Home_Purchase = 4, Home_Refinance = 5, Purchase_Boat = 8, Purchase = 12, Other = 149, Refinance = 141, Dental_Expense = 142, Medical_Expense = 143, Cash_Out_Refinance = 144, Refinance_Vehicle = 146, Consolidation = 148, Reestablish_Credit = 150, Purchase_Manufactured_Home = 151, } } }