using BuddyFinance.Common.Encryption; using BuddyFinance.Integration.Models; using BuddyFinance.Integration.Models.LoanOffers; using BuddyFinance.Integration.Models.LoanRequests; using BuddyFinance.Integration.Models.Loans; using System.Collections.Generic; using System.Linq; namespace BuddyFinance.Integration.Mappers { public static class Loans { public static LoanModel MapToViewModel(this BuddyFinance.Model.Loan loan) { var returnLoan = loan == null ? null : new LoanModel { Id = loan.Id, LoanAmount = loan.LoanAmount, FirstRepaymentDate = loan.FirstRepaymentDate, LoanDuration = loan.LoanDuration, MonthlyInstallment = loan.MonthlyInstallmentAmount, InitialPayment = loan.InitialPaymentAmount, TotalaPayment = loan.InitialPaymentAmount, CreatedDate = loan.CreatedDate, ReferenceNumber = loan.LoanRequest.ReferenceNumber, LoanOffer = new LoanOfferModel { Id = loan.LoanOffer.Id, Amount = loan.LoanOffer.Amount, InterestRate = loan.LoanOffer.InterestRate, Lender = new Models.Profiles.Profile { Name = loan.LoanOffer.Profile.Name, Surname = loan.LoanOffer.Profile.Surname, ProfileNumber = loan.LoanOffer.Profile.ProfileNumber }, DateCreated = loan.LoanOffer.DateCreated, ExpiryDate = loan.LoanOffer.ExpiryDate, LenderId = loan.LoanOffer.ProfileId }, LoanRequest = new LoanRequestModel { Id = loan.LoanRequest.Id, RequestedDate = loan.LoanRequest.RequestedDate, FirstPaymentDate = loan.LoanRequest.FirstPaymentDate, Borrower = new Models.Profiles.Profile { Name = loan.LoanRequest.Profile.Name, Surname = loan.LoanRequest.Profile.Surname, ProfileNumber = loan.LoanRequest.Profile.ProfileNumber }, Amount = loan.LoanRequest.Amount, BorrowerId = loan.LoanRequest.BorrowerId }, TermTypeId = loan.TermTypeId, TermType = new Models.TermType { Id = loan.TermType.Id, Description = loan.TermType.Description }, LoanStatusId = loan.LoanStatusId, Status = new Status { Description = loan.LoanStatus.Description, Id = loan.LoanStatus.Id }, LoanRepayments = loan.LoanRepayments.ToList().ConvertAll(m => m.ToRepaymentModel()), LoanSchedules = loan.LoanSchedules.ToList().ConvertAll(m => m.ToScheduleModel(m.LoanRepayments.ToList())) }; if (loan?.LoanPayout != null) { returnLoan.LoanPayout = new LoanPayoutModel { LoanId = loan.Id, Amount = loan.LoanPayout.PayoutAmount, PayoutDate = loan.LoanPayout.PayoutDate }; } return returnLoan; } public static LoanScheduleModel ToScheduleModel(this Model.LoanSchedule schedule, List scheduleRepayments) { if (schedule == null) return null; return new LoanScheduleModel { Id = schedule.Id, Description = schedule.Description, Amount = schedule.Amount, ExpectedPayDate = schedule.ExpectedPayDate, LoanId = schedule.LoanId, StatusId = schedule.StatusId, Status = new Status { Id = schedule.LoanScheduleStatus.Id, Description = schedule.LoanScheduleStatus.Description }, Balance = !scheduleRepayments.Any() ? schedule.Amount : schedule.Amount - scheduleRepayments.Sum(m => m.PaymentAmount) }; } public static LoanRepaymentModel ToRepaymentModel(this BuddyFinance.Model.LoanRepayment repayment) { if (repayment == null) return null; return new LoanRepaymentModel { Id = repayment.Id, LoanId = repayment.LoanId, LoanrepaymentStatusId = repayment.LoanRepaymentStatusId, PaymentAmount = repayment.PaymentAmount, PaymentDate = repayment.PaymentDate, PaymentMethod = repayment.PaymentMethod, Status = new Models.Status { Id = repayment.LoanRepaymentStatus.Id, Description = repayment.LoanRepaymentStatus.Description }, Installment = repayment.Loan.MonthlyInstallmentAmount, LoanSchedule = new LoanScheduleModel { Id = repayment.LoanSchedule.Id, Description = repayment.LoanSchedule.Description, Amount = repayment.LoanSchedule.Amount } }; } } }