Search in sources :

Example 1 with FundBO

use of org.mifos.accounts.fund.business.FundBO in project head by mifos.

the class LoanAccountServiceFacadeWebTier method retrieveLoanDetailsForLoanAccountCreation.

@Override
public LoanCreationLoanDetailsDto retrieveLoanDetailsForLoanAccountCreation(Integer customerId, Short productId, boolean isLoanWithBackdatedPayments) {
    try {
        List<org.mifos.dto.domain.FeeDto> additionalFees = new ArrayList<org.mifos.dto.domain.FeeDto>();
        List<org.mifos.dto.domain.FeeDto> defaultFees = new ArrayList<org.mifos.dto.domain.FeeDto>();
        List<PenaltyDto> defaultPenalties = new ArrayList<PenaltyDto>();
        LoanOfferingBO loanProduct = this.loanProductDao.findById(productId.intValue());
        MeetingBO loanProductMeeting = loanProduct.getLoanOfferingMeetingValue();
        MeetingDto loanOfferingMeetingDto = loanProductMeeting.toDto();
        List<FeeBO> fees = this.feeDao.getAllAppllicableFeeForLoanCreation();
        for (FeeBO fee : fees) {
            if (!fee.isPeriodic() || (MeetingBO.isMeetingMatched(fee.getFeeFrequency().getFeeMeetingFrequency(), loanProductMeeting))) {
                org.mifos.dto.domain.FeeDto feeDto = fee.toDto();
                FeeFrequencyType feeFrequencyType = FeeFrequencyType.getFeeFrequencyType(fee.getFeeFrequency().getFeeFrequencyType().getId());
                FeeFrequencyTypeEntity feeFrequencyEntity = this.loanProductDao.retrieveFeeFrequencyType(feeFrequencyType);
                String feeFrequencyTypeName = ApplicationContextProvider.getBean(MessageLookup.class).lookup(feeFrequencyEntity.getLookUpValue());
                feeDto.setFeeFrequencyType(feeFrequencyTypeName);
                if (feeDto.getFeeFrequency().isOneTime()) {
                    FeePayment feePayment = FeePayment.getFeePayment(fee.getFeeFrequency().getFeePayment().getId());
                    FeePaymentEntity feePaymentEntity = this.loanProductDao.retrieveFeePaymentType(feePayment);
                    String feePaymentName = ApplicationContextProvider.getBean(MessageLookup.class).lookup(feePaymentEntity.getLookUpValue());
                    feeDto.getFeeFrequency().setPayment(feePaymentName);
                }
                if (loanProduct.isFeePresent(fee)) {
                    defaultFees.add(feeDto);
                } else {
                    additionalFees.add(feeDto);
                }
            }
        }
        List<PenaltyBO> penalties = this.penaltyDao.getAllAppllicablePenaltyForLoanCreation();
        for (PenaltyBO penalty : penalties) {
            if (loanProduct.isPenaltyPresent(penalty)) {
                defaultPenalties.add(penalty.toDto());
            }
        }
        if (AccountingRules.isMultiCurrencyEnabled()) {
            defaultFees = getFilteredFeesByCurrency(defaultFees, loanProduct.getCurrency().getCurrencyId());
            additionalFees = getFilteredFeesByCurrency(additionalFees, loanProduct.getCurrency().getCurrencyId());
        }
        Map<String, String> defaultFeeOptions = new LinkedHashMap<String, String>();
        for (org.mifos.dto.domain.FeeDto feeDto : defaultFees) {
            defaultFeeOptions.put(feeDto.getId(), feeDto.getName());
        }
        Map<String, String> additionalFeeOptions = new LinkedHashMap<String, String>();
        for (org.mifos.dto.domain.FeeDto feeDto : additionalFees) {
            additionalFeeOptions.put(feeDto.getId(), feeDto.getName());
        }
        CustomerBO customer = this.customerDao.findCustomerById(customerId);
        boolean isRepaymentIndependentOfMeetingEnabled = new ConfigurationBusinessService().isRepaymentIndepOfMeetingEnabled();
        LoanDisbursementDateFactory loanDisbursementDateFactory = new LoanDisbursmentDateFactoryImpl();
        LoanDisbursementDateFinder loanDisbursementDateFinder = null;
        LocalDate nextPossibleDisbursementDate = null;
        MeetingBO customerMeeting = customer.getCustomerMeetingValue();
        LocalDate dateToStart = new LocalDate();
        if (customerMeeting.isWeekly()) {
            LocalDate meetingStartDate = new LocalDate(customerMeeting.getMeetingStartDate());
            if (dateToStart.isBefore(meetingStartDate)) {
                dateToStart = meetingStartDate;
                loanDisbursementDateFinder = loanDisbursementDateFactory.create(customer, loanProduct, false, isLoanWithBackdatedPayments);
            } else {
                loanDisbursementDateFinder = loanDisbursementDateFactory.create(customer, loanProduct, isRepaymentIndependentOfMeetingEnabled, isLoanWithBackdatedPayments);
            }
            nextPossibleDisbursementDate = loanDisbursementDateFinder.findClosestMatchingDateFromAndInclusiveOf(dateToStart);
        } else {
            loanDisbursementDateFinder = loanDisbursementDateFactory.create(customer, loanProduct, isRepaymentIndependentOfMeetingEnabled, isLoanWithBackdatedPayments);
            nextPossibleDisbursementDate = loanDisbursementDateFinder.findClosestMatchingDateFromAndInclusiveOf(dateToStart);
        }
        LoanAmountOption eligibleLoanAmount = loanProduct.eligibleLoanAmount(customer.getMaxLoanAmount(loanProduct), customer.getMaxLoanCycleForProduct(loanProduct));
        LoanOfferingInstallmentRange eligibleNoOfInstall = loanProduct.eligibleNoOfInstall(customer.getMaxLoanAmount(loanProduct), customer.getMaxLoanCycleForProduct(loanProduct));
        Double defaultInterestRate = loanProduct.getDefInterestRate();
        Double maxInterestRate = loanProduct.getMaxInterestRate();
        Double minInterestRate = loanProduct.getMinInterestRate();
        LinkedHashMap<String, String> collateralOptions = new LinkedHashMap<String, String>();
        LinkedHashMap<String, String> purposeOfLoanOptions = new LinkedHashMap<String, String>();
        CustomValueDto customValueDto = legacyMasterDao.getLookUpEntity(MasterConstants.COLLATERAL_TYPES);
        List<CustomValueListElementDto> collateralTypes = customValueDto.getCustomValueListElements();
        for (CustomValueListElementDto element : collateralTypes) {
            collateralOptions.put(element.getId().toString(), element.getName());
        }
        // Business activities got in getPrdOfferings also but only for glim.
        List<ValueListElement> loanPurposes = legacyMasterDao.findValueListElements(MasterConstants.LOAN_PURPOSES);
        for (ValueListElement element : loanPurposes) {
            purposeOfLoanOptions.put(element.getId().toString(), element.getName());
        }
        List<FundDto> fundDtos = new ArrayList<FundDto>();
        List<FundBO> funds = getFunds(loanProduct);
        for (FundBO fund : funds) {
            FundDto fundDto = new FundDto();
            fundDto.setId(Short.toString(fund.getFundId()));
            fundDto.setCode(translateFundCodeToDto(fund.getFundCode()));
            fundDto.setName(fund.getFundName());
            fundDtos.add(fundDto);
        }
        ProductDetailsDto productDto = loanProduct.toDetailsDto();
        CustomerDetailDto customerDetailDto = customer.toCustomerDetailDto();
        Integer gracePeriodInInstallments = loanProduct.getGracePeriodDuration().intValue();
        final List<PrdOfferingDto> loanProductDtos = retrieveActiveLoanProductsApplicableForCustomer(customer, isRepaymentIndependentOfMeetingEnabled);
        InterestType interestType = InterestType.fromInt(loanProduct.getInterestTypes().getId().intValue());
        InterestTypesEntity productInterestType = this.loanProductDao.findInterestType(interestType);
        String interestTypeName = ApplicationContextProvider.getBean(MessageLookup.class).lookup(productInterestType.getLookUpValue());
        LinkedHashMap<String, String> daysOfTheWeekOptions = new LinkedHashMap<String, String>();
        List<WeekDay> workingDays = new FiscalCalendarRules().getWorkingDays();
        for (WeekDay workDay : workingDays) {
            String weekdayName = ApplicationContextProvider.getBean(MessageLookup.class).lookup(workDay.getPropertiesKey());
            workDay.setWeekdayName(weekdayName);
            daysOfTheWeekOptions.put(workDay.getValue().toString(), weekdayName);
        }
        LinkedHashMap<String, String> weeksOfTheMonthOptions = new LinkedHashMap<String, String>();
        for (RankOfDay weekOfMonth : RankOfDay.values()) {
            String weekOfMonthName = ApplicationContextProvider.getBean(MessageLookup.class).lookup(weekOfMonth.getPropertiesKey());
            weeksOfTheMonthOptions.put(weekOfMonth.getValue().toString(), weekOfMonthName);
        }
        boolean variableInstallmentsAllowed = loanProduct.isVariableInstallmentsAllowed();
        boolean fixedRepaymentSchedule = loanProduct.isFixedRepaymentSchedule();
        Integer minGapInDays = Integer.valueOf(0);
        Integer maxGapInDays = Integer.valueOf(0);
        BigDecimal minInstallmentAmount = BigDecimal.ZERO;
        if (variableInstallmentsAllowed) {
            VariableInstallmentDetailsBO variableInstallmentsDetails = loanProduct.getVariableInstallmentDetails();
            minGapInDays = variableInstallmentsDetails.getMinGapInDays();
            maxGapInDays = variableInstallmentsDetails.getMaxGapInDays();
            minInstallmentAmount = variableInstallmentsDetails.getMinInstallmentAmount().getAmount();
        }
        boolean compareCashflowEnabled = loanProduct.isCashFlowCheckEnabled();
        // GLIM specific
        final boolean isGroup = customer.isGroup();
        final boolean isGlimEnabled = configurationPersistence.isGlimEnabled();
        //Group Loan Account with members specific
        final boolean isGroupLoanWithMembersEnabled = AccountingRules.isGroupLoanWithMembers();
        List<LoanAccountDetailsDto> clientDetails = new ArrayList<LoanAccountDetailsDto>();
        if (isGroup && (isGlimEnabled || isGroupLoanWithMembersEnabled)) {
            final List<ClientBO> activeClientsOfGroup = customerDao.findActiveClientsUnderGroup(customer);
            if (activeClientsOfGroup == null || activeClientsOfGroup.isEmpty()) {
                throw new BusinessRuleException(GroupConstants.IMPOSSIBLE_TO_CREATE_GROUP_LOAN);
            }
            for (ClientBO client : activeClientsOfGroup) {
                LoanAccountDetailsDto clientDetail = new LoanAccountDetailsDto();
                clientDetail.setClientId(client.getGlobalCustNum());
                clientDetail.setClientName(client.getDisplayName());
                clientDetails.add(clientDetail);
            }
        }
        // end of GLIM specific
        int digitsAfterDecimalForInterest = AccountingRules.getDigitsAfterDecimalForInterest().intValue();
        int digitsBeforeDecimalForInterest = AccountingRules.getDigitsBeforeDecimalForInterest().intValue();
        int digitsAfterDecimalForMonetaryAmounts = AccountingRules.getDigitsAfterDecimal().intValue();
        int digitsBeforeDecimalForMonetaryAmounts = AccountingRules.getDigitsBeforeDecimal().intValue();
        ApplicationConfigurationDto appConfig = new ApplicationConfigurationDto(digitsAfterDecimalForInterest, digitsBeforeDecimalForInterest, digitsAfterDecimalForMonetaryAmounts, digitsBeforeDecimalForMonetaryAmounts);
        Map<String, String> disbursalPaymentTypes = new LinkedHashMap<String, String>();
        try {
            for (PaymentTypeDto paymentTypeDto : accountService.getLoanDisbursementTypes()) {
                disbursalPaymentTypes.put(paymentTypeDto.getValue().toString(), paymentTypeDto.getName());
            }
        } catch (Exception e) {
            throw new SystemException(e);
        }
        Map<String, String> repaymentpaymentTypes = new LinkedHashMap<String, String>();
        try {
            for (PaymentTypeDto paymentTypeDto : accountService.getLoanPaymentTypes()) {
                repaymentpaymentTypes.put(paymentTypeDto.getValue().toString(), paymentTypeDto.getName());
            }
        } catch (Exception e) {
            throw new SystemException(e);
        }
        String currency = loanProduct.getCurrency().getCurrencyCode();
        return new LoanCreationLoanDetailsDto(currency, isRepaymentIndependentOfMeetingEnabled, loanOfferingMeetingDto, customer.getCustomerMeetingValue().toDto(), loanPurposes, productDto, gracePeriodInInstallments, customerDetailDto, loanProductDtos, interestTypeName, fundDtos, collateralOptions, purposeOfLoanOptions, defaultFeeOptions, additionalFeeOptions, defaultFees, additionalFees, BigDecimal.valueOf(eligibleLoanAmount.getDefaultLoanAmount()), BigDecimal.valueOf(eligibleLoanAmount.getMaxLoanAmount()), BigDecimal.valueOf(eligibleLoanAmount.getMinLoanAmount()), defaultInterestRate, maxInterestRate, minInterestRate, eligibleNoOfInstall.getDefaultNoOfInstall().intValue(), eligibleNoOfInstall.getMaxNoOfInstall().intValue(), eligibleNoOfInstall.getMinNoOfInstall().intValue(), nextPossibleDisbursementDate, daysOfTheWeekOptions, weeksOfTheMonthOptions, variableInstallmentsAllowed, fixedRepaymentSchedule, minGapInDays, maxGapInDays, minInstallmentAmount, compareCashflowEnabled, isGlimEnabled, isGroup, clientDetails, appConfig, defaultPenalties, disbursalPaymentTypes, repaymentpaymentTypes, isGroupLoanWithMembersEnabled);
    } catch (SystemException e) {
        throw new MifosRuntimeException(e);
    }
}
Also used : FeePayment(org.mifos.accounts.fees.util.helpers.FeePayment) LoanDisbursementDateFactory(org.mifos.clientportfolio.newloan.domain.LoanDisbursementDateFactory) MeetingBO(org.mifos.application.meeting.business.MeetingBO) CustomValueListElementDto(org.mifos.application.master.business.CustomValueListElementDto) ClientBO(org.mifos.customers.client.business.ClientBO) ArrayList(java.util.ArrayList) LocalDate(org.joda.time.LocalDate) LinkedHashMap(java.util.LinkedHashMap) RankOfDay(org.mifos.application.meeting.util.helpers.RankOfDay) ApplicationConfigurationDto(org.mifos.dto.domain.ApplicationConfigurationDto) FeeFrequencyTypeEntity(org.mifos.accounts.fees.business.FeeFrequencyTypeEntity) CustomerDetailDto(org.mifos.dto.domain.CustomerDetailDto) LoanDisbursmentDateFactoryImpl(org.mifos.clientportfolio.newloan.domain.LoanDisbursmentDateFactoryImpl) PenaltyBO(org.mifos.accounts.penalties.business.PenaltyBO) AmountPenaltyBO(org.mifos.accounts.penalties.business.AmountPenaltyBO) FeeFrequencyType(org.mifos.accounts.fees.util.helpers.FeeFrequencyType) CreateAccountFeeDto(org.mifos.dto.domain.CreateAccountFeeDto) FeeDto(org.mifos.dto.domain.FeeDto) WeekDay(org.mifos.application.meeting.util.helpers.WeekDay) InterestType(org.mifos.accounts.productdefinition.util.helpers.InterestType) VariableInstallmentDetailsBO(org.mifos.accounts.productdefinition.business.VariableInstallmentDetailsBO) LoanOfferingBO(org.mifos.accounts.productdefinition.business.LoanOfferingBO) LoanAmountOption(org.mifos.accounts.productdefinition.business.LoanAmountOption) FeeBO(org.mifos.accounts.fees.business.FeeBO) AmountFeeBO(org.mifos.accounts.fees.business.AmountFeeBO) LoanCreationLoanDetailsDto(org.mifos.dto.screen.LoanCreationLoanDetailsDto) LoanOfferingInstallmentRange(org.mifos.accounts.productdefinition.business.LoanOfferingInstallmentRange) InterestTypesEntity(org.mifos.application.master.business.InterestTypesEntity) LoanCreationProductDetailsDto(org.mifos.dto.screen.LoanCreationProductDetailsDto) ProductDetailsDto(org.mifos.dto.domain.ProductDetailsDto) LoanAccountDetailsDto(org.mifos.dto.domain.LoanAccountDetailsDto) MultipleLoanAccountDetailsDto(org.mifos.dto.screen.MultipleLoanAccountDetailsDto) BusinessRuleException(org.mifos.service.BusinessRuleException) SystemException(org.mifos.framework.exceptions.SystemException) MessageLookup(org.mifos.application.master.MessageLookup) ConfigurationBusinessService(org.mifos.config.business.service.ConfigurationBusinessService) CustomerBO(org.mifos.customers.business.CustomerBO) FeeDto(org.mifos.dto.domain.FeeDto) FiscalCalendarRules(org.mifos.config.FiscalCalendarRules) CreateAccountPenaltyDto(org.mifos.dto.domain.CreateAccountPenaltyDto) PenaltyDto(org.mifos.dto.domain.PenaltyDto) LoanDisbursementDateFinder(org.mifos.clientportfolio.newloan.domain.LoanDisbursementDateFinder) FundBO(org.mifos.accounts.fund.business.FundBO) FeePaymentEntity(org.mifos.accounts.fees.business.FeePaymentEntity) PaymentTypeDto(org.mifos.dto.domain.PaymentTypeDto) FundDto(org.mifos.accounts.fund.servicefacade.FundDto) BigDecimal(java.math.BigDecimal) StatesInitializationException(org.mifos.framework.exceptions.StatesInitializationException) BusinessRuleException(org.mifos.service.BusinessRuleException) PersistenceException(org.mifos.framework.exceptions.PersistenceException) ServiceException(org.mifos.framework.exceptions.ServiceException) HibernateSearchException(org.mifos.framework.exceptions.HibernateSearchException) PageExpiredException(org.mifos.framework.exceptions.PageExpiredException) SystemException(org.mifos.framework.exceptions.SystemException) MifosRuntimeException(org.mifos.core.MifosRuntimeException) AccountException(org.mifos.accounts.exceptions.AccountException) PropertyNotFoundException(org.mifos.framework.exceptions.PropertyNotFoundException) ConfigurationException(org.mifos.config.exceptions.ConfigurationException) MeetingException(org.mifos.application.meeting.exceptions.MeetingException) MeetingDto(org.mifos.dto.domain.MeetingDto) PrdOfferingDto(org.mifos.dto.domain.PrdOfferingDto) CustomValueDto(org.mifos.application.master.business.CustomValueDto) ValueListElement(org.mifos.dto.domain.ValueListElement) MifosRuntimeException(org.mifos.core.MifosRuntimeException)

