/** * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mifosplatform.portfolio.account.domain; import static org.mifosplatform.portfolio.account.AccountDetailConstants.fromAccountIdParamName; import static org.mifosplatform.portfolio.account.AccountDetailConstants.fromClientIdParamName; import static org.mifosplatform.portfolio.account.AccountDetailConstants.fromOfficeIdParamName; import static org.mifosplatform.portfolio.account.AccountDetailConstants.toAccountIdParamName; import static org.mifosplatform.portfolio.account.AccountDetailConstants.toClientIdParamName; import static org.mifosplatform.portfolio.account.AccountDetailConstants.toOfficeIdParamName; import static org.mifosplatform.portfolio.account.AccountDetailConstants.transferTypeParamName; import java.util.Locale; import org.mifosplatform.infrastructure.core.api.JsonCommand; import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper; import org.mifosplatform.organisation.office.domain.Office; import org.mifosplatform.organisation.office.domain.OfficeRepository; import org.mifosplatform.portfolio.client.domain.Client; import org.mifosplatform.portfolio.client.domain.ClientRepositoryWrapper; import org.mifosplatform.portfolio.loanaccount.domain.Loan; import org.mifosplatform.portfolio.loanaccount.service.LoanAssembler; import org.mifosplatform.portfolio.savings.domain.SavingsAccount; import org.mifosplatform.portfolio.savings.domain.SavingsAccountAssembler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.google.gson.JsonElement; @Service public class AccountTransferDetailAssembler { private final ClientRepositoryWrapper clientRepository; private final OfficeRepository officeRepository; private final SavingsAccountAssembler savingsAccountAssembler; private final FromJsonHelper fromApiJsonHelper; private final LoanAssembler loanAccountAssembler; @Autowired public AccountTransferDetailAssembler(final ClientRepositoryWrapper clientRepository, final OfficeRepository officeRepository, final SavingsAccountAssembler savingsAccountAssembler, final FromJsonHelper fromApiJsonHelper, final LoanAssembler loanAccountAssembler) { this.clientRepository = clientRepository; this.officeRepository = officeRepository; this.savingsAccountAssembler = savingsAccountAssembler; this.fromApiJsonHelper = fromApiJsonHelper; this.loanAccountAssembler = loanAccountAssembler; } public AccountTransferDetails assembleSavingsToSavingsTransfer(final JsonCommand command) { final Long fromSavingsId = command.longValueOfParameterNamed(fromAccountIdParamName); final SavingsAccount fromSavingsAccount = this.savingsAccountAssembler.assembleFrom(fromSavingsId); final Long toSavingsId = command.longValueOfParameterNamed(toAccountIdParamName); final SavingsAccount toSavingsAccount = this.savingsAccountAssembler.assembleFrom(toSavingsId); return assembleSavingsToSavingsTransfer(command, fromSavingsAccount, toSavingsAccount); } public AccountTransferDetails assembleSavingsToLoanTransfer(final JsonCommand command) { final Long fromSavingsAccountId = command.longValueOfParameterNamed(fromAccountIdParamName); final SavingsAccount fromSavingsAccount = this.savingsAccountAssembler.assembleFrom(fromSavingsAccountId); final Long toLoanAccountId = command.longValueOfParameterNamed(toAccountIdParamName); final Loan toLoanAccount = this.loanAccountAssembler.assembleFrom(toLoanAccountId); return assembleSavingsToLoanTransfer(command, fromSavingsAccount, toLoanAccount); } public AccountTransferDetails assembleLoanToSavingsTransfer(final JsonCommand command) { final Long fromLoanAccountId = command.longValueOfParameterNamed(fromAccountIdParamName); final Loan fromLoanAccount = this.loanAccountAssembler.assembleFrom(fromLoanAccountId); final Long toSavingsAccountId = command.longValueOfParameterNamed(toAccountIdParamName); final SavingsAccount toSavingsAccount = this.savingsAccountAssembler.assembleFrom(toSavingsAccountId); return assembleLoanToSavingsTransfer(command, fromLoanAccount, toSavingsAccount); } public AccountTransferDetails assembleSavingsToSavingsTransfer(final JsonCommand command, final SavingsAccount fromSavingsAccount, final SavingsAccount toSavingsAccount) { final JsonElement element = command.parsedJson(); final Long fromOfficeId = this.fromApiJsonHelper.extractLongNamed(fromOfficeIdParamName, element); final Office fromOffice = this.officeRepository.findOne(fromOfficeId); final Long fromClientId = this.fromApiJsonHelper.extractLongNamed(fromClientIdParamName, element); final Client fromClient = this.clientRepository.findOneWithNotFoundDetection(fromClientId); final Long toOfficeId = this.fromApiJsonHelper.extractLongNamed(toOfficeIdParamName, element); final Office toOffice = this.officeRepository.findOne(toOfficeId); final Long toClientId = this.fromApiJsonHelper.extractLongNamed(toClientIdParamName, element); final Client toClient = this.clientRepository.findOneWithNotFoundDetection(toClientId); final Integer transfertype = this.fromApiJsonHelper.extractIntegerNamed(transferTypeParamName, element, Locale.getDefault()); return AccountTransferDetails.savingsToSavingsTransfer(fromOffice, fromClient, fromSavingsAccount, toOffice, toClient, toSavingsAccount, transfertype); } public AccountTransferDetails assembleSavingsToLoanTransfer(final JsonCommand command, final SavingsAccount fromSavingsAccount, final Loan toLoanAccount) { final JsonElement element = command.parsedJson(); final Long fromOfficeId = this.fromApiJsonHelper.extractLongNamed(fromOfficeIdParamName, element); final Office fromOffice = this.officeRepository.findOne(fromOfficeId); final Long fromClientId = this.fromApiJsonHelper.extractLongNamed(fromClientIdParamName, element); final Client fromClient = this.clientRepository.findOneWithNotFoundDetection(fromClientId); final Long toOfficeId = this.fromApiJsonHelper.extractLongNamed(toOfficeIdParamName, element); final Office toOffice = this.officeRepository.findOne(toOfficeId); final Long toClientId = this.fromApiJsonHelper.extractLongNamed(toClientIdParamName, element); final Client toClient = this.clientRepository.findOneWithNotFoundDetection(toClientId); final Integer transfertype = this.fromApiJsonHelper.extractIntegerNamed(transferTypeParamName, element, Locale.getDefault()); return AccountTransferDetails.savingsToLoanTransfer(fromOffice, fromClient, fromSavingsAccount, toOffice, toClient, toLoanAccount, transfertype); } public AccountTransferDetails assembleLoanToSavingsTransfer(final JsonCommand command, final Loan fromLoanAccount, final SavingsAccount toSavingsAccount) { final JsonElement element = command.parsedJson(); final Long fromOfficeId = this.fromApiJsonHelper.extractLongNamed(fromOfficeIdParamName, element); final Office fromOffice = this.officeRepository.findOne(fromOfficeId); final Long fromClientId = this.fromApiJsonHelper.extractLongNamed(fromClientIdParamName, element); final Client fromClient = this.clientRepository.findOneWithNotFoundDetection(fromClientId); final Long toOfficeId = this.fromApiJsonHelper.extractLongNamed(toOfficeIdParamName, element); final Office toOffice = this.officeRepository.findOne(toOfficeId); final Long toClientId = this.fromApiJsonHelper.extractLongNamed(toClientIdParamName, element); final Client toClient = this.clientRepository.findOneWithNotFoundDetection(toClientId); final Integer transfertype = this.fromApiJsonHelper.extractIntegerNamed(transferTypeParamName, element, Locale.getDefault()); return AccountTransferDetails.LoanTosavingsTransfer(fromOffice, fromClient, fromLoanAccount, toOffice, toClient, toSavingsAccount, transfertype); } public AccountTransferDetails assembleSavingsToLoanTransfer(final SavingsAccount fromSavingsAccount, final Loan toLoanAccount, Integer transferType) { final Office fromOffice = fromSavingsAccount.office(); final Client fromClient = fromSavingsAccount.getClient(); final Office toOffice = toLoanAccount.getOffice(); final Client toClient = toLoanAccount.client(); return AccountTransferDetails.savingsToLoanTransfer(fromOffice, fromClient, fromSavingsAccount, toOffice, toClient, toLoanAccount, transferType); } public AccountTransferDetails assembleSavingsToSavingsTransfer(final SavingsAccount fromSavingsAccount, final SavingsAccount toSavingsAccount, Integer transferType) { final Office fromOffice = fromSavingsAccount.office(); final Client fromClient = fromSavingsAccount.getClient(); final Office toOffice = toSavingsAccount.office(); final Client toClient = toSavingsAccount.getClient(); return AccountTransferDetails.savingsToSavingsTransfer(fromOffice, fromClient, fromSavingsAccount, toOffice, toClient, toSavingsAccount, transferType); } public AccountTransferDetails assembleLoanToSavingsTransfer(final Loan fromLoanAccount, final SavingsAccount toSavingsAccount, Integer transferType) { final Office fromOffice = fromLoanAccount.getOffice(); final Client fromClient = fromLoanAccount.client(); final Office toOffice = toSavingsAccount.office(); final Client toClient = toSavingsAccount.getClient(); return AccountTransferDetails.LoanTosavingsTransfer(fromOffice, fromClient, fromLoanAccount, toOffice, toClient, toSavingsAccount, transferType); } }