MinimumBalance,MaximunBalance fields added for saving product
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -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()) {
|
||||
|
||||
+24
-1
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
+22
-1
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+5
-3
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+10
-2
@@ -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;
|
||||
}
|
||||
|
||||
+27
-1
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+11
-2
@@ -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);
|
||||
}
|
||||
|
||||
+5
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user