Example 2 with FundBO

use of org.mifos.accounts.fund.business.FundBO in project head by mifos.

the class LoanAccountServiceFacadeWebTier method assembleLoanAccountDetail.

private LoanAccountDetail assembleLoanAccountDetail(CreateLoanAccount loanAccountInfo) {
    CustomerBO customer = this.customerDao.findCustomerById(loanAccountInfo.getCustomerId());
    LoanOfferingBO loanProduct = this.loanProductDao.findById(loanAccountInfo.getProductId());
    Money loanAmount = new Money(loanProduct.getCurrency(), loanAccountInfo.getLoanAmount());
    AccountState accountStateType = AccountState.fromShort(loanAccountInfo.getAccountState().shortValue());
    FundBO fund = null;
    if (loanAccountInfo.getSourceOfFundId() != null) {
        fund = this.fundDao.findById(loanAccountInfo.getSourceOfFundId().shortValue());
    }
    return new LoanAccountDetail(customer, loanProduct, loanAmount, accountStateType, fund);
}
Also used : Money(org.mifos.framework.util.helpers.Money) FundBO(org.mifos.accounts.fund.business.FundBO) LoanOfferingBO(org.mifos.accounts.productdefinition.business.LoanOfferingBO) CustomerBO(org.mifos.customers.business.CustomerBO) LoanAccountDetail(org.mifos.clientportfolio.newloan.domain.LoanAccountDetail) AccountState(org.mifos.accounts.util.helpers.AccountState)

