Files
2026-03-17 08:54:34 -05:00

211 lines
8.7 KiB
C#

using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.IndirectLoan;
using ReserveManagementSystemApi.Models;
using ReserveManagementSystemLib.Models;
namespace ReserveManagementSystemApi.Helpers
{
public class ImportHelper
{
private string _firstName;
private string _middleInitial;
private const double MonthInDays = 30.4375;
public ImportHelper()
{
}
public List<Loan> TransformNewLoan(List<Models.ImportNewLoan> iImportLoans, int iImportId)
{
var result = new List<Loan>();
foreach (var iLoan in iImportLoans)
{
Loan loan = new Loan();
loan.ImportId = iImportId;
loan.MemberNumber = iLoan.MemberNumber;
loan.LoanNumber = iLoan.LoanNumber;
SplitFirstMiddleName(iLoan.FirstAndMiddleName);
loan.MemberFirstName = _firstName?.ToUpper();
loan.MemberInitial = _middleInitial?.ToUpper();
loan.MemberLastName = iLoan.LastName?.ToUpper();
loan.DealerOrganizationNumber = iLoan.DealerOrganizationNumber;
loan.LoanDate = iLoan.LoanDate;
loan.PostedDate = iLoan.PostedDate;
loan.FirstPmtDate = iLoan.FirstPmtDate;
loan.FinalPmtDate = iLoan.FinalPmtDate;
loan.LoanAmount = iLoan.LoanAmount;
loan.BuyRate = Math.Round(iLoan.BuyRate, 3, MidpointRounding.AwayFromZero);
loan.ContractRate = Math.Round(iLoan.ContractRate, 3, MidpointRounding.AwayFromZero);
loan.MonthlyPmt = iLoan.MonthlyPmt;
loan.LoanTypeId = iLoan.LoanType;
loan.ChargeBack = null;
loan.PaidLoanDate = null;
loan.ApplicationId = iLoan.ApplicationId;
loan.AccountType = iLoan.AccountType;
loan.Gap = !string.IsNullOrEmpty(iLoan.Gap) && Convert.ToBoolean(iLoan.Gap);
loan.Warranty = !string.IsNullOrEmpty(iLoan.Warranty) && Convert.ToBoolean(iLoan.Warranty);
loan.CreditLife = !string.IsNullOrEmpty(iLoan.CreditLife) && Convert.ToBoolean(iLoan.CreditLife);
loan.CreditDisability = !string.IsNullOrEmpty(iLoan.CreditDisability) && Convert.ToBoolean(iLoan.CreditDisability);
loan.Mbp = !string.IsNullOrEmpty(iLoan.Mbp) && Convert.ToBoolean(iLoan.Mbp);
loan.Term = (int)Math.Round(Convert.ToDecimal(iLoan.OriginalTermInDays) / (decimal)MonthInDays, 0);
Vehicle vehicle = new Vehicle();
vehicle.VINNumber = !string.IsNullOrEmpty(iLoan.VINNumber) ? iLoan.VINNumber : null;
vehicle.Make = iLoan.Make;
vehicle.Model = iLoan.Model;
vehicle.Year = iLoan.Year;
vehicle.Mileage = ValidateMileage(iLoan.Mileage);
vehicle.Color = iLoan.Color;
loan.Vehicle = vehicle;
result.Add(loan);
}
return result;
}
public List<Loan> TransformLoanFromDNA(List<IndirectLoanDetail> importLoans, int iImportId)
{
var result = new List<Loan>();
if (!importLoans.Any())
{
return result;
}
foreach (var iLoan in importLoans)
{
Loan loan = new Loan
{
ImportId = iImportId,
MemberNumber = iLoan.MemberNumber,
LoanNumber = iLoan.LoanNumber,
MemberFirstName = iLoan.MemberFirstName?.ToUpper(),
MemberInitial = iLoan.MemberInitial?.ToUpper(),
MemberLastName = iLoan.MemberLastName?.ToUpper(),
DealerOrganizationNumber = (!String.IsNullOrWhiteSpace(iLoan.DealerOrganizationNumber)) ? iLoan.DealerOrganizationNumber : string.Empty,
LoanDate = iLoan.LoanDate,
FirstPmtDate = iLoan.FirstPmtDate,
FinalPmtDate = iLoan.FinalPmtDate,
LoanAmount = iLoan.LoanAmount,
BuyRate = (iLoan.BuyRate != 0) ? Math.Round(iLoan.BuyRate, 3, MidpointRounding.AwayFromZero) : 0,
ContractRate = Math.Round(iLoan.ContractRate, 3, MidpointRounding.AwayFromZero),
MonthlyPmt = iLoan.MonthlyPmt,
LoanTypeId = iLoan.LoanType,
ApplicationId = iLoan.ApplicationId,
Gap = iLoan.GAP,
Warranty = iLoan.Warranty,
CreditLife = iLoan.CreditLife,
CreditDisability = iLoan.CreditDisability,
Mbp = iLoan.Mbp,
AccountType = iLoan.AccountType,
PaidLoanDate = iLoan.PaidLoanDate,
Term = (int)Math.Round(Convert.ToDecimal(iLoan.OriginalTermInDays) / (decimal)MonthInDays, 0)
};
if (iLoan.PostedDate == DateTime.MinValue)
{
loan.PostedDate = iLoan.LoanDate;
}
else
{
loan.PostedDate = iLoan.PostedDate;
}
loan.Vehicle = new Vehicle
{
VINNumber = !string.IsNullOrEmpty(iLoan.Vin) ? iLoan.Vin : null,
Make = iLoan.Make,
Model = iLoan.Model,
Year = iLoan.Year.ToString(),
Mileage = ValidateMileage(iLoan.Mileage.ToString()),
Color = iLoan.Color
};
loan.Dealer = new Dealer
{
DealerCode = (!String.IsNullOrWhiteSpace(iLoan.DealerCode)) && (iLoan.DealerCode.Length <= 4) ? iLoan.DealerCode : string.Empty,
Name = (!String.IsNullOrWhiteSpace(iLoan.DealerName)) ? iLoan.DealerName : string.Empty,
DealerAccountNumber = (!String.IsNullOrWhiteSpace(iLoan.DealerAccountNumber)) ? iLoan.DealerAccountNumber : string.Empty,
DealerOrganizationNumber = (!String.IsNullOrWhiteSpace(iLoan.DealerOrganizationNumber)) ? iLoan.DealerOrganizationNumber : string.Empty
};
result.Add(loan);
}
return result;
}
public List<Loan> TransformBoatLoan(List<ImportBoatLoan> importLoans)
{
var result = new List<Loan>();
if (!importLoans.Any())
{
return result;
}
foreach (var iLoan in importLoans)
{
Loan loan = new Loan
{
LoanNumber = iLoan.LoanNumber,
ReserveAmount = (!String.IsNullOrWhiteSpace(iLoan.IsChargeback) && iLoan.IsChargeback.ToUpper() == "FALSE") ? iLoan.Amount : 0,
ChargeBack = (!String.IsNullOrWhiteSpace(iLoan.IsChargeback) && iLoan.IsChargeback.ToUpper() == "TRUE") ? iLoan.Amount : 0,
Adjustment = (!String.IsNullOrWhiteSpace(iLoan.IsAdjustment) && iLoan.IsAdjustment.ToUpper() == "TRUE") ? iLoan.Amount : 0,
AccountType = iLoan.AccountType
};
loan.Dealer = new Dealer
{
DealerAccountNumber = iLoan.DealerAccountNumber
};
result.Add(loan);
}
return result;
}
private double ValidateMileage(string mileage)
{
double convertedMileage;
if (double.TryParse(mileage, out convertedMileage))
{
return convertedMileage;
}
return convertedMileage;
}
public IEnumerable<Loan> TransformClosedLoans(List<ClosedIndirectLoan> importLoans, int importId)
{
return importLoans.Select(x => new Loan
{
ImportId = importId,
LoanNumber = x.LoanNumber,
PaidLoanDate = x.PaidLoanDate
//will update LoanStatus when saving
});
}
private void SplitFirstMiddleName(string name)
{
//initial first name last name rules with first name character max length set in DB as 20, and middle initial max as 1
_middleInitial = String.Empty;
_firstName = name;
string[] names = name.Trim().Split(" ");
if (names != null && names.Length > 1) //when true there is a middle initial
{
_firstName = _firstName.Substring(0, name.Length - names.Last().Length).Trim();
_middleInitial = names.Last().Substring(0, 1);
}
else
{
_firstName = name; //no middle initial
}
}
}
}