use of org.mifos.application.master.business.MifosCurrency in project head by mifos.
the class MoneyCompositeUserType method nullSafeGet.
@Override
public Object nullSafeGet(ResultSet resultSet, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
MifosCurrency currency = null;
if (resultSet == null) {
return null;
}
Short currencyId = resultSet.getShort(names[0]);
//Configuration.getInstance().getSystemConfig().getCurrency();
MifosCurrency configCurrency = getDefaultCurrency();
// has been done so that there is a compatibility with M1 code
if (currencyId == null || currencyId.shortValue() == 0 || currencyId.equals(configCurrency.getCurrencyId())) {
currency = configCurrency;
} else {
currency = AccountingRules.getCurrencyByCurrencyId(currencyId);
}
BigDecimal value = resultSet.getBigDecimal(names[1]);
return value == null ? new Money(currency, BigDecimal.valueOf(0)) : new Money(currency, value);
}
use of org.mifos.application.master.business.MifosCurrency in project head by mifos.
the class LoanBOTestUtils method createLoanAccountWithDisbursement.
/**
* Like
* {@link #createLoanAccount(String, CustomerBO, AccountState, Date, LoanOfferingBO)}
* but differs in various ways.
*
* Note: the manipulation done in this method looks very suspicious and
* possibly wrong. Tests that use this method should be considered as
* suspect.
*/
public static LoanBO createLoanAccountWithDisbursement(final CustomerBO customer, final AccountState state, final Date startDate, final LoanOfferingBO loanOffering, final int disbursalType, final Short noOfInstallments) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(startDate);
MeetingBO meeting = TestObjectFactory.createLoanMeeting(customer.getCustomerMeeting().getMeeting());
List<Date> meetingDates = TestObjectFactory.getMeetingDates(customer.getOfficeId(), meeting, 6);
MifosCurrency currency = TestUtils.RUPEE;
List<CreateAccountFeeDto> accountFees = new ArrayList<CreateAccountFeeDto>();
AmountFeeBO maintanenceFee = (AmountFeeBO) TestObjectFactory.createPeriodicAmountFee("Mainatnence Fee", FeeCategory.LOAN, "100", RecurrenceType.WEEKLY, Short.valueOf("1"));
IntegrationTestObjectMother.saveFee(maintanenceFee);
accountFees.add(new CreateAccountFeeDto(maintanenceFee.getFeeId().intValue(), maintanenceFee.getFeeAmount().toString()));
AccountFeesEntity accountDisbursementFee = null;
AmountFeeBO disbursementFee = null;
AccountFeesEntity accountDisbursementFee2 = null;
AmountFeeBO disbursementFee2 = null;
if (disbursalType == 1 || disbursalType == 2) {
disbursementFee = (AmountFeeBO) TestObjectFactory.createOneTimeAmountFee("Disbursement Fee 1", FeeCategory.LOAN, "10", FeePayment.TIME_OF_DISBURSEMENT);
IntegrationTestObjectMother.saveFee(disbursementFee);
accountFees.add(new CreateAccountFeeDto(disbursementFee.getFeeId().intValue(), disbursementFee.getFeeAmount().toString()));
disbursementFee2 = (AmountFeeBO) TestObjectFactory.createOneTimeAmountFee("Disbursement Fee 2", FeeCategory.LOAN, "20", FeePayment.TIME_OF_DISBURSEMENT);
IntegrationTestObjectMother.saveFee(disbursementFee2);
accountFees.add(new CreateAccountFeeDto(disbursementFee2.getFeeId().intValue(), disbursementFee2.getFeeAmount().toString()));
}
BigDecimal loanAmount = BigDecimal.valueOf(DEFAULT_LOAN_AMOUNT);
BigDecimal minAllowedLoanAmount = loanAmount;
BigDecimal maxAllowedLoanAmount = loanAmount;
Double interestRate = Double.valueOf("10.0");
LocalDate disbursementDate = new LocalDate(meetingDates.get(0));
int numberOfInstallments = noOfInstallments;
int minAllowedNumberOfInstallments = loanOffering.getEligibleInstallmentSameForAllLoan().getMaxNoOfInstall();
int maxAllowedNumberOfInstallments = loanOffering.getEligibleInstallmentSameForAllLoan().getMaxNoOfInstall();
int graceDuration = 0;
Integer sourceOfFundId = null;
Integer loanPurposeId = null;
Integer collateralTypeId = null;
String collateralNotes = null;
String externalId = null;
boolean repaymentScheduleIndependentOfCustomerMeeting = false;
RecurringSchedule recurringSchedule = null;
CreateLoanAccount createLoanAccount = new CreateLoanAccount(customer.getCustomerId(), loanOffering.getPrdOfferingId().intValue(), state.getValue().intValue(), loanAmount, minAllowedLoanAmount, maxAllowedLoanAmount, interestRate, disbursementDate, null, numberOfInstallments, minAllowedNumberOfInstallments, maxAllowedNumberOfInstallments, graceDuration, sourceOfFundId, loanPurposeId, collateralTypeId, collateralNotes, externalId, repaymentScheduleIndependentOfCustomerMeeting, recurringSchedule, accountFees, new ArrayList<CreateAccountPenaltyDto>());
SecurityContext securityContext = new SecurityContextImpl();
MifosUser principal = new MifosUserBuilder().nonLoanOfficer().withAdminRole().build();
Authentication authentication = new TestingAuthenticationToken(principal, principal);
securityContext.setAuthentication(authentication);
SecurityContextHolder.setContext(securityContext);
LoanBO loan = IntegrationTestObjectMother.createClientLoan(createLoanAccount);
loan.updateDetails(TestUtils.makeUser());
AccountFeesEntity accountPeriodicFee = new AccountFeesEntity(loan, maintanenceFee, new Double("10.0"));
AccountTestUtils.addAccountFees(accountPeriodicFee, loan);
if (disbursalType == 1 || disbursalType == 2) {
accountDisbursementFee = new AccountFeesEntity(loan, disbursementFee, new Double("10.0"));
AccountTestUtils.addAccountFees(accountDisbursementFee, loan);
accountDisbursementFee2 = new AccountFeesEntity(loan, disbursementFee2, new Double("20.0"));
AccountTestUtils.addAccountFees(accountDisbursementFee2, loan);
}
loan.setLoanMeeting(meeting);
if (// 2-Interest At Disbursement
disbursalType == 2) {
loan.setInterestDeductedAtDisbursement(true);
meetingDates = TestObjectFactory.getMeetingDates(customer.getOfficeId(), loan.getLoanMeeting(), 6);
short i = 0;
for (Date date : meetingDates) {
if (i == 0) {
i++;
loan.setDisbursementDate(date);
LoanScheduleEntity actionDate = (LoanScheduleEntity) loan.getAccountActionDate(i);
actionDate.setActionDate(new java.sql.Date(date.getTime()));
actionDate.setInterest(new Money(currency, "12.0"));
actionDate.setPaymentStatus(PaymentStatus.UNPAID);
AccountTestUtils.addAccountActionDate(actionDate, loan);
// periodic fee
AccountFeesActionDetailEntity accountFeesaction = new LoanFeeScheduleEntity(actionDate, maintanenceFee, accountPeriodicFee, new Money(currency, "10.0"));
setFeeAmountPaid(accountFeesaction, new Money(currency, "0.0"));
actionDate.addAccountFeesAction(accountFeesaction);
// dibursement fee one
AccountFeesActionDetailEntity accountFeesaction1 = new LoanFeeScheduleEntity(actionDate, disbursementFee, accountDisbursementFee, new Money(currency, "10.0"));
setFeeAmountPaid(accountFeesaction1, new Money(currency, "0.0"));
actionDate.addAccountFeesAction(accountFeesaction1);
// disbursementfee2
AccountFeesActionDetailEntity accountFeesaction2 = new LoanFeeScheduleEntity(actionDate, disbursementFee2, accountDisbursementFee2, new Money(currency, "20.0"));
setFeeAmountPaid(accountFeesaction2, new Money(currency, "0.0"));
actionDate.addAccountFeesAction(accountFeesaction2);
continue;
}
i++;
LoanScheduleEntity actionDate = (LoanScheduleEntity) loan.getAccountActionDate(i);
actionDate.setActionDate(new java.sql.Date(date.getTime()));
actionDate.setPrincipal(new Money(currency, "100.0"));
actionDate.setInterest(new Money(currency, "12.0"));
actionDate.setPaymentStatus(PaymentStatus.UNPAID);
AccountTestUtils.addAccountActionDate(actionDate, loan);
AccountFeesActionDetailEntity accountFeesaction = new LoanFeeScheduleEntity(actionDate, maintanenceFee, accountPeriodicFee, new Money(currency, "100.0"));
setFeeAmountPaid(accountFeesaction, new Money(currency, "0.0"));
actionDate.addAccountFeesAction(accountFeesaction);
}
} else if (disbursalType == 1 || disbursalType == 3) {
loan.setInterestDeductedAtDisbursement(false);
meetingDates = TestObjectFactory.getMeetingDates(customer.getOfficeId(), loan.getLoanMeeting(), 6);
short i = 0;
for (Date date : meetingDates) {
if (i == 0) {
i++;
loan.setDisbursementDate(date);
continue;
}
LoanScheduleEntity actionDate = (LoanScheduleEntity) loan.getAccountActionDate(i++);
actionDate.setActionDate(new java.sql.Date(date.getTime()));
actionDate.setPrincipal(new Money(currency, "100.0"));
actionDate.setInterest(new Money(currency, "12.0"));
actionDate.setPaymentStatus(PaymentStatus.UNPAID);
AccountTestUtils.addAccountActionDate(actionDate, loan);
AccountFeesActionDetailEntity accountFeesaction = new LoanFeeScheduleEntity(actionDate, maintanenceFee, accountPeriodicFee, new Money(currency, "100.0"));
setFeeAmountPaid(accountFeesaction, new Money(currency, "0.0"));
actionDate.addAccountFeesAction(accountFeesaction);
}
}
GracePeriodTypeEntity gracePeriodType = new GracePeriodTypeEntity(GraceType.NONE);
loan.setGracePeriodType(gracePeriodType);
loan.setCreatedBy(Short.valueOf("1"));
// Set collateral type to lookup id 109, which references the lookup
// value 'Type 1'
loan.setCollateralTypeId(Integer.valueOf("109"));
InterestTypesEntity interestTypes = new InterestTypesEntity(InterestType.FLAT);
loan.setInterestType(interestTypes);
loan.setInterestRate(10.0);
loan.setCreatedDate(new Date(System.currentTimeMillis()));
setLoanSummary(loan, currency);
return loan;
}
use of org.mifos.application.master.business.MifosCurrency in project head by mifos.
the class LoanAccountServiceFacadeWebTier method validateInstallmentSchedule.
@Override
public Errors validateInstallmentSchedule(List<LoanCreationInstallmentDto> dtoInstallments, BigDecimal minInstallmentAmount) {
MifosCurrency currency = Money.getDefaultCurrency();
List<RepaymentScheduleInstallment> installments = new ArrayList<RepaymentScheduleInstallment>();
for (LoanCreationInstallmentDto dto : dtoInstallments) {
Money principal = new Money(currency, dto.getPrincipal());
Money interest = new Money(currency, dto.getInterest());
Money fees = new Money(currency, dto.getFees());
Money miscFees = new Money(currency);
Money miscPenalty = new Money(currency);
RepaymentScheduleInstallment installment = new RepaymentScheduleInstallment(dto.getInstallmentNumber(), dto.getDueDate(), principal, interest, fees, miscFees, miscPenalty);
installment.setTotalAndTotalValue(new Money(currency, dto.getTotal()));
installments.add(installment);
}
return installmentsValidator.validateInstallmentSchedule(installments, minInstallmentAmount);
}
use of org.mifos.application.master.business.MifosCurrency in project head by mifos.
the class SavingsProductAssembler method fromDto.
public SavingsOfferingBO fromDto(MifosUser user, SavingsProductDto savingsProductRequest) {
try {
// FIXME - keithw - this is general assembler common to both savings and loans i.e. all products. so
// ProductDao and ProductAssembler
ProductDetailsDto productDetails = savingsProductRequest.getProductDetails();
String name = productDetails.getName();
String shortName = productDetails.getShortName();
String description = productDetails.getDescription();
Integer category = productDetails.getCategory();
ProductCategoryBO productCategory = this.loanProductDao.findActiveProductCategoryById(category);
DateTime startDate = productDetails.getStartDate();
DateTime endDate = productDetails.getEndDate();
ApplicableTo applicableTo = ApplicableTo.fromInt(productDetails.getApplicableFor());
PrdApplicableMasterEntity applicableToEntity = this.loanProductDao.findApplicableProductType(applicableTo);
PrdStatusEntity activeStatus = new PrdOfferingPersistence().getPrdStatus(PrdStatus.SAVINGS_ACTIVE);
PrdStatusEntity inActiveStatus = new PrdOfferingPersistence().getPrdStatus(PrdStatus.SAVINGS_INACTIVE);
PrdStatusEntity selectedStatus = activeStatus;
if (productDetails.getStatus() != null && inActiveStatus.getOfferingStatusId().equals(productDetails.getStatus().shortValue())) {
selectedStatus = inActiveStatus;
}
String globalNum = generateProductGlobalNum(user);
// savings specific
SavingsType savingsType = SavingsType.fromInt(savingsProductRequest.getDepositType());
SavingsTypeEntity savingsTypeEntity = this.loanProductDao.retrieveSavingsType(savingsType);
RecommendedAmntUnitEntity recommendedAmntUnitEntity = null;
if (savingsProductRequest.getGroupMandatorySavingsType() != null) {
RecommendedAmountUnit recommendedAmountType = RecommendedAmountUnit.fromInt(savingsProductRequest.getGroupMandatorySavingsType());
recommendedAmntUnitEntity = this.loanProductDao.retrieveRecommendedAmountType(recommendedAmountType);
}
Money amountForDeposit = new Money(Money.getDefaultCurrency(), BigDecimal.valueOf(savingsProductRequest.getAmountForDeposit()));
Money maxWithdrawal = new Money(Money.getDefaultCurrency(), BigDecimal.valueOf(savingsProductRequest.getMaxWithdrawal()));
// interest specific
BigDecimal interestRate = savingsProductRequest.getInterestRate();
InterestCalcType interestCalcType = InterestCalcType.fromInt(savingsProductRequest.getInterestCalculationType());
InterestCalcTypeEntity interestCalcTypeEntity = this.savingsProductDao.retrieveInterestCalcType(interestCalcType);
RecurrenceType recurrence = RecurrenceType.fromInt(savingsProductRequest.getInterestCalculationFrequencyPeriod().shortValue());
Integer every = savingsProductRequest.getInterestCalculationFrequency();
MeetingBO interestCalculationMeeting = new MeetingBO(recurrence, every.shortValue(), new Date(), MeetingType.SAVINGS_INTEREST_CALCULATION_TIME_PERIOD);
Integer interestPostingEveryMonthFreq = savingsProductRequest.getInterestPostingFrequency();
RecurrenceType interestPostingRecurrenceType = null;
if (savingsProductRequest.isDailyPosting()) {
interestPostingRecurrenceType = RecurrenceType.DAILY;
} else {
interestPostingRecurrenceType = RecurrenceType.MONTHLY;
}
MeetingBO interestPostingMeeting = new MeetingBO(interestPostingRecurrenceType, interestPostingEveryMonthFreq.shortValue(), new Date(), MeetingType.SAVINGS_INTEREST_POSTING);
Money minAmountForCalculation = new Money(Money.getDefaultCurrency(), savingsProductRequest.getMinBalanceForInterestCalculation());
GLCodeEntity depositGlEntity = this.generalLedgerDao.findGlCodeById(savingsProductRequest.getDepositGlCode().shortValue());
GLCodeEntity interestGlEntity = this.generalLedgerDao.findGlCodeById(savingsProductRequest.getInterestGlCode().shortValue());
MifosCurrency currency = Money.getDefaultCurrency();
return SavingsOfferingBO.createNew(user.getUserId(), globalNum, name, shortName, description, productCategory, startDate, endDate, applicableToEntity, currency, selectedStatus, savingsTypeEntity, recommendedAmntUnitEntity, amountForDeposit, maxWithdrawal, interestRate, interestCalcTypeEntity, interestCalculationMeeting, interestPostingMeeting, minAmountForCalculation, depositGlEntity, interestGlEntity);
} catch (PersistenceException e) {
throw new MifosRuntimeException(e);
} catch (MeetingException e) {
throw new MifosRuntimeException(e);
}
}
use of org.mifos.application.master.business.MifosCurrency in project head by mifos.
the class LoanAccountActionFormTest method setUp.
@Before
public void setUp() throws Exception {
form = new LoanAccountActionForm();
paymentMock = createMock(PaymentDataHtmlBean.class);
expect(paymentMock.hasTotalAmount()).andReturn(true);
actionErrors = new ActionErrors();
locale = new Locale("en", "GB");
installmentBuilder = new RepaymentScheduleInstallmentBuilder(locale);
rupee = new MifosCurrency(Short.valueOf("1"), "Rupee", BigDecimal.valueOf(1), "INR");
}
Aggregations