Example 3 with FundBO

use of org.mifos.accounts.fund.business.FundBO in project head by mifos.

the class LoanPrdAction method getFundsFromList.

private List<FundBO> getFundsFromList(List<FundBO> funds, String[] fundsSelected) {
    logger.debug("start getFundsFromList method of Loan Product Action ");
    List<FundBO> fundList = new ArrayList<FundBO>();
    if (fundsSelected != null && fundsSelected.length > 0 && funds != null && funds.size() > 0) {
        for (String fundSelected : fundsSelected) {
            FundBO fund = getFundFromList(funds, fundSelected);
            if (fund != null) {
                fundList.add(fund);
            }
        }
    }
    logger.debug("getFundsFromList method of Loan Product Action called");
    return fundList;
}
Also used : FundBO(org.mifos.accounts.fund.business.FundBO) ArrayList(java.util.ArrayList)

Example 4 with FundBO

use of org.mifos.accounts.fund.business.FundBO in project head by mifos.

the class WebTierFundServiceFacade method createFund.

@Override
public void createFund(FundDto fundDto) {
    List<FundCodeEntity> fundCodeEntities = fundDao.findAllFundCodes();
    Short fundCodeId = Short.valueOf(fundDto.getCode().getId());
    FundCodeEntity fundCode = null;
    for (FundCodeEntity fundCodeEntity : fundCodeEntities) {
        if (fundCodeEntity.getFundCodeId().equals(fundCodeId)) {
            fundCode = fundCodeEntity;
            break;
        }
    }
    FundBO fundBO = new FundBO(fundCode, fundDto.getName());
    if (this.fundDao.countOfFundByName(fundDto.getName().trim()) > 0) {
        throw new org.mifos.service.BusinessRuleException(FundConstants.DUPLICATE_FUNDNAME_EXCEPTION);
    }
    try {
        StaticHibernateUtil.startTransaction();
        this.fundDao.save(fundBO);
        StaticHibernateUtil.commitTransaction();
    } catch (Exception e) {
        StaticHibernateUtil.rollbackTransaction();
        throw new MifosRuntimeException(e.getMessage(), e);
    } finally {
        StaticHibernateUtil.closeSession();
    }
}
Also used : FundCodeEntity(org.mifos.application.master.business.FundCodeEntity) BusinessRuleException(org.mifos.service.BusinessRuleException) FundBO(org.mifos.accounts.fund.business.FundBO) BusinessRuleException(org.mifos.service.BusinessRuleException) MifosRuntimeException(org.mifos.core.MifosRuntimeException) MifosRuntimeException(org.mifos.core.MifosRuntimeException)

