using BuddyFinance.Common.Encryption; using BuddyFinance.Integration.Models.Enums; using BuddyFinance.Integration.Models.PreLoanRequests; using BuddyFinance.Model; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BuddyFinance.Integration.Integrators { public class PreLoanRequestIntergrator : BaseIntegrator { public PreLoanRequestResult RequestPreLoanRequest(PreLoanRequestModel preLoanRequestModel) { try { //var result = new PreLoanRequestResult(); if (string.IsNullOrWhiteSpace(preLoanRequestModel.BorrowerId_)) { return new PreLoanRequestResult() { ErrorCode = (int)ResponseCodes.ValidationError, ErrorMessage = "Invalid borrower" }; } preLoanRequestModel.BorrowerId = preLoanRequestModel.BorrowerId_.ToDecryptedInt(); using (var db = new BuddyFinanceDBEntities()) { var profile = db.Set().FirstOrDefault(m => m.Id == preLoanRequestModel.BorrowerId); var PreLoanRequest = new PreLoanRequest() { Amount = preLoanRequestModel.Amount, BorrowerId = profile.Id, //LoanRequestId = preLoanRequestModel.LoanRequestID, // ReferenceNumber = preLoanRequestModel.ReferenceNumber, TermTypeId = preLoanRequestModel.TermTypeId, RequestedDate = DateTime.Now, LoanRequestStatusId = (int)LoanRequestStatusEnum.New, FirstPaymentDate = preLoanRequestModel.FirstPaymentDate, Term = preLoanRequestModel.Term, }; db.PreLoanRequests.Add(PreLoanRequest); db.SaveChanges(); PreLoanRequest.ReferenceNumber = ReferenceNumberGenerator.Generate(PreLoanRequest.Id); db.SaveChanges(); //if (profile != null) //{ // var mailDetails = new Dictionary // { // { "[borrowerId]",profile.ProfileNumber }, // {"[names]",profile.FullNames }, // { "[reference]", PreLoanRequest.ReferenceNumber}, // { "[amount]", PreLoanRequest.Amount.ToString("N2")}, // //{ "[loanofferid]",loanreques} // { "[loanofferrequestamount]", PreLoanRequest.Amount.ToString()}, // }; // var templateText = System.IO.File.ReadAllText(ConfigurationManager.AppSettings["TemplatesPath"] + NotificationTempate.LoanRequestRef.ToString() + ".txt"); // var emailBody = mailDetails.Aggregate(templateText, (item, m) => item.Replace(m.Key, m.Value)); // _notifications.SendEmail(profile.EmailAddress, emailBody, "Loan Request | Buddy Finance", null); //} return new PreLoanRequestResult() { ErrorCode = (int)ResponseCodes.Success, ErrorMessage = "Success", Result = new PreLoanRequestModel() { LoanRequestID = preLoanRequestModel.LoanRequestID }, }; } } catch (Exception ex) { return new PreLoanRequestResult() { ErrorCode = (int)ResponseCodes.Exception, ErrorMessage = "An error has occurred. Exception: " + ex.Message, }; } } public GetPreLoanRequestsResults GetPreLoanRequestByProfile(int profileId) { var result = new GetPreLoanRequestsResults(); try { var offersIntegrator = new LoanOffersIntergrator(); var preLoanList = new List(); using (var db = new BuddyFinanceDBEntities()) { db.PreLoanRequests.Where(k => k.BorrowerId == profileId).ToList() .ForEach(m => { var preLoanOffers = offersIntegrator.GetLoanOffersByAmount(new Models.GetOffersModel { Amount = m.Amount, Term = m.Term, TermType = new Models.TermType { Id = m.TermTypeId, Description = m.TermType?.Description }, ProfileId = m.BorrowerId }).Result?.Count ?? 0; var borrower = db.Profiles.Find(m.BorrowerId); var preLoans = new PreLoanRequestModel { Amount = m.Amount, FirstPaymentDate = m.FirstPaymentDate, ReferenceNumber = m.ReferenceNumber, TermTypeId = m.TermTypeId, BorrowerId = m.BorrowerId, BorrowerIdProfileNumber = borrower.ProfileNumber, LoanRequestStatusId = m.LoanRequestStatusId, Term = m.Term, Id = m.Id, Status = new Models.Status { Id = m.LoanRequestStatus.Id, Description = m.LoanRequestStatus.Description }, TermType = new Models.TermType { Id = m.TermType.Id, Description = m.TermType.Description }, AvaiableOffers = preLoanOffers }; preLoanList.Add(preLoans); }); result.ErrorCode = (int)ResponseCodes.Success; result.ErrorMessage = "Success"; result.Result = preLoanList; } } catch (Exception ex) { result.ErrorCode = (int)ResponseCodes.Exception; result.ErrorMessage = ex.Message; } return result; } public GetPreLoanRequestResult GetPreLoanRequest(int preloanId) { var result = new GetPreLoanRequestResult(); try { using (var db = new BuddyFinanceDBEntities()) { var preLoanRequest = db.PreLoanRequests.FirstOrDefault(m => m.Id == preloanId); if (preLoanRequest ==null) { result.ErrorCode = (int)ResponseCodes.NotFound; result.ErrorMessage = "Could ot find the pre-loan request"; } else { result.Result = new PreLoanRequestModel { Amount = preLoanRequest.Amount, Id = preLoanRequest.Id, FirstPaymentDate = preLoanRequest.FirstPaymentDate, ReferenceNumber = preLoanRequest.ReferenceNumber, TermTypeId = preLoanRequest.TermTypeId, BorrowerId = preLoanRequest.BorrowerId, LoanRequestStatusId = preLoanRequest.LoanRequestStatusId, Term = preLoanRequest.Term, Status = new Models.Status { Id = preLoanRequest.LoanRequestStatus.Id, Description = preLoanRequest.LoanRequestStatus.Description }, TermType = new Models.TermType { Id = preLoanRequest.TermType.Id, Description = preLoanRequest.TermType.Description }, }; result.ErrorCode = (int)ResponseCodes.Success; result.ErrorMessage = "Success"; } } } catch (Exception ex) { result.ErrorCode = (int)ResponseCodes.Exception; result.ErrorMessage = ex.Message; } return result; } public DeletePreLoanRequest DeletePreLoan( int preLoanId) { try { using (var db = new BuddyFinanceDBEntities()) { var preLoan = db.PreLoanRequests.FirstOrDefault(m => m.Id == preLoanId); if (preLoan != null) { db.PreLoanRequests.Remove(preLoan); db.SaveChanges(); return new DeletePreLoanRequest { Result = true, ErrorCode = (int)ResponseCodes.Success, ErrorMessage = "success", }; } else { return new DeletePreLoanRequest { Result = false, ErrorCode = (int)ResponseCodes.NotFound, ErrorMessage = "Pre Loan Request not found", }; } } } catch (Exception ex) { return new DeletePreLoanRequest { ErrorCode = (int)ResponseCodes.Exception, ErrorMessage = ex.Message, }; } } public GetPreLoanRequestsResults GetPreLoanRequests() { var result = new GetPreLoanRequestsResults(); try { var offersIntegrator = new LoanOffersIntergrator(); var preLoanList = new List(); using (var db = new BuddyFinanceDBEntities()) { db.PreLoanRequests.ToList() .ForEach(m => { //var preLoanOffers = offersIntegrator.GetLoanOffersByAmount(new Models.GetOffersModel //{ // Amount = m.Amount, // Term = m.Term, // TermType = new Models.TermType // { // Id = m.TermTypeId, // Description = m.TermType?.Description // }, // ProfileId = m.BorrowerId //}).Result?.Count ?? 0; var borrower = db.Profiles.Find(m.BorrowerId); var preLoans = new PreLoanRequestModel { RequestedDate = m.RequestedDate, Amount = m.Amount, FirstPaymentDate = m.FirstPaymentDate, ReferenceNumber = m.ReferenceNumber, TermTypeId = m.TermTypeId, BorrowerId = m.BorrowerId, BorrowerIdProfileNumber = borrower.ProfileNumber, LoanRequestStatusId = m.LoanRequestStatusId, Term = m.Term, Id = m.Id, Status = new Models.Status { Id = m.LoanRequestStatus.Id, Description = m.LoanRequestStatus.Description }, TermType = new Models.TermType { Id = m.TermType.Id, Description = m.TermType.Description }, // AvaiableOffers = preLoanOffers }; preLoanList.Add(preLoans); }); result.ErrorCode = (int)ResponseCodes.Success; result.ErrorMessage = "Success"; result.Result = preLoanList; } } catch (Exception ex) { result.ErrorCode = (int)ResponseCodes.Exception; result.ErrorMessage = ex.Message; } return result; } } }