http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java index d6aa668..0648a13 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java @@ -71,6 +71,8 @@ import org.apache.fineract.portfolio.savings.service.DepositProductReadPlatformS import org.apache.fineract.portfolio.savings.service.DepositsDropdownReadPlatformService; import org.apache.fineract.portfolio.savings.service.SavingsDropdownReadPlatformService; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; +import org.apache.fineract.portfolio.tax.data.TaxGroupData; +import org.apache.fineract.portfolio.tax.service.TaxReadPlatformService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -96,6 +98,7 @@ public class FixedDepositProductsApiResource { private final DepositsDropdownReadPlatformService depositsDropdownReadPlatformService; private final DropdownReadPlatformService dropdownReadPlatformService; private final PaymentTypeReadPlatformService paymentTypeReadPlatformService; + private final TaxReadPlatformService taxReadPlatformService; @Autowired public FixedDepositProductsApiResource(final DepositProductReadPlatformService depositProductReadPlatformService, @@ -110,7 +113,7 @@ public class FixedDepositProductsApiResource { final InterestRateChartReadPlatformService interestRateChartReadPlatformService, final DepositsDropdownReadPlatformService depositsDropdownReadPlatformService, final DropdownReadPlatformService dropdownReadPlatformService, - final PaymentTypeReadPlatformService paymentTypeReadPlatformService) { + final PaymentTypeReadPlatformService paymentTypeReadPlatformService, final TaxReadPlatformService taxReadPlatformService) { this.depositProductReadPlatformService = depositProductReadPlatformService; this.savingsDropdownReadPlatformService = savingsDropdownReadPlatformService; this.currencyReadPlatformService = currencyReadPlatformService; @@ -126,6 +129,7 @@ public class FixedDepositProductsApiResource { this.depositsDropdownReadPlatformService = depositsDropdownReadPlatformService; this.dropdownReadPlatformService = dropdownReadPlatformService; this.paymentTypeReadPlatformService = paymentTypeReadPlatformService; + this.taxReadPlatformService = taxReadPlatformService; } @POST @@ -287,6 +291,8 @@ public class FixedDepositProductsApiResource { Collection<ChargeData> penaltyOptions = this.chargeReadPlatformService.retrieveSavingsApplicablePenalties(); penaltyOptions = CollectionUtils.isEmpty(penaltyOptions) ? null : penaltyOptions; + final Collection<TaxGroupData> taxGroupOptions = this.taxReadPlatformService.retrieveTaxGroupsForLookUp(); + // interest rate chart template final InterestRateChartData chartTemplate = this.interestRateChartReadPlatformService.template(); @@ -296,14 +302,14 @@ public class FixedDepositProductsApiResource { interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, chargeOptions, penaltyOptions, chartTemplate, - preClosurePenalInterestOnTypeOptions, periodFrequencyTypeOptions); + preClosurePenalInterestOnTypeOptions, periodFrequencyTypeOptions, taxGroupOptions); } else { fixedDepositProductToReturn = FixedDepositProductData.template(currency, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, accountingRule, currencyOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, chargeOptions, penaltyOptions, chartTemplate, - preClosurePenalInterestOnTypeOptions, periodFrequencyTypeOptions); + preClosurePenalInterestOnTypeOptions, periodFrequencyTypeOptions, taxGroupOptions); } return fixedDepositProductToReturn;
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java index 1fecc1b..cd0b7b7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java @@ -71,6 +71,8 @@ import org.apache.fineract.portfolio.savings.service.DepositProductReadPlatformS import org.apache.fineract.portfolio.savings.service.DepositsDropdownReadPlatformService; import org.apache.fineract.portfolio.savings.service.SavingsDropdownReadPlatformService; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; +import org.apache.fineract.portfolio.tax.data.TaxGroupData; +import org.apache.fineract.portfolio.tax.service.TaxReadPlatformService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -96,6 +98,7 @@ public class RecurringDepositProductsApiResource { private final DepositsDropdownReadPlatformService depositsDropdownReadPlatformService; private final DropdownReadPlatformService dropdownReadPlatformService; private final PaymentTypeReadPlatformService paymentTypeReadPlatformService; + private final TaxReadPlatformService taxReadPlatformService; @Autowired public RecurringDepositProductsApiResource(final DepositProductReadPlatformService depositProductReadPlatformService, @@ -110,7 +113,7 @@ public class RecurringDepositProductsApiResource { final InterestRateChartReadPlatformService interestRateChartReadPlatformService, final DepositsDropdownReadPlatformService depositsDropdownReadPlatformService, final DropdownReadPlatformService dropdownReadPlatformService, - final PaymentTypeReadPlatformService paymentTypeReadPlatformService) { + final PaymentTypeReadPlatformService paymentTypeReadPlatformService, final TaxReadPlatformService taxReadPlatformService) { this.depositProductReadPlatformService = depositProductReadPlatformService; this.savingsDropdownReadPlatformService = savingsDropdownReadPlatformService; this.currencyReadPlatformService = currencyReadPlatformService; @@ -126,6 +129,7 @@ public class RecurringDepositProductsApiResource { this.depositsDropdownReadPlatformService = depositsDropdownReadPlatformService; this.dropdownReadPlatformService = dropdownReadPlatformService; this.paymentTypeReadPlatformService = paymentTypeReadPlatformService; + this.taxReadPlatformService = taxReadPlatformService; } @POST @@ -287,6 +291,7 @@ public class RecurringDepositProductsApiResource { // interest rate chart template final InterestRateChartData chartTemplate = this.interestRateChartReadPlatformService.template(); + final Collection<TaxGroupData> taxGroupOptions = this.taxReadPlatformService.retrieveTaxGroupsForLookUp(); RecurringDepositProductData recurringDepositProductToReturn = null; if (savingsProduct != null) { @@ -294,14 +299,14 @@ public class RecurringDepositProductsApiResource { interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, chargeOptions, penaltyOptions, chartTemplate, - preClosurePenalInterestOnTypeOptions, periodFrequencyTypeOptions); + preClosurePenalInterestOnTypeOptions, periodFrequencyTypeOptions, taxGroupOptions); } else { recurringDepositProductToReturn = RecurringDepositProductData.template(currency, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, accountingRule, currencyOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, chargeOptions, penaltyOptions, chartTemplate, - preClosurePenalInterestOnTypeOptions, periodFrequencyTypeOptions); + preClosurePenalInterestOnTypeOptions, periodFrequencyTypeOptions, taxGroupOptions); } return recurringDepositProductToReturn; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountsApiResource.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountsApiResource.java index 74e644c..dadcdca 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountsApiResource.java @@ -209,7 +209,15 @@ public class SavingsAccountsApiResource { @Path("{accountId}") @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) - public String update(@PathParam("accountId") final Long accountId, final String apiRequestBodyAsJson) { + public String update(@PathParam("accountId") final Long accountId, final String apiRequestBodyAsJson, + @QueryParam("command") final String commandParam) { + + if (is(commandParam, "updateWithHoldTax")) { + final CommandWrapper commandRequest = new CommandWrapperBuilder().withJson(apiRequestBodyAsJson).updateWithHoldTax(accountId) + .build(); + final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); + return this.toApiJsonSerializer.serialize(result); + } final CommandWrapper commandRequest = new CommandWrapperBuilder().updateSavingsAccount(accountId).withJson(apiRequestBodyAsJson) .build(); @@ -273,9 +281,9 @@ public class SavingsAccountsApiResource { if (result == null) { // - throw new UnrecognizedQueryParamException("command", commandParam, - new Object[] { "reject", "withdrawnByApplicant", "approve", "undoapproval", "activate", "calculateInterest", - "postInterest", "close", "assignSavingsOfficer", "unassignSavingsOfficer" }); + throw new UnrecognizedQueryParamException("command", commandParam, new Object[] { "reject", "withdrawnByApplicant", "approve", + "undoapproval", "activate", "calculateInterest", "postInterest", "close", "assignSavingsOfficer", + "unassignSavingsOfficer" }); } return this.toApiJsonSerializer.serialize(result); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java index 5397340..567d401 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java @@ -66,6 +66,8 @@ import org.apache.fineract.portfolio.savings.data.SavingsProductData; import org.apache.fineract.portfolio.savings.service.SavingsDropdownReadPlatformService; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; import org.apache.fineract.portfolio.savings.service.SavingsProductReadPlatformService; +import org.apache.fineract.portfolio.tax.data.TaxGroupData; +import org.apache.fineract.portfolio.tax.service.TaxReadPlatformService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @@ -87,6 +89,7 @@ public class SavingsProductsApiResource { private final ProductToGLAccountMappingReadPlatformService accountMappingReadPlatformService; private final ChargeReadPlatformService chargeReadPlatformService; private final PaymentTypeReadPlatformService paymentTypeReadPlatformService; + private final TaxReadPlatformService taxReadPlatformService; @Autowired public SavingsProductsApiResource(final SavingsProductReadPlatformService savingProductReadPlatformService, @@ -97,7 +100,8 @@ public class SavingsProductsApiResource { final ApiRequestParameterHelper apiRequestParameterHelper, final AccountingDropdownReadPlatformService accountingDropdownReadPlatformService, final ProductToGLAccountMappingReadPlatformService accountMappingReadPlatformService, - final ChargeReadPlatformService chargeReadPlatformService, PaymentTypeReadPlatformService paymentTypeReadPlatformService) { + final ChargeReadPlatformService chargeReadPlatformService, PaymentTypeReadPlatformService paymentTypeReadPlatformService, + final TaxReadPlatformService taxReadPlatformService) { this.savingProductReadPlatformService = savingProductReadPlatformService; this.dropdownReadPlatformService = dropdownReadPlatformService; this.currencyReadPlatformService = currencyReadPlatformService; @@ -109,6 +113,7 @@ public class SavingsProductsApiResource { this.accountMappingReadPlatformService = accountMappingReadPlatformService; this.chargeReadPlatformService = chargeReadPlatformService; this.paymentTypeReadPlatformService = paymentTypeReadPlatformService; + this.taxReadPlatformService = taxReadPlatformService; } @POST @@ -255,19 +260,19 @@ public class SavingsProductsApiResource { Collection<ChargeData> penaltyOptions = this.chargeReadPlatformService.retrieveSavingsApplicablePenalties(); penaltyOptions = CollectionUtils.isEmpty(penaltyOptions) ? null : penaltyOptions; - + final Collection<TaxGroupData> taxGroupOptions = this.taxReadPlatformService.retrieveTaxGroupsForLookUp(); SavingsProductData savingsProductToReturn = null; if (savingsProduct != null) { savingsProductToReturn = SavingsProductData.withTemplate(savingsProduct, currencyOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, - accountingMappingOptions, chargeOptions, penaltyOptions); + accountingMappingOptions, chargeOptions, penaltyOptions, taxGroupOptions); } else { savingsProductToReturn = SavingsProductData.template(currency, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, accountingRule, currencyOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, - paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, chargeOptions, penaltyOptions); + paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, chargeOptions, penaltyOptions, taxGroupOptions); } return savingsProductToReturn; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountData.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountData.java index 08f1cf2..41880dd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountData.java @@ -28,6 +28,7 @@ import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.staff.data.StaffData; import org.apache.fineract.portfolio.charge.data.ChargeData; +import org.apache.fineract.portfolio.tax.data.TaxGroupData; /** * Immutable data object representing abstract for Fixed and Recurring Deposit @@ -60,6 +61,8 @@ public class DepositAccountData { protected final boolean withdrawalFeeForTransfers; protected final EnumOptionData depositType; protected final BigDecimal minBalanceForInterestCalculation; + protected final boolean withHoldTax; + protected final TaxGroupData taxGroup; // associations protected final SavingsAccountSummaryData summary; @@ -92,7 +95,8 @@ public class DepositAccountData { final EnumOptionData interestCalculationType, final EnumOptionData interestCalculationDaysInYearType, final BigDecimal minRequiredOpeningBalance, final Integer lockinPeriodFrequency, final EnumOptionData lockinPeriodFrequencyType, final boolean withdrawalFeeForTransfers, - final SavingsAccountSummaryData summary, final EnumOptionData depositType, final BigDecimal minBalanceForInterestCalculation) { + final SavingsAccountSummaryData summary, final EnumOptionData depositType, final BigDecimal minBalanceForInterestCalculation, + final boolean withHoldTax, final TaxGroupData taxGroup) { final Collection<DepositProductData> productOptions = null; final Collection<StaffData> fieldOfficerOptions = null; @@ -116,7 +120,7 @@ public class DepositAccountData { fieldOfficerOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, charges, chargeOptions, accountChart, chartTemplate, depositType, - minBalanceForInterestCalculation); + minBalanceForInterestCalculation, withHoldTax, taxGroup); } public static DepositAccountData lookup(final Long id, final String accountNo, final EnumOptionData depositType) { @@ -158,6 +162,8 @@ public class DepositAccountData { final DepositAccountInterestRateChartData accountChart = null; final DepositAccountInterestRateChartData chartTemplate = null; final BigDecimal minBalanceForInterestCalculation = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; return new DepositAccountData(id, accountNo, externalId, groupId, groupName, clientId, clientName, productId, productName, fieldOfficerId, fieldOfficerName, status, timeline, currency, interestRate, interestCompoundingPeriodType, @@ -166,7 +172,7 @@ public class DepositAccountData { fieldOfficerOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, charges, chargeOptions, accountChart, chartTemplate, depositType, - minBalanceForInterestCalculation); + minBalanceForInterestCalculation, withHoldTax, taxGroup); } protected DepositAccountData(final Long id, final String accountNo, final String externalId, final Long groupId, @@ -186,7 +192,8 @@ public class DepositAccountData { final Collection<EnumOptionData> lockinPeriodFrequencyTypeOptions, final Collection<EnumOptionData> withdrawalFeeTypeOptions, final Collection<SavingsAccountChargeData> charges, final Collection<ChargeData> chargeOptions, final DepositAccountInterestRateChartData accountChart, final DepositAccountInterestRateChartData chartTemplate, - final EnumOptionData depositType, final BigDecimal minBalanceForInterestCalculation) { + final EnumOptionData depositType, final BigDecimal minBalanceForInterestCalculation, final boolean withHoldTax, + final TaxGroupData taxGroup) { this.id = id; this.accountNo = accountNo; this.externalId = externalId; @@ -233,6 +240,8 @@ public class DepositAccountData { this.chartTemplate = chartTemplate; this.depositType = depositType; this.minBalanceForInterestCalculation = minBalanceForInterestCalculation; + this.taxGroup = taxGroup; + this.withHoldTax = withHoldTax; } private SavingsAccountChargeData getWithdrawalFee() { http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java index 588f724..50c3934 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java @@ -59,6 +59,7 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.minRequi import static org.apache.fineract.portfolio.savings.SavingsApiConstants.nominalAnnualInterestRateParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.productIdParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.submittedOnDateParamName; +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withHoldTaxParamName; import java.lang.reflect.Type; import java.math.BigDecimal; @@ -120,6 +121,7 @@ public class DepositAccountDataValidator { validatePreClosureDetailForSubmit(element, baseDataValidator); validateDepositTermDeatilForSubmit(element, baseDataValidator, DepositAccountType.FIXED_DEPOSIT); validateSavingsCharges(element, baseDataValidator); + validateWithHoldTax(element, baseDataValidator); throwExceptionIfValidationWarningsExist(dataValidationErrors); } @@ -140,6 +142,7 @@ public class DepositAccountDataValidator { validatePreClosureDetailForUpdate(element, baseDataValidator); validateDepositTermDeatilForUpdate(element, baseDataValidator, DepositAccountType.FIXED_DEPOSIT); // validateSavingsCharges(element, baseDataValidator); + validateWithHoldTax(element, baseDataValidator); throwExceptionIfValidationWarningsExist(dataValidationErrors); } @@ -161,7 +164,8 @@ public class DepositAccountDataValidator { validateDepositTermDeatilForSubmit(element, baseDataValidator, DepositAccountType.RECURRING_DEPOSIT); validateRecurringDetailForSubmit(element, baseDataValidator); validateSavingsCharges(element, baseDataValidator); - + validateWithHoldTax(element, baseDataValidator); + throwExceptionIfValidationWarningsExist(dataValidationErrors); } @@ -182,6 +186,7 @@ public class DepositAccountDataValidator { validateDepositTermDeatilForUpdate(element, baseDataValidator, DepositAccountType.RECURRING_DEPOSIT); validateRecurringDetailForUpdate(element, baseDataValidator); // validateSavingsCharges(element, baseDataValidator); + validateWithHoldTax(element, baseDataValidator); throwExceptionIfValidationWarningsExist(dataValidationErrors); @@ -714,6 +719,13 @@ public class DepositAccountDataValidator { } } } + + private void validateWithHoldTax(final JsonElement element, final DataValidatorBuilder baseDataValidator){ + if (this.fromApiJsonHelper.parameterExists(withHoldTaxParamName, element)) { + final String withHoldTax = this.fromApiJsonHelper.extractStringNamed(withHoldTaxParamName, element); + baseDataValidator.reset().parameter(withHoldTaxParamName).value(withHoldTax).ignoreIfNull().validateForBooleanValue(); + } + } private void throwExceptionIfValidationWarningsExist(final List<ApiParameterError> dataValidationErrors) { if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductData.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductData.java index c388df0..bf3680e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductData.java @@ -32,6 +32,7 @@ import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.interestratechart.data.InterestRateChartData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; +import org.apache.fineract.portfolio.tax.data.TaxGroupData; /** * Immutable data object represents a partial data of Deposit Proucts. @@ -53,6 +54,8 @@ public class DepositProductData { protected final EnumOptionData lockinPeriodFrequencyType; // protected final boolean withdrawalFeeForTransfers; protected final BigDecimal minBalanceForInterestCalculation; + protected final boolean withHoldTax; + protected final TaxGroupData taxGroup; // accounting protected final EnumOptionData accountingRule; @@ -82,6 +85,7 @@ public class DepositProductData { protected final Collection<ChargeData> chargeOptions; protected final Collection<ChargeData> penaltyOptions; protected final InterestRateChartData chartTemplate; + protected final Collection<TaxGroupData> taxGroupOptions; public static DepositProductData template(final CurrencyData currency, final EnumOptionData interestCompoundingPeriodType, final EnumOptionData interestPostingPeriodType, final EnumOptionData interestCalculationType, @@ -93,7 +97,8 @@ public class DepositProductData { final Collection<EnumOptionData> lockinPeriodFrequencyTypeOptions, final Collection<EnumOptionData> withdrawalFeeTypeOptions, final Collection<PaymentTypeData> paymentTypeOptions, final Collection<EnumOptionData> accountingRuleOptions, final Map<String, List<GLAccountData>> accountingMappingOptions, final Collection<ChargeData> chargeOptions, - final Collection<ChargeData> penaltyOptions, final InterestRateChartData chartTemplate) { + final Collection<ChargeData> penaltyOptions, final InterestRateChartData chartTemplate, + final Collection<TaxGroupData> taxGroupOptions) { final Long id = null; final String name = null; @@ -109,6 +114,8 @@ public class DepositProductData { final Collection<ChargeToGLAccountMapper> feeToIncomeAccountMappings = null; final Collection<ChargeToGLAccountMapper> penaltyToIncomeAccountMappings = null; final Collection<InterestRateChartData> interestRateCharts = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; return new DepositProductData(id, name, shortName, description, currency, nominalAnnualInterestRate, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, lockinPeriodFrequency, @@ -116,7 +123,8 @@ public class DepositProductData { interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, charges, chargeOptions, penaltyOptions, feeToIncomeAccountMappings, - penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, minBalanceForInterestCalculation); + penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, minBalanceForInterestCalculation, withHoldTax, taxGroup, + taxGroupOptions); } public static DepositProductData withCharges(final DepositProductData existingProduct, final Collection<ChargeData> charges) { @@ -132,12 +140,16 @@ public class DepositProductData { existingProduct.paymentTypeOptions, existingProduct.accountingRuleOptions, existingProduct.accountingMappingOptions, charges, existingProduct.chargeOptions, existingProduct.penaltyOptions, existingProduct.feeToIncomeAccountMappings, existingProduct.penaltyToIncomeAccountMappings, existingProduct.interestRateCharts, existingProduct.chartTemplate, - existingProduct.minBalanceForInterestCalculation); + existingProduct.minBalanceForInterestCalculation, existingProduct.withHoldTax, existingProduct.taxGroup, + existingProduct.taxGroupOptions); } /** * Returns a {@link DepositProductData} that contains and exist * {@link DepositProductData} data with further template data for dropdowns. + * + * @param taxGroupOptions + * TODO */ public static DepositProductData withTemplate(final DepositProductData existingProduct, final Collection<CurrencyData> currencyOptions, final Collection<EnumOptionData> interestCompoundingPeriodTypeOptions, @@ -147,7 +159,7 @@ public class DepositProductData { final Collection<EnumOptionData> lockinPeriodFrequencyTypeOptions, final Collection<EnumOptionData> withdrawalFeeTypeOptions, final Collection<PaymentTypeData> paymentTypeOptions, final Collection<EnumOptionData> accountingRuleOptions, final Map<String, List<GLAccountData>> accountingMappingOptions, final Collection<ChargeData> chargeOptions, - final Collection<ChargeData> penaltyOptions, final InterestRateChartData chartTemplate) { + final Collection<ChargeData> penaltyOptions, final InterestRateChartData chartTemplate, Collection<TaxGroupData> taxGroupOptions) { return new DepositProductData(existingProduct.id, existingProduct.name, existingProduct.shortName, existingProduct.description, existingProduct.currency, existingProduct.nominalAnnualInterestRate, existingProduct.interestCompoundingPeriodType, @@ -159,7 +171,8 @@ public class DepositProductData { lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, existingProduct.charges, chargeOptions, penaltyOptions, existingProduct.feeToIncomeAccountMappings, existingProduct.penaltyToIncomeAccountMappings, - existingProduct.interestRateCharts, chartTemplate, existingProduct.minBalanceForInterestCalculation); + existingProduct.interestRateCharts, chartTemplate, existingProduct.minBalanceForInterestCalculation, + existingProduct.withHoldTax, existingProduct.taxGroup, taxGroupOptions); } public static DepositProductData withAccountingDetails(final DepositProductData existingProduct, @@ -180,6 +193,7 @@ public class DepositProductData { final Map<String, List<GLAccountData>> accountingMappingOptions = null; final Collection<ChargeData> chargeOptions = null; final Collection<ChargeData> penaltyOptions = null; + final Collection<TaxGroupData> taxGroupOptions = null; return new DepositProductData(existingProduct.id, existingProduct.name, existingProduct.shortName, existingProduct.description, existingProduct.currency, existingProduct.nominalAnnualInterestRate, existingProduct.interestCompoundingPeriodType, @@ -191,7 +205,7 @@ public class DepositProductData { lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, existingProduct.charges, chargeOptions, penaltyOptions, feeToIncomeAccountMappings, penaltyToIncomeAccountMappings, existingProduct.interestRateCharts, existingProduct.chartTemplate, - existingProduct.minBalanceForInterestCalculation); + existingProduct.minBalanceForInterestCalculation, existingProduct.withHoldTax, existingProduct.taxGroup, taxGroupOptions); } public static DepositProductData instance(final Long id, final String name, final String shortName, final String description, @@ -199,7 +213,7 @@ public class DepositProductData { final EnumOptionData interestPostingPeriodType, final EnumOptionData interestCalculationType, final EnumOptionData interestCalculationDaysInYearType, final Integer lockinPeriodFrequency, final EnumOptionData lockinPeriodFrequencyType, final EnumOptionData accountingType, - final BigDecimal minBalanceForInterestCalculation) { + final BigDecimal minBalanceForInterestCalculation, boolean withHoldTax, TaxGroupData taxGroup) { final Map<String, Object> accountingMappings = null; final Collection<PaymentTypeToGLAccountMapper> paymentChannelToFundSourceMappings = null; @@ -221,6 +235,7 @@ public class DepositProductData { final Collection<ChargeToGLAccountMapper> penaltyToIncomeAccountMappings = null; final Collection<InterestRateChartData> interestRateCharts = null; final InterestRateChartData chartTemplate = null; + final Collection<TaxGroupData> taxGroupOptions = null; return new DepositProductData(id, name, shortName, description, currency, nominalAnnualInterestRate, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, lockinPeriodFrequency, @@ -228,7 +243,8 @@ public class DepositProductData { interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, charges, chargeOptions, penaltyOptions, feeToIncomeAccountMappings, - penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, minBalanceForInterestCalculation); + penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, minBalanceForInterestCalculation, withHoldTax, taxGroup, + taxGroupOptions); } public static DepositProductData lookup(final Long id, final String name) { @@ -266,6 +282,9 @@ public class DepositProductData { final Collection<ChargeToGLAccountMapper> penaltyToIncomeAccountMappings = null; final Collection<InterestRateChartData> interestRateCharts = null; final InterestRateChartData chartTemplate = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; + final Collection<TaxGroupData> taxGroupOptions = null; return new DepositProductData(id, name, shortName, description, currency, nominalAnnualInterestRate, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, lockinPeriodFrequency, @@ -273,7 +292,8 @@ public class DepositProductData { interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, charges, chargeOptions, penaltyOptions, feeToIncomeAccountMappings, - penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, minBalanceForInterestCalculation); + penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, minBalanceForInterestCalculation, withHoldTax, taxGroup, + taxGroupOptions); } public static DepositProductData withInterestChart(final DepositProductData existingProduct, @@ -290,7 +310,8 @@ public class DepositProductData { existingProduct.paymentTypeOptions, existingProduct.accountingRuleOptions, existingProduct.accountingMappingOptions, existingProduct.charges, existingProduct.chargeOptions, existingProduct.penaltyOptions, existingProduct.feeToIncomeAccountMappings, existingProduct.penaltyToIncomeAccountMappings, interestRateCharts, - existingProduct.chartTemplate, existingProduct.minBalanceForInterestCalculation); + existingProduct.chartTemplate, existingProduct.minBalanceForInterestCalculation, existingProduct.withHoldTax, + existingProduct.taxGroup, existingProduct.taxGroupOptions); } protected DepositProductData(final Long id, final String name, final String shortName, final String description, @@ -311,7 +332,8 @@ public class DepositProductData { final Collection<ChargeToGLAccountMapper> feeToIncomeAccountMappings, final Collection<ChargeToGLAccountMapper> penaltyToIncomeAccountMappings, final Collection<InterestRateChartData> interestRateCharts, final InterestRateChartData chartTemplate, - final BigDecimal minBalanceForInterestCalculation) { + final BigDecimal minBalanceForInterestCalculation, final boolean withHoldTax, final TaxGroupData taxGroup, + final Collection<TaxGroupData> taxGroupOptions) { this.id = id; this.name = name; @@ -357,6 +379,9 @@ public class DepositProductData { this.activeChart = activeChart(this.interestRateCharts); this.chartTemplate = chartTemplate; this.minBalanceForInterestCalculation = minBalanceForInterestCalculation; + this.taxGroup = taxGroup; + this.withHoldTax = withHoldTax; + this.taxGroupOptions = taxGroupOptions; } public static InterestRateChartData activeChart(Collection<InterestRateChartData> interestRateCharts) { http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java index 8b0e426..19b65e2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositProductDataValidator.java @@ -39,6 +39,7 @@ import static org.apache.fineract.portfolio.savings.DepositsApiConstants.minDepo import static org.apache.fineract.portfolio.savings.DepositsApiConstants.preClosurePenalApplicableParamName; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.preClosurePenalInterestOnTypeIdParamName; import static org.apache.fineract.portfolio.savings.DepositsApiConstants.preClosurePenalInterestParamName; +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withHoldTaxParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.currencyCodeParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.descriptionParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.digitsAfterDecimalParamName; @@ -56,6 +57,7 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.minRequi import static org.apache.fineract.portfolio.savings.SavingsApiConstants.nameParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.nominalAnnualInterestRateParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.shortNameParamName; +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.taxGroupIdParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withdrawalFeeForTransfersParamName; import java.lang.reflect.Type; @@ -333,6 +335,8 @@ public class DepositProductDataValidator { validatePaymentChannelFundSourceMappings(fromApiJsonHelper, baseDataValidator, element); validateChargeToIncomeAccountMappings(fromApiJsonHelper, baseDataValidator, element); } + + validateTaxWithHoldingParams(baseDataValidator, element, true); } public void validatePreClosureDetailForCreate(JsonElement element, DataValidatorBuilder baseDataValidator) { @@ -539,6 +543,7 @@ public class DepositProductDataValidator { validatePaymentChannelFundSourceMappings(fromApiJsonHelper, baseDataValidator, element); validateChargeToIncomeAccountMappings(fromApiJsonHelper, baseDataValidator, element); + validateTaxWithHoldingParams(baseDataValidator, element, false); } public void validatePreClosureDetailForUpdate(JsonElement element, DataValidatorBuilder baseDataValidator) { @@ -778,4 +783,29 @@ public class DepositProductDataValidator { } } } + + private void validateTaxWithHoldingParams(final DataValidatorBuilder baseDataValidator, final JsonElement element, + final boolean isCreate) { + if (this.fromApiJsonHelper.parameterExists(withHoldTaxParamName, element)) { + final String withHoldTax = this.fromApiJsonHelper.extractStringNamed(withHoldTaxParamName, element); + baseDataValidator.reset().parameter(withHoldTaxParamName).value(withHoldTax).ignoreIfNull().validateForBooleanValue(); + } + Boolean withHoldTax = this.fromApiJsonHelper.extractBooleanNamed(withHoldTaxParamName, element); + if (withHoldTax == null) { + withHoldTax = false; + } + + if (this.fromApiJsonHelper.parameterExists(taxGroupIdParamName, element)) { + final Long taxGroupId = this.fromApiJsonHelper.extractLongNamed(taxGroupIdParamName, element); + baseDataValidator.reset().parameter(taxGroupIdParamName).value(taxGroupId).ignoreIfNull().longGreaterThanZero(); + if (withHoldTax) { + baseDataValidator.reset().parameter(taxGroupIdParamName).value(taxGroupId).notBlank(); + } + + } else if (withHoldTax && isCreate) { + final Long taxGroupId = null; + baseDataValidator.reset().parameter(taxGroupIdParamName).value(taxGroupId).notBlank(); + } + + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java index 13eaeab..a69a3c7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositAccountData.java @@ -31,6 +31,7 @@ import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.savings.DepositAccountType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; +import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.joda.time.LocalDate; /** @@ -101,7 +102,8 @@ public class FixedDepositAccountData extends DepositAccountData { preClosurePenalInterestOnType, preClosurePenalInterestOnTypeOptions, minDepositTerm, maxDepositTerm, minDepositTermType, maxDepositTermType, inMultiplesOfDepositTerm, inMultiplesOfDepositTermType, depositAmount, maturityAmount, maturityDate, depositPeriod, depositPeriodFrequency, periodFrequencyTypeOptions, depositType, onAccountClosure, onAccountClosureOptions, - paymentTypeOptions, savingsAccountDatas, linkedAccount, transferInterestToSavings); + paymentTypeOptions, savingsAccountDatas, linkedAccount, transferInterestToSavings, depositAccountData.withHoldTax, + depositAccountData.taxGroup); } public static FixedDepositAccountData withInterestChart(final FixedDepositAccountData account, @@ -122,7 +124,7 @@ public class FixedDepositAccountData extends DepositAccountData { account.inMultiplesOfDepositTermType, account.depositAmount, account.maturityAmount, account.maturityDate, account.depositPeriod, account.depositPeriodFrequency, account.periodFrequencyTypeOptions, account.depositType, account.onAccountClosure, account.onAccountClosureOptions, account.paymentTypeOptions, account.savingsAccounts, - account.linkedAccount, account.transferInterestToSavings); + account.linkedAccount, account.transferInterestToSavings, account.withHoldTax, account.taxGroup); } public static FixedDepositAccountData associationsAndTemplate(final FixedDepositAccountData account, FixedDepositAccountData template, @@ -149,7 +151,7 @@ public class FixedDepositAccountData extends DepositAccountData { account.inMultiplesOfDepositTermType, account.depositAmount, account.maturityAmount, account.maturityDate, account.depositPeriod, account.depositPeriodFrequency, template.periodFrequencyTypeOptions, account.depositType, account.onAccountClosure, account.onAccountClosureOptions, account.paymentTypeOptions, template.savingsAccounts, - linkedAccount, account.transferInterestToSavings); + linkedAccount, account.transferInterestToSavings, account.withHoldTax, account.taxGroup); } public static FixedDepositAccountData withTemplateOptions(final FixedDepositAccountData account, @@ -178,7 +180,7 @@ public class FixedDepositAccountData extends DepositAccountData { account.inMultiplesOfDepositTermType, account.depositAmount, account.maturityAmount, account.maturityDate, account.depositPeriod, account.depositPeriodFrequency, periodFrequencyTypeOptions, account.depositType, account.onAccountClosure, account.onAccountClosureOptions, account.paymentTypeOptions, savingsAccounts, - account.linkedAccount, account.transferInterestToSavings); + account.linkedAccount, account.transferInterestToSavings, account.withHoldTax, account.taxGroup); } public static FixedDepositAccountData withClientTemplate(final Long clientId, final String clientName, final Long groupId, @@ -206,6 +208,8 @@ public class FixedDepositAccountData extends DepositAccountData { final BigDecimal minBalanceForInterestCalculation = null; final SavingsAccountSummaryData summary = null; final Collection<SavingsAccountTransactionData> transactions = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; final Collection<DepositProductData> productOptions = null; final Collection<StaffData> fieldOfficerOptions = null; @@ -257,7 +261,7 @@ public class FixedDepositAccountData extends DepositAccountData { maxDepositTerm, minDepositTermType, maxDepositTermType, inMultiplesOfDepositTerm, inMultiplesOfDepositTermType, depositAmount, maturityAmount, maturityDate, depositPeriod, depositPeriodFrequency, periodFrequencyTypeOptions, depositType, onAccountClosure, onAccountClosureOptions, paymentTypeOptions, savingsAccountDatas, linkedAccount, - transferInterestToSavings); + transferInterestToSavings, withHoldTax, taxGroup); } public static FixedDepositAccountData preClosureDetails(final Long accountId, BigDecimal maturityAmount, @@ -324,6 +328,8 @@ public class FixedDepositAccountData extends DepositAccountData { final EnumOptionData depositType = SavingsEnumerations.depositType(DepositAccountType.FIXED_DEPOSIT.getValue()); final PortfolioAccountData linkedAccount = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; return new FixedDepositAccountData(accountId, accountNo, externalId, groupId, groupName, clientId, clientName, productId, productName, fieldOfficerId, fieldOfficerName, status, timeline, currency, nominalAnnualInterestRate, interestPeriodType, @@ -336,7 +342,7 @@ public class FixedDepositAccountData extends DepositAccountData { maxDepositTerm, minDepositTermType, maxDepositTermType, inMultiplesOfDepositTerm, inMultiplesOfDepositTermType, depositAmount, maturityAmount, maturityDate, depositPeriod, depositPeriodFrequency, periodFrequencyTypeOptions, depositType, onAccountClosure, onAccountClosureOptions, paymentTypeOptions, savingsAccountDatas, linkedAccount, - transferInterestToSavings); + transferInterestToSavings, withHoldTax, taxGroup); } public static FixedDepositAccountData withClosureTemplateDetails(final FixedDepositAccountData account, @@ -359,7 +365,7 @@ public class FixedDepositAccountData extends DepositAccountData { account.inMultiplesOfDepositTermType, account.depositAmount, account.maturityAmount, account.maturityDate, account.depositPeriod, account.depositPeriodFrequency, account.periodFrequencyTypeOptions, account.depositType, account.onAccountClosure, onAccountClosureOptions, paymentTypeOptions, savingsAccountDatas, account.linkedAccount, - account.transferInterestToSavings); + account.transferInterestToSavings, account.withHoldTax, account.taxGroup); } @@ -389,7 +395,8 @@ public class FixedDepositAccountData extends DepositAccountData { final Collection<EnumOptionData> periodFrequencyTypeOptions, final EnumOptionData depositType, final EnumOptionData onAccountClosure, final Collection<EnumOptionData> onAccountClosureOptions, final Collection<PaymentTypeData> paymentTypeOptions, final Collection<SavingsAccountData> savingsAccountDatas, - final PortfolioAccountData linkedAccount, final Boolean transferInterestToSavings) { + final PortfolioAccountData linkedAccount, final Boolean transferInterestToSavings, final boolean withHoldTax, + final TaxGroupData taxGroup) { super(id, accountNo, externalId, groupId, groupName, clientId, clientName, productId, productName, fieldofficerId, fieldofficerName, status, timeline, currency, nominalAnnualInterestRate, interestPeriodType, interestPostingPeriodType, @@ -397,7 +404,7 @@ public class FixedDepositAccountData extends DepositAccountData { lockinPeriodFrequencyType, withdrawalFeeForTransfers, summary, transactions, productOptions, fieldOfficerOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, charges, - chargeOptions, accountChart, chartTemplate, depositType, minBalanceForInterestCalculation); + chargeOptions, accountChart, chartTemplate, depositType, minBalanceForInterestCalculation, withHoldTax, taxGroup); this.preClosurePenalApplicable = preClosurePenalApplicable; this.preClosurePenalInterest = preClosurePenalInterest; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositProductData.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositProductData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositProductData.java index 3aec5d0..f2b2d33 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositProductData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/FixedDepositProductData.java @@ -31,6 +31,7 @@ import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.interestratechart.data.InterestRateChartData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; +import org.apache.fineract.portfolio.tax.data.TaxGroupData; /** * Immutable data object representing a Fixed Deposit product. @@ -66,7 +67,7 @@ public class FixedDepositProductData extends DepositProductData { final Map<String, List<GLAccountData>> accountingMappingOptions, final Collection<ChargeData> chargeOptions, final Collection<ChargeData> penaltyOptions, final InterestRateChartData chartTemplate, final Collection<EnumOptionData> preClosurePenalInterestOnTypeOptions, - final Collection<EnumOptionData> periodFrequencyTypeOptions) { + final Collection<EnumOptionData> periodFrequencyTypeOptions, final Collection<TaxGroupData> taxGroupOptions) { final Long id = null; final String name = null; @@ -95,6 +96,8 @@ public class FixedDepositProductData extends DepositProductData { final BigDecimal minDepositAmount = null; final BigDecimal depositAmount = null; final BigDecimal maxDepositAmount = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; return new FixedDepositProductData(id, name, shortName, description, currency, nominalAnnualInterestRate, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, @@ -106,7 +109,7 @@ public class FixedDepositProductData extends DepositProductData { penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnType, preClosurePenalInterestOnTypeOptions, minDepositTerm, maxDepositTerm, minDepositTermType, maxDepositTermType, inMultiplesOfDepositTerm, inMultiplesOfDepositTermType, minDepositAmount, depositAmount, - maxDepositAmount, periodFrequencyTypeOptions); + maxDepositAmount, periodFrequencyTypeOptions, withHoldTax, taxGroup, taxGroupOptions); } public static FixedDepositProductData withCharges(final FixedDepositProductData existingProduct, final Collection<ChargeData> charges) { @@ -128,13 +131,17 @@ public class FixedDepositProductData extends DepositProductData { existingProduct.minDepositTerm, existingProduct.maxDepositTerm, existingProduct.minDepositTermType, existingProduct.maxDepositTermType, existingProduct.inMultiplesOfDepositTerm, existingProduct.inMultiplesOfDepositTermType, existingProduct.minDepositAmount, existingProduct.depositAmount, existingProduct.maxDepositAmount, - existingProduct.periodFrequencyTypeOptions); + existingProduct.periodFrequencyTypeOptions, existingProduct.withHoldTax, existingProduct.taxGroup, + existingProduct.taxGroupOptions); } /** * Returns a {@link FixedDepositProductData} that contains and exist * {@link FixedDepositProductData} data with further template data for * dropdowns. + * + * @param taxGroupOptions + * TODO */ public static FixedDepositProductData withTemplate(final FixedDepositProductData existingProduct, final Collection<CurrencyData> currencyOptions, final Collection<EnumOptionData> interestCompoundingPeriodTypeOptions, @@ -146,7 +153,7 @@ public class FixedDepositProductData extends DepositProductData { final Map<String, List<GLAccountData>> accountingMappingOptions, final Collection<ChargeData> chargeOptions, final Collection<ChargeData> penaltyOptions, final InterestRateChartData chartTemplate, final Collection<EnumOptionData> preClosurePenalInterestOnTypeOptions, - final Collection<EnumOptionData> periodFrequencyTypeOptions) { + final Collection<EnumOptionData> periodFrequencyTypeOptions, final Collection<TaxGroupData> taxGroupOptions) { return new FixedDepositProductData(existingProduct.id, existingProduct.name, existingProduct.shortName, existingProduct.description, existingProduct.currency, existingProduct.nominalAnnualInterestRate, @@ -164,7 +171,8 @@ public class FixedDepositProductData extends DepositProductData { preClosurePenalInterestOnTypeOptions, existingProduct.minDepositTerm, existingProduct.maxDepositTerm, existingProduct.minDepositTermType, existingProduct.maxDepositTermType, existingProduct.inMultiplesOfDepositTerm, existingProduct.inMultiplesOfDepositTermType, existingProduct.minDepositAmount, existingProduct.depositAmount, - existingProduct.maxDepositAmount, periodFrequencyTypeOptions); + existingProduct.maxDepositAmount, periodFrequencyTypeOptions, existingProduct.withHoldTax, existingProduct.taxGroup, + taxGroupOptions); } public static FixedDepositProductData withAccountingDetails(final FixedDepositProductData existingProduct, @@ -202,7 +210,8 @@ public class FixedDepositProductData extends DepositProductData { existingProduct.minDepositTerm, existingProduct.maxDepositTerm, existingProduct.minDepositTermType, existingProduct.maxDepositTermType, existingProduct.inMultiplesOfDepositTerm, existingProduct.inMultiplesOfDepositTermType, existingProduct.minDepositAmount, existingProduct.depositAmount, existingProduct.maxDepositAmount, - existingProduct.periodFrequencyTypeOptions); + existingProduct.periodFrequencyTypeOptions, existingProduct.withHoldTax, existingProduct.taxGroup, + existingProduct.taxGroupOptions); } public static FixedDepositProductData instance(final DepositProductData depositProductData, final boolean preClosurePenalApplicable, @@ -233,6 +242,7 @@ public class FixedDepositProductData extends DepositProductData { final InterestRateChartData chartTemplate = null; final Collection<EnumOptionData> preClosurePenalInterestOnTypeOptions = null; final Collection<EnumOptionData> periodFrequencyTypeOptions = null; + final Collection<TaxGroupData> taxGroupOptions = null; return new FixedDepositProductData(depositProductData.id, depositProductData.name, depositProductData.shortName, depositProductData.description, depositProductData.currency, depositProductData.nominalAnnualInterestRate, @@ -247,7 +257,7 @@ public class FixedDepositProductData extends DepositProductData { penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnType, preClosurePenalInterestOnTypeOptions, minDepositTerm, maxDepositTerm, minDepositTermType, maxDepositTermType, inMultiplesOfDepositTerm, inMultiplesOfDepositTermType, minDepositAmount, depositAmount, - maxDepositAmount, periodFrequencyTypeOptions); + maxDepositAmount, periodFrequencyTypeOptions, depositProductData.withHoldTax, depositProductData.taxGroup, taxGroupOptions); } public static FixedDepositProductData lookup(final Long id, final String name) { @@ -298,6 +308,9 @@ public class FixedDepositProductData extends DepositProductData { final BigDecimal depositAmount = null; final BigDecimal maxDepositAmount = null; final Collection<EnumOptionData> periodFrequencyTypeOptions = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; + final Collection<TaxGroupData> taxGroupOptions = null; return new FixedDepositProductData(id, name, shortName, description, currency, nominalAnnualInterestRate, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, @@ -309,7 +322,7 @@ public class FixedDepositProductData extends DepositProductData { penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, preClosurePenalApplicable, preClosurePenalInterest, preClosurePenalInterestOnType, preClosurePenalInterestOnTypeOptions, minDepositTerm, maxDepositTerm, minDepositTermType, maxDepositTermType, inMultiplesOfDepositTerm, inMultiplesOfDepositTermType, minDepositAmount, depositAmount, - maxDepositAmount, periodFrequencyTypeOptions); + maxDepositAmount, periodFrequencyTypeOptions, withHoldTax, taxGroup, taxGroupOptions); } public static FixedDepositProductData withInterestChart(final FixedDepositProductData existingProduct, @@ -332,7 +345,8 @@ public class FixedDepositProductData extends DepositProductData { existingProduct.minDepositTerm, existingProduct.maxDepositTerm, existingProduct.minDepositTermType, existingProduct.maxDepositTermType, existingProduct.inMultiplesOfDepositTerm, existingProduct.inMultiplesOfDepositTermType, existingProduct.minDepositAmount, existingProduct.depositAmount, existingProduct.maxDepositAmount, - existingProduct.periodFrequencyTypeOptions); + existingProduct.periodFrequencyTypeOptions, existingProduct.withHoldTax, existingProduct.taxGroup, + existingProduct.taxGroupOptions); } @@ -359,7 +373,8 @@ public class FixedDepositProductData extends DepositProductData { final Integer minDepositTerm, final Integer maxDepositTerm, final EnumOptionData minDepositTermType, final EnumOptionData maxDepositTermType, final Integer inMultiplesOfDepositTerm, final EnumOptionData inMultiplesOfDepositTermType, final BigDecimal minDepositAmount, final BigDecimal depositAmount, - final BigDecimal maxDepositAmount, final Collection<EnumOptionData> periodFrequencyTypeOptions) { + final BigDecimal maxDepositAmount, final Collection<EnumOptionData> periodFrequencyTypeOptions, final boolean withHoldTax, + final TaxGroupData taxGroup, final Collection<TaxGroupData> taxGroupOptions) { super(id, name, shortName, description, currency, nominalAnnualInterestRate, interestCompoundingPeriodType, interestPostingPeriodType, interestCalculationType, interestCalculationDaysInYearType, lockinPeriodFrequency, @@ -367,7 +382,8 @@ public class FixedDepositProductData extends DepositProductData { interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, paymentTypeOptions, accountingRuleOptions, accountingMappingOptions, charges, chargeOptions, penaltyOptions, feeToIncomeAccountMappings, - penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, minBalanceForInterestCalculation); + penaltyToIncomeAccountMappings, interestRateCharts, chartTemplate, minBalanceForInterestCalculation, withHoldTax, taxGroup, + taxGroupOptions); // fixed deposit additional fields this.preClosurePenalApplicable = preClosurePenalApplicable; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/3015747f/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java index 3385692..6f61ef2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/RecurringDepositAccountData.java @@ -30,6 +30,7 @@ import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.savings.DepositAccountType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; +import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.joda.time.LocalDate; /** @@ -115,7 +116,8 @@ public class RecurringDepositAccountData extends DepositAccountData { depositPeriod, depositPeriodFrequency, mandatoryRecommendedDepositAmount, periodFrequencyTypeOptions, depositType, onAccountClosure, onAccountClosureOptions, paymentTypeOptions, savingsAccountDatas, expectedFirstDepositOnDate, totalOverdueAmount, noOfOverdueInstallments, isMandatoryDeposit, allowWithdrawal, adjustAdvanceTowardsFuturePayments, - isCalendarInherited, recurringFrequency, recurringFrequencyType); + isCalendarInherited, recurringFrequency, recurringFrequencyType, depositAccountData.withHoldTax, + depositAccountData.taxGroup); } public static RecurringDepositAccountData withInterestChartAndRecurringDetails(final RecurringDepositAccountData account, @@ -139,7 +141,8 @@ public class RecurringDepositAccountData extends DepositAccountData { account.periodFrequencyTypeOptions, account.depositType, account.onAccountClosure, account.onAccountClosureOptions, account.paymentTypeOptions, account.savingsAccounts, account.expectedFirstDepositOnDate, account.totalOverdueAmount, account.noOfOverdueInstallments, account.isMandatoryDeposit, account.allowWithdrawal, - account.adjustAdvanceTowardsFuturePayments, account.isCalendarInherited, recurringFrequency, recurringFrequencyType); + account.adjustAdvanceTowardsFuturePayments, account.isCalendarInherited, recurringFrequency, recurringFrequencyType, + account.withHoldTax, account.taxGroup); } public static RecurringDepositAccountData withTemplateOptions(final RecurringDepositAccountData account, @@ -185,7 +188,7 @@ public class RecurringDepositAccountData extends DepositAccountData { account.paymentTypeOptions, account.savingsAccounts, account.expectedFirstDepositOnDate, account.totalOverdueAmount, account.noOfOverdueInstallments, account.isMandatoryDeposit, account.allowWithdrawal, account.adjustAdvanceTowardsFuturePayments, account.isCalendarInherited, account.recurringFrequency, - account.recurringFrequencyType); + account.recurringFrequencyType, account.withHoldTax, account.taxGroup); } @@ -218,7 +221,7 @@ public class RecurringDepositAccountData extends DepositAccountData { account.paymentTypeOptions, account.savingsAccounts, account.expectedFirstDepositOnDate, account.totalOverdueAmount, account.noOfOverdueInstallments, account.isMandatoryDeposit, account.allowWithdrawal, account.adjustAdvanceTowardsFuturePayments, account.isCalendarInherited, account.recurringFrequency, - account.recurringFrequencyType); + account.recurringFrequencyType, account.withHoldTax, account.taxGroup); } public static RecurringDepositAccountData withClientTemplate(final Long clientId, final String clientName, final Long groupId, @@ -296,6 +299,8 @@ public class RecurringDepositAccountData extends DepositAccountData { final boolean isCalendarInherited = false; final Integer recurringFrequency = null; final EnumOptionData recurringFrequencyType = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; return new RecurringDepositAccountData(id, accountNo, externalId, groupId, groupName, clientId, clientName, productId, productName, fieldOfficerId, fieldOfficerName, status, timeline, currency, nominalAnnualInterestRate, interestPeriodType, @@ -309,7 +314,8 @@ public class RecurringDepositAccountData extends DepositAccountData { depositAmount, maturityAmount, maturityDate, depositPeriod, depositPeriodFrequency, mandatoryRecommendedDepositAmount, periodFrequencyTypeOptions, depositType, onAccountClosure, onAccountClosureOptions, paymentTypeOptions, savingsAccountDatas, expectedFirstDepositOnDate, totalOverdueAmount, noOfOverdueInstallments, isMandatoryDeposit, - allowWithdrawal, adjustAdvanceTowardsFuturePayments, isCalendarInherited, recurringFrequency, recurringFrequencyType); + allowWithdrawal, adjustAdvanceTowardsFuturePayments, isCalendarInherited, recurringFrequency, recurringFrequencyType, + withHoldTax, taxGroup); } public static RecurringDepositAccountData preClosureDetails(final Long accountId, final BigDecimal maturityAmount, @@ -385,6 +391,8 @@ public class RecurringDepositAccountData extends DepositAccountData { final boolean isCalendarInherited = false; final Integer recurringFrequency = null; final EnumOptionData recurringFrequencyType = null; + final boolean withHoldTax = false; + final TaxGroupData taxGroup = null; return new RecurringDepositAccountData(accountId, accountNo, externalId, groupId, groupName, clientId, clientName, productId, productName, fieldOfficerId, fieldOfficerName, status, timeline, currency, nominalAnnualInterestRate, interestPeriodType, @@ -398,7 +406,8 @@ public class RecurringDepositAccountData extends DepositAccountData { depositAmount, maturityAmount, maturityDate, depositPeriod, depositPeriodFrequency, mandatoryRecommendedDepositAmount, periodFrequencyTypeOptions, depositType, onAccountClosure, onAccountClosureOptions, paymentTypeOptions, savingsAccountDatas, expectedFirstDepositOnDate, totalOverdueAmount, noOfOverdueInstallments, isMandatoryDeposit, - allowWithdrawal, adjustAdvanceTowardsFuturePayments, isCalendarInherited, recurringFrequency, recurringFrequencyType); + allowWithdrawal, adjustAdvanceTowardsFuturePayments, isCalendarInherited, recurringFrequency, recurringFrequencyType, + withHoldTax, taxGroup); } public static RecurringDepositAccountData withClosureTemplateDetails(final RecurringDepositAccountData account, @@ -424,7 +433,7 @@ public class RecurringDepositAccountData extends DepositAccountData { paymentTypeOptions, savingsAccountDatas, account.expectedFirstDepositOnDate, account.totalOverdueAmount, account.noOfOverdueInstallments, account.isMandatoryDeposit, account.allowWithdrawal, account.adjustAdvanceTowardsFuturePayments, account.isCalendarInherited, account.recurringFrequency, - account.recurringFrequencyType); + account.recurringFrequencyType, account.withHoldTax, account.taxGroup); } private RecurringDepositAccountData(final Long id, final String accountNo, final String externalId, final Long groupId, @@ -456,7 +465,8 @@ public class RecurringDepositAccountData extends DepositAccountData { final Collection<SavingsAccountData> savingsAccountDatas, final LocalDate expectedFirstDepositOnDate, final BigDecimal totalOverdueAmount, final Integer noOfOverdueInstallments, final boolean isMandatoryDeposit, final boolean allowWithdrawal, final boolean adjustAdvanceTowardsFuturePayments, final boolean isCalendarInherited, - final Integer recurringFrequency, final EnumOptionData recurringFrequencyType) { + final Integer recurringFrequency, final EnumOptionData recurringFrequencyType, final boolean withHoldTax, + final TaxGroupData taxGroup) { super(id, accountNo, externalId, groupId, groupName, clientId, clientName, productId, productName, fieldofficerId, fieldofficerName, status, timeline, currency, nominalAnnualInterestRate, interestPeriodType, interestPostingPeriodType, @@ -464,7 +474,7 @@ public class RecurringDepositAccountData extends DepositAccountData { lockinPeriodFrequencyType, withdrawalFeeForTransfers, summary, transactions, productOptions, fieldOfficerOptions, interestCompoundingPeriodTypeOptions, interestPostingPeriodTypeOptions, interestCalculationTypeOptions, interestCalculationDaysInYearTypeOptions, lockinPeriodFrequencyTypeOptions, withdrawalFeeTypeOptions, charges, - chargeOptions, accountChart, chartTemplate, depositType, minBalanceForInterestCalculation); + chargeOptions, accountChart, chartTemplate, depositType, minBalanceForInterestCalculation, withHoldTax, taxGroup); this.preClosurePenalApplicable = preClosurePenalApplicable; this.preClosurePenalInterest = preClosurePenalInterest;