Example 5 with FundBO

use of org.mifos.accounts.fund.business.FundBO in project head by mifos.

the class LoanPrdActionStrutsTest method testManage.

@Test
public void testManage() throws Exception {
    loanOffering = createLoanOfferingBO("Loan Offering", "LOAN");
    setRequestPathInfo("/loanproductaction.do");
    addRequestParameter("method", "manage");
    addRequestParameter("prdOfferingId", loanOffering.getPrdOfferingId().toString());
    addRequestParameter(Constants.CURRENTFLOWKEY, flowKey);
    performNoErrors();
    verifyForward(ActionForwards.manage_success.toString());
    List<ProductCategoryBO> productCategories = (List<ProductCategoryBO>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANPRODUCTCATEGORYLIST, request);
    Assert.assertEquals("The size of master data for categories", 1, productCategories.size());
    for (ProductCategoryBO productCategory : productCategories) {
        Assert.assertNotNull(productCategory.getProductType());
    }
    Assert.assertEquals("The size of applicable list", 2, ((List<MasterDataEntity>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANAPPLFORLIST, request)).size());
    Assert.assertEquals("The size of grace period types list", 3, ((List<MasterDataEntity>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANGRACEPERIODTYPELIST, request)).size());
    Assert.assertEquals("The size of interest types list", 4, ((List<MasterDataEntity>) SessionUtils.getAttribute(ProductDefinitionConstants.INTERESTTYPESLIST, request)).size());
    Assert.assertEquals("The size of applicable list", 10, ((List<GLCodeEntity>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANPRICIPALGLCODELIST, request)).size());
    Assert.assertEquals("The size of applicable list", 3, ((List<GLCodeEntity>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANINTERESTGLCODELIST, request)).size());
    List<FundBO> funds = (List<FundBO>) SessionUtils.getAttribute(ProductDefinitionConstants.SRCFUNDSLIST, request);
    Assert.assertNotNull(funds);
    List<FeeDto> fees = (List<FeeDto>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANFEESLIST, request);
    Assert.assertNull(fees);
    List<FeeBO> productFees = (List<FeeBO>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANPRDFEE, request);
    Assert.assertNotNull(productFees);
    List<FeeDto> selectedFees = (List<FeeDto>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANPRDFEESELECTEDLIST, request);
    Assert.assertNotNull(selectedFees);
    List<FundBO> selectedFunds = (List<FundBO>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANPRDFUNDSELECTEDLIST, request);
    Assert.assertNotNull(selectedFunds);
    Assert.assertEquals("The size of applicable status list", 2, ((List<PrdStatusEntity>) SessionUtils.getAttribute(ProductDefinitionConstants.LOANPRDSTATUSLIST, request)).size());
    LoanPrdActionForm loanPrdActionForm = (LoanPrdActionForm) request.getSession().getAttribute(ProductDefinitionConstants.LOANPRODUCTACTIONFORM);
    Assert.assertNotNull(loanPrdActionForm);
    Assert.assertEquals(loanOffering.getPrdOfferingId().toString(), loanPrdActionForm.getPrdOfferingId());
    Assert.assertEquals(loanOffering.getPrdOfferingName(), loanPrdActionForm.getPrdOfferingName());
    Assert.assertEquals(loanOffering.getPrdOfferingShortName(), loanPrdActionForm.getPrdOfferingShortName());
    Assert.assertEquals(loanOffering.getPrdCategory().getProductCategoryID().toString(), loanPrdActionForm.getPrdCategory());
    Assert.assertEquals(loanOffering.getStatus().getValue().toString(), loanPrdActionForm.getPrdStatus());
    Assert.assertEquals(loanOffering.getPrdApplicableMasterEnum(), loanPrdActionForm.getPrdApplicableMasterEnum());
    Assert.assertEquals(DateUtils.getUserLocaleDate(TestObjectFactory.getContext().getPreferredLocale(), DateUtils.toDatabaseFormat(loanOffering.getStartDate())), loanPrdActionForm.getStartDate());
    if (loanOffering.getEndDate() != null) {
        Assert.assertEquals(DateUtils.getUserLocaleDate(TestObjectFactory.getContext().getPreferredLocale(), DateUtils.toDatabaseFormat(loanOffering.getEndDate())), loanPrdActionForm.getEndDate());
    } else {
        Assert.assertNull(loanPrdActionForm.getEndDate());
    }
    Assert.assertEquals(loanOffering.getDescription(), loanPrdActionForm.getDescription());
    Assert.assertEquals(loanOffering.getGracePeriodType().getId().toString(), loanPrdActionForm.getGracePeriodType());
    Assert.assertEquals(loanOffering.getGracePeriodDuration().toString(), loanPrdActionForm.getGracePeriodDuration());
    Assert.assertEquals(loanOffering.getInterestTypes().getId().toString(), loanPrdActionForm.getInterestTypes());
    Set<LoanAmountSameForAllLoanBO> loanAmountSameForAllLoan = loanOffering.getLoanAmountSameForAllLoan();
    Assert.assertNotNull(loanAmountSameForAllLoan);
    Set<NoOfInstallSameForAllLoanBO> noOfInstallSameForAllLoan = loanOffering.getNoOfInstallSameForAllLoan();
    Assert.assertNotNull(noOfInstallSameForAllLoan);
    Assert.assertEquals(loanOffering.getMaxInterestRate().toString(), loanPrdActionForm.getMaxInterestRate());
    Assert.assertEquals(loanOffering.getMinInterestRate().toString(), loanPrdActionForm.getMinInterestRate());
    Assert.assertEquals(loanOffering.getDefInterestRate().toString(), loanPrdActionForm.getDefInterestRate());
    Assert.assertEquals(loanOffering.isIntDedDisbursement(), loanPrdActionForm.isIntDedAtDisbValue());
    Assert.assertEquals(loanOffering.isPrinDueLastInst(), loanPrdActionForm.isPrinDueLastInstValue());
    Assert.assertEquals(loanOffering.isIncludeInLoanCounter(), loanPrdActionForm.isLoanCounterValue());
    Assert.assertEquals(loanOffering.getLoanOfferingMeeting().getMeeting().getMeetingDetails().getRecurAfter().toString(), loanPrdActionForm.getRecurAfter());
    Assert.assertEquals(loanOffering.getLoanOfferingMeeting().getMeeting().getMeetingDetails().getRecurrenceType().getRecurrenceId().toString(), loanPrdActionForm.getFreqOfInstallments());
    Assert.assertEquals(loanOffering.getPrincipalGLcode().getGlcodeId().toString(), loanPrdActionForm.getPrincipalGLCode());
    Assert.assertEquals(loanOffering.getInterestGLcode().getGlcodeId().toString(), loanPrdActionForm.getInterestGLCode());
    Assert.assertEquals(loanOffering.getLoanOfferingFees().size(), (selectedFees).size());
    Assert.assertEquals(loanOffering.getLoanOfferingFunds().size(), (selectedFunds).size());
}
Also used : LoanPrdActionForm(org.mifos.accounts.productdefinition.struts.actionforms.LoanPrdActionForm) ProductCategoryBO(org.mifos.accounts.productdefinition.business.ProductCategoryBO) FundBO(org.mifos.accounts.fund.business.FundBO) MasterDataEntity(org.mifos.application.master.business.MasterDataEntity) NoOfInstallSameForAllLoanBO(org.mifos.accounts.productdefinition.business.NoOfInstallSameForAllLoanBO) FeeDto(org.mifos.accounts.fees.business.FeeDto) GLCodeEntity(org.mifos.accounts.financial.business.GLCodeEntity) List(java.util.List) FeeBO(org.mifos.accounts.fees.business.FeeBO) PrdStatusEntity(org.mifos.accounts.productdefinition.business.PrdStatusEntity) LoanAmountSameForAllLoanBO(org.mifos.accounts.productdefinition.business.LoanAmountSameForAllLoanBO) Test(org.junit.Test)

