public PaymentModule GetPaymentModule(AccountCriteria accountCriteria, PaymentModule paymentModuleResult)
if (accountCriteria.ZeroDayNewAccount)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.NewCustomerNoBillDue,
ShowPreviousMessage = false,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = false,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.DepositRequiredAmount != 0)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.DepositOwed,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
ExplanationAmount1 = accountCriteria.FullAmountDue,
ExplanationAmount2 = accountCriteria.DepositRequiredAmount,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.PaymentAgreement && accountCriteria.DppEnrolledStatus && accountCriteria.LppEnrolledStatus)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.PaymentAgreementAutoPayLpp,
ShowPreviousMessage = false,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DPPWithdrawalDate,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.DPPWithdrawalAmount,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.DppEnrolledStatus && accountCriteria.LppEnrolledStatus)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.LppAutoPay,
ShowPreviousMessage = false,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DPPWithdrawalDate,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.LppAmount,
ExplanationAmount2 = accountCriteria.DPPWithdrawalAmount,
ExplanationDate1 = accountCriteria.DPPWithdrawalDate,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.PaymentAgreement && accountCriteria.DppEnrolledStatus)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.PaymentAgreementAutoPay,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DPPWithdrawalDate,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.DPPWithdrawalAmount,
ExplanationAmount2 = accountCriteria.InstallmentAmount,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.HasPaymentExtension && accountCriteria.DppEnrolledStatus && accountCriteria.LppEnrolledStatus)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.PaymentExtensionLppAutopay,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.PaymentExtensionExpirationDate - accountCriteria.PaymentExtensionStartDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DPPWithdrawalDate,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.DPPWithdrawalAmount,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus,
ExplanationDate1 = accountCriteria.PaymentExtensionExpirationDate
else if (accountCriteria.HasPaymentExtension && accountCriteria.DppEnrolledStatus)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.PaymentExtensionAutoPay,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.PaymentExtensionExpirationDate - accountCriteria.PaymentExtensionStartDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DPPWithdrawalDate,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.DPPWithdrawalAmount,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus,
ExplanationDate1 = accountCriteria.PaymentExtensionExpirationDate
else if (accountCriteria.HasPaymentExtension && accountCriteria.LppEnrolledStatus)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.PaymentExtensionLpp,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.PaymentExtensionExpirationDate - accountCriteria.PaymentExtensionStartDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationDate1 = accountCriteria.PaymentExtensionExpirationDate,
ExplanationAmount1 = accountCriteria.LppAmount,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.IsFirstBill)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.NewAccountNoBalanceNoHistory,
ShowPreviousMessage = false,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = false,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.DppEnrolledStatus)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.AutoPayDpp,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DPPWithdrawalDate,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.DPPWithdrawalAmount,
ExplanationDate1 = accountCriteria.DPPWithdrawalDate,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.LppEnrolledStatus)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.LppBudgetBilling,
ShowPreviousMessage = false,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.LppAmount,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus,
ShowLppBudgetBillingPaymentScenario = true
else if (accountCriteria.IsManualPaymentAgreement)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.PaymentAgreementZeroInstalmentValue,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.InstallmentAmount,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.PaymentAgreement)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.PaymentAgreement,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = accountCriteria.InstallmentAmount,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.HasPaymentExtension)
var easternNow = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.EnrollPaymentExtension,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = true,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - easternNow).Days + 1,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
ExplanationDate1 = accountCriteria.PaymentExtensionExpirationDate,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.FullAmountDue < 0)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.NegativeBalance,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = false,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
ExplanationAmount1 = Math.Abs(accountCriteria.FullAmountDue),
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
else if (accountCriteria.FullAmountDue == 0)
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.NoDueAmount,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = false,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.LatestBillDate - accountCriteria.DueDateTime).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
paymentModuleResult = new PaymentModule(accountCriteria.FullAmountDue)
PaymentState = PaymentModule.PaymentStateEnum.AmountDue,
ShowPreviousMessage = true,
ShowNextPaymentMessage = true,
ShowMessageUnderButton = false,
PreviousAmount = accountCriteria.LatestBilledAmount,
DueDays = (accountCriteria.DueDateTime - accountCriteria.LatestBillDate).Days,
PreviousDueDate = accountCriteria.LatestBillDate,
DueDate = accountCriteria.DueDateTime,
AccountType = accountCriteria.AccountType,
HasMultipleDueDates = accountCriteria.HasMultipleDueDates,
DppEnrolledStatus = accountCriteria.DppEnrolledStatus
paymentModuleResult.IsOverdue = false;
if (accountCriteria.OverduePayment && accountCriteria.MinimumAmountDue > 0)
paymentModuleResult.IsOverdue = true;
paymentModuleResult.ShowLatePaymentFeedIfNeeded = true;
if (accountCriteria.CompanyCode == OruAccountFlag)
if (accountCriteria.AccountType.Equals(AccountType.R))
if (accountCriteria.ServiceAddressState.Equals(CommonConstants.Transactional.NewJerseyStateCode))
paymentModuleResult.ShowLatePaymentFeedIfNeeded = false;
if (paymentModuleResult.ShowLppBudgetBillingPaymentScenario)
paymentModuleResult.ShowLppBudgetBillingPaymentScenario = false;
if (accountCriteria.AccountType.Equals(AccountType.R))
paymentModuleResult.ShowResidentialView = true;
return paymentModuleResult;
this.log.Error($"[GetPaymentModule] Error: {ex.StackTrace}", ex);