MinimumBalance,MaximunBalance fields added for saving product

This commit is contained in:
madhukar
2012-08-08 18:35:53 +05:30
parent eff8838f5b
commit c306781a46
12 changed files with 165 additions and 17 deletions
@@ -252,4 +252,16 @@ public class DataValidatorBuilder {
dataValidationErrors.add(error);
return this;
}
public DataValidatorBuilder comapareMinimumAndMaximumAmounts(BigDecimal minimumBalance,BigDecimal maximumBalance){
if(minimumBalance!=null&&maximumBalance!=null)
if(maximumBalance.compareTo(minimumBalance)==-1){
StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(resource).append(".minimum.amount.should.lessthan.maximun.amount");
StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(" minimum amount ").append(minimumBalance).append(" should less than maximum amount ").append(maximumBalance).append(".");
ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), defaultEnglishMessage.toString(), parameter, minimumBalance, maximumBalance);
dataValidationErrors.add(error);
return this;
}
return this;
}
}
@@ -72,7 +72,7 @@ public class SavingProductsApiResource {
public String retrieveAllSavingProducts(@Context final UriInfo uriInfo) {
Set<String> typicalResponseParameters = new HashSet<String>(Arrays.asList("id", "name", "description", "createdOn", "lastModifedOn",
"interestRate","currencyCode","digitsAfterDecimal"));
"interestRate","currencyCode","digitsAfterDecimal","minimumBalance","maximumBalance"));
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
if (responseParameters.isEmpty()) {
@@ -92,7 +92,7 @@ public class SavingProductsApiResource {
public String retrieveSavingProductDetails(@PathParam("productId") final Long productId, @Context final UriInfo uriInfo) {
Set<String> typicalResponseParameters = new HashSet<String>(Arrays.asList("id", "name", "description", "createdOn", "lastModifedOn",
"interestRate","currencyCode","digitsAfterDecimal"));
"interestRate","currencyCode","digitsAfterDecimal","minimumBalance","maximumBalance"));
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
if (responseParameters.isEmpty()) {
@@ -116,7 +116,7 @@ public class SavingProductsApiResource {
public String retrieveNewSavingProductDetails(@Context final UriInfo uriInfo) {
Set<String> typicalResponseParameters = new HashSet<String>(
Arrays.asList("id", "name", "description", "createdOn", "lastModifedOn","interestRate","currencyCode","digitsAfterDecimal", "currencyOptions"));
Arrays.asList("id", "name", "description", "createdOn", "lastModifedOn","interestRate","currencyCode","digitsAfterDecimal", "currencyOptions","minimumBalance","maximumBalance"));
Set<String> responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
if (responseParameters.isEmpty()) {
@@ -11,13 +11,16 @@ public class SavingProductCommand {
private final String currencyCode;
private final Integer digitsAfterDecimal;
private final BigDecimal interestRate;
private final BigDecimal minimumBalance;
private final BigDecimal maximumBalance;
private final Set<String> modifiedParameters;
public SavingProductCommand(final Set<String> modifiedParameters,
final Long id, final String name, final String description,
final String currencyCode, final Integer digitsAfterDecimal,
final BigDecimal interestRate) {
final BigDecimal interestRate, final BigDecimal minimumBalance, final BigDecimal maximumBalance) {
this.id = id;
this.name = name;
this.description = description;
@@ -25,6 +28,9 @@ public class SavingProductCommand {
this.currencyCode = currencyCode;
this.digitsAfterDecimal = digitsAfterDecimal;
this.interestRate = interestRate;
this.minimumBalance=minimumBalance;
this.maximumBalance=maximumBalance;
this.modifiedParameters = modifiedParameters;
}
@@ -53,6 +59,15 @@ public class SavingProductCommand {
return interestRate;
}
public BigDecimal getMinimumBalance() {
return minimumBalance;
}
public BigDecimal getMaximumBalance() {
return maximumBalance;
}
public boolean isNameChanged() {
return this.modifiedParameters.contains("name");
}
@@ -72,4 +87,12 @@ public class SavingProductCommand {
public boolean isInterestRateChanged() {
return this.modifiedParameters.contains("interestRate");
}
public boolean isMinimumBalanceChanged(){
return this.modifiedParameters.contains("minimumBalance");
}
public boolean isMaximumBalanceChanged(){
return this.modifiedParameters.contains("maximumBalance");
}
}
@@ -16,6 +16,8 @@ public class SavingProductData implements Serializable {
private Integer digitsAfterDecimal;
private BigDecimal interestRate = BigDecimal.ZERO;
private BigDecimal minimumBalance = BigDecimal.ZERO;
private BigDecimal maximumBalance = BigDecimal.ZERO;
private DateTime createdOn;
private DateTime lastModifedOn;
@@ -26,7 +28,7 @@ public class SavingProductData implements Serializable {
//
}
public SavingProductData(DateTime createdOn, DateTime lastModifedOn, Long id,String name, String description,BigDecimal interestRate,String currencyCode, Integer digitsAfterDecimal) {
public SavingProductData(DateTime createdOn, DateTime lastModifedOn, Long id,String name, String description,BigDecimal interestRate,String currencyCode, Integer digitsAfterDecimal,BigDecimal minimumBalance,BigDecimal maximumBalance) {
this.createdOn=createdOn;
this.lastModifedOn=lastModifedOn;
this.id=id;
@@ -35,6 +37,8 @@ public class SavingProductData implements Serializable {
this.interestRate=interestRate;
this.currencyCode=currencyCode;
this.digitsAfterDecimal=digitsAfterDecimal;
this.minimumBalance=minimumBalance;
this.maximumBalance=maximumBalance;
}
public Long getId() {
@@ -108,4 +112,21 @@ public class SavingProductData implements Serializable {
public void setCurrencyOptions(List<CurrencyData> currencyOptions) {
this.currencyOptions = currencyOptions;
}
public BigDecimal getMinimumBalance() {
return minimumBalance;
}
public void setMinimumBalance(BigDecimal minimumBalance) {
this.minimumBalance = minimumBalance;
}
public BigDecimal getMaximumBalance() {
return maximumBalance;
}
public void setMaximumBalance(BigDecimal maximumBalance) {
this.maximumBalance = maximumBalance;
}
}
@@ -1447,7 +1447,7 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
Type typeOfMap = new TypeToken<Map<String, String>>() {}.getType();
Map<String, String> requestMap = gsonConverter.fromJson(json, typeOfMap);
Set<String> supportedParams = new HashSet<String>(Arrays.asList("name","description","currencyCode", "digitsAfterDecimal","interestRate","locale"));
Set<String> supportedParams = new HashSet<String>(Arrays.asList("name","description","currencyCode", "digitsAfterDecimal","interestRate","locale","minimumBalance","maximumBalance"));
checkForUnsupportedParameters(requestMap, supportedParams);
Set<String> modifiedParameters = new HashSet<String>();
String name = extractStringParameter("name", requestMap,modifiedParameters);
@@ -1455,9 +1455,11 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
String currencyCode=extractStringParameter("currencyCode", requestMap,modifiedParameters);
Integer digitsAfterDecimalValue = extractIntegerParameter("digitsAfterDecimal", requestMap, modifiedParameters);
BigDecimal interestRate = extractBigDecimalParameter("interestRate", requestMap, modifiedParameters);
BigDecimal minimumBalance=extractBigDecimalParameter("minimumBalance", requestMap, modifiedParameters);
BigDecimal maximumBalance=extractBigDecimalParameter("maximumBalance", requestMap, modifiedParameters);
return new SavingProductCommand(modifiedParameters, resourceIdentifier,name, description,currencyCode,digitsAfterDecimalValue,interestRate);
return new SavingProductCommand(modifiedParameters, resourceIdentifier,name, description,currencyCode,digitsAfterDecimalValue,interestRate,minimumBalance,maximumBalance);
}
@Override
@@ -1465,7 +1467,7 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
Set<String> responseParameters, SavingProductData... products) {
Set<String> supportedParameters = new HashSet<String>(
Arrays.asList("id", "name", "description","createdOn", "lastModifedOn","interestRate","currencyCode","digitsAfterDecimal", "currencyOptions"));
Arrays.asList("id", "name", "description","createdOn", "lastModifedOn","interestRate","currencyCode","digitsAfterDecimal", "currencyOptions", "minimumBalance","maximumBalance"));
final Set<String> parameterNamesToSkip = new HashSet<String>();
@@ -0,0 +1,42 @@
package org.mifosng.platform.loan.domain;
public enum SavingTypeMethod {
FIXEDTERM_DEPOSITS(0,"savingtype.fixedterm"),OTHER(1,"savingtype.other"),INVALID(2,"savingtype.invalid");
private final Integer value;
private final String code;
private SavingTypeMethod(final Integer value,final String code){
this.value=value;
this.code=code;
}
public Integer getValue() {
return this.value;
}
public String getCode() {
return code;
}
public static SavingTypeMethod fromInt(final Integer selectedType){
SavingTypeMethod savingTypeMethod=null;
switch (selectedType) {
case 0:
savingTypeMethod=SavingTypeMethod.FIXEDTERM_DEPOSITS;
break;
case 1:
savingTypeMethod=SavingTypeMethod.OTHER;
break;
default:
savingTypeMethod=SavingTypeMethod.INVALID;
break;
}
return savingTypeMethod;
}
}
@@ -35,14 +35,14 @@ public class SavingProduct extends AbstractAuditableCustom<AppUser, Long> {
this.savingProductRelatedDetail = null;
}
public SavingProduct(final String name, final String description, final MonetaryCurrency currency,final BigDecimal interestRate) {
public SavingProduct(final String name, final String description, final MonetaryCurrency currency,final BigDecimal interestRate, final BigDecimal minimumBalance,final BigDecimal maximumBalance) {
this.name = name.trim();
if (StringUtils.isNotBlank(description)) {
this.description = description.trim();
} else {
this.description = null;
}
this.savingProductRelatedDetail=new SavingProductRelatedDetail(currency, interestRate);
this.savingProductRelatedDetail=new SavingProductRelatedDetail(currency, interestRate,minimumBalance,maximumBalance);
}
public String getName() {
@@ -61,6 +61,14 @@ public class SavingProduct extends AbstractAuditableCustom<AppUser, Long> {
return this.savingProductRelatedDetail.getInterestRate();
}
public BigDecimal getMinimumBalance(){
return this.savingProductRelatedDetail.getMinimumBalance();
}
public BigDecimal getMaximumBalance(){
return this.savingProductRelatedDetail.getMaximumBalance();
}
public boolean isDeleted() {
return deleted;
}
@@ -18,13 +18,23 @@ public class SavingProductRelatedDetail {
@Column(name = "interest_rate", scale = 6, precision = 19, nullable = false)
private BigDecimal interestRate;
@Column(name = "minimum_balance", scale = 6, precision = 19, nullable = false)
private BigDecimal minimumBalance;
@Column(name = "maximum_balance", scale = 6, precision = 19, nullable = false)
private BigDecimal maximumBalance;
public SavingProductRelatedDetail() {
this.interestRate=null;
this.maximumBalance=null;
this.minimumBalance=null;
}
public SavingProductRelatedDetail(final MonetaryCurrency currency,final BigDecimal interestRate) {
public SavingProductRelatedDetail(final MonetaryCurrency currency,final BigDecimal interestRate, final BigDecimal minimumBalance,final BigDecimal maximumBalance) {
this.currency=currency;
this.interestRate=interestRate;
this.minimumBalance=minimumBalance;
this.maximumBalance=maximumBalance;
}
public MonetaryCurrency getCurrency() {
@@ -35,6 +45,14 @@ public class SavingProductRelatedDetail {
return BigDecimal.valueOf(Double.valueOf(this.interestRate.stripTrailingZeros().toString()));
}
public BigDecimal getMinimumBalance(){
return BigDecimal.valueOf(Double.valueOf(this.minimumBalance.stripTrailingZeros().toString()));
}
public BigDecimal getMaximumBalance(){
return BigDecimal.valueOf(Double.valueOf(this.maximumBalance.stripTrailingZeros().toString()));
}
public void update(SavingProductCommand command){
Integer digitsAfterDecimalChanged = this.currency.getDigitsAfterDecimal();
if (command.isDigitsAfterDecimalChanged()) {
@@ -53,5 +71,13 @@ public class SavingProductRelatedDetail {
if (command.isInterestRateChanged()) {
this.interestRate = command.getInterestRate();
}
if(command.isMaximumBalanceChanged()){
this.minimumBalance=command.getMinimumBalance();
}
if(command.isMaximumBalanceChanged()){
this.maximumBalance=command.getMaximumBalance();
}
}
}
@@ -27,7 +27,12 @@ public class SavingProductCommandValidator {
baseDataValidator.reset().parameter("currencyCode").value(command.getCurrencyCode()).ignoreIfNull().notBlank();
baseDataValidator.reset().parameter("digitsAfterDecimal").value(command.getDigitsAfterDecimal()).ignoreIfNull().notNull().inMinMaxRange(0, 6);
baseDataValidator.reset().parameter("interestRate").value(command.getInterestRate()).ignoreIfNull().notBlank();
baseDataValidator.reset().anyOfNotNull(command.getName(), command.getDescription(),command.getCurrencyCode(),command.getDigitsAfterDecimal(),command.getInterestRate());
baseDataValidator.reset().parameter("maximumBalance").value(command.getMaximumBalance()).notNull();
baseDataValidator.reset().parameter("minimumBalance").value(command.getMinimumBalance()).notNull();
baseDataValidator.reset().parameter("maximumBalance").value(command.getMaximumBalance()).zeroOrPositiveAmount();
baseDataValidator.reset().parameter("minimumBalance").value(command.getMinimumBalance()).zeroOrPositiveAmount();
baseDataValidator.reset().comapareMinimumAndMaximumAmounts(command.getMinimumBalance(), command.getMaximumBalance());
baseDataValidator.reset().anyOfNotNull(command.getName(), command.getDescription(),command.getCurrencyCode(),command.getDigitsAfterDecimal(),command.getInterestRate(),command.getMinimumBalance(),command.getMaximumBalance());
if (!dataValidationErrors.isEmpty()) {
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
@@ -44,7 +49,11 @@ public class SavingProductCommandValidator {
baseDataValidator.reset().parameter("currencyCode").value(command.getCurrencyCode()).notBlank();
baseDataValidator.reset().parameter("digitsAfterDecimal").value(command.getDigitsAfterDecimal()).notNull().inMinMaxRange(0, 6);
baseDataValidator.reset().parameter("interestRate").value(command.getInterestRate()).notNull();
baseDataValidator.reset().parameter("maximumBalance").value(command.getMaximumBalance()).notNull();
baseDataValidator.reset().parameter("minimumBalance").value(command.getMinimumBalance()).notNull();
baseDataValidator.reset().parameter("maximumBalance").value(command.getMaximumBalance()).zeroOrPositiveAmount();
baseDataValidator.reset().parameter("minimumBalance").value(command.getMinimumBalance()).zeroOrPositiveAmount();
baseDataValidator.reset().comapareMinimumAndMaximumAmounts(command.getMinimumBalance(), command.getMaximumBalance());
if (!dataValidationErrors.isEmpty()) {
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
}
@@ -92,7 +92,7 @@ public class SavingProductReadPlatformServiceImpl implements
private static final class SavingProductMapper implements RowMapper<SavingProductData> {
public String savingProductSchema(){
return "sp.id as id,sp.name as name, sp.description as description,sp.currency_code as currencyCode, sp.currency_digits as currencyDigits,sp.interest_rate as interestRate,sp.created_date as createdon, sp.lastmodified_date as modifiedon, "
return "sp.id as id,sp.name as name, sp.description as description,sp.currency_code as currencyCode, sp.currency_digits as currencyDigits,sp.interest_rate as interestRate,sp.minimum_balance as minimumBalance,sp.maximum_balance as maximumBalance,sp.created_date as createdon, sp.lastmodified_date as modifiedon, "
+ "curr.name as currencyName, curr.internationalized_name_code as currencyNameCode, curr.display_symbol as currencyDisplaySymbol"
+ " from portfolio_product_savings sp join ref_currency curr on curr.code = sp.currency_code";
}
@@ -117,7 +117,10 @@ public class SavingProductReadPlatformServiceImpl implements
DateTime createdOn = JdbcSupport.getDateTime(rs, "createdon");
DateTime lastModifedOn = JdbcSupport.getDateTime(rs, "modifiedon");
return new SavingProductData(createdOn, lastModifedOn, id, name,description,interestRate,currencyCode,currencyDigits);
BigDecimal minimumBalance=rs.getBigDecimal("minimumBalance");
BigDecimal maximumBalance=rs.getBigDecimal("maximumBalance");
return new SavingProductData(createdOn, lastModifedOn, id, name,description,interestRate,currencyCode,currencyDigits,minimumBalance,maximumBalance);
}
}
@@ -34,7 +34,7 @@ public class SavingProductWritePlatformServiceJpaRepositoryImpl implements Savin
MonetaryCurrency currency = new MonetaryCurrency(command.getCurrencyCode(), command.getDigitsAfterDecimal());
SavingProduct product = new SavingProduct(command.getName(),command.getDescription(),currency,command.getInterestRate());
SavingProduct product = new SavingProduct(command.getName(),command.getDescription(),currency,command.getInterestRate(),command.getMinimumBalance(),command.getMaximumBalance());
this.savingProductRepository.save(product);
return new EntityIdentifier(product.getId());
}
@@ -59,6 +59,8 @@ public class SavingProductWritePlatformServiceJpaRepositoryImpl implements Savin
@Transactional
@Override
public EntityIdentifier deleteSavingProduct(Long productId) {
this.context.authenticatedUser();
SavingProduct product=this.savingProductRepository.findOne(productId);
if (product==null || product.isDeleted()) {
throw new ProductNotFoundException(productId);
@@ -5,7 +5,7 @@
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mifosplatform-tenants"
username="root"
password="mysql"
password="mifos"
validationQuery="select 1"
maxActive="10"
maxIdle="4"