Aggregations

FundBO (org.mifos.accounts.fund.business.FundBO)20 FeeBO (org.mifos.accounts.fees.business.FeeBO)10 ArrayList (java.util.ArrayList)8 Test (org.junit.Test)7 MifosRuntimeException (org.mifos.core.MifosRuntimeException)7 AmountFeeBO (org.mifos.accounts.fees.business.AmountFeeBO)5 GLCodeEntity (org.mifos.accounts.financial.business.GLCodeEntity)5 LoanOfferingBO (org.mifos.accounts.productdefinition.business.LoanOfferingBO)5 ProductCategoryBO (org.mifos.accounts.productdefinition.business.ProductCategoryBO)5 PenaltyBO (org.mifos.accounts.penalties.business.PenaltyBO)4 InterestTypesEntity (org.mifos.application.master.business.InterestTypesEntity)4 PersistenceException (org.mifos.framework.exceptions.PersistenceException)4 List (java.util.List)3 FeeDto (org.mifos.accounts.fees.business.FeeDto)3 FeeFrequencyTypeEntity (org.mifos.accounts.fees.business.FeeFrequencyTypeEntity)3 FeePaymentEntity (org.mifos.accounts.fees.business.FeePaymentEntity)3 GracePeriodTypeEntity (org.mifos.accounts.productdefinition.business.GracePeriodTypeEntity)3 PrdApplicableMasterEntity (org.mifos.accounts.productdefinition.business.PrdApplicableMasterEntity)3 PrdStatusEntity (org.mifos.accounts.productdefinition.business.PrdStatusEntity)3 MeetingBO (org.mifos.application.meeting.business.MeetingBO)3