/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.ui.core.controller; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.joda.time.LocalDate; import org.mifos.application.servicefacade.ClientServiceFacade; import org.mifos.application.servicefacade.SavingsServiceFacade; import org.mifos.dto.domain.CustomerDto; import org.mifos.dto.domain.CustomerSearchDto; import org.mifos.dto.domain.CustomerSearchResultDto; import org.mifos.dto.domain.FundTransferDto; import org.mifos.dto.domain.SavingsDetailDto; import org.mifos.dto.screen.CustomerSearchResultsDto; import org.mifos.dto.screen.MessageDto; import org.mifos.dto.screen.SearchDetailsDto; import org.mifos.service.BusinessRuleException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @Controller public class FundTransferController { private static final Short ACCOUNT_ACTIVE = 16; private static final Short ACCOUNT_INACTIVE = 18; private SavingsServiceFacade savingsServiceFacade; private ClientServiceFacade clientServiceFacade; @Autowired public void setSavingsServiceFacade(SavingsServiceFacade savingsServiceFacade) { this.savingsServiceFacade = savingsServiceFacade; } @Autowired public void setClientServiceFacade(ClientServiceFacade clientServiceFacade) { this.clientServiceFacade = clientServiceFacade; } // All methods are called by Spring Webflow public CustomerSearchResultsDto searchCustomers(CustomerSearchFormBean formBean) { Integer searchCap = 1000; CustomerSearchDto customerSearchDto = new CustomerSearchDto(formBean.getSearchString(), Integer.valueOf(1), searchCap); List<CustomerSearchResultDto> pagedDetails = this.savingsServiceFacade .retrieveCustomersThatQualifyForTransfer(customerSearchDto); SearchDetailsDto searchDetails = new SearchDetailsDto(pagedDetails.size(), 1, 1, searchCap); return new CustomerSearchResultsDto(searchDetails, pagedDetails); } public List<SavingsDetailDto> retrieveSavingsAccounts(Integer targetCustomerId, String sourceAccountGlobalNum) { List<SavingsDetailDto> savingsAccs = this.clientServiceFacade.retrieveSavingsInUseForClient(targetCustomerId); if (savingsAccs == null) { savingsAccs = new ArrayList<SavingsDetailDto>(); } else { for (Iterator<SavingsDetailDto> iter = savingsAccs.iterator(); iter.hasNext();) { SavingsDetailDto savingsAccDetail = iter.next(); if (!isAccountStateOkForTransfer(savingsAccDetail.getAccountStateId()) || savingsAccDetail.getGlobalAccountNum().equals(sourceAccountGlobalNum)) { iter.remove(); } } } return savingsAccs; } public void populateFormBean(FundTransferFormBean formBean, String sourceAccGlobalNum, String targetAccGlobalNum) { if (!formBean.isAfterInit()) { SavingsDetailDto sourceAcc = this.savingsServiceFacade.retrieveSavingsDetail(sourceAccGlobalNum); SavingsDetailDto targetAcc = this.savingsServiceFacade.retrieveSavingsDetail(targetAccGlobalNum); formBean.setSourceBalance(new BigDecimal(sourceAcc.getSavingsBalance())); formBean.setTargetBalance(new BigDecimal(targetAcc.getSavingsBalance())); formBean.setSourceGlobalAccNum(sourceAccGlobalNum); formBean.setTargetGlobalAccNum(targetAccGlobalNum); formBean.setTrxnDate(new LocalDate()); formBean.setAmount(null); formBean.setReceiptId(null); formBean.setReceiptDate(null); formBean.setAfterInit(true); } } public void resetFormBean(FundTransferFormBean formBean) { formBean.setAfterInit(false); } public MessageDto applyTransfer(FundTransferFormBean formBean) { MessageDto error = null; FundTransferDto fundTransferDto = new FundTransferDto(formBean.getSourceGlobalAccNum(), formBean.getTargetGlobalAccNum(), formBean.getAmount(), formBean.getTrxnDate(), formBean.getReceiptDate(), formBean.getReceiptId()); try { this.savingsServiceFacade.fundTransfer(fundTransferDto); } catch (BusinessRuleException ex) { error = new MessageDto(ex.getMessageKey(), ex.getMessageValues()); } return error; } public CustomerDto retrieveCustomerDetails(Integer customerId) { return this.savingsServiceFacade.retreieveCustomerDetails(customerId); } public SavingsDetailDto retrieveSavingsAccDetails(String savingsGlobalNum) { return this.savingsServiceFacade.retrieveSavingsDetail(savingsGlobalNum); } private boolean isAccountStateOkForTransfer(Short accountStateId) { return accountStateId.equals(ACCOUNT_ACTIVE) || accountStateId.equals(ACCOUNT_INACTIVE); } }