applying format across the project and fixing all warnings

Conflicts:
	mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java
	mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanAssembler.java
	mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsApplicationProcessWritePlatformService.java
	mifosng-provider/src/main/java/org/mifosplatform/portfolio/savings/service/SavingsApplicationProcessWritePlatformServiceJpaRepositoryImpl.java
This commit is contained in:
Vishwas Babu A J
2014-03-01 04:50:17 -08:00
parent c404dfdeb1
commit 1c1e83eb5e
239 changed files with 2881 additions and 2851 deletions
@@ -109,9 +109,8 @@ public class AccountingConstants {
public static enum LOAN_PRODUCT_ACCOUNTING_DATA_PARAMS { public static enum LOAN_PRODUCT_ACCOUNTING_DATA_PARAMS {
FUND_SOURCE("fundSourceAccount"), LOAN_PORTFOLIO("loanPortfolioAccount"), INTEREST_ON_LOANS("interestOnLoanAccount"), INCOME_FROM_FEES( FUND_SOURCE("fundSourceAccount"), LOAN_PORTFOLIO("loanPortfolioAccount"), INTEREST_ON_LOANS("interestOnLoanAccount"), INCOME_FROM_FEES(
"incomeFromFeeAccount"), INCOME_FROM_PENALTIES("incomeFromPenaltyAccount"), LOSSES_WRITTEN_OFF("writeOffAccount"), OVERPAYMENT( "incomeFromFeeAccount"), INCOME_FROM_PENALTIES("incomeFromPenaltyAccount"), LOSSES_WRITTEN_OFF("writeOffAccount"), OVERPAYMENT(
"overpaymentLiabilityAccount"), INTEREST_RECEIVABLE("receivableInterestAccount"), FEES_RECEIVABLE( "overpaymentLiabilityAccount"), INTEREST_RECEIVABLE("receivableInterestAccount"), FEES_RECEIVABLE("receivableFeeAccount"), PENALTIES_RECEIVABLE(
"receivableFeeAccount"), PENALTIES_RECEIVABLE("receivablePenaltyAccount"), TRANSFERS_SUSPENSE( "receivablePenaltyAccount"), TRANSFERS_SUSPENSE("transfersInSuspenseAccount"), INCOME_ACCOUNT_ID("incomeAccount");
"transfersInSuspenseAccount"), INCOME_ACCOUNT_ID("incomeAccount");
private final String value; private final String value;
@@ -129,12 +128,10 @@ public class AccountingConstants {
} }
} }
/*** Accounting placeholders for cash based accounting for savings products ***/ /*** Accounting placeholders for cash based accounting for savings products ***/
public static enum CASH_ACCOUNTS_FOR_SAVINGS { public static enum CASH_ACCOUNTS_FOR_SAVINGS {
SAVINGS_REFERENCE(1), SAVINGS_CONTROL(2), INTEREST_ON_SAVINGS(3), INCOME_FROM_FEES(4), INCOME_FROM_PENALTIES(5), TRANSFERS_SUSPENSE( SAVINGS_REFERENCE(1), SAVINGS_CONTROL(2), INTEREST_ON_SAVINGS(3), INCOME_FROM_FEES(4), INCOME_FROM_PENALTIES(5), TRANSFERS_SUSPENSE(
10),OVERDRAFT_PORTFOLIO_CONTROL(11),INCOME_FROM_INTEREST(12), 10), OVERDRAFT_PORTFOLIO_CONTROL(11), INCOME_FROM_INTEREST(12), LOSSES_WRITTEN_OFF(13);
LOSSES_WRITTEN_OFF(13);
private final Integer value; private final Integer value;
@@ -174,8 +171,8 @@ public class AccountingConstants {
"interestOnSavingsAccountId"), PAYMENT_CHANNEL_FUND_SOURCE_MAPPING("paymentChannelToFundSourceMappings"), PAYMENT_TYPE( "interestOnSavingsAccountId"), PAYMENT_CHANNEL_FUND_SOURCE_MAPPING("paymentChannelToFundSourceMappings"), PAYMENT_TYPE(
"paymentTypeId"), FUND_SOURCE("fundSourceAccountId"), TRANSFERS_SUSPENSE("transfersInSuspenseAccountId"), FEE_INCOME_ACCOUNT_MAPPING( "paymentTypeId"), FUND_SOURCE("fundSourceAccountId"), TRANSFERS_SUSPENSE("transfersInSuspenseAccountId"), FEE_INCOME_ACCOUNT_MAPPING(
"feeToIncomeAccountMappings"), PENALTY_INCOME_ACCOUNT_MAPPING("penaltyToIncomeAccountMappings"), CHARGE_ID("chargeId"), INCOME_ACCOUNT_ID( "feeToIncomeAccountMappings"), PENALTY_INCOME_ACCOUNT_MAPPING("penaltyToIncomeAccountMappings"), CHARGE_ID("chargeId"), INCOME_ACCOUNT_ID(
"incomeAccountId"),OVERDRAFT_PORTFOLIO_CONTROL("overdraftPortfolioControlId"),INCOME_FROM_INTEREST("incomeFromInterestId"), "incomeAccountId"), OVERDRAFT_PORTFOLIO_CONTROL("overdraftPortfolioControlId"), INCOME_FROM_INTEREST("incomeFromInterestId"), LOSSES_WRITTEN_OFF(
LOSSES_WRITTEN_OFF("writeOffAccountId"); "writeOffAccountId");
private final String value; private final String value;
@@ -194,12 +191,11 @@ public class AccountingConstants {
} }
public static enum SAVINGS_PRODUCT_ACCOUNTING_DATA_PARAMS { public static enum SAVINGS_PRODUCT_ACCOUNTING_DATA_PARAMS {
SAVINGS_REFERENCE("savingsReferenceAccount"), SAVINGS_CONTROL("savingsControlAccount"), INCOME_FROM_FEES( SAVINGS_REFERENCE("savingsReferenceAccount"), SAVINGS_CONTROL("savingsControlAccount"), INCOME_FROM_FEES("incomeFromFeeAccount"), INCOME_FROM_PENALTIES(
"incomeFromFeeAccount"), INCOME_FROM_PENALTIES("incomeFromPenaltyAccount"), INTEREST_ON_SAVINGS( "incomeFromPenaltyAccount"), INTEREST_ON_SAVINGS("interestOnSavingsAccount"), PAYMENT_TYPE("paymentType"), FUND_SOURCE(
"interestOnSavingsAccount"), PAYMENT_TYPE("paymentType"), FUND_SOURCE("fundSourceAccount"), "fundSourceAccount"), TRANSFERS_SUSPENSE("transfersInSuspenseAccount"), PENALTY_INCOME_ACCOUNT_MAPPING(
TRANSFERS_SUSPENSE("transfersInSuspenseAccount"), PENALTY_INCOME_ACCOUNT_MAPPING("penaltyToIncomeAccountMappings"), CHARGE_ID("charge"), INCOME_ACCOUNT_ID( "penaltyToIncomeAccountMappings"), CHARGE_ID("charge"), INCOME_ACCOUNT_ID("incomeAccount"), OVERDRAFT_PORTFOLIO_CONTROL(
"incomeAccount"),OVERDRAFT_PORTFOLIO_CONTROL("overdraftPortfolioControl"),INCOME_FROM_INTEREST("incomeFromInterest"), "overdraftPortfolioControl"), INCOME_FROM_INTEREST("incomeFromInterest"), LOSSES_WRITTEN_OFF("writeOffAccount");
LOSSES_WRITTEN_OFF("writeOffAccount");
private final String value; private final String value;
@@ -217,7 +213,6 @@ public class AccountingConstants {
} }
} }
public static final String ASSESTS_TAG_OPTION_CODE_NAME = "AssetAccountTags"; public static final String ASSESTS_TAG_OPTION_CODE_NAME = "AssetAccountTags";
public static final String LIABILITIES_TAG_OPTION_CODE_NAME = "LiabilityAccountTags"; public static final String LIABILITIES_TAG_OPTION_CODE_NAME = "LiabilityAccountTags";
public static final String EQUITY_TAG_OPTION_CODE_NAME = "EquityAccountTags"; public static final String EQUITY_TAG_OPTION_CODE_NAME = "EquityAccountTags";
@@ -124,7 +124,7 @@ public class GLAccountsApiResource {
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
JournalEntryAssociationParametersData associationParametersData = new JournalEntryAssociationParametersData(false, runningBalance); JournalEntryAssociationParametersData associationParametersData = new JournalEntryAssociationParametersData(false, runningBalance);
GLAccountData glAccountData = this.glAccountReadPlatformService.retrieveGLAccountById(glAccountId,associationParametersData); GLAccountData glAccountData = this.glAccountReadPlatformService.retrieveGLAccountById(glAccountId, associationParametersData);
if (settings.isTemplate()) { if (settings.isTemplate()) {
glAccountData = handleTemplate(glAccountData); glAccountData = handleTemplate(glAccountData);
} }
@@ -35,7 +35,6 @@ public class GLAccountData {
private final CodeValueData tagId; private final CodeValueData tagId;
private final Long organizationRunningBalance; private final Long organizationRunningBalance;
// templates // templates
final List<EnumOptionData> accountTypeOptions; final List<EnumOptionData> accountTypeOptions;
final List<EnumOptionData> usageOptions; final List<EnumOptionData> usageOptions;
@@ -52,7 +51,7 @@ public class GLAccountData {
public GLAccountData(final Long id, final String name, final Long parentId, final String glCode, final boolean disabled, public GLAccountData(final Long id, final String name, final Long parentId, final String glCode, final boolean disabled,
final boolean manualEntriesAllowed, final EnumOptionData type, final EnumOptionData usage, final String description, final boolean manualEntriesAllowed, final EnumOptionData type, final EnumOptionData usage, final String description,
final String nameDecorated, final CodeValueData tagId,final Long organizationRunningBalance) { final String nameDecorated, final CodeValueData tagId, final Long organizationRunningBalance) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.parentId = parentId; this.parentId = parentId;
@@ -97,7 +96,7 @@ public class GLAccountData {
this.description = accountData.description; this.description = accountData.description;
this.nameDecorated = accountData.nameDecorated; this.nameDecorated = accountData.nameDecorated;
this.tagId = accountData.tagId; this.tagId = accountData.tagId;
this.organizationRunningBalance = accountData.organizationRunningBalance; this.organizationRunningBalance = accountData.organizationRunningBalance;
this.accountTypeOptions = accountTypeOptions; this.accountTypeOptions = accountTypeOptions;
this.usageOptions = usageOptions; this.usageOptions = usageOptions;
this.assetHeaderAccountOptions = assetHeaderAccountOptions; this.assetHeaderAccountOptions = assetHeaderAccountOptions;
@@ -131,7 +130,8 @@ public class GLAccountData {
final CodeValueData tagId = null; final CodeValueData tagId = null;
final Long organizationRunningBalance = null; final Long organizationRunningBalance = null;
return new GLAccountData(id, name, parentId, glCode, disabled, manualEntriesAllowed, type, usage, description, nameDecorated, tagId,organizationRunningBalance); return new GLAccountData(id, name, parentId, glCode, disabled, manualEntriesAllowed, type, usage, description, nameDecorated,
tagId, organizationRunningBalance);
} }
public GLAccountData(final Long id, final String name, final String glCode) { public GLAccountData(final Long id, final String name, final String glCode) {
@@ -17,7 +17,7 @@ public interface GLAccountReadPlatformService {
List<GLAccountData> retrieveAllGLAccounts(Integer accountClassification, String searchParam, Integer usage, List<GLAccountData> retrieveAllGLAccounts(Integer accountClassification, String searchParam, Integer usage,
Boolean manualTransactionsAllowed, Boolean disabled, JournalEntryAssociationParametersData associationParametersData); Boolean manualTransactionsAllowed, Boolean disabled, JournalEntryAssociationParametersData associationParametersData);
GLAccountData retrieveGLAccountById(long glAccountId,JournalEntryAssociationParametersData associationParametersData); GLAccountData retrieveGLAccountById(long glAccountId, JournalEntryAssociationParametersData associationParametersData);
List<GLAccountData> retrieveAllEnabledDetailGLAccounts(); List<GLAccountData> retrieveAllEnabledDetailGLAccounts();
@@ -44,26 +44,26 @@ public class GLAccountReadPlatformServiceImpl implements GLAccountReadPlatformSe
private final JournalEntryAssociationParametersData associationParametersData; private final JournalEntryAssociationParametersData associationParametersData;
public GLAccountMapper(final JournalEntryAssociationParametersData associationParametersData) { public GLAccountMapper(final JournalEntryAssociationParametersData associationParametersData) {
if(associationParametersData == null){ if (associationParametersData == null) {
this.associationParametersData = new JournalEntryAssociationParametersData(); this.associationParametersData = new JournalEntryAssociationParametersData();
}else{ } else {
this.associationParametersData = associationParametersData; this.associationParametersData = associationParametersData;
} }
} }
public String schema() { public String schema() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(" gl.id as id, name as name, parent_id as parentId, gl_code as glCode, disabled as disabled, manual_journal_entries_allowed as manualEntriesAllowed, ") sb.append(
.append("classification_enum as classification, account_usage as accountUsage, gl.description as description, ") " gl.id as id, name as name, parent_id as parentId, gl_code as glCode, disabled as disabled, manual_journal_entries_allowed as manualEntriesAllowed, ")
.append(nameDecoratedBaseOnHierarchy).append(" as nameDecorated, ") .append("classification_enum as classification, account_usage as accountUsage, gl.description as description, ")
.append("cv.id as codeId, cv.code_value as codeValue "); .append(nameDecoratedBaseOnHierarchy).append(" as nameDecorated, ")
if(this.associationParametersData.isRunningBalanceRequired()){ .append("cv.id as codeId, cv.code_value as codeValue ");
if (this.associationParametersData.isRunningBalanceRequired()) {
sb.append(",gl_j.organization_running_balance as organizationRunningBalance "); sb.append(",gl_j.organization_running_balance as organizationRunningBalance ");
} }
sb.append("from acc_gl_account gl left join m_code_value cv on tag_id=cv.id "); sb.append("from acc_gl_account gl left join m_code_value cv on tag_id=cv.id ");
if(this.associationParametersData.isRunningBalanceRequired()){ if (this.associationParametersData.isRunningBalanceRequired()) {
sb.append("left outer Join acc_gl_journal_entry gl_j on gl_j.account_id = gl.id"); sb.append("left outer Join acc_gl_journal_entry gl_j on gl_j.account_id = gl.id");
} }
return sb.toString(); return sb.toString();
@@ -88,7 +88,7 @@ public class GLAccountReadPlatformServiceImpl implements GLAccountReadPlatformSe
final String codeValue = rs.getString("codeValue"); final String codeValue = rs.getString("codeValue");
final CodeValueData tagId = CodeValueData.instance(codeId, codeValue); final CodeValueData tagId = CodeValueData.instance(codeId, codeValue);
Long organizationRunningBalance = null; Long organizationRunningBalance = null;
if(associationParametersData.isRunningBalanceRequired()){ if (associationParametersData.isRunningBalanceRequired()) {
organizationRunningBalance = rs.getLong("organizationRunningBalance"); organizationRunningBalance = rs.getLong("organizationRunningBalance");
} }
return new GLAccountData(id, name, parentId, glCode, disabled, manualEntriesAllowed, accountType, usage, description, return new GLAccountData(id, name, parentId, glCode, disabled, manualEntriesAllowed, accountType, usage, description,
@@ -110,9 +110,9 @@ public class GLAccountReadPlatformServiceImpl implements GLAccountReadPlatformSe
final GLAccountMapper rm = new GLAccountMapper(associationParametersData); final GLAccountMapper rm = new GLAccountMapper(associationParametersData);
String sql = "select " + rm.schema(); String sql = "select " + rm.schema();
// append SQL statement for fetching account totals // append SQL statement for fetching account totals
if(associationParametersData.isRunningBalanceRequired()){ if (associationParametersData.isRunningBalanceRequired()) {
sql = sql + " and gl_j.id in (select t1.id from (SELECT t2.id , max(concat(t2.entry_date,t2.id)) " sql = sql + " and gl_j.id in (select t1.id from (SELECT t2.id , max(concat(t2.entry_date,t2.id)) "
+ "FROM acc_gl_journal_entry t2 WHERE is_running_balance_calculated = 1 GROUP BY t2.account_id DESC) t1)"; + "FROM acc_gl_journal_entry t2 WHERE is_running_balance_calculated = 1 GROUP BY t2.account_id DESC) t1)";
} }
final Object[] paramaterArray = new Object[3]; final Object[] paramaterArray = new Object[3];
int arrayPos = 0; int arrayPos = 0;
@@ -184,17 +184,17 @@ public class GLAccountReadPlatformServiceImpl implements GLAccountReadPlatformSe
} }
@Override @Override
public GLAccountData retrieveGLAccountById(final long glAccountId,JournalEntryAssociationParametersData associationParametersData) { public GLAccountData retrieveGLAccountById(final long glAccountId, JournalEntryAssociationParametersData associationParametersData) {
try { try {
final GLAccountMapper rm = new GLAccountMapper(associationParametersData); final GLAccountMapper rm = new GLAccountMapper(associationParametersData);
final StringBuilder sql = new StringBuilder(); final StringBuilder sql = new StringBuilder();
sql.append("select ").append(rm.schema()); sql.append("select ").append(rm.schema());
if(associationParametersData.isRunningBalanceRequired()){ if (associationParametersData.isRunningBalanceRequired()) {
sql.append(" and gl_j.is_running_balance_calculated = 1 "); sql.append(" and gl_j.is_running_balance_calculated = 1 ");
} }
sql.append("where gl.id = ?"); sql.append("where gl.id = ?");
if(associationParametersData.isRunningBalanceRequired()){ if (associationParametersData.isRunningBalanceRequired()) {
sql.append(" ORDER BY gl_j.entry_date DESC,gl_j.id DESC LIMIT 1"); sql.append(" ORDER BY gl_j.entry_date DESC,gl_j.id DESC LIMIT 1");
} }
final GLAccountData glAccountData = this.jdbcTemplate.queryForObject(sql.toString(), rm, new Object[] { glAccountId }); final GLAccountData glAccountData = this.jdbcTemplate.queryForObject(sql.toString(), rm, new Object[] { glAccountId });
@@ -207,7 +207,8 @@ public class GLAccountReadPlatformServiceImpl implements GLAccountReadPlatformSe
@Override @Override
public List<GLAccountData> retrieveAllEnabledDetailGLAccounts(final GLAccountType accountType) { public List<GLAccountData> retrieveAllEnabledDetailGLAccounts(final GLAccountType accountType) {
return retrieveAllGLAccounts(accountType.getValue(), null, GLAccountUsage.DETAIL.getValue(), null, false, new JournalEntryAssociationParametersData()); return retrieveAllGLAccounts(accountType.getValue(), null, GLAccountUsage.DETAIL.getValue(), null, false,
new JournalEntryAssociationParametersData());
} }
@Override @Override
@@ -236,7 +237,8 @@ public class GLAccountReadPlatformServiceImpl implements GLAccountReadPlatformSe
@Override @Override
public List<GLAccountData> retrieveAllEnabledHeaderGLAccounts(final GLAccountType accountType) { public List<GLAccountData> retrieveAllEnabledHeaderGLAccounts(final GLAccountType accountType) {
return retrieveAllGLAccounts(accountType.getValue(), null, GLAccountUsage.HEADER.getValue(), null, false, new JournalEntryAssociationParametersData()); return retrieveAllGLAccounts(accountType.getValue(), null, GLAccountUsage.HEADER.getValue(), null, false,
new JournalEntryAssociationParametersData());
} }
@Override @Override
@@ -77,11 +77,11 @@ public class JournalEntriesApiResource {
public String retrieveAll(@Context final UriInfo uriInfo, @QueryParam("officeId") final Long officeId, public String retrieveAll(@Context final UriInfo uriInfo, @QueryParam("officeId") final Long officeId,
@QueryParam("glAccountId") final Long glAccountId, @QueryParam("manualEntriesOnly") final Boolean onlyManualEntries, @QueryParam("glAccountId") final Long glAccountId, @QueryParam("manualEntriesOnly") final Boolean onlyManualEntries,
@QueryParam("fromDate") final DateParam fromDateParam, @QueryParam("toDate") final DateParam toDateParam, @QueryParam("fromDate") final DateParam fromDateParam, @QueryParam("toDate") final DateParam toDateParam,
@QueryParam("transactionId") final String transactionId, @QueryParam("entityType") final Integer entityType, @QueryParam("offset") final Integer offset, @QueryParam("transactionId") final String transactionId, @QueryParam("entityType") final Integer entityType,
@QueryParam("limit") final Integer limit, @QueryParam("orderBy") final String orderBy, @QueryParam("offset") final Integer offset, @QueryParam("limit") final Integer limit,
@QueryParam("sortOrder") final String sortOrder, @QueryParam("locale") final String locale, @QueryParam("orderBy") final String orderBy, @QueryParam("sortOrder") final String sortOrder,
@QueryParam("dateFormat") final String dateFormat,@QueryParam("runningBalance") final boolean runningBalance, @QueryParam("locale") final String locale, @QueryParam("dateFormat") final String dateFormat,
@QueryParam("transactionDetails") final boolean transactionDetails) { @QueryParam("runningBalance") final boolean runningBalance, @QueryParam("transactionDetails") final boolean transactionDetails) {
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission); this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
@@ -95,7 +95,8 @@ public class JournalEntriesApiResource {
} }
final SearchParameters searchParameters = SearchParameters.forJournalEntries(officeId, offset, limit, orderBy, sortOrder); final SearchParameters searchParameters = SearchParameters.forJournalEntries(officeId, offset, limit, orderBy, sortOrder);
JournalEntryAssociationParametersData associationParametersData = new JournalEntryAssociationParametersData(transactionDetails, runningBalance); JournalEntryAssociationParametersData associationParametersData = new JournalEntryAssociationParametersData(transactionDetails,
runningBalance);
final Page<JournalEntryData> glJournalEntries = this.journalEntryReadPlatformService.retrieveAll(searchParameters, glAccountId, final Page<JournalEntryData> glJournalEntries = this.journalEntryReadPlatformService.retrieveAll(searchParameters, glAccountId,
onlyManualEntries, fromDate, toDate, transactionId, entityType, associationParametersData); onlyManualEntries, fromDate, toDate, transactionId, entityType, associationParametersData);
@@ -111,8 +112,10 @@ public class JournalEntriesApiResource {
@QueryParam("runningBalance") final boolean runningBalance, @QueryParam("transactionDetails") final boolean transactionDetails) { @QueryParam("runningBalance") final boolean runningBalance, @QueryParam("transactionDetails") final boolean transactionDetails) {
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission); this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermission);
JournalEntryAssociationParametersData associationParametersData = new JournalEntryAssociationParametersData(transactionDetails, runningBalance); JournalEntryAssociationParametersData associationParametersData = new JournalEntryAssociationParametersData(transactionDetails,
final JournalEntryData glJournalEntryData = this.journalEntryReadPlatformService.retrieveGLJournalEntryById(journalEntryId, associationParametersData); runningBalance);
final JournalEntryData glJournalEntryData = this.journalEntryReadPlatformService.retrieveGLJournalEntryById(journalEntryId,
associationParametersData);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.apiJsonSerializerService.serialize(settings, glJournalEntryData, RESPONSE_DATA_PARAMETERS); return this.apiJsonSerializerService.serialize(settings, glJournalEntryData, RESPONSE_DATA_PARAMETERS);
@@ -1,28 +1,24 @@
package org.mifosplatform.accounting.journalentry.data; package org.mifosplatform.accounting.journalentry.data;
public class JournalEntryAssociationParametersData { public class JournalEntryAssociationParametersData {
private final boolean transactionDetailsRequired; private final boolean transactionDetailsRequired;
private final boolean runningBalanceRequired; private final boolean runningBalanceRequired;
public JournalEntryAssociationParametersData() { public JournalEntryAssociationParametersData() {
this.transactionDetailsRequired = false; this.transactionDetailsRequired = false;
this.runningBalanceRequired = false; this.runningBalanceRequired = false;
} }
public JournalEntryAssociationParametersData(final boolean transactionDetailsRequired , final boolean runningBalanceRequired) { public JournalEntryAssociationParametersData(final boolean transactionDetailsRequired, final boolean runningBalanceRequired) {
this.transactionDetailsRequired = transactionDetailsRequired; this.transactionDetailsRequired = transactionDetailsRequired;
this.runningBalanceRequired = runningBalanceRequired; this.runningBalanceRequired = runningBalanceRequired;
} }
public boolean isTransactionDetailsRequired() { public boolean isTransactionDetailsRequired() {
return this.transactionDetailsRequired; return this.transactionDetailsRequired;
} }
public boolean isRunningBalanceRequired() { public boolean isRunningBalanceRequired() {
return this.runningBalanceRequired; return this.runningBalanceRequired;
} }
@@ -71,7 +71,7 @@ public class JournalEntryData {
final Boolean manualEntry, final EnumOptionData entityType, final Long entityId, final Long createdByUserId, final Boolean manualEntry, final EnumOptionData entityType, final Long entityId, final Long createdByUserId,
final LocalDate createdDate, final String createdByUserName, final String comments, final Boolean reversed, final LocalDate createdDate, final String createdByUserName, final String comments, final Boolean reversed,
final String referenceNumber, final BigDecimal officeRunningBalance, final BigDecimal organizationRunningBalance, final String referenceNumber, final BigDecimal officeRunningBalance, final BigDecimal organizationRunningBalance,
final Boolean runningBalanceComputed,final TransactionDetailData transactionDetailData, final CurrencyData currency) { final Boolean runningBalanceComputed, final TransactionDetailData transactionDetailData, final CurrencyData currency) {
this.id = id; this.id = id;
this.officeId = officeId; this.officeId = officeId;
this.officeName = officeName; this.officeName = officeName;
@@ -31,7 +31,7 @@ public class SavingsTransactionDTO {
public SavingsTransactionDTO(final Long officeId, final Long paymentTypeId, final String transactionId, final Date transactionDate, public SavingsTransactionDTO(final Long officeId, final Long paymentTypeId, final String transactionId, final Date transactionDate,
final SavingsAccountTransactionEnumData transactionType, final BigDecimal amount, final boolean reversed, final SavingsAccountTransactionEnumData transactionType, final BigDecimal amount, final boolean reversed,
final List<ChargePaymentDTO> feePayments, final List<ChargePaymentDTO> penaltyPayments,final BigDecimal overdraftAmount) { final List<ChargePaymentDTO> feePayments, final List<ChargePaymentDTO> penaltyPayments, final BigDecimal overdraftAmount) {
this.paymentTypeId = paymentTypeId; this.paymentTypeId = paymentTypeId;
this.transactionId = transactionId; this.transactionId = transactionId;
this.transactionDate = transactionDate; this.transactionDate = transactionDate;
@@ -80,13 +80,12 @@ public class SavingsTransactionDTO {
return this.feePayments; return this.feePayments;
} }
public BigDecimal getOverdraftAmount() { public BigDecimal getOverdraftAmount() {
return this.overdraftAmount; return this.overdraftAmount;
} }
public boolean isOverdraftTransaction(){ public boolean isOverdraftTransaction() {
return this.overdraftAmount!=null && this.overdraftAmount.doubleValue() > 0; return this.overdraftAmount != null && this.overdraftAmount.doubleValue() > 0;
} }
} }
@@ -88,22 +88,24 @@ public class JournalEntry extends AbstractAuditableCustom<AppUser, Long> {
@Column(name = "ref_num") @Column(name = "ref_num")
private String referenceNumber; private String referenceNumber;
public static JournalEntry createNew(final Office office, final PaymentDetail paymentDetail, final GLAccount glAccount, final String currencyCode, public static JournalEntry createNew(final Office office, final PaymentDetail paymentDetail, final GLAccount glAccount,
final String transactionId, final boolean manualEntry, final Date transactionDate, final JournalEntryType journalEntryType, final String currencyCode, final String transactionId, final boolean manualEntry, final Date transactionDate,
final BigDecimal amount, final String description, final Integer entityType, final Long entityId, final String referenceNumber, final JournalEntryType journalEntryType, final BigDecimal amount, final String description, final Integer entityType,
final LoanTransaction loanTransaction, final SavingsAccountTransaction savingsTransaction) { final Long entityId, final String referenceNumber, final LoanTransaction loanTransaction,
return new JournalEntry(office, paymentDetail, glAccount, currencyCode, transactionId, manualEntry, transactionDate, journalEntryType.getValue(), final SavingsAccountTransaction savingsTransaction) {
amount, description, entityType, entityId, referenceNumber, loanTransaction, savingsTransaction); return new JournalEntry(office, paymentDetail, glAccount, currencyCode, transactionId, manualEntry, transactionDate,
journalEntryType.getValue(), amount, description, entityType, entityId, referenceNumber, loanTransaction,
savingsTransaction);
} }
protected JournalEntry() { protected JournalEntry() {
// //
} }
public JournalEntry(final Office office, final PaymentDetail paymentDetail, final GLAccount glAccount, final String currencyCode, final String transactionId, public JournalEntry(final Office office, final PaymentDetail paymentDetail, final GLAccount glAccount, final String currencyCode,
final boolean manualEntry, final Date transactionDate, final Integer type, final BigDecimal amount, final String description, final String transactionId, final boolean manualEntry, final Date transactionDate, final Integer type, final BigDecimal amount,
final Integer entityType, final Long entityId, final String referenceNumber, final LoanTransaction loanTransaction, final String description, final Integer entityType, final Long entityId, final String referenceNumber,
final SavingsAccountTransaction savingsTransaction) { final LoanTransaction loanTransaction, final SavingsAccountTransaction savingsTransaction) {
this.office = office; this.office = office;
this.glAccount = glAccount; this.glAccount = glAccount;
this.reversalJournalEntry = null; this.reversalJournalEntry = null;
@@ -120,7 +122,7 @@ public class JournalEntry extends AbstractAuditableCustom<AppUser, Long> {
this.currencyCode = currencyCode; this.currencyCode = currencyCode;
this.loanTransaction = loanTransaction; this.loanTransaction = loanTransaction;
this.savingsTransaction = savingsTransaction; this.savingsTransaction = savingsTransaction;
this.paymentDetail=paymentDetail; this.paymentDetail = paymentDetail;
} }
public boolean isDebitEntry() { public boolean isDebitEntry() {
@@ -163,18 +165,16 @@ public class JournalEntry extends AbstractAuditableCustom<AppUser, Long> {
return this.currencyCode; return this.currencyCode;
} }
public LoanTransaction getLoanTransaction() { public LoanTransaction getLoanTransaction() {
return this.loanTransaction; return this.loanTransaction;
} }
public SavingsAccountTransaction getSavingsTransaction() { public SavingsAccountTransaction getSavingsTransaction() {
return this.savingsTransaction; return this.savingsTransaction;
} }
public PaymentDetail getPaymentDetails(){ public PaymentDetail getPaymentDetails() {
return this.paymentDetail; return this.paymentDetail;
} }
} }
@@ -173,7 +173,7 @@ public class AccountingProcessorHelper {
} }
final SavingsTransactionDTO transaction = new SavingsTransactionDTO(transactionOfficeId, paymentTypeId, transactionId, final SavingsTransactionDTO transaction = new SavingsTransactionDTO(transactionOfficeId, paymentTypeId, transactionId,
transactionDate, transactionType, amount, reversed, feePayments, penaltyPayments,overdraftAmount); transactionDate, transactionType, amount, reversed, feePayments, penaltyPayments, overdraftAmount);
newSavingsTransactions.add(transaction); newSavingsTransactions.add(transaction);
@@ -49,19 +49,18 @@ public class CashBasedAccountingProcessorForSavings implements AccountingProcess
if (savingsTransactionDTO.getTransactionType().isWithdrawal() && savingsTransactionDTO.isOverdraftTransaction()) { if (savingsTransactionDTO.getTransactionType().isWithdrawal() && savingsTransactionDTO.isOverdraftTransaction()) {
this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode, this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode,
CASH_ACCOUNTS_FOR_SAVINGS.OVERDRAFT_PORTFOLIO_CONTROL, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, savingsProductId, CASH_ACCOUNTS_FOR_SAVINGS.OVERDRAFT_PORTFOLIO_CONTROL, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE,
paymentTypeId, savingsId, transactionId, transactionDate, overdraftAmount, isReversal); savingsProductId, paymentTypeId, savingsId, transactionId, transactionDate, overdraftAmount, isReversal);
if(amount.subtract(overdraftAmount).compareTo(BigDecimal.ZERO) == 1){ if (amount.subtract(overdraftAmount).compareTo(BigDecimal.ZERO) == 1) {
this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode, this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode,
CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_CONTROL, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, savingsProductId, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_CONTROL, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, savingsProductId,
paymentTypeId, savingsId, transactionId, transactionDate, amount.subtract(overdraftAmount), isReversal); paymentTypeId, savingsId, transactionId, transactionDate, amount.subtract(overdraftAmount), isReversal);
} }
} } else if (savingsTransactionDTO.getTransactionType().isDeposit() && savingsTransactionDTO.isOverdraftTransaction()) {
else if (savingsTransactionDTO.getTransactionType().isDeposit() && savingsTransactionDTO.isOverdraftTransaction()) {
this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode, this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode,
CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, CASH_ACCOUNTS_FOR_SAVINGS.OVERDRAFT_PORTFOLIO_CONTROL, savingsProductId, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, CASH_ACCOUNTS_FOR_SAVINGS.OVERDRAFT_PORTFOLIO_CONTROL,
paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal); savingsProductId, paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal);
if(amount.subtract(overdraftAmount).compareTo(BigDecimal.ZERO) == 1){ if (amount.subtract(overdraftAmount).compareTo(BigDecimal.ZERO) == 1) {
this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode, this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode,
CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_CONTROL, savingsProductId, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_CONTROL, savingsProductId,
paymentTypeId, savingsId, transactionId, transactionDate, amount.subtract(overdraftAmount), isReversal); paymentTypeId, savingsId, transactionId, transactionDate, amount.subtract(overdraftAmount), isReversal);
@@ -126,13 +125,11 @@ public class CashBasedAccountingProcessorForSavings implements AccountingProcess
this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode, this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode,
CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, CASH_ACCOUNTS_FOR_SAVINGS.INCOME_FROM_INTEREST, savingsProductId, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, CASH_ACCOUNTS_FOR_SAVINGS.INCOME_FROM_INTEREST, savingsProductId,
paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal); paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal);
} } else if (savingsTransactionDTO.getTransactionType().isWrittenoff()) {
else if (savingsTransactionDTO.getTransactionType().isWrittenoff()) {
this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode, this.helper.createCashBasedJournalEntriesAndReversalsForSavings(office, currencyCode,
CASH_ACCOUNTS_FOR_SAVINGS.LOSSES_WRITTEN_OFF, CASH_ACCOUNTS_FOR_SAVINGS.OVERDRAFT_PORTFOLIO_CONTROL, savingsProductId, CASH_ACCOUNTS_FOR_SAVINGS.LOSSES_WRITTEN_OFF, CASH_ACCOUNTS_FOR_SAVINGS.OVERDRAFT_PORTFOLIO_CONTROL,
paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal); savingsProductId, paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal);
} } else if (savingsTransactionDTO.getTransactionType().isOverdraftFee()) {
else if (savingsTransactionDTO.getTransactionType().isOverdraftFee()) {
this.helper.createCashBasedJournalEntriesAndReversalsForSavingsCharges(office, currencyCode, this.helper.createCashBasedJournalEntriesAndReversalsForSavingsCharges(office, currencyCode,
CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, CASH_ACCOUNTS_FOR_SAVINGS.INCOME_FROM_FEES, savingsProductId, CASH_ACCOUNTS_FOR_SAVINGS.SAVINGS_REFERENCE, CASH_ACCOUNTS_FOR_SAVINGS.INCOME_FROM_FEES, savingsProductId,
paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal, feePayments); paymentTypeId, savingsId, transactionId, transactionDate, amount, isReversal, feePayments);
@@ -14,7 +14,7 @@ import org.mifosplatform.portfolio.group.service.SearchParameters;
public interface JournalEntryReadPlatformService { public interface JournalEntryReadPlatformService {
JournalEntryData retrieveGLJournalEntryById(long glJournalEntryId, JournalEntryAssociationParametersData associationParametersData); JournalEntryData retrieveGLJournalEntryById(long glJournalEntryId, JournalEntryAssociationParametersData associationParametersData);
Page<JournalEntryData> retrieveAll(SearchParameters searchParameters, Long glAccountId, Boolean onlyManualEntries, Date fromDate, Page<JournalEntryData> retrieveAll(SearchParameters searchParameters, Long glAccountId, Boolean onlyManualEntries, Date fromDate,
Date toDate, String transactionId, Integer entityType, JournalEntryAssociationParametersData associationParametersData); Date toDate, String transactionId, Integer entityType, JournalEntryAssociationParametersData associationParametersData);
@@ -149,7 +149,7 @@ public class JournalEntryRunningBalanceUpdateServiceImpl implements JournalEntry
List<JournalEntryData> entryDatas = jdbcTemplate.query(entryMapper.organizationRunningBalanceSchema(), entryMapper, List<JournalEntryData> entryDatas = jdbcTemplate.query(entryMapper.organizationRunningBalanceSchema(), entryMapper,
new Object[] { entityDate }); new Object[] { entityDate });
if(entryDatas.size()>0){ if (entryDatas.size() > 0) {
String[] updateSql = new String[entryDatas.size()]; String[] updateSql = new String[entryDatas.size()];
int i = 0; int i = 0;
for (JournalEntryData entryData : entryDatas) { for (JournalEntryData entryData : entryDatas) {
@@ -268,7 +268,7 @@ public class JournalEntryRunningBalanceUpdateServiceImpl implements JournalEntry
final EnumOptionData entryType = AccountingEnumerations.journalEntryType(entryTypeId); final EnumOptionData entryType = AccountingEnumerations.journalEntryType(entryTypeId);
return new JournalEntryData(id, officeId, null, null, glAccountId, null, accountType, null, entryType, amount, null, null, return new JournalEntryData(id, officeId, null, null, glAccountId, null, accountType, null, entryType, amount, null, null,
null, null, null, null, null, null, null, null, null, null, null,null, null); null, null, null, null, null, null, null, null, null, null, null, null, null);
} }
} }
@@ -85,8 +85,9 @@ public class AuditsApiResource {
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
if (parameters.isPaged()){ if (parameters.isPaged()) {
final Page<AuditData> auditEntries = this.auditReadPlatformService.retrievePaginatedAuditEntries(extraCriteria, settings.isIncludeJson(), parameters); final Page<AuditData> auditEntries = this.auditReadPlatformService.retrievePaginatedAuditEntries(extraCriteria,
settings.isIncludeJson(), parameters);
return this.toApiJsonSerializer.serialize(settings, auditEntries, this.RESPONSE_DATA_PARAMETERS); return this.toApiJsonSerializer.serialize(settings, auditEntries, this.RESPONSE_DATA_PARAMETERS);
} }
@@ -329,6 +329,7 @@ public class CommandWrapper {
public boolean isLoanChargeResource() { public boolean isLoanChargeResource() {
return this.entityName.equalsIgnoreCase("LOANCHARGE"); return this.entityName.equalsIgnoreCase("LOANCHARGE");
} }
public boolean isLoanDisburseDetailResource() { public boolean isLoanDisburseDetailResource() {
return this.entityName.equalsIgnoreCase("DISBURSEMENTDETAIL"); return this.entityName.equalsIgnoreCase("DISBURSEMENTDETAIL");
} }
@@ -165,7 +165,8 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
} }
@Override @Override
public Page<AuditData> retrievePaginatedAuditEntries(final String extraCriteria, final boolean includeJson, final PaginationParameters parameters) { public Page<AuditData> retrievePaginatedAuditEntries(final String extraCriteria, final boolean includeJson,
final PaginationParameters parameters) {
this.paginationParametersDataValidator.validateParameterValues(parameters, supportedOrderByValues, "audits"); this.paginationParametersDataValidator.validateParameterValues(parameters, supportedOrderByValues, "audits");
final AppUser currentUser = this.context.authenticatedUser(); final AppUser currentUser = this.context.authenticatedUser();
@@ -184,7 +185,7 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService {
if (parameters.isOrderByRequested()) { if (parameters.isOrderByRequested()) {
sqlBuilder.append(' ').append(parameters.orderBySql()); sqlBuilder.append(' ').append(parameters.orderBySql());
}else { } else {
sqlBuilder.append(' ').append(' ').append(" order by aud.id DESC"); sqlBuilder.append(' ').append(' ').append(" order by aud.id DESC");
} }
@@ -59,7 +59,7 @@ public class CommandWrapperBuilder {
this.entityName = "CONFIGURATION"; this.entityName = "CONFIGURATION";
this.entityId = configId; this.entityId = configId;
this.href = "/configurations/"+configId; this.href = "/configurations/" + configId;
return this; return this;
} }
@@ -584,7 +584,6 @@ public class CommandWrapperBuilder {
return this; return this;
} }
public CommandWrapperBuilder closeLoanAsRescheduledTransaction(final Long loanId) { public CommandWrapperBuilder closeLoanAsRescheduledTransaction(final Long loanId) {
this.actionName = "CLOSEASRESCHEDULED"; this.actionName = "CLOSEASRESCHEDULED";
this.entityName = "LOAN"; this.entityName = "LOAN";
@@ -630,7 +629,7 @@ public class CommandWrapperBuilder {
return this; return this;
} }
public CommandWrapperBuilder updateDisbusementDate(final Long loanId,final Long disbursementId) { public CommandWrapperBuilder updateDisbusementDate(final Long loanId, final Long disbursementId) {
this.actionName = "UPDATE"; this.actionName = "UPDATE";
this.entityName = "DISBURSEMENTDETAIL"; this.entityName = "DISBURSEMENTDETAIL";
this.entityId = disbursementId; this.entityId = disbursementId;
@@ -639,7 +638,6 @@ public class CommandWrapperBuilder {
return this; return this;
} }
public CommandWrapperBuilder deleteLoanApplication(final Long loanId) { public CommandWrapperBuilder deleteLoanApplication(final Long loanId) {
this.actionName = "DELETE"; this.actionName = "DELETE";
this.entityName = "LOAN"; this.entityName = "LOAN";
@@ -827,7 +825,6 @@ public class CommandWrapperBuilder {
return this; return this;
} }
public CommandWrapperBuilder createSavingProduct() { public CommandWrapperBuilder createSavingProduct() {
this.actionName = "CREATE"; this.actionName = "CREATE";
this.entityName = "SAVINGSPRODUCT"; this.entityName = "SAVINGSPRODUCT";
@@ -1345,7 +1342,7 @@ public class CommandWrapperBuilder {
this.actionName = "UPDATE"; this.actionName = "UPDATE";
this.entityName = "HOLIDAY"; this.entityName = "HOLIDAY";
this.entityId = holidayId; this.entityId = holidayId;
this.href = "/holidays/" + holidayId ; this.href = "/holidays/" + holidayId;
return this; return this;
} }
@@ -72,7 +72,6 @@ public class PortfolioCommandSourceWritePlatformServiceImpl implements Portfolio
result = this.processAndLogCommandService.processAndLogCommand(wrapper, command, isApprovedByChecker); result = this.processAndLogCommandService.processAndLogCommand(wrapper, command, isApprovedByChecker);
} catch (final RollbackTransactionAsCommandIsNotApprovedByCheckerException e) { } catch (final RollbackTransactionAsCommandIsNotApprovedByCheckerException e) {
result = this.processAndLogCommandService.logCommand(e.getCommandSourceResult()); result = this.processAndLogCommandService.logCommand(e.getCommandSourceResult());
} }
@@ -362,11 +362,11 @@ public class SynchronousCommandProcessingService implements CommandProcessingSer
} else if (wrapper.isPayLoanCharge()) { } else if (wrapper.isPayLoanCharge()) {
handler = this.applicationContext.getBean("payLoanChargeCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("payLoanChargeCommandHandler", NewCommandSourceHandler.class);
} }
} else if(wrapper.isLoanDisburseDetailResource()){ } else if (wrapper.isLoanDisburseDetailResource()) {
if(wrapper.isUpdateDisbursementDate()){ if (wrapper.isUpdateDisbursementDate()) {
handler = this.applicationContext.getBean("updateLoanDisbuseDateCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("updateLoanDisbuseDateCommandHandler", NewCommandSourceHandler.class);
} }
}else if (wrapper.isGLAccountResource()) { } else if (wrapper.isGLAccountResource()) {
if (wrapper.isCreate()) { if (wrapper.isCreate()) {
handler = this.applicationContext.getBean("createGLAccountCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("createGLAccountCommandHandler", NewCommandSourceHandler.class);
} else if (wrapper.isUpdate()) { } else if (wrapper.isUpdate()) {
@@ -391,9 +391,9 @@ public class SynchronousCommandProcessingService implements CommandProcessingSer
handler = this.applicationContext.getBean("createJournalEntryCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("createJournalEntryCommandHandler", NewCommandSourceHandler.class);
} else if (wrapper.isRevertJournalEntry()) { } else if (wrapper.isRevertJournalEntry()) {
handler = this.applicationContext.getBean("reverseJournalEntryCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("reverseJournalEntryCommandHandler", NewCommandSourceHandler.class);
}else if(wrapper.isUpdateRunningbalance()){ } else if (wrapper.isUpdateRunningbalance()) {
handler = this.applicationContext.getBean("updateRunningBalanceCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("updateRunningBalanceCommandHandler", NewCommandSourceHandler.class);
}else { } else {
throw new UnsupportedCommandException(wrapper.commandName()); throw new UnsupportedCommandException(wrapper.commandName());
} }
} else if (wrapper.isSavingsProductResource()) { } else if (wrapper.isSavingsProductResource()) {
@@ -435,9 +435,12 @@ public class SynchronousCommandProcessingService implements CommandProcessingSer
handler = this.applicationContext.getBean("calculateInterestSavingsAccountCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("calculateInterestSavingsAccountCommandHandler", NewCommandSourceHandler.class);
} else if (wrapper.isSavingsAccountInterestPosting()) { } else if (wrapper.isSavingsAccountInterestPosting()) {
handler = this.applicationContext.getBean("postInterestSavingsAccountCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("postInterestSavingsAccountCommandHandler", NewCommandSourceHandler.class);
} /*else if (wrapper.isSavingsAccountApplyAnnualFee()) { } /*
handler = this.applicationContext.getBean("applyAnnualFeeSavingsAccountCommandHandler", NewCommandSourceHandler.class); * else if (wrapper.isSavingsAccountApplyAnnualFee()) { handler =
} */else if (wrapper.isSavingsAccountUndoTransaction()) { * this.applicationContext.getBean(
* "applyAnnualFeeSavingsAccountCommandHandler",
* NewCommandSourceHandler.class); }
*/else if (wrapper.isSavingsAccountUndoTransaction()) {
handler = this.applicationContext.getBean("undoTransactionSavingsAccountCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("undoTransactionSavingsAccountCommandHandler", NewCommandSourceHandler.class);
} else if (wrapper.isAdjustSavingsAccountTransaction()) { } else if (wrapper.isAdjustSavingsAccountTransaction()) {
handler = this.applicationContext.getBean("savingsTransactionAdjustmentCommandHandler", NewCommandSourceHandler.class); handler = this.applicationContext.getBean("savingsTransactionAdjustmentCommandHandler", NewCommandSourceHandler.class);
@@ -51,12 +51,11 @@ public class ConfigurationReadPlatformServiceImpl implements ConfigurationReadPl
final String name = rs.getString("name"); final String name = rs.getString("name");
final boolean enabled = rs.getBoolean("enabled"); final boolean enabled = rs.getBoolean("enabled");
final Long value = rs.getLong("value"); final Long value = rs.getLong("value");
final Long id = rs.getLong("id"); final Long id = rs.getLong("id");
return new GlobalConfigurationPropertyData(name, enabled,value,id); return new GlobalConfigurationPropertyData(name, enabled, value, id);
} }
} }
} }
@@ -317,9 +317,9 @@ public final class JsonCommand {
} }
public Map<String, String> mapValueOfParameterNamed(final String json) { public Map<String, String> mapValueOfParameterNamed(final String json) {
final Type typeOfMap = new TypeToken<Map<String, String>>() {}.getType(); final Type typeOfMap = new TypeToken<Map<String, String>>() {}.getType();
final Map<String, String> value = this.fromApiJsonHelper.extractDataMap(typeOfMap, json); final Map<String, String> value = this.fromApiJsonHelper.extractDataMap(typeOfMap, json);
return value; return value;
} }
public boolean isChangeInBigDecimalParameterNamedDefaultingZeroToNull(final String parameterName, final BigDecimal existingValue) { public boolean isChangeInBigDecimalParameterNamedDefaultingZeroToNull(final String parameterName, final BigDecimal existingValue) {
@@ -370,11 +370,11 @@ public class DataValidatorBuilder {
if (this.value != null) { if (this.value != null) {
final Integer intValue = Integer.valueOf(this.value.toString()); final Integer intValue = Integer.valueOf(this.value.toString());
if (intValue < number+1) { if (intValue < number + 1) {
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".") final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".not.greater.than.specified.number"); .append(this.parameter).append(".not.greater.than.specified.number");
final StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(this.parameter).append( final StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(this.parameter)
" must be greater than ").append(number); .append(" must be greater than ").append(number);
final ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), final ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(),
defaultEnglishMessage.toString(), this.parameter, intValue, number); defaultEnglishMessage.toString(), this.parameter, intValue, number);
this.dataValidationErrors.add(error); this.dataValidationErrors.add(error);
@@ -391,8 +391,8 @@ public class DataValidatorBuilder {
if (intValue != number) { if (intValue != number) {
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".") final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".not.equal.to.specified.number"); .append(this.parameter).append(".not.equal.to.specified.number");
final StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(this.parameter).append( final StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(this.parameter)
" must be same as").append(number); .append(" must be same as").append(number);
final ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(), final ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(),
defaultEnglishMessage.toString(), this.parameter, intValue, number); defaultEnglishMessage.toString(), this.parameter, intValue, number);
this.dataValidationErrors.add(error); this.dataValidationErrors.add(error);
@@ -401,7 +401,6 @@ public class DataValidatorBuilder {
return this; return this;
} }
/* /*
* should be used with .notNull() before it * should be used with .notNull() before it
*/ */
@@ -20,8 +20,8 @@ public class PaginationParameters {
private final String orderBy; private final String orderBy;
private final String sortOrder; private final String sortOrder;
public static PaginationParameters instance (Boolean paged, Integer offset, Integer limit, String orderBy, String sortOrder){ public static PaginationParameters instance(Boolean paged, Integer offset, Integer limit, String orderBy, String sortOrder) {
if( null == paged) { if (null == paged) {
paged = false; paged = false;
} }
@@ -90,7 +90,7 @@ public class PaginationParameters {
return this.offset != null; return this.offset != null;
} }
public String orderBySql(){ public String orderBySql() {
final StringBuffer sql = new StringBuffer(); final StringBuffer sql = new StringBuffer();
if (this.isOrderByRequested()) { if (this.isOrderByRequested()) {
@@ -102,7 +102,7 @@ public class PaginationParameters {
return sql.toString(); return sql.toString();
} }
public String limitSql(){ public String limitSql() {
final StringBuffer sql = new StringBuffer(); final StringBuffer sql = new StringBuffer();
if (this.isLimited()) { if (this.isLimited()) {
sql.append(" limit ").append(this.getLimit()); sql.append(" limit ").append(this.getLimit());
@@ -16,22 +16,28 @@ import org.springframework.stereotype.Component;
@Component @Component
public class PaginationParametersDataValidator { public class PaginationParametersDataValidator {
public static Set<String> sortOrderValues = new HashSet<String>(Arrays.asList("ASC", "DESC")); public static Set<String> sortOrderValues = new HashSet<String>(Arrays.asList("ASC", "DESC"));
public void validateParameterValues(PaginationParameters parameters, final Set<String> supportedOrdeByValues, final String resourceName) { public void validateParameterValues(PaginationParameters parameters, final Set<String> supportedOrdeByValues, final String resourceName) {
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
if (parameters.isOrderByRequested() && !supportedOrdeByValues.contains(parameters.getOrderBy())){ if (parameters.isOrderByRequested() && !supportedOrdeByValues.contains(parameters.getOrderBy())) {
final String defaultUserMessage = "The orderBy value '" + parameters.getOrderBy() + "' is not supported. The supported orderBy values are " + supportedOrdeByValues.toString(); final String defaultUserMessage = "The orderBy value '" + parameters.getOrderBy()
final ApiParameterError error = ApiParameterError.parameterError("validation.msg."+resourceName+".orderBy.value.is.not.supported", + "' is not supported. The supported orderBy values are " + supportedOrdeByValues.toString();
defaultUserMessage, "orderBy", parameters.getOrderBy(), supportedOrdeByValues.toString()); final ApiParameterError error = ApiParameterError.parameterError("validation.msg." + resourceName
+ ".orderBy.value.is.not.supported", defaultUserMessage, "orderBy", parameters.getOrderBy(),
supportedOrdeByValues.toString());
dataValidationErrors.add(error); dataValidationErrors.add(error);
} }
if (parameters.isSortOrderProvided() && !sortOrderValues.contains(parameters.getSortOrder().toUpperCase())){ if (parameters.isSortOrderProvided() && !sortOrderValues.contains(parameters.getSortOrder().toUpperCase())) {
final String defaultUserMessage = "The sortOrder value '" + parameters.getSortOrder() + "' is not supported. The supported sortOrder values are " + sortOrderValues.toString(); final String defaultUserMessage = "The sortOrder value '" + parameters.getSortOrder()
final ApiParameterError error = ApiParameterError.parameterError("validation.msg."+resourceName+".sortOrder.value.is.not.supported", + "' is not supported. The supported sortOrder values are " + sortOrderValues.toString();
defaultUserMessage, "sortOrder", parameters.getSortOrder(), sortOrderValues.toString()); final ApiParameterError error = ApiParameterError.parameterError("validation.msg." + resourceName
+ ".sortOrder.value.is.not.supported", defaultUserMessage, "sortOrder", parameters.getSortOrder(),
sortOrderValues.toString());
dataValidationErrors.add(error); dataValidationErrors.add(error);
} }
@@ -36,7 +36,7 @@ import com.google.gson.JsonPrimitive;
public class JsonParserHelper { public class JsonParserHelper {
public boolean parameterExists(final String parameterName, final JsonElement element) { public boolean parameterExists(final String parameterName, final JsonElement element) {
if (element == null) {return false;} if (element == null) { return false; }
return element.getAsJsonObject().has(parameterName); return element.getAsJsonObject().has(parameterName);
} }
@@ -514,9 +514,9 @@ public class JsonParserHelper {
final NumberFormatter numberFormatter = new NumberFormatter(); final NumberFormatter numberFormatter = new NumberFormatter();
final Number parsedNumber = numberFormatter.parse(source, clientApplicationLocale); final Number parsedNumber = numberFormatter.parse(source, clientApplicationLocale);
if(parsedNumber instanceof BigDecimal){ if (parsedNumber instanceof BigDecimal) {
number = (BigDecimal)parsedNumber; number = (BigDecimal) parsedNumber;
}else{ } else {
number = BigDecimal.valueOf(Double.valueOf(parsedNumber.doubleValue())); number = BigDecimal.valueOf(Double.valueOf(parsedNumber.doubleValue()));
} }
} }
@@ -64,7 +64,7 @@ public class DateUtils {
return formattedSqlDate; return formattedSqlDate;
} }
public static boolean isDateInTheFuture(final LocalDate localDate){ public static boolean isDateInTheFuture(final LocalDate localDate) {
return localDate.isAfter(getLocalDateOfTenant()); return localDate.isAfter(getLocalDateOfTenant());
} }
} }
@@ -826,7 +826,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
+ datatableName.toLowerCase().replaceAll("\\s", "_") + "_%'"; + datatableName.toLowerCase().replaceAll("\\s", "_") + "_%'";
sqlArray = new String[2]; sqlArray = new String[2];
sqlArray[1] = deleteColumnCodeSql; sqlArray[1] = deleteColumnCodeSql;
}else{ } else {
sqlArray = new String[1]; sqlArray = new String[1];
} }
final String sql = "DROP TABLE `" + datatableName + "`"; final String sql = "DROP TABLE `" + datatableName + "`";
@@ -73,9 +73,7 @@ public class ImageReadPlatformServiceImpl implements ImageReadPlatformService {
final ContentRepository contentRepository = this.contentRepositoryFactory.getRepository(imageData.storageType()); final ContentRepository contentRepository = this.contentRepositoryFactory.getRepository(imageData.storageType());
final ImageData result = contentRepository.fetchImage(imageData); final ImageData result = contentRepository.fetchImage(imageData);
if (result.getContent() == null) { if (result.getContent() == null) { throw new ImageNotFoundException("clients", clientId); }
throw new ImageNotFoundException("clients", clientId);
}
return result; return result;
} catch (final EmptyResultDataAccessException e) { } catch (final EmptyResultDataAccessException e) {
@@ -41,7 +41,7 @@ public class SmsMessage extends AbstractPersistable<Long> {
@Column(name = "status_enum", nullable = false) @Column(name = "status_enum", nullable = false)
private Integer statusType; private Integer statusType;
@Column(name = "mobile_no", nullable = false, length=50) @Column(name = "mobile_no", nullable = false, length = 50)
private String mobileNo; private String mobileNo;
@Column(name = "message", nullable = false) @Column(name = "message", nullable = false)
@@ -30,10 +30,8 @@ public class SmsMessageAssembler {
private final FromJsonHelper fromApiJsonHelper; private final FromJsonHelper fromApiJsonHelper;
@Autowired @Autowired
public SmsMessageAssembler(final SmsMessageRepository smsMessageRepository, public SmsMessageAssembler(final SmsMessageRepository smsMessageRepository, final GroupRepositoryWrapper groupRepositoryWrapper,
final GroupRepositoryWrapper groupRepositoryWrapper, final ClientRepositoryWrapper clientRepository, final StaffRepositoryWrapper staffRepository,
final ClientRepositoryWrapper clientRepository,
final StaffRepositoryWrapper staffRepository,
final FromJsonHelper fromApiJsonHelper) { final FromJsonHelper fromApiJsonHelper) {
this.smsMessageRepository = smsMessageRepository; this.smsMessageRepository = smsMessageRepository;
this.groupRepository = groupRepositoryWrapper; this.groupRepository = groupRepositoryWrapper;
@@ -14,24 +14,29 @@ public class SmsMessageEnumerations {
} }
public static EnumOptionData status(final SmsMessageStatusType status) { public static EnumOptionData status(final SmsMessageStatusType status) {
EnumOptionData optionData = new EnumOptionData(SmsMessageStatusType.INVALID.getValue().longValue(), SmsMessageStatusType.INVALID.getCode(), EnumOptionData optionData = new EnumOptionData(SmsMessageStatusType.INVALID.getValue().longValue(),
"Invalid"); SmsMessageStatusType.INVALID.getCode(), "Invalid");
switch (status) { switch (status) {
case INVALID: case INVALID:
optionData = new EnumOptionData(SmsMessageStatusType.INVALID.getValue().longValue(), SmsMessageStatusType.INVALID.getCode(), "Invalid"); optionData = new EnumOptionData(SmsMessageStatusType.INVALID.getValue().longValue(),
SmsMessageStatusType.INVALID.getCode(), "Invalid");
break; break;
case PENDING: case PENDING:
optionData = new EnumOptionData(SmsMessageStatusType.PENDING.getValue().longValue(), SmsMessageStatusType.PENDING.getCode(), "Pending"); optionData = new EnumOptionData(SmsMessageStatusType.PENDING.getValue().longValue(),
SmsMessageStatusType.PENDING.getCode(), "Pending");
break; break;
case SENT: case SENT:
optionData = new EnumOptionData(SmsMessageStatusType.SENT.getValue().longValue(), SmsMessageStatusType.SENT.getCode(), "Sent"); optionData = new EnumOptionData(SmsMessageStatusType.SENT.getValue().longValue(), SmsMessageStatusType.SENT.getCode(),
break; "Sent");
break;
case DELIVERED: case DELIVERED:
optionData = new EnumOptionData(SmsMessageStatusType.DELIVERED.getValue().longValue(), SmsMessageStatusType.DELIVERED.getCode(), "Delivered"); optionData = new EnumOptionData(SmsMessageStatusType.DELIVERED.getValue().longValue(),
break; SmsMessageStatusType.DELIVERED.getCode(), "Delivered");
break;
case FAILED: case FAILED:
optionData = new EnumOptionData(SmsMessageStatusType.FAILED.getValue().longValue(), SmsMessageStatusType.FAILED.getCode(), "Failed"); optionData = new EnumOptionData(SmsMessageStatusType.FAILED.getValue().longValue(), SmsMessageStatusType.FAILED.getCode(),
break; "Failed");
break;
} }
@@ -48,8 +48,11 @@ public class SmsWritePlatformServiceJpaRepositoryImpl implements SmsWritePlatfor
final SmsMessage message = this.assembler.assembleFromJson(command); final SmsMessage message = this.assembler.assembleFromJson(command);
// TODO: at this point we also want to fire off request using third party service to send SMS. // TODO: at this point we also want to fire off request using third
// TODO: decision to be made on wheter we 'wait' for response or use 'future/promise' to capture response and update the SmsMessage table // party service to send SMS.
// TODO: decision to be made on wheter we 'wait' for response or use
// 'future/promise' to capture response and update the SmsMessage
// table
this.repository.save(message); this.repository.save(message);
return new CommandProcessingResultBuilder() // return new CommandProcessingResultBuilder() //
@@ -108,9 +111,8 @@ public class SmsWritePlatformServiceJpaRepositoryImpl implements SmsWritePlatfor
private void handleDataIntegrityIssues(@SuppressWarnings("unused") final JsonCommand command, final DataIntegrityViolationException dve) { private void handleDataIntegrityIssues(@SuppressWarnings("unused") final JsonCommand command, final DataIntegrityViolationException dve) {
final Throwable realCause = dve.getMostSpecificCause(); final Throwable realCause = dve.getMostSpecificCause();
if (realCause.getMessage().contains("mobile_no")) { if (realCause.getMessage().contains("mobile_no")) { throw new PlatformDataIntegrityException("error.msg.sms.no.mobile.no.exists",
throw new PlatformDataIntegrityException("error.msg.sms.no.mobile.no.exists", "The group, client or staff provided has no mobile no.", "id"); "The group, client or staff provided has no mobile no.", "id"); }
}
logger.error(dve.getMessage(), dve); logger.error(dve.getMessage(), dve);
throw new PlatformDataIntegrityException("error.msg.sms.unknown.data.integrity.issue", throw new PlatformDataIntegrityException("error.msg.sms.unknown.data.integrity.issue",
@@ -25,8 +25,10 @@ public class HolidayApiConstants {
public static final String status = "status"; public static final String status = "status";
public static final Set<String> HOLIDAY_CREATE_OR_UPDATE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName, public static final Set<String> HOLIDAY_CREATE_OR_UPDATE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName,
dateFormatParamName, nameParamName, fromDateParamName, toDateParamName, descriptionParamName, officesParamName, repaymentsRescheduledToParamName)); dateFormatParamName, nameParamName, fromDateParamName, toDateParamName, descriptionParamName, officesParamName,
repaymentsRescheduledToParamName));
public static final Set<String> HOLIDAY_RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(idParamName, nameParamName, public static final Set<String> HOLIDAY_RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(idParamName, nameParamName,
fromDateParamName, descriptionParamName, toDateParamName, repaymentsRescheduledToParamName, localeParamName, dateFormatParamName, status)); fromDateParamName, descriptionParamName, toDateParamName, repaymentsRescheduledToParamName, localeParamName,
dateFormatParamName, status));
} }
@@ -108,7 +108,6 @@ public class HolidaysApiResource {
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, holidayData, HOLIDAY_RESPONSE_DATA_PARAMETERS); return this.toApiJsonSerializer.serialize(settings, holidayData, HOLIDAY_RESPONSE_DATA_PARAMETERS);
} }
@@ -118,8 +117,7 @@ public class HolidaysApiResource {
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String update(@PathParam("holidayId") final Long holidayId, final String jsonRequestBody) { public String update(@PathParam("holidayId") final Long holidayId, final String jsonRequestBody) {
final CommandWrapper commandRequest = new CommandWrapperBuilder().updateHoliday(holidayId) final CommandWrapper commandRequest = new CommandWrapperBuilder().updateHoliday(holidayId).withJson(jsonRequestBody).build();
.withJson(jsonRequestBody).build();
final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
@@ -38,7 +38,8 @@ public class HolidayDataValidator {
if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); } if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); }
final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType(); final Type typeOfMap = new TypeToken<Map<String, Object>>() {}.getType();
this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json, HolidayApiConstants.HOLIDAY_CREATE_OR_UPDATE_REQUEST_DATA_PARAMETERS); this.fromApiJsonHelper.checkForUnsupportedParameters(typeOfMap, json,
HolidayApiConstants.HOLIDAY_CREATE_OR_UPDATE_REQUEST_DATA_PARAMETERS);
final JsonElement element = this.fromApiJsonHelper.parse(json); final JsonElement element = this.fromApiJsonHelper.parse(json);
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
@@ -55,14 +56,15 @@ public class HolidayDataValidator {
final LocalDate toDate = this.fromApiJsonHelper.extractLocalDateNamed(HolidayApiConstants.toDateParamName, element); final LocalDate toDate = this.fromApiJsonHelper.extractLocalDateNamed(HolidayApiConstants.toDateParamName, element);
baseDataValidator.reset().parameter(HolidayApiConstants.toDateParamName).value(toDate).notNull(); baseDataValidator.reset().parameter(HolidayApiConstants.toDateParamName).value(toDate).notNull();
final LocalDate repaymentsRescheduledTo = this.fromApiJsonHelper.extractLocalDateNamed(HolidayApiConstants.repaymentsRescheduledToParamName, final LocalDate repaymentsRescheduledTo = this.fromApiJsonHelper.extractLocalDateNamed(
element); HolidayApiConstants.repaymentsRescheduledToParamName, element);
baseDataValidator.reset().parameter(HolidayApiConstants.repaymentsRescheduledToParamName).value(repaymentsRescheduledTo).notNull(); baseDataValidator.reset().parameter(HolidayApiConstants.repaymentsRescheduledToParamName).value(repaymentsRescheduledTo).notNull();
Set<Long> offices = null; Set<Long> offices = null;
final JsonObject topLevelJsonElement = element.getAsJsonObject(); final JsonObject topLevelJsonElement = element.getAsJsonObject();
if (topLevelJsonElement.has(HolidayApiConstants.officesParamName) && topLevelJsonElement.get(HolidayApiConstants.officesParamName).isJsonArray()) { if (topLevelJsonElement.has(HolidayApiConstants.officesParamName)
&& topLevelJsonElement.get(HolidayApiConstants.officesParamName).isJsonArray()) {
final JsonArray array = topLevelJsonElement.get(HolidayApiConstants.officesParamName).getAsJsonArray(); final JsonArray array = topLevelJsonElement.get(HolidayApiConstants.officesParamName).getAsJsonArray();
if (array.size() > 0) { if (array.size() > 0) {
@@ -111,13 +113,15 @@ public class HolidayDataValidator {
if (this.fromApiJsonHelper.parameterExists(HolidayApiConstants.repaymentsRescheduledToParamName, element)) { if (this.fromApiJsonHelper.parameterExists(HolidayApiConstants.repaymentsRescheduledToParamName, element)) {
final LocalDate repaymentsRescheduledTo = this.fromApiJsonHelper.extractLocalDateNamed( final LocalDate repaymentsRescheduledTo = this.fromApiJsonHelper.extractLocalDateNamed(
HolidayApiConstants.repaymentsRescheduledToParamName, element); HolidayApiConstants.repaymentsRescheduledToParamName, element);
baseDataValidator.reset().parameter(HolidayApiConstants.repaymentsRescheduledToParamName).value(repaymentsRescheduledTo).notNull(); baseDataValidator.reset().parameter(HolidayApiConstants.repaymentsRescheduledToParamName).value(repaymentsRescheduledTo)
.notNull();
} }
Set<Long> offices = null; Set<Long> offices = null;
final JsonObject topLevelJsonElement = element.getAsJsonObject(); final JsonObject topLevelJsonElement = element.getAsJsonObject();
if (this.fromApiJsonHelper.parameterExists(HolidayApiConstants.officesParamName, element)) { if (this.fromApiJsonHelper.parameterExists(HolidayApiConstants.officesParamName, element)) {
if (topLevelJsonElement.has(HolidayApiConstants.officesParamName) && topLevelJsonElement.get(HolidayApiConstants.officesParamName).isJsonArray()) { if (topLevelJsonElement.has(HolidayApiConstants.officesParamName)
&& topLevelJsonElement.get(HolidayApiConstants.officesParamName).isJsonArray()) {
final JsonArray array = topLevelJsonElement.get(HolidayApiConstants.officesParamName).getAsJsonArray(); final JsonArray array = topLevelJsonElement.get(HolidayApiConstants.officesParamName).getAsJsonArray();
if (array.size() > 0) { if (array.size() > 0) {
@@ -81,7 +81,8 @@ public class Holiday extends AbstractPersistable<Long> {
final String name = command.stringValueOfParameterNamed(HolidayApiConstants.nameParamName); final String name = command.stringValueOfParameterNamed(HolidayApiConstants.nameParamName);
final LocalDate fromDate = command.localDateValueOfParameterNamed(HolidayApiConstants.fromDateParamName); final LocalDate fromDate = command.localDateValueOfParameterNamed(HolidayApiConstants.fromDateParamName);
final LocalDate toDate = command.localDateValueOfParameterNamed(HolidayApiConstants.toDateParamName); final LocalDate toDate = command.localDateValueOfParameterNamed(HolidayApiConstants.toDateParamName);
final LocalDate repaymentsRescheduledTo = command.localDateValueOfParameterNamed(HolidayApiConstants.repaymentsRescheduledToParamName); final LocalDate repaymentsRescheduledTo = command
.localDateValueOfParameterNamed(HolidayApiConstants.repaymentsRescheduledToParamName);
final Integer status = HolidayStatusType.PENDING_FOR_ACTIVATION.getValue(); final Integer status = HolidayStatusType.PENDING_FOR_ACTIVATION.getValue();
final boolean processed = false;// default it to false. Only batch job final boolean processed = false;// default it to false. Only batch job
// should update this field. // should update this field.
@@ -93,8 +94,7 @@ public class Holiday extends AbstractPersistable<Long> {
final Map<String, Object> actualChanges = new LinkedHashMap<String, Object>(7); final Map<String, Object> actualChanges = new LinkedHashMap<String, Object>(7);
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("holiday" + ".update");
.resource("holiday" + ".update");
final HolidayStatusType currentStatus = HolidayStatusType.fromInt(this.status); final HolidayStatusType currentStatus = HolidayStatusType.fromInt(this.status);
@@ -263,8 +263,7 @@ public class Holiday extends AbstractPersistable<Long> {
public void activate() { public void activate() {
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors) final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("holiday" + ".activate");
.resource("holiday" + ".activate");
final HolidayStatusType currentStatus = HolidayStatusType.fromInt(this.status); final HolidayStatusType currentStatus = HolidayStatusType.fromInt(this.status);
if (!currentStatus.isPendingActivation()) { if (!currentStatus.isPendingActivation()) {
@@ -16,7 +16,8 @@ import org.springframework.data.repository.query.Param;
public interface HolidayRepository extends JpaRepository<Holiday, Long>, JpaSpecificationExecutor<Holiday> { public interface HolidayRepository extends JpaRepository<Holiday, Long>, JpaSpecificationExecutor<Holiday> {
@Query("select holiday from Holiday holiday, IN(holiday.offices) office where (holiday.fromDate >= :date OR :date <= holiday.toDate) and holiday.status = :status and office.id = :officeId") @Query("select holiday from Holiday holiday, IN(holiday.offices) office where (holiday.fromDate >= :date OR :date <= holiday.toDate) and holiday.status = :status and office.id = :officeId")
List<Holiday> findByOfficeIdAndGreaterThanDate(@Param("officeId") Long officeId, @Param("date") Date date, @Param("status") Integer status); List<Holiday> findByOfficeIdAndGreaterThanDate(@Param("officeId") Long officeId, @Param("date") Date date,
@Param("status") Integer status);
@Query("from Holiday holiday where holiday.processed = false and holiday.status = :status") @Query("from Holiday holiday where holiday.processed = false and holiday.status = :status")
List<Holiday> findUnprocessed(@Param("status") Integer status); List<Holiday> findUnprocessed(@Param("status") Integer status);
@@ -38,7 +38,7 @@ public class HolidayRepositoryWrapper {
this.repository.save(holiday); this.repository.save(holiday);
} }
public void save(final Iterable<Holiday> holidays){ public void save(final Iterable<Holiday> holidays) {
this.repository.save(holidays); this.repository.save(holidays);
} }
@@ -5,7 +5,6 @@
*/ */
package org.mifosplatform.organisation.holiday.domain; package org.mifosplatform.organisation.holiday.domain;
/** /**
* Enum representation of {@link Holiday} status states. * Enum representation of {@link Holiday} status states.
*/ */
@@ -26,10 +26,12 @@ public class HolidayEnumerations {
HolidayStatusType.PENDING_FOR_ACTIVATION.getCode(), "Pending for activation"); HolidayStatusType.PENDING_FOR_ACTIVATION.getCode(), "Pending for activation");
break; break;
case ACTIVE: case ACTIVE:
optionData = new EnumOptionData(HolidayStatusType.ACTIVE.getValue().longValue(), HolidayStatusType.ACTIVE.getCode(), "Active"); optionData = new EnumOptionData(HolidayStatusType.ACTIVE.getValue().longValue(), HolidayStatusType.ACTIVE.getCode(),
"Active");
break; break;
case DELETED: case DELETED:
optionData = new EnumOptionData(HolidayStatusType.DELETED.getValue().longValue(), HolidayStatusType.DELETED.getCode(), "Deleted"); optionData = new EnumOptionData(HolidayStatusType.DELETED.getValue().longValue(), HolidayStatusType.DELETED.getCode(),
"Deleted");
break; break;
} }
return optionData; return optionData;
@@ -51,8 +51,9 @@ public class HolidayWritePlatformServiceJpaRepositoryImpl implements HolidayWrit
@Autowired @Autowired
public HolidayWritePlatformServiceJpaRepositoryImpl(final HolidayDataValidator fromApiJsonDeserializer, public HolidayWritePlatformServiceJpaRepositoryImpl(final HolidayDataValidator fromApiJsonDeserializer,
final HolidayRepositoryWrapper holidayRepository, final PlatformSecurityContext context, final OfficeRepository officeRepository, final HolidayRepositoryWrapper holidayRepository, final PlatformSecurityContext context,
final FromJsonHelper fromApiJsonHelper, final WorkingDaysRepositoryWrapper daysRepositoryWrapper, final ConfigurationDomainService configurationDomainService) { final OfficeRepository officeRepository, final FromJsonHelper fromApiJsonHelper,
final WorkingDaysRepositoryWrapper daysRepositoryWrapper, final ConfigurationDomainService configurationDomainService) {
this.fromApiJsonDeserializer = fromApiJsonDeserializer; this.fromApiJsonDeserializer = fromApiJsonDeserializer;
this.holidayRepository = holidayRepository; this.holidayRepository = holidayRepository;
this.context = context; this.context = context;
@@ -123,8 +124,7 @@ public class HolidayWritePlatformServiceJpaRepositoryImpl implements HolidayWrit
holiday.activate(); holiday.activate();
this.holidayRepository.saveAndFlush(holiday); this.holidayRepository.saveAndFlush(holiday);
return new CommandProcessingResultBuilder() return new CommandProcessingResultBuilder().withEntityId(holiday.getId()).build();
.withEntityId(holiday.getId()).build();
} }
@Transactional @Transactional
@@ -134,14 +134,14 @@ public class HolidayWritePlatformServiceJpaRepositoryImpl implements HolidayWrit
final Holiday holiday = this.holidayRepository.findOneWithNotFoundDetection(holidayId); final Holiday holiday = this.holidayRepository.findOneWithNotFoundDetection(holidayId);
holiday.delete(); holiday.delete();
this.holidayRepository.saveAndFlush(holiday); this.holidayRepository.saveAndFlush(holiday);
return new CommandProcessingResultBuilder() return new CommandProcessingResultBuilder().withEntityId(holidayId).build();
.withEntityId(holidayId).build();
} }
private Set<Office> getSelectedOffices(final JsonCommand command) { private Set<Office> getSelectedOffices(final JsonCommand command) {
Set<Office> offices = null; Set<Office> offices = null;
final JsonObject topLevelJsonElement = this.fromApiJsonHelper.parse(command.json()).getAsJsonObject(); final JsonObject topLevelJsonElement = this.fromApiJsonHelper.parse(command.json()).getAsJsonObject();
if (topLevelJsonElement.has(HolidayApiConstants.officesParamName) && topLevelJsonElement.get(HolidayApiConstants.officesParamName).isJsonArray()) { if (topLevelJsonElement.has(HolidayApiConstants.officesParamName)
&& topLevelJsonElement.get(HolidayApiConstants.officesParamName).isJsonArray()) {
final JsonArray array = topLevelJsonElement.get(HolidayApiConstants.officesParamName).getAsJsonArray(); final JsonArray array = topLevelJsonElement.get(HolidayApiConstants.officesParamName).getAsJsonArray();
offices = new HashSet<Office>(array.size()); offices = new HashSet<Office>(array.size());
@@ -172,9 +172,11 @@ public class HolidayWritePlatformServiceJpaRepositoryImpl implements HolidayWrit
private void validateInputDates(final JsonCommand command) { private void validateInputDates(final JsonCommand command) {
final LocalDate fromDate = command.localDateValueOfParameterNamed(HolidayApiConstants.fromDateParamName); final LocalDate fromDate = command.localDateValueOfParameterNamed(HolidayApiConstants.fromDateParamName);
final LocalDate toDate = command.localDateValueOfParameterNamed(HolidayApiConstants.toDateParamName); final LocalDate toDate = command.localDateValueOfParameterNamed(HolidayApiConstants.toDateParamName);
final LocalDate repaymentsRescheduledTo = command.localDateValueOfParameterNamed(HolidayApiConstants.repaymentsRescheduledToParamName); final LocalDate repaymentsRescheduledTo = command
.localDateValueOfParameterNamed(HolidayApiConstants.repaymentsRescheduledToParamName);
this.validateInputDates(fromDate, toDate, repaymentsRescheduledTo); this.validateInputDates(fromDate, toDate, repaymentsRescheduledTo);
} }
private void validateInputDates(final LocalDate fromDate, final LocalDate toDate, final LocalDate repaymentsRescheduledTo) { private void validateInputDates(final LocalDate fromDate, final LocalDate toDate, final LocalDate repaymentsRescheduledTo) {
String defaultUserMessage = ""; String defaultUserMessage = "";
@@ -38,8 +38,10 @@ public class StaffData {
} }
public static StaffData instance(final Long id, final String firstname, final String lastname, final String displayName, public static StaffData instance(final Long id, final String firstname, final String lastname, final String displayName,
final Long officeId, final String officeName, final Boolean isLoanOfficer, final String externalId, final String mobileNo, final boolean isActive) { final Long officeId, final String officeName, final Boolean isLoanOfficer, final String externalId, final String mobileNo,
return new StaffData(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo, null, isActive); final boolean isActive) {
return new StaffData(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo, null,
isActive);
} }
private StaffData(final Long id, final String firstname, final String lastname, final String displayName, final Long officeId, private StaffData(final Long id, final String firstname, final String lastname, final String displayName, final Long officeId,
@@ -52,7 +52,7 @@ public class Staff extends AbstractPersistable<Long> {
@Column(name = "organisational_role_enum", nullable = true) @Column(name = "organisational_role_enum", nullable = true)
private Integer organisationalRoleType; private Integer organisationalRoleType;
@Column (name="is_active" , nullable = false) @Column(name = "is_active", nullable = false)
private boolean active; private boolean active;
@ManyToOne @ManyToOne
@@ -57,7 +57,8 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
final String mobileNo = rs.getString("mobileNo"); final String mobileNo = rs.getString("mobileNo");
final boolean isActive = rs.getBoolean("isActive"); final boolean isActive = rs.getBoolean("isActive");
return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo, isActive); return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo,
isActive);
} }
} }
@@ -98,7 +99,8 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
final String mobileNo = rs.getString("mobileNo"); final String mobileNo = rs.getString("mobileNo");
final boolean isActive = rs.getBoolean("isActive"); final boolean isActive = rs.getBoolean("isActive");
return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo, isActive); return StaffData.instance(id, firstname, lastname, displayName, officeId, officeName, isLoanOfficer, externalId, mobileNo,
isActive);
} }
} }
@@ -165,7 +167,8 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
} }
@Override @Override
public Collection<StaffData> retrieveAllStaff(final String sqlSearch, final Long officeId, final boolean loanOfficersOnly, final String status) { public Collection<StaffData> retrieveAllStaff(final String sqlSearch, final Long officeId, final boolean loanOfficersOnly,
final String status) {
final String extraCriteria = getStaffCriteria(sqlSearch, officeId, loanOfficersOnly, status); final String extraCriteria = getStaffCriteria(sqlSearch, officeId, loanOfficersOnly, status);
return retrieveAllStaff(extraCriteria); return retrieveAllStaff(extraCriteria);
} }
@@ -194,13 +197,13 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
if (loanOfficersOnly) { if (loanOfficersOnly) {
extraCriteria.append(" and s.is_loan_officer is true "); extraCriteria.append(" and s.is_loan_officer is true ");
} }
// Passing status parameter to get ACTIVE (By Default), INACTIVE or ALL (Both active and Inactive) employees // Passing status parameter to get ACTIVE (By Default), INACTIVE or ALL
// (Both active and Inactive) employees
if (status.equalsIgnoreCase("active")) { if (status.equalsIgnoreCase("active")) {
extraCriteria.append(" and is_active = 1 "); extraCriteria.append(" and is_active = 1 ");
} else if (status.equalsIgnoreCase("inActive")) { } else if (status.equalsIgnoreCase("inActive")) {
extraCriteria.append(" and is_active = 0 "); extraCriteria.append(" and is_active = 0 ");
} else if (status.equalsIgnoreCase("all")) {} } else if (status.equalsIgnoreCase("all")) {} else {
else {
throw new UnrecognizedQueryParamException("status", status, new Object[] { "all", "active", "inactive" }); throw new UnrecognizedQueryParamException("status", status, new Object[] { "all", "active", "inactive" });
} }
@@ -208,7 +211,7 @@ public class StaffReadPlatformServiceImpl implements StaffReadPlatformService {
extraCriteria.delete(0, 4); extraCriteria.delete(0, 4);
} }
//remove begin four letter including a space from the string. // remove begin four letter including a space from the string.
return extraCriteria.toString(); return extraCriteria.toString();
} }
@@ -100,6 +100,7 @@ public class StaffWritePlatformServiceJpaRepositoryImpl implements StaffWritePla
return CommandProcessingResult.empty(); return CommandProcessingResult.empty();
} }
} }
/* /*
* Guaranteed to throw an exception no matter what the data integrity issue * Guaranteed to throw an exception no matter what the data integrity issue
* is. * is.
@@ -98,7 +98,8 @@ public class AccountTransfersApiResource {
this.context.authenticatedUser().validateHasReadPermission(AccountTransfersApiConstants.ACCOUNT_TRANSFER_RESOURCE_NAME); this.context.authenticatedUser().validateHasReadPermission(AccountTransfersApiConstants.ACCOUNT_TRANSFER_RESOURCE_NAME);
final SearchParameters searchParameters = SearchParameters.forAccountTransfer(sqlSearch, externalId, offset, limit, orderBy, sortOrder); final SearchParameters searchParameters = SearchParameters.forAccountTransfer(sqlSearch, externalId, offset, limit, orderBy,
sortOrder);
final Page<AccountTransferData> transfers = this.accountTransfersReadPlatformService.retrieveAll(searchParameters); final Page<AccountTransferData> transfers = this.accountTransfersReadPlatformService.retrieveAll(searchParameters);
@@ -28,7 +28,8 @@ public class AccountTransferDTO {
public AccountTransferDTO(final LocalDate transactionDate, final BigDecimal transactionAmount, public AccountTransferDTO(final LocalDate transactionDate, final BigDecimal transactionAmount,
final PortfolioAccountType fromAccountType, final PortfolioAccountType toAccountType, final Long fromAccountId, final PortfolioAccountType fromAccountType, final PortfolioAccountType toAccountType, final Long fromAccountId,
final Long toAccountId, final String description, final Locale locale, final DateTimeFormatter fmt, final Long toAccountId, final String description, final Locale locale, final DateTimeFormatter fmt,
final PaymentDetail paymentDetail, final Integer fromTransferType, final Integer toTransferType, final Long chargeId, Integer loanInstallmentNumber) { final PaymentDetail paymentDetail, final Integer fromTransferType, final Integer toTransferType, final Long chargeId,
Integer loanInstallmentNumber) {
this.transactionDate = transactionDate; this.transactionDate = transactionDate;
this.transactionAmount = transactionAmount; this.transactionAmount = transactionAmount;
this.fromAccountType = fromAccountType; this.fromAccountType = fromAccountType;
@@ -97,7 +98,6 @@ public class AccountTransferDTO {
return this.chargeId; return this.chargeId;
} }
public Integer getLoanInstallmentNumber() { public Integer getLoanInstallmentNumber() {
return this.loanInstallmentNumber; return this.loanInstallmentNumber;
} }
@@ -176,7 +176,6 @@ public class AccountTransfer extends AbstractPersistable<Long> {
return this.fromAccount; return this.fromAccount;
} }
public void updateToLoanTransaction(LoanTransaction toLoanTransaction) { public void updateToLoanTransaction(LoanTransaction toLoanTransaction) {
this.toLoanTransaction = toLoanTransaction; this.toLoanTransaction = toLoanTransaction;
} }
@@ -229,7 +229,8 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer
final LoanTransaction loanRepaymentTransaction = this.loanAccountDomainService.makeChargePayment(toLoanAccount, final LoanTransaction loanRepaymentTransaction = this.loanAccountDomainService.makeChargePayment(toLoanAccount,
accountTransferDTO.getChargeId(), accountTransferDTO.getTransactionDate(), accountTransferDTO.getTransactionAmount(), accountTransferDTO.getChargeId(), accountTransferDTO.getTransactionDate(), accountTransferDTO.getTransactionAmount(),
accountTransferDTO.getPaymentDetail(), null, null, accountTransferDTO.getToTransferType(), accountTransferDTO.getLoanInstallmentNumber()); accountTransferDTO.getPaymentDetail(), null, null, accountTransferDTO.getToTransferType(),
accountTransferDTO.getLoanInstallmentNumber());
final AccountTransfer transferTransaction = this.accountTransferAssembler.assembleSavingsToLoanTransfer(accountTransferDTO, final AccountTransfer transferTransaction = this.accountTransferAssembler.assembleSavingsToLoanTransfer(accountTransferDTO,
fromSavingsAccount, toLoanAccount, withdrawal, loanRepaymentTransaction); fromSavingsAccount, toLoanAccount, withdrawal, loanRepaymentTransaction);
@@ -242,9 +243,9 @@ public class AccountTransfersWritePlatformServiceImpl implements AccountTransfer
@Override @Override
@Transactional @Transactional
public void updateLoanTransaction(final Long loanTransactionId,final LoanTransaction newLoanTransaction){ public void updateLoanTransaction(final Long loanTransactionId, final LoanTransaction newLoanTransaction) {
final AccountTransfer transferTransaction = this.accountTransferRepository.findByToLoanTransactionId(loanTransactionId); final AccountTransfer transferTransaction = this.accountTransferRepository.findByToLoanTransactionId(loanTransactionId);
if(transferTransaction!=null){ if (transferTransaction != null) {
transferTransaction.updateToLoanTransaction(newLoanTransaction); transferTransaction.updateToLoanTransaction(newLoanTransaction);
this.accountTransferRepository.save(transferTransaction); this.accountTransferRepository.save(transferTransaction);
} }
@@ -11,6 +11,7 @@ import java.util.Set;
public class CalendarConstants { public class CalendarConstants {
public static final String CALENDAR_RESOURCE_NAME = "calendar"; public static final String CALENDAR_RESOURCE_NAME = "calendar";
public static enum CALENDAR_SUPPORTED_PARAMETERS { public static enum CALENDAR_SUPPORTED_PARAMETERS {
CALENDAR_ID("id"), ENTITY_TYPE("entityType"), ENTITY_ID("entityId"), TITLE("title"), DESCRIPTION("description"), LOCATION( CALENDAR_ID("id"), ENTITY_TYPE("entityType"), ENTITY_ID("entityId"), TITLE("title"), DESCRIPTION("description"), LOCATION(
"location"), START_DATE("startDate"), END_DATE("endDate"), CREATED_DATE("createdDate"), DURATION("duration"), TYPE_ID( "location"), START_DATE("startDate"), END_DATE("endDate"), CREATED_DATE("createdDate"), DURATION("duration"), TYPE_ID(
@@ -55,12 +55,12 @@ public class CalendarsApiResource {
/** /**
* The set of parameters that are supported in response for {@link Calendar} * The set of parameters that are supported in response for {@link Calendar}
*/ */
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>( private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "entityId", "entityType", "title",
Arrays.asList("id", "entityId", "entityType", "title", "description", "location", "startDate", "endDate", "duration", "type", "description", "location", "startDate", "endDate", "duration", "type", "repeating", "recurrence", "frequency", "interval",
"repeating", "recurrence", "frequency", "interval", "repeatsOnDay", "remindBy", "firstReminder", "secondReminder", "repeatsOnDay", "remindBy", "firstReminder", "secondReminder", "humanReadable", "createdDate", "lastUpdatedDate",
"humanReadable", "createdDate", "lastUpdatedDate", "createdByUserId", "createdByUsername", "lastUpdatedByUserId", "createdByUserId", "createdByUsername", "lastUpdatedByUserId", "lastUpdatedByUsername", "recurringDates",
"lastUpdatedByUsername", "recurringDates", "nextTenRecurringDates", "entityTypeOptions", "calendarTypeOptions", "nextTenRecurringDates", "entityTypeOptions", "calendarTypeOptions", "remindByOptions", "frequencyOptions",
"remindByOptions", "frequencyOptions", "repeatsOnDayOptions")); "repeatsOnDayOptions"));
private final String resourceNameForPermissions = "CALENDAR"; private final String resourceNameForPermissions = "CALENDAR";
private final PlatformSecurityContext context; private final PlatformSecurityContext context;
@@ -60,12 +60,13 @@ public class CalendarData {
final List<EnumOptionData> frequencyOptions; final List<EnumOptionData> frequencyOptions;
final List<EnumOptionData> repeatsOnDayOptions; final List<EnumOptionData> repeatsOnDayOptions;
public static CalendarData instance(final Long id, final Long calendarInstanceId, final Long entityId, final EnumOptionData entityType, final String title, public static CalendarData instance(final Long id, final Long calendarInstanceId, final Long entityId, final EnumOptionData entityType,
final String description, final String location, final LocalDate startDate, final LocalDate endDate, final Integer duration, final String title, final String description, final String location, final LocalDate startDate, final LocalDate endDate,
final EnumOptionData type, final boolean repeating, final String recurrence, final EnumOptionData frequency, final Integer duration, final EnumOptionData type, final boolean repeating, final String recurrence,
final Integer interval, final EnumOptionData repeatsOnDay, final EnumOptionData remindBy, final Integer firstReminder, final EnumOptionData frequency, final Integer interval, final EnumOptionData repeatsOnDay, final EnumOptionData remindBy,
final Integer secondReminder, final String humanReadable, final LocalDate createdDate, final LocalDate lastUpdatedDate, final Integer firstReminder, final Integer secondReminder, final String humanReadable, final LocalDate createdDate,
final Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId, final String lastUpdatedByUsername) { final LocalDate lastUpdatedDate, final Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId,
final String lastUpdatedByUsername) {
final Collection<LocalDate> recurringDates = null; final Collection<LocalDate> recurringDates = null;
final Collection<LocalDate> nextTenRecurringDates = null; final Collection<LocalDate> nextTenRecurringDates = null;
@@ -77,8 +78,8 @@ public class CalendarData {
final List<EnumOptionData> frequencyOptions = null; final List<EnumOptionData> frequencyOptions = null;
final List<EnumOptionData> repeatsOnDayOptions = null; final List<EnumOptionData> repeatsOnDayOptions = null;
return new CalendarData(id, calendarInstanceId, entityId, entityType, title, description, location, startDate, endDate, duration, type, repeating, return new CalendarData(id, calendarInstanceId, entityId, entityType, title, description, location, startDate, endDate, duration,
recurrence, frequency, interval, repeatsOnDay, remindBy, firstReminder, secondReminder, recurringDates, type, repeating, recurrence, frequency, interval, repeatsOnDay, remindBy, firstReminder, secondReminder, recurringDates,
nextTenRecurringDates, humanReadable, recentEligibleMeetingDate, createdDate, lastUpdatedDate, createdByUserId, nextTenRecurringDates, humanReadable, recentEligibleMeetingDate, createdDate, lastUpdatedDate, createdByUserId,
createdByUsername, lastUpdatedByUserId, lastUpdatedByUsername, entityTypeOptions, calendarTypeOptions, remindByOptions, createdByUsername, lastUpdatedByUserId, lastUpdatedByUsername, entityTypeOptions, calendarTypeOptions, remindByOptions,
frequencyOptions, repeatsOnDayOptions); frequencyOptions, repeatsOnDayOptions);
@@ -86,27 +87,27 @@ public class CalendarData {
public static CalendarData withRecurringDates(final CalendarData calendarData, final Collection<LocalDate> recurringDates, public static CalendarData withRecurringDates(final CalendarData calendarData, final Collection<LocalDate> recurringDates,
final Collection<LocalDate> nextTenRecurringDates, final LocalDate recentEligibleMeetingDate) { final Collection<LocalDate> nextTenRecurringDates, final LocalDate recentEligibleMeetingDate) {
return new CalendarData(calendarData.id, calendarData.calendarInstanceId, calendarData.entityId, calendarData.entityType, calendarData.title, return new CalendarData(calendarData.id, calendarData.calendarInstanceId, calendarData.entityId, calendarData.entityType,
calendarData.description, calendarData.location, calendarData.startDate, calendarData.endDate, calendarData.duration, calendarData.title, calendarData.description, calendarData.location, calendarData.startDate, calendarData.endDate,
calendarData.type, calendarData.repeating, calendarData.recurrence, calendarData.frequency, calendarData.interval, calendarData.duration, calendarData.type, calendarData.repeating, calendarData.recurrence, calendarData.frequency,
calendarData.repeatsOnDay, calendarData.remindBy, calendarData.firstReminder, calendarData.secondReminder, recurringDates, calendarData.interval, calendarData.repeatsOnDay, calendarData.remindBy, calendarData.firstReminder,
nextTenRecurringDates, calendarData.humanReadable, recentEligibleMeetingDate, calendarData.createdDate, calendarData.secondReminder, recurringDates, nextTenRecurringDates, calendarData.humanReadable, recentEligibleMeetingDate,
calendarData.lastUpdatedDate, calendarData.createdByUserId, calendarData.createdByUsername, calendarData.createdDate, calendarData.lastUpdatedDate, calendarData.createdByUserId, calendarData.createdByUsername,
calendarData.lastUpdatedByUserId, calendarData.lastUpdatedByUsername, calendarData.entityTypeOptions, calendarData.lastUpdatedByUserId, calendarData.lastUpdatedByUsername, calendarData.entityTypeOptions,
calendarData.calendarTypeOptions, calendarData.remindByOptions, calendarData.frequencyOptions, calendarData.calendarTypeOptions, calendarData.remindByOptions, calendarData.frequencyOptions,
calendarData.repeatsOnDayOptions); calendarData.repeatsOnDayOptions);
} }
public static CalendarData withRecentEligibleMeetingDate(final CalendarData calendarData, final LocalDate recentEligibleMeetingDate) { public static CalendarData withRecentEligibleMeetingDate(final CalendarData calendarData, final LocalDate recentEligibleMeetingDate) {
return new CalendarData(calendarData.id, calendarData.calendarInstanceId, calendarData.entityId, calendarData.entityType, calendarData.title, return new CalendarData(calendarData.id, calendarData.calendarInstanceId, calendarData.entityId, calendarData.entityType,
calendarData.description, calendarData.location, calendarData.startDate, calendarData.endDate, calendarData.duration, calendarData.title, calendarData.description, calendarData.location, calendarData.startDate, calendarData.endDate,
calendarData.type, calendarData.repeating, calendarData.recurrence, calendarData.frequency, calendarData.interval, calendarData.duration, calendarData.type, calendarData.repeating, calendarData.recurrence, calendarData.frequency,
calendarData.repeatsOnDay, calendarData.remindBy, calendarData.firstReminder, calendarData.secondReminder, calendarData.recurringDates, calendarData.interval, calendarData.repeatsOnDay, calendarData.remindBy, calendarData.firstReminder,
calendarData.nextTenRecurringDates, calendarData.humanReadable, recentEligibleMeetingDate, calendarData.createdDate, calendarData.secondReminder, calendarData.recurringDates, calendarData.nextTenRecurringDates, calendarData.humanReadable,
calendarData.lastUpdatedDate, calendarData.createdByUserId, calendarData.createdByUsername, recentEligibleMeetingDate, calendarData.createdDate, calendarData.lastUpdatedDate, calendarData.createdByUserId,
calendarData.lastUpdatedByUserId, calendarData.lastUpdatedByUsername, calendarData.entityTypeOptions, calendarData.createdByUsername, calendarData.lastUpdatedByUserId, calendarData.lastUpdatedByUsername,
calendarData.calendarTypeOptions, calendarData.remindByOptions, calendarData.frequencyOptions, calendarData.entityTypeOptions, calendarData.calendarTypeOptions, calendarData.remindByOptions,
calendarData.repeatsOnDayOptions); calendarData.frequencyOptions, calendarData.repeatsOnDayOptions);
} }
public static CalendarData sensibleDefaultsForNewCalendarCreation() { public static CalendarData sensibleDefaultsForNewCalendarCreation() {
@@ -147,8 +148,8 @@ public class CalendarData {
final Long lastUpdatedByUserId = null; final Long lastUpdatedByUserId = null;
final String lastUpdatedByUsername = null; final String lastUpdatedByUsername = null;
return new CalendarData(id, calendarInstanceId, entityId, entityType, title, description, location, startDate, endDate, duration, type, repeating, return new CalendarData(id, calendarInstanceId, entityId, entityType, title, description, location, startDate, endDate, duration,
recurrence, frequency, interval, repeatsOnDay, remindBy, firstReminder, secondReminder, recurringDates, type, repeating, recurrence, frequency, interval, repeatsOnDay, remindBy, firstReminder, secondReminder, recurringDates,
nextTenRecurringDates, humanReadable, recentEligibleMeetingDate, createdDate, lastUpdatedDate, createdByUserId, nextTenRecurringDates, humanReadable, recentEligibleMeetingDate, createdDate, lastUpdatedDate, createdByUserId,
createdByUsername, lastUpdatedByUserId, lastUpdatedByUsername, entityTypeOptions, calendarTypeOptions, remindByOptions, createdByUsername, lastUpdatedByUserId, lastUpdatedByUsername, entityTypeOptions, calendarTypeOptions, remindByOptions,
frequencyOptions, repeatsOnDayOptions); frequencyOptions, repeatsOnDayOptions);
@@ -158,26 +159,27 @@ public class CalendarData {
final List<EnumOptionData> calendarTypeOptions, final List<EnumOptionData> remindByOptions, final List<EnumOptionData> calendarTypeOptions, final List<EnumOptionData> remindByOptions,
final List<EnumOptionData> repeatsOptions, final List<EnumOptionData> repeatsOnDayOptions) { final List<EnumOptionData> repeatsOptions, final List<EnumOptionData> repeatsOnDayOptions) {
return new CalendarData(calendarData.id, calendarData.calendarInstanceId, calendarData.entityId, calendarData.entityType, calendarData.title, return new CalendarData(calendarData.id, calendarData.calendarInstanceId, calendarData.entityId, calendarData.entityType,
calendarData.description, calendarData.location, calendarData.startDate, calendarData.endDate, calendarData.duration, calendarData.title, calendarData.description, calendarData.location, calendarData.startDate, calendarData.endDate,
calendarData.type, calendarData.repeating, calendarData.recurrence, calendarData.frequency, calendarData.interval, calendarData.duration, calendarData.type, calendarData.repeating, calendarData.recurrence, calendarData.frequency,
calendarData.repeatsOnDay, calendarData.remindBy, calendarData.firstReminder, calendarData.secondReminder, calendarData.interval, calendarData.repeatsOnDay, calendarData.remindBy, calendarData.firstReminder,
calendarData.recurringDates, calendarData.nextTenRecurringDates, calendarData.humanReadable, calendarData.secondReminder, calendarData.recurringDates, calendarData.nextTenRecurringDates, calendarData.humanReadable,
calendarData.recentEligibleMeetingDate, calendarData.createdDate, calendarData.lastUpdatedDate, calendarData.recentEligibleMeetingDate, calendarData.createdDate, calendarData.lastUpdatedDate,
calendarData.createdByUserId, calendarData.createdByUsername, calendarData.lastUpdatedByUserId, calendarData.lastUpdatedByUsername, calendarData.createdByUserId, calendarData.createdByUsername, calendarData.lastUpdatedByUserId,
entityTypeOptions, calendarTypeOptions, remindByOptions, repeatsOptions, repeatsOnDayOptions); calendarData.lastUpdatedByUsername, entityTypeOptions, calendarTypeOptions, remindByOptions, repeatsOptions,
repeatsOnDayOptions);
} }
private CalendarData(final Long id, final Long calendarInstanceId, final Long entityId, final EnumOptionData entityType, final String title, final String description, private CalendarData(final Long id, final Long calendarInstanceId, final Long entityId, final EnumOptionData entityType,
final String location, final LocalDate startDate, final LocalDate endDate, final Integer duration, final EnumOptionData type, final String title, final String description, final String location, final LocalDate startDate, final LocalDate endDate,
final boolean repeating, final String recurrence, final EnumOptionData frequency, final Integer interval, final Integer duration, final EnumOptionData type, final boolean repeating, final String recurrence,
final EnumOptionData repeatsOnDay, final EnumOptionData remindBy, final Integer firstReminder, final Integer secondReminder, final EnumOptionData frequency, final Integer interval, final EnumOptionData repeatsOnDay, final EnumOptionData remindBy,
final Collection<LocalDate> recurringDates, final Collection<LocalDate> nextTenRecurringDates, final String humanReadable, final Integer firstReminder, final Integer secondReminder, final Collection<LocalDate> recurringDates,
final LocalDate recentEligibleMeetingDate, final LocalDate createdDate, final LocalDate lastUpdatedDate, final Collection<LocalDate> nextTenRecurringDates, final String humanReadable, final LocalDate recentEligibleMeetingDate,
final Long createdByUserId, final String createdByUsername, final Long lastUpdatedByUserId, final String lastUpdatedByUsername, final LocalDate createdDate, final LocalDate lastUpdatedDate, final Long createdByUserId, final String createdByUsername,
final List<EnumOptionData> entityTypeOptions, final List<EnumOptionData> calendarTypeOptions, final Long lastUpdatedByUserId, final String lastUpdatedByUsername, final List<EnumOptionData> entityTypeOptions,
final List<EnumOptionData> remindByOptions, final List<EnumOptionData> repeatsOptions, final List<EnumOptionData> calendarTypeOptions, final List<EnumOptionData> remindByOptions,
final List<EnumOptionData> repeatsOnDayOptions) { final List<EnumOptionData> repeatsOptions, final List<EnumOptionData> repeatsOnDayOptions) {
this.id = id; this.id = id;
this.calendarInstanceId = calendarInstanceId; this.calendarInstanceId = calendarInstanceId;
this.entityId = entityId; this.entityId = entityId;
@@ -294,7 +296,6 @@ public class CalendarData {
return this.humanReadable; return this.humanReadable;
} }
public Long getCalendarInstanceId() { public Long getCalendarInstanceId() {
return this.calendarInstanceId; return this.calendarInstanceId;
} }
@@ -313,11 +314,9 @@ public class CalendarData {
return false; return false;
} }
public boolean isBetweenStartAndEndDate(final LocalDate compareDate){ public boolean isBetweenStartAndEndDate(final LocalDate compareDate) {
if (isStartDateBeforeOrEqual(compareDate)){ if (isStartDateBeforeOrEqual(compareDate)) {
if (this.endDate == null || isEndDateAfterOrEqual(compareDate)){ if (this.endDate == null || isEndDateAfterOrEqual(compareDate)) { return true; }
return true;
}
} }
return false; return false;
} }
@@ -185,10 +185,10 @@ public class Calendar extends AbstractAuditableCustom<AppUser, Long> {
if (newValue.isBefore(currentDate)) { if (newValue.isBefore(currentDate)) {
final String defaultUserMessage = "New meeting effective from date cannot be in past"; final String defaultUserMessage = "New meeting effective from date cannot be in past";
throw new CalendarDateException("new.start.date.cannot.be.in.past", defaultUserMessage, newValue, throw new CalendarDateException("new.start.date.cannot.be.in.past", defaultUserMessage, newValue, getStartDateLocalDate());
getStartDateLocalDate()); } else if (isStartDateAfter(newValue) && isStartDateBeforeOrEqual(currentDate)) {
}else if (isStartDateAfter(newValue) && isStartDateBeforeOrEqual(currentDate)) { // new meeting date should be on or after start date or current
//new meeting date should be on or after start date or current date // date
final String defaultUserMessage = "New meeting effective from date cannot be a date before existing meeting start date"; final String defaultUserMessage = "New meeting effective from date cannot be a date before existing meeting start date";
throw new CalendarDateException("new.start.date.before.existing.date", defaultUserMessage, newValue, throw new CalendarDateException("new.start.date.before.existing.date", defaultUserMessage, newValue,
getStartDateLocalDate()); getStartDateLocalDate());
@@ -244,8 +244,8 @@ public class Calendar extends AbstractAuditableCustom<AppUser, Long> {
this.repeating = newValue; this.repeating = newValue;
} }
//if repeating is false then update recurrence to NULL // if repeating is false then update recurrence to NULL
if(!this.repeating) this.recurrence = null; if (!this.repeating) this.recurrence = null;
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource(CALENDAR_RESOURCE_NAME); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource(CALENDAR_RESOURCE_NAME);
@@ -401,11 +401,9 @@ public class Calendar extends AbstractAuditableCustom<AppUser, Long> {
return false; return false;
} }
public boolean isBetweenStartAndEndDate(final LocalDate compareDate){ public boolean isBetweenStartAndEndDate(final LocalDate compareDate) {
if (isStartDateBeforeOrEqual(compareDate)){ if (isStartDateBeforeOrEqual(compareDate)) {
if (getEndDateLocalDate() == null || isEndDateAfterOrEqual(compareDate)){ if (getEndDateLocalDate() == null || isEndDateAfterOrEqual(compareDate)) { return true; }
return true;
}
} }
return false; return false;
} }
@@ -77,11 +77,11 @@ public enum CalendarFrequencyType {
return name().toString(); return name().toString();
} }
public boolean isWeekly(){ public boolean isWeekly() {
return this.value.equals(CalendarFrequencyType.WEEKLY.value); return this.value.equals(CalendarFrequencyType.WEEKLY.value);
} }
public boolean isInvalid(){ public boolean isInvalid() {
return this.value.equals(CalendarFrequencyType.INVALID.value); return this.value.equals(CalendarFrequencyType.INVALID.value);
} }
} }
@@ -21,7 +21,7 @@ import org.springframework.data.jpa.domain.AbstractPersistable;
@Entity @Entity
@Table(name = "m_calendar_history") @Table(name = "m_calendar_history")
public class CalendarHistory extends AbstractPersistable<Long>{ public class CalendarHistory extends AbstractPersistable<Long> {
@ManyToOne(optional = false) @ManyToOne(optional = false)
@JoinColumn(name = "calendar_id", referencedColumnName = "id", nullable = false) @JoinColumn(name = "calendar_id", referencedColumnName = "id", nullable = false)
@@ -75,7 +75,8 @@ public class CalendarHistory extends AbstractPersistable<Long>{
this.description = calendar.getDescription(); this.description = calendar.getDescription();
this.location = calendar.getLocation(); this.location = calendar.getLocation();
this.startDate = startDate; this.startDate = startDate;
this.endDate = calendar.getStartDate();//Calendar start date become end date for history data. this.endDate = calendar.getStartDate();// Calendar start date become end
// date for history data.
this.duration = calendar.getDuration(); this.duration = calendar.getDuration();
this.typeId = calendar.getTypeId(); this.typeId = calendar.getTypeId();
this.repeating = calendar.isRepeating(); this.repeating = calendar.isRepeating();
@@ -119,16 +120,14 @@ public class CalendarHistory extends AbstractPersistable<Long>{
return false; return false;
} }
public boolean isBetweenStartAndEndDate(final LocalDate compareDate){ public boolean isBetweenStartAndEndDate(final LocalDate compareDate) {
if (isStartDateBeforeOrEqual(compareDate)){ if (isStartDateBeforeOrEqual(compareDate)) {
if (getEndDateLocalDate() == null || isEndDateAfterOrEqual(compareDate)){ if (getEndDateLocalDate() == null || isEndDateAfterOrEqual(compareDate)) { return true; }
return true;
}
} }
return false; return false;
} }
public void updateEndDate(Date historyCalEndDate){ public void updateEndDate(Date historyCalEndDate) {
this.endDate = historyCalEndDate; this.endDate = historyCalEndDate;
} }
} }
@@ -67,7 +67,7 @@ public enum CalendarType {
return name().toString(); return name().toString();
} }
public boolean isCollection(){ public boolean isCollection() {
return this.value.equals(CalendarType.COLLECTION.value); return this.value.equals(CalendarType.COLLECTION.value);
} }
} }
@@ -42,7 +42,6 @@ public enum CalendarWeekDaysType {
} }
} }
public static CalendarWeekDaysType fromInt(final int i) { public static CalendarWeekDaysType fromInt(final int i) {
final CalendarWeekDaysType type = intToEnumMap.get(Integer.valueOf(i)); final CalendarWeekDaysType type = intToEnumMap.get(Integer.valueOf(i));
return type; return type;
@@ -61,7 +60,7 @@ public enum CalendarWeekDaysType {
return name().toString(); return name().toString();
} }
public boolean isInvalid(){ public boolean isInvalid() {
return this.value.equals(CalendarWeekDaysType.INVALID.value); return this.value.equals(CalendarWeekDaysType.INVALID.value);
} }
@@ -151,8 +151,8 @@ public class CalendarCommandFromApiJsonDeserializer extends AbstractFromApiJsonD
if (this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue(), element)) { if (this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue(), element)) {
final Integer interval = this.fromApiJsonHelper.extractIntegerSansLocaleNamed( final Integer interval = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(
CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue(), element); CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue(), element);
baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue()).value(interval) baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue()).value(interval).notNull()
.notNull().integerGreaterThanZero(); .integerGreaterThanZero();
} }
if (CalendarFrequencyType.fromInt(frequency).isWeekly()) { if (CalendarFrequencyType.fromInt(frequency).isWeekly()) {
final Integer repeatsOnDay = this.fromApiJsonHelper.extractIntegerSansLocaleNamed( final Integer repeatsOnDay = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(
@@ -261,8 +261,8 @@ public class CalendarCommandFromApiJsonDeserializer extends AbstractFromApiJsonD
if (this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue(), element)) { if (this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue(), element)) {
final Integer interval = this.fromApiJsonHelper.extractIntegerSansLocaleNamed( final Integer interval = this.fromApiJsonHelper.extractIntegerSansLocaleNamed(
CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue(), element); CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue(), element);
baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue()).value(interval) baseDataValidator.reset().parameter(CALENDAR_SUPPORTED_PARAMETERS.INTERVAL.getValue()).value(interval).notNull()
.notNull().integerGreaterThanZero(); .integerGreaterThanZero();
} }
if (this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.REPEATS_ON_DAY.getValue(), element)) { if (this.fromApiJsonHelper.parameterExists(CALENDAR_SUPPORTED_PARAMETERS.REPEATS_ON_DAY.getValue(), element)) {
@@ -73,14 +73,15 @@ public class CalendarEnumerations {
} }
public static EnumOptionData calendarFrequencyType(final CalendarFrequencyType calendarFrequencyType) { public static EnumOptionData calendarFrequencyType(final CalendarFrequencyType calendarFrequencyType) {
final EnumOptionData optionData = new EnumOptionData(calendarFrequencyType.getValue().longValue(), calendarFrequencyType.getCode(), calendarFrequencyType.toString()); final EnumOptionData optionData = new EnumOptionData(calendarFrequencyType.getValue().longValue(), calendarFrequencyType.getCode(),
calendarFrequencyType.toString());
return optionData; return optionData;
} }
public static List<EnumOptionData> calendarFrequencyType(final CalendarFrequencyType[] calendarFrequencyTypes) { public static List<EnumOptionData> calendarFrequencyType(final CalendarFrequencyType[] calendarFrequencyTypes) {
final List<EnumOptionData> optionDatas = new ArrayList<EnumOptionData>(); final List<EnumOptionData> optionDatas = new ArrayList<EnumOptionData>();
for (final CalendarFrequencyType calendarFrequencyType : calendarFrequencyTypes) { for (final CalendarFrequencyType calendarFrequencyType : calendarFrequencyTypes) {
if(!calendarFrequencyType.isInvalid()){ if (!calendarFrequencyType.isInvalid()) {
optionDatas.add(calendarFrequencyType(calendarFrequencyType)); optionDatas.add(calendarFrequencyType(calendarFrequencyType));
} }
} }
@@ -92,14 +93,15 @@ public class CalendarEnumerations {
} }
public static EnumOptionData calendarWeekDaysType(final CalendarWeekDaysType calendarWeekDaysType) { public static EnumOptionData calendarWeekDaysType(final CalendarWeekDaysType calendarWeekDaysType) {
final EnumOptionData optionData = new EnumOptionData(calendarWeekDaysType.getValue().longValue(), calendarWeekDaysType.getCode(), calendarWeekDaysType.toString()); final EnumOptionData optionData = new EnumOptionData(calendarWeekDaysType.getValue().longValue(), calendarWeekDaysType.getCode(),
calendarWeekDaysType.toString());
return optionData; return optionData;
} }
public static List<EnumOptionData> calendarWeekDaysType(final CalendarWeekDaysType[] calendarWeekDaysTypes) { public static List<EnumOptionData> calendarWeekDaysType(final CalendarWeekDaysType[] calendarWeekDaysTypes) {
final List<EnumOptionData> optionDatas = new ArrayList<EnumOptionData>(); final List<EnumOptionData> optionDatas = new ArrayList<EnumOptionData>();
for (final CalendarWeekDaysType calendarWeekDaysType : calendarWeekDaysTypes) { for (final CalendarWeekDaysType calendarWeekDaysType : calendarWeekDaysTypes) {
if(!calendarWeekDaysType.isInvalid()){ if (!calendarWeekDaysType.isInvalid()) {
optionDatas.add(calendarWeekDaysType(calendarWeekDaysType)); optionDatas.add(calendarWeekDaysType(calendarWeekDaysType));
} }
} }
@@ -207,7 +207,8 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ
return generateRecurringDate(calendarData, DateUtils.getLocalDateOfTenant(), tillDate, 10); return generateRecurringDate(calendarData, DateUtils.getLocalDateOfTenant(), tillDate, 10);
} }
private Collection<LocalDate> generateRecurringDate(final CalendarData calendarData, final LocalDate fromDate, final LocalDate tillDate, final int maxCount) { private Collection<LocalDate> generateRecurringDate(final CalendarData calendarData, final LocalDate fromDate,
final LocalDate tillDate, final int maxCount) {
if (!calendarData.isRepeating()) { return null; } if (!calendarData.isRepeating()) { return null; }
final String rrule = calendarData.getRecurrence(); final String rrule = calendarData.getRecurrence();
@@ -235,13 +236,13 @@ public class CalendarReadPlatformServiceImpl implements CalendarReadPlatformServ
private LocalDate getPeriodStartDate(final LocalDate seedDate, final LocalDate recurrenceStartDate, final LocalDate fromDate) { private LocalDate getPeriodStartDate(final LocalDate seedDate, final LocalDate recurrenceStartDate, final LocalDate fromDate) {
LocalDate periodStartDate = null; LocalDate periodStartDate = null;
if(fromDate != null) { if (fromDate != null) {
periodStartDate = fromDate; periodStartDate = fromDate;
}else { } else {
final LocalDate currentDate = DateUtils.getLocalDateOfTenant(); final LocalDate currentDate = DateUtils.getLocalDateOfTenant();
if (seedDate.isBefore(currentDate.minusYears(1))) { if (seedDate.isBefore(currentDate.minusYears(1))) {
periodStartDate = currentDate.minusYears(1); periodStartDate = currentDate.minusYears(1);
}else{ } else {
periodStartDate = recurrenceStartDate; periodStartDate = recurrenceStartDate;
} }
} }
@@ -287,16 +287,16 @@ public class CalendarUtils {
return recur.getInterval(); return recur.getInterval();
} }
public static CalendarFrequencyType getFrequency(final String recurringRule){ public static CalendarFrequencyType getFrequency(final String recurringRule) {
final Recur recur = CalendarUtils.getICalRecur(recurringRule); final Recur recur = CalendarUtils.getICalRecur(recurringRule);
return CalendarFrequencyType.fromString(recur.getFrequency()); return CalendarFrequencyType.fromString(recur.getFrequency());
} }
public static CalendarWeekDaysType getRepeatsOnDay(final String recurringRule){ public static CalendarWeekDaysType getRepeatsOnDay(final String recurringRule) {
final Recur recur = CalendarUtils.getICalRecur(recurringRule); final Recur recur = CalendarUtils.getICalRecur(recurringRule);
final WeekDayList weekDays = recur.getDayList(); final WeekDayList weekDays = recur.getDayList();
if(weekDays.isEmpty()) return CalendarWeekDaysType.INVALID; if (weekDays.isEmpty()) return CalendarWeekDaysType.INVALID;
//supports only one day // supports only one day
WeekDay weekDay = (WeekDay) weekDays.get(0); WeekDay weekDay = (WeekDay) weekDays.get(0);
return CalendarWeekDaysType.fromString(weekDay.getDay()); return CalendarWeekDaysType.fromString(weekDay.getDay());
} }
@@ -154,13 +154,14 @@ public class CalendarWritePlatformServiceJpaRepositoryImpl implements CalendarWr
if (calendarForUpdate == null) { throw new CalendarNotFoundException(calendarId); } if (calendarForUpdate == null) { throw new CalendarNotFoundException(calendarId); }
final Date oldStartDate = calendarForUpdate.getStartDate(); final Date oldStartDate = calendarForUpdate.getStartDate();
final LocalDate currentDate = DateUtils.getLocalDateOfTenant(); final LocalDate currentDate = DateUtils.getLocalDateOfTenant();
//create calendar history before updating calendar // create calendar history before updating calendar
final CalendarHistory calendarHistory = new CalendarHistory(calendarForUpdate, oldStartDate); final CalendarHistory calendarHistory = new CalendarHistory(calendarForUpdate, oldStartDate);
final Map<String, Object> changes = calendarForUpdate.update(command); final Map<String, Object> changes = calendarForUpdate.update(command);
if (!changes.isEmpty()) { if (!changes.isEmpty()) {
//update calendar history table only if there is a change in calendar start date. // update calendar history table only if there is a change in
if(currentDate.isAfter(new LocalDate(oldStartDate))){ // calendar start date.
if (currentDate.isAfter(new LocalDate(oldStartDate))) {
final Date endDate = calendarForUpdate.getStartDateLocalDate().minusDays(1).toDate(); final Date endDate = calendarForUpdate.getStartDateLocalDate().minusDays(1).toDate();
calendarHistory.updateEndDate(endDate); calendarHistory.updateEndDate(endDate);
this.calendarHistoryRepository.save(calendarHistory); this.calendarHistoryRepository.save(calendarHistory);
@@ -169,12 +170,13 @@ public class CalendarWritePlatformServiceJpaRepositoryImpl implements CalendarWr
this.calendarRepository.saveAndFlush(calendarForUpdate); this.calendarRepository.saveAndFlush(calendarForUpdate);
if (this.configurationDomainService.isRescheduleFutureRepaymentsEnabled() && calendarForUpdate.isRepeating()) { if (this.configurationDomainService.isRescheduleFutureRepaymentsEnabled() && calendarForUpdate.isRepeating()) {
//fetch all loan calendar instances associated with modifying calendar. // fetch all loan calendar instances associated with modifying
// calendar.
final Collection<CalendarInstance> loanCalendarInstances = this.calendarInstanceRepository.findByCalendarIdAndEntityTypeId( final Collection<CalendarInstance> loanCalendarInstances = this.calendarInstanceRepository.findByCalendarIdAndEntityTypeId(
calendarId, CalendarEntityType.LOANS.getValue()); calendarId, CalendarEntityType.LOANS.getValue());
if (!CollectionUtils.isEmpty(loanCalendarInstances)) { if (!CollectionUtils.isEmpty(loanCalendarInstances)) {
//update all loans associated with modifying calendar // update all loans associated with modifying calendar
this.loanWritePlatformService.applyMeetingDateChanges(calendarForUpdate, loanCalendarInstances); this.loanWritePlatformService.applyMeetingDateChanges(calendarForUpdate, loanCalendarInstances);
} }
} }
@@ -56,21 +56,22 @@ public class ChargeData implements Comparable<ChargeData>, Serializable {
return new ChargeData(null, null, null, null, null, null, null, null, false, false, currencyOptions, chargeCalculationTypeOptions, return new ChargeData(null, null, null, null, null, null, null, null, false, false, currencyOptions, chargeCalculationTypeOptions,
chargeAppliesToOptions, chargeTimeTypeOptions, chargePaymentModeOptions, loansChargeCalculationTypeOptions, chargeAppliesToOptions, chargeTimeTypeOptions, chargePaymentModeOptions, loansChargeCalculationTypeOptions,
loansChargeTimeTypeOptions, savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, null, null,null,null); loansChargeTimeTypeOptions, savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, null, null, null, null);
} }
public static ChargeData withTemplate(final ChargeData charge, final ChargeData template) { public static ChargeData withTemplate(final ChargeData charge, final ChargeData template) {
return new ChargeData(charge.id, charge.name, charge.amount, charge.currency, charge.chargeTimeType, charge.chargeAppliesTo, return new ChargeData(charge.id, charge.name, charge.amount, charge.currency, charge.chargeTimeType, charge.chargeAppliesTo,
charge.chargeCalculationType, charge.chargePaymentMode, charge.penalty, charge.active,template.currencyOptions, charge.chargeCalculationType, charge.chargePaymentMode, charge.penalty, charge.active, template.currencyOptions,
template.chargeCalculationTypeOptions, template.chargeAppliesToOptions, template.chargeTimeTypeOptions, template.chargeCalculationTypeOptions, template.chargeAppliesToOptions, template.chargeTimeTypeOptions,
template.chargePaymetModeOptions, template.loanChargeCalculationTypeOptions, template.loanChargeTimeTypeOptions, template.chargePaymetModeOptions, template.loanChargeCalculationTypeOptions, template.loanChargeTimeTypeOptions,
template.savingsChargeCalculationTypeOptions, template.savingsChargeTimeTypeOptions, charge.feeOnMonthDay, charge.feeInterval,charge.minCap,charge.maxCap); template.savingsChargeCalculationTypeOptions, template.savingsChargeTimeTypeOptions, charge.feeOnMonthDay,
charge.feeInterval, charge.minCap, charge.maxCap);
} }
public static ChargeData instance(final Long id, final String name, final BigDecimal amount, final CurrencyData currency, public static ChargeData instance(final Long id, final String name, final BigDecimal amount, final CurrencyData currency,
final EnumOptionData chargeTimeType, final EnumOptionData chargeAppliesTo, final EnumOptionData chargeCalculationType, final EnumOptionData chargeTimeType, final EnumOptionData chargeAppliesTo, final EnumOptionData chargeCalculationType,
final EnumOptionData chargePaymentMode, final MonthDay feeOnMonthDay, final Integer feeInterval, final boolean penalty, final boolean active, final EnumOptionData chargePaymentMode, final MonthDay feeOnMonthDay, final Integer feeInterval, final boolean penalty,
final BigDecimal minCap, final BigDecimal maxCap) { final boolean active, final BigDecimal minCap, final BigDecimal maxCap) {
final Collection<CurrencyData> currencyOptions = null; final Collection<CurrencyData> currencyOptions = null;
final List<EnumOptionData> chargeCalculationTypeOptions = null; final List<EnumOptionData> chargeCalculationTypeOptions = null;
@@ -85,7 +86,7 @@ public class ChargeData implements Comparable<ChargeData>, Serializable {
return new ChargeData(id, name, amount, currency, chargeTimeType, chargeAppliesTo, chargeCalculationType, chargePaymentMode, return new ChargeData(id, name, amount, currency, chargeTimeType, chargeAppliesTo, chargeCalculationType, chargePaymentMode,
penalty, active, currencyOptions, chargeCalculationTypeOptions, chargeAppliesToOptions, chargeTimeTypeOptions, penalty, active, currencyOptions, chargeCalculationTypeOptions, chargeAppliesToOptions, chargeTimeTypeOptions,
chargePaymentModeOptions, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions, chargePaymentModeOptions, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions,
savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, feeOnMonthDay, feeInterval,minCap,maxCap); savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, feeOnMonthDay, feeInterval, minCap, maxCap);
} }
public static ChargeData lookup(final Long id, final String name, final boolean isPenalty) { public static ChargeData lookup(final Long id, final String name, final boolean isPenalty) {
@@ -114,7 +115,7 @@ public class ChargeData implements Comparable<ChargeData>, Serializable {
return new ChargeData(id, name, amount, currency, chargeTimeType, chargeAppliesTo, chargeCalculationType, chargePaymentMode, return new ChargeData(id, name, amount, currency, chargeTimeType, chargeAppliesTo, chargeCalculationType, chargePaymentMode,
penalty, active, currencyOptions, chargeCalculationTypeOptions, chargeAppliesToOptions, chargeTimeTypeOptions, penalty, active, currencyOptions, chargeCalculationTypeOptions, chargeAppliesToOptions, chargeTimeTypeOptions,
chargePaymentModeOptions, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions, chargePaymentModeOptions, loansChargeCalculationTypeOptions, loansChargeTimeTypeOptions,
savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, feeOnMonthDay, feeInterval,minCap,maxCap); savingsChargeCalculationTypeOptions, savingsChargeTimeTypeOptions, feeOnMonthDay, feeInterval, minCap, maxCap);
} }
private ChargeData(final Long id, final String name, final BigDecimal amount, final CurrencyData currency, private ChargeData(final Long id, final String name, final BigDecimal amount, final CurrencyData currency,
@@ -125,7 +126,7 @@ public class ChargeData implements Comparable<ChargeData>, Serializable {
final List<EnumOptionData> chargePaymentModeOptions, final List<EnumOptionData> loansChargeCalculationTypeOptions, final List<EnumOptionData> chargePaymentModeOptions, final List<EnumOptionData> loansChargeCalculationTypeOptions,
final List<EnumOptionData> loansChargeTimeTypeOptions, final List<EnumOptionData> savingsChargeCalculationTypeOptions, final List<EnumOptionData> loansChargeTimeTypeOptions, final List<EnumOptionData> savingsChargeCalculationTypeOptions,
final List<EnumOptionData> savingsChargeTimeTypeOptions, final MonthDay feeOnMonthDay, final Integer feeInterval, final List<EnumOptionData> savingsChargeTimeTypeOptions, final MonthDay feeOnMonthDay, final Integer feeInterval,
final BigDecimal minCap,final BigDecimal maxCap) { final BigDecimal minCap, final BigDecimal maxCap) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.amount = amount; this.amount = amount;
@@ -177,7 +178,7 @@ public class ChargeData implements Comparable<ChargeData>, Serializable {
} }
return LoanChargeData.newLoanChargeDetails(this.id, this.name, this.currency, this.amount, percentage, this.chargeTimeType, return LoanChargeData.newLoanChargeDetails(this.id, this.name, this.currency, this.amount, percentage, this.chargeTimeType,
this.chargeCalculationType, this.penalty, this.chargePaymentMode,this.minCap,this.maxCap); this.chargeCalculationType, this.penalty, this.chargePaymentMode, this.minCap, this.maxCap);
} }
public SavingsAccountChargeData toSavingsAccountChargeData() { public SavingsAccountChargeData toSavingsAccountChargeData() {
@@ -193,8 +194,9 @@ public class ChargeData implements Comparable<ChargeData>, Serializable {
final Collection<ChargeData> chargeOptions = null; final Collection<ChargeData> chargeOptions = null;
final LocalDate dueAsOfDate = null; final LocalDate dueAsOfDate = null;
return SavingsAccountChargeData.instance(savingsChargeId, this.id, savingsAccountId, this.name, this.currency, this.amount, amountPaid, amountWaived, return SavingsAccountChargeData.instance(savingsChargeId, this.id, savingsAccountId, this.name, this.currency, this.amount,
amountWrittenOff, amountOutstanding, this.chargeTimeType, dueAsOfDate, this.chargeCalculationType, percentage, amountPaid, amountWaived, amountWrittenOff, amountOutstanding, this.chargeTimeType, dueAsOfDate,
amountPercentageAppliedTo, chargeOptions, this.penalty, this.feeOnMonthDay, this.feeInterval); this.chargeCalculationType, percentage, amountPercentageAppliedTo, chargeOptions, this.penalty, this.feeOnMonthDay,
this.feeInterval);
} }
} }
@@ -124,7 +124,6 @@ public class Charge extends AbstractPersistable<Long> {
this.active = active; this.active = active;
this.chargePaymentMode = paymentMode == null ? null : paymentMode.getValue(); this.chargePaymentMode = paymentMode == null ? null : paymentMode.getValue();
final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>(); final List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("charges"); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("charges");
@@ -161,7 +160,7 @@ public class Charge extends AbstractPersistable<Long> {
.failWithCodeNoParameterAddedToErrorCode("not.allowed.charge.time.for.loan"); .failWithCodeNoParameterAddedToErrorCode("not.allowed.charge.time.for.loan");
} }
} }
if(isPercentageOfAmount()){ if (isPercentageOfAmount()) {
this.minCap = minCap; this.minCap = minCap;
this.maxCap = maxCap; this.maxCap = maxCap;
} }
@@ -5,7 +5,6 @@
*/ */
package org.mifosplatform.portfolio.charge.domain; package org.mifosplatform.portfolio.charge.domain;
public enum ChargeAppliesTo { public enum ChargeAppliesTo {
INVALID(0, "chargeAppliesTo.invalid"), // INVALID(0, "chargeAppliesTo.invalid"), //
@@ -57,6 +56,6 @@ public enum ChargeAppliesTo {
} }
public static Object[] validValues() { public static Object[] validValues() {
return new Object[] {ChargeAppliesTo.LOAN.getValue(), ChargeAppliesTo.SAVINGS.getValue()}; return new Object[] { ChargeAppliesTo.LOAN.getValue(), ChargeAppliesTo.SAVINGS.getValue() };
} }
} }
@@ -31,7 +31,7 @@ public enum ChargeCalculationType {
public static Object[] validValuesForLoan() { public static Object[] validValuesForLoan() {
return new Integer[] { ChargeCalculationType.FLAT.getValue(), ChargeCalculationType.PERCENT_OF_AMOUNT.getValue(), return new Integer[] { ChargeCalculationType.FLAT.getValue(), ChargeCalculationType.PERCENT_OF_AMOUNT.getValue(),
ChargeCalculationType.PERCENT_OF_AMOUNT_AND_INTEREST.getValue(),ChargeCalculationType.PERCENT_OF_INTEREST.getValue() }; ChargeCalculationType.PERCENT_OF_AMOUNT_AND_INTEREST.getValue(), ChargeCalculationType.PERCENT_OF_INTEREST.getValue() };
} }
public static Object[] validValuesForSavings() { public static Object[] validValuesForSavings() {
@@ -77,7 +77,7 @@ public enum ChargeCalculationType {
return isFlat() || isPercentageOfAmount(); return isFlat() || isPercentageOfAmount();
} }
public boolean isPercentageBased(){ public boolean isPercentageBased() {
return isPercentageOfAmount() || isPercentageOfAmountAndInterest() || isPercentageOfInterest(); return isPercentageOfAmount() || isPercentageOfAmountAndInterest() || isPercentageOfInterest();
} }
} }
@@ -17,9 +17,10 @@ public enum ChargeTimeType {
WITHDRAWAL_FEE(5, "chargeTimeType.withdrawalFee"), // only for savings WITHDRAWAL_FEE(5, "chargeTimeType.withdrawalFee"), // only for savings
ANNUAL_FEE(6, "chargeTimeType.annualFee"), // only for savings ANNUAL_FEE(6, "chargeTimeType.annualFee"), // only for savings
MONTHLY_FEE(7, "chargeTimeType.monthlyFee"), // only for savings MONTHLY_FEE(7, "chargeTimeType.monthlyFee"), // only for savings
INSTALMENT_FEE(8, "chargeTimeType.instalmentFee"),// only for loan charges INSTALMENT_FEE(8, "chargeTimeType.instalmentFee"), // only for loan charges
OVERDUE_INSTALLMENT(9, "chargeTimeType.overdueInstallment"), // only for loan charges OVERDUE_INSTALLMENT(9, "chargeTimeType.overdueInstallment"), // only for
OVERDRAFT_FEE(10,"chargeTimeType.overdraftFee");// only for savings // loan charges
OVERDRAFT_FEE(10, "chargeTimeType.overdraftFee");// only for savings
private final Integer value; private final Integer value;
private final String code; private final String code;
@@ -39,13 +40,13 @@ public enum ChargeTimeType {
public static Object[] validLoanValues() { public static Object[] validLoanValues() {
return new Integer[] { ChargeTimeType.DISBURSEMENT.getValue(), ChargeTimeType.SPECIFIED_DUE_DATE.getValue(), return new Integer[] { ChargeTimeType.DISBURSEMENT.getValue(), ChargeTimeType.SPECIFIED_DUE_DATE.getValue(),
ChargeTimeType.INSTALMENT_FEE.getValue(),ChargeTimeType.OVERDUE_INSTALLMENT.getValue() }; ChargeTimeType.INSTALMENT_FEE.getValue(), ChargeTimeType.OVERDUE_INSTALLMENT.getValue() };
} }
public static Object[] validSavingsValues() { public static Object[] validSavingsValues() {
return new Integer[] { ChargeTimeType.SPECIFIED_DUE_DATE.getValue(), ChargeTimeType.SAVINGS_ACTIVATION.getValue(), return new Integer[] { ChargeTimeType.SPECIFIED_DUE_DATE.getValue(), ChargeTimeType.SAVINGS_ACTIVATION.getValue(),
ChargeTimeType.SAVINGS_CLOSURE.getValue(), ChargeTimeType.WITHDRAWAL_FEE.getValue(), ChargeTimeType.ANNUAL_FEE.getValue(), ChargeTimeType.SAVINGS_CLOSURE.getValue(), ChargeTimeType.WITHDRAWAL_FEE.getValue(), ChargeTimeType.ANNUAL_FEE.getValue(),
ChargeTimeType.MONTHLY_FEE.getValue(),ChargeTimeType.OVERDRAFT_FEE.getValue() }; ChargeTimeType.MONTHLY_FEE.getValue(), ChargeTimeType.OVERDRAFT_FEE.getValue() };
} }
public static ChargeTimeType fromInt(final Integer chargeTime) { public static ChargeTimeType fromInt(final Integer chargeTime) {
@@ -122,7 +123,7 @@ public enum ChargeTimeType {
return this.value.equals(ChargeTimeType.INSTALMENT_FEE.getValue()); return this.value.equals(ChargeTimeType.INSTALMENT_FEE.getValue());
} }
public boolean isOverdueInstallment(){ public boolean isOverdueInstallment() {
return this.value.equals(ChargeTimeType.OVERDUE_INSTALLMENT.getValue()); return this.value.equals(ChargeTimeType.OVERDUE_INSTALLMENT.getValue());
} }
@@ -139,5 +140,4 @@ public enum ChargeTimeType {
return this.value.equals(ChargeTimeType.OVERDRAFT_FEE.getValue()); return this.value.equals(ChargeTimeType.OVERDRAFT_FEE.getValue());
} }
} }
@@ -11,7 +11,7 @@ public class LoanChargeCannotBePayedException extends AbstractPlatformDomainRule
/*** enum of reasons of why Loan Charge cannot be waived **/ /*** enum of reasons of why Loan Charge cannot be waived **/
public static enum LOAN_CHARGE_CANNOT_BE_PAYED_REASON { public static enum LOAN_CHARGE_CANNOT_BE_PAYED_REASON {
ALREADY_PAID, ALREADY_WAIVED, LOAN_INACTIVE, CHARGE_NOT_ACCOUNT_TRANSFER,CHARGE_NOT_PAYABLE; ALREADY_PAID, ALREADY_WAIVED, LOAN_INACTIVE, CHARGE_NOT_ACCOUNT_TRANSFER, CHARGE_NOT_PAYABLE;
public String errorMessage() { public String errorMessage() {
if (name().toString().equalsIgnoreCase("ALREADY_PAID")) { if (name().toString().equalsIgnoreCase("ALREADY_PAID")) {
@@ -22,9 +22,7 @@ public class LoanChargeCannotBePayedException extends AbstractPlatformDomainRule
return "This loan charge can be payed as the loan associated with it is currently inactive"; return "This loan charge can be payed as the loan associated with it is currently inactive";
} else if (name().toString().equalsIgnoreCase("CHARGE_NOT_ACCOUNT_TRANSFER")) { } else if (name().toString().equalsIgnoreCase("CHARGE_NOT_ACCOUNT_TRANSFER")) {
return "This loan charge can be payed as the charge payment mode is not account transfer"; return "This loan charge can be payed as the charge payment mode is not account transfer";
}else if (name().toString().equalsIgnoreCase("CHARGE_NOT_PAYABLE")) { } else if (name().toString().equalsIgnoreCase("CHARGE_NOT_PAYABLE")) { return "This loan charge is not Payable through account transfer"; }
return "This loan charge is not Payable through account transfer";
}
return name().toString(); return name().toString();
} }
@@ -38,9 +36,7 @@ public class LoanChargeCannotBePayedException extends AbstractPlatformDomainRule
return "error.msg.loan.charge.associated.loan.inactive"; return "error.msg.loan.charge.associated.loan.inactive";
} else if (name().toString().equalsIgnoreCase("CHARGE_NOT_ACCOUNT_TRANSFER")) { } else if (name().toString().equalsIgnoreCase("CHARGE_NOT_ACCOUNT_TRANSFER")) {
return "error.msg.loan.charge.payment.mode.not.account.transfer"; return "error.msg.loan.charge.payment.mode.not.account.transfer";
}else if (name().toString().equalsIgnoreCase("CHARGE_NOT_PAYABLE")) { } else if (name().toString().equalsIgnoreCase("CHARGE_NOT_PAYABLE")) { return "error.msg.loan.charge.payment.not.allowed.account.transfer"; }
return "error.msg.loan.charge.payment.not.allowed.account.transfer";
}
return name().toString(); return name().toString();
} }
} }
@@ -18,9 +18,7 @@ public class LoanChargeCannotBeUpdatedException extends AbstractPlatformDomainRu
return "This loan charge has been partially/completely paid"; return "This loan charge has been partially/completely paid";
} else if (name().toString().equalsIgnoreCase("ALREADY_WAIVED")) { } else if (name().toString().equalsIgnoreCase("ALREADY_WAIVED")) {
return "This loan charge has already been waived"; return "This loan charge has already been waived";
} else if (name().toString().equalsIgnoreCase("LOAN_NOT_IN_SUBMITTED_AND_PENDING_APPROVAL_STAGE")) { } else if (name().toString().equalsIgnoreCase("LOAN_NOT_IN_SUBMITTED_AND_PENDING_APPROVAL_STAGE")) { return "This charge cannot be updated as the loan it is associated with is not in submitted and pending approval stage"; }
return "This charge cannot be updated as the loan it is associated with is not in submitted and pending approval stage";
}
return name().toString(); return name().toString();
} }
@@ -29,9 +27,7 @@ public class LoanChargeCannotBeUpdatedException extends AbstractPlatformDomainRu
return "error.msg.loan.charge.already.paid"; return "error.msg.loan.charge.already.paid";
} else if (name().toString().equalsIgnoreCase("ALREADY_WAIVED")) { } else if (name().toString().equalsIgnoreCase("ALREADY_WAIVED")) {
return "error.msg.loan.charge.already.waived"; return "error.msg.loan.charge.already.waived";
} else if (name().toString().equalsIgnoreCase("LOAN_NOT_IN_SUBMITTED_AND_PENDING_APPROVAL_STAGE")) { } else if (name().toString().equalsIgnoreCase("LOAN_NOT_IN_SUBMITTED_AND_PENDING_APPROVAL_STAGE")) { return "error.msg.loan.charge.associated.loan.not.in.submitted.and.pending.approval.stage"; }
return "error.msg.loan.charge.associated.loan.not.in.submitted.and.pending.approval.stage";
}
return name().toString(); return name().toString();
} }
} }
@@ -20,9 +20,7 @@ public class LoanChargeCannotBeWaivedException extends AbstractPlatformDomainRul
return "This loan charge has already been waived"; return "This loan charge has already been waived";
} else if (name().toString().equalsIgnoreCase("LOAN_INACTIVE")) { } else if (name().toString().equalsIgnoreCase("LOAN_INACTIVE")) {
return "This loan charge can be waived as the loan associated with it is currently inactive"; return "This loan charge can be waived as the loan associated with it is currently inactive";
} else if(name().toString().equalsIgnoreCase("WAIVE_NOT_ALLOWED_FOR_CHARGE")){ } else if (name().toString().equalsIgnoreCase("WAIVE_NOT_ALLOWED_FOR_CHARGE")) { return "This loan charge can be waived"; }
return "This loan charge can be waived";
}
return name().toString(); return name().toString();
} }
@@ -34,9 +32,7 @@ public class LoanChargeCannotBeWaivedException extends AbstractPlatformDomainRul
return "error.msg.loan.charge.already.waived"; return "error.msg.loan.charge.already.waived";
} else if (name().toString().equalsIgnoreCase("LOAN_INACTIVE")) { } else if (name().toString().equalsIgnoreCase("LOAN_INACTIVE")) {
return "error.msg.loan.charge.associated.loan.inactive"; return "error.msg.loan.charge.associated.loan.inactive";
} else if(name().toString().equalsIgnoreCase("WAIVE_NOT_ALLOWED_FOR_CHARGE")) { } else if (name().toString().equalsIgnoreCase("WAIVE_NOT_ALLOWED_FOR_CHARGE")) { return "error.msg.loan.charge.waive.not.allowed"; }
return "error.msg.loan.charge.waive.not.allowed";
}
return name().toString(); return name().toString();
} }
} }
@@ -76,17 +76,21 @@ public final class ChargeDefinitionCommandFromApiJsonDeserializer {
final Integer chargeTimeType = this.fromApiJsonHelper.extractIntegerSansLocaleNamed("chargeTimeType", element); final Integer chargeTimeType = this.fromApiJsonHelper.extractIntegerSansLocaleNamed("chargeTimeType", element);
baseDataValidator.reset().parameter("chargeTimeType").value(chargeTimeType).notNull(); baseDataValidator.reset().parameter("chargeTimeType").value(chargeTimeType).notNull();
if (chargeTimeType != null) { if (chargeTimeType != null) {
baseDataValidator.reset().parameter("chargeTimeType").value(chargeTimeType).isOneOfTheseValues(ChargeTimeType.validLoanValues()); baseDataValidator.reset().parameter("chargeTimeType").value(chargeTimeType)
.isOneOfTheseValues(ChargeTimeType.validLoanValues());
} }
final Integer chargePaymentMode = this.fromApiJsonHelper.extractIntegerSansLocaleNamed("chargePaymentMode", element); final Integer chargePaymentMode = this.fromApiJsonHelper.extractIntegerSansLocaleNamed("chargePaymentMode", element);
baseDataValidator.reset().parameter("chargePaymentMode").value(chargePaymentMode).notNull().isOneOfTheseValues(ChargePaymentMode.validValues()); baseDataValidator.reset().parameter("chargePaymentMode").value(chargePaymentMode).notNull()
.isOneOfTheseValues(ChargePaymentMode.validValues());
if (chargePaymentMode != null) { if (chargePaymentMode != null) {
baseDataValidator.reset().parameter("chargePaymentMode").value(chargePaymentMode).isOneOfTheseValues(ChargePaymentMode.validValues()); baseDataValidator.reset().parameter("chargePaymentMode").value(chargePaymentMode)
.isOneOfTheseValues(ChargePaymentMode.validValues());
} }
if (chargeCalculationType != null) { if (chargeCalculationType != null) {
baseDataValidator.reset().parameter("chargeCalculationType").value(chargeCalculationType).isOneOfTheseValues(ChargeCalculationType.validValuesForLoan()); baseDataValidator.reset().parameter("chargeCalculationType").value(chargeCalculationType)
.isOneOfTheseValues(ChargeCalculationType.validValuesForLoan());
} }
} else if (appliesTo.isSavingsCharge()) { } else if (appliesTo.isSavingsCharge()) {
@@ -94,7 +98,8 @@ public final class ChargeDefinitionCommandFromApiJsonDeserializer {
final Integer chargeTimeType = this.fromApiJsonHelper.extractIntegerSansLocaleNamed("chargeTimeType", element); final Integer chargeTimeType = this.fromApiJsonHelper.extractIntegerSansLocaleNamed("chargeTimeType", element);
baseDataValidator.reset().parameter("chargeTimeType").value(chargeTimeType).notNull(); baseDataValidator.reset().parameter("chargeTimeType").value(chargeTimeType).notNull();
if (chargeTimeType != null) { if (chargeTimeType != null) {
baseDataValidator.reset().parameter("chargeTimeType").value(chargeTimeType).isOneOfTheseValues(ChargeTimeType.validSavingsValues()); baseDataValidator.reset().parameter("chargeTimeType").value(chargeTimeType)
.isOneOfTheseValues(ChargeTimeType.validSavingsValues());
} }
final ChargeTimeType ctt = ChargeTimeType.fromInt(chargeTimeType); final ChargeTimeType ctt = ChargeTimeType.fromInt(chargeTimeType);
@@ -112,7 +117,8 @@ public final class ChargeDefinitionCommandFromApiJsonDeserializer {
} }
if (chargeCalculationType != null) { if (chargeCalculationType != null) {
baseDataValidator.reset().parameter("chargeCalculationType").value(chargeCalculationType).isOneOfTheseValues(ChargeCalculationType.validValuesForSavings()); baseDataValidator.reset().parameter("chargeCalculationType").value(chargeCalculationType)
.isOneOfTheseValues(ChargeCalculationType.validValuesForSavings());
} }
} }
@@ -26,9 +26,8 @@ public class ChargeDropdownReadPlatformServiceImpl implements ChargeDropdownRead
return Arrays.asList(chargeCalculationType(ChargeCalculationType.FLAT), return Arrays.asList(chargeCalculationType(ChargeCalculationType.FLAT),
chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT), chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT),
chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT_AND_INTEREST), chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT_AND_INTEREST),
chargeCalculationType(ChargeCalculationType.PERCENT_OF_INTEREST) chargeCalculationType(ChargeCalculationType.PERCENT_OF_INTEREST));
);
} }
@Override @Override
@@ -62,12 +61,16 @@ public class ChargeDropdownReadPlatformServiceImpl implements ChargeDropdownRead
@Override @Override
public List<EnumOptionData> retrieveLoanCalculationTypes() { public List<EnumOptionData> retrieveLoanCalculationTypes() {
return Arrays.asList(chargeCalculationType(ChargeCalculationType.FLAT), chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT), chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT_AND_INTEREST), chargeCalculationType(ChargeCalculationType.PERCENT_OF_INTEREST)); return Arrays.asList(chargeCalculationType(ChargeCalculationType.FLAT),
chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT),
chargeCalculationType(ChargeCalculationType.PERCENT_OF_AMOUNT_AND_INTEREST),
chargeCalculationType(ChargeCalculationType.PERCENT_OF_INTEREST));
} }
@Override @Override
public List<EnumOptionData> retrieveLoanCollectionTimeTypes() { public List<EnumOptionData> retrieveLoanCollectionTimeTypes() {
return Arrays.asList(chargeTimeType(ChargeTimeType.DISBURSEMENT), chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE),chargeTimeType(ChargeTimeType.INSTALMENT_FEE),chargeTimeType(ChargeTimeType.OVERDUE_INSTALLMENT)); return Arrays.asList(chargeTimeType(ChargeTimeType.DISBURSEMENT), chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE),
chargeTimeType(ChargeTimeType.INSTALMENT_FEE), chargeTimeType(ChargeTimeType.OVERDUE_INSTALLMENT));
} }
@Override @Override
@@ -79,9 +82,8 @@ public class ChargeDropdownReadPlatformServiceImpl implements ChargeDropdownRead
@Override @Override
public List<EnumOptionData> retrieveSavingsCollectionTimeTypes() { public List<EnumOptionData> retrieveSavingsCollectionTimeTypes() {
return Arrays.asList(chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE), chargeTimeType(ChargeTimeType.SAVINGS_ACTIVATION), return Arrays.asList(chargeTimeType(ChargeTimeType.SPECIFIED_DUE_DATE), chargeTimeType(ChargeTimeType.SAVINGS_ACTIVATION),
//chargeTimeType(ChargeTimeType.SAVINGS_CLOSURE), // chargeTimeType(ChargeTimeType.SAVINGS_CLOSURE),
chargeTimeType(ChargeTimeType.WITHDRAWAL_FEE), chargeTimeType(ChargeTimeType.WITHDRAWAL_FEE), chargeTimeType(ChargeTimeType.ANNUAL_FEE),
chargeTimeType(ChargeTimeType.ANNUAL_FEE), chargeTimeType(ChargeTimeType.MONTHLY_FEE), chargeTimeType(ChargeTimeType.MONTHLY_FEE), chargeTimeType(ChargeTimeType.OVERDRAFT_FEE));
chargeTimeType(ChargeTimeType.OVERDRAFT_FEE));
} }
} }
@@ -29,29 +29,37 @@ public class ChargeEnumerations {
ChargeTimeType.SPECIFIED_DUE_DATE.getCode(), "Specified due date"); ChargeTimeType.SPECIFIED_DUE_DATE.getCode(), "Specified due date");
break; break;
case SAVINGS_ACTIVATION: case SAVINGS_ACTIVATION:
optionData = new EnumOptionData(ChargeTimeType.SAVINGS_ACTIVATION.getValue().longValue(), ChargeTimeType.SAVINGS_ACTIVATION.getCode(), "Savings Activation"); optionData = new EnumOptionData(ChargeTimeType.SAVINGS_ACTIVATION.getValue().longValue(),
ChargeTimeType.SAVINGS_ACTIVATION.getCode(), "Savings Activation");
break; break;
case SAVINGS_CLOSURE: case SAVINGS_CLOSURE:
optionData = new EnumOptionData(ChargeTimeType.SAVINGS_CLOSURE.getValue().longValue(), ChargeTimeType.SAVINGS_CLOSURE.getCode(), "Savings Closure"); optionData = new EnumOptionData(ChargeTimeType.SAVINGS_CLOSURE.getValue().longValue(),
ChargeTimeType.SAVINGS_CLOSURE.getCode(), "Savings Closure");
break; break;
case WITHDRAWAL_FEE: case WITHDRAWAL_FEE:
optionData = new EnumOptionData(ChargeTimeType.WITHDRAWAL_FEE.getValue().longValue(), ChargeTimeType.WITHDRAWAL_FEE.getCode(), "Withdrawal Fee"); optionData = new EnumOptionData(ChargeTimeType.WITHDRAWAL_FEE.getValue().longValue(),
ChargeTimeType.WITHDRAWAL_FEE.getCode(), "Withdrawal Fee");
break; break;
case ANNUAL_FEE: case ANNUAL_FEE:
optionData = new EnumOptionData(ChargeTimeType.ANNUAL_FEE.getValue().longValue(), ChargeTimeType.ANNUAL_FEE.getCode(), "Annual Fee"); optionData = new EnumOptionData(ChargeTimeType.ANNUAL_FEE.getValue().longValue(), ChargeTimeType.ANNUAL_FEE.getCode(),
"Annual Fee");
break; break;
case MONTHLY_FEE: case MONTHLY_FEE:
optionData = new EnumOptionData(ChargeTimeType.MONTHLY_FEE.getValue().longValue(), ChargeTimeType.MONTHLY_FEE.getCode(), "Monthly Fee"); optionData = new EnumOptionData(ChargeTimeType.MONTHLY_FEE.getValue().longValue(), ChargeTimeType.MONTHLY_FEE.getCode(),
"Monthly Fee");
break; break;
case INSTALMENT_FEE: case INSTALMENT_FEE:
optionData = new EnumOptionData(ChargeTimeType.INSTALMENT_FEE.getValue().longValue(), ChargeTimeType.INSTALMENT_FEE.getCode(), "Instalment Fee"); optionData = new EnumOptionData(ChargeTimeType.INSTALMENT_FEE.getValue().longValue(),
ChargeTimeType.INSTALMENT_FEE.getCode(), "Instalment Fee");
break; break;
case OVERDUE_INSTALLMENT: case OVERDUE_INSTALLMENT:
optionData = new EnumOptionData(ChargeTimeType.OVERDUE_INSTALLMENT.getValue().longValue(),ChargeTimeType.OVERDUE_INSTALLMENT.getCode(),"overdue fees") ; optionData = new EnumOptionData(ChargeTimeType.OVERDUE_INSTALLMENT.getValue().longValue(),
ChargeTimeType.OVERDUE_INSTALLMENT.getCode(), "overdue fees");
break; break;
case OVERDRAFT_FEE: case OVERDRAFT_FEE:
optionData = new EnumOptionData(ChargeTimeType.OVERDRAFT_FEE.getValue().longValue(), ChargeTimeType.OVERDRAFT_FEE.getCode(), "Overdraft Fee"); optionData = new EnumOptionData(ChargeTimeType.OVERDRAFT_FEE.getValue().longValue(),
break; ChargeTimeType.OVERDRAFT_FEE.getCode(), "Overdraft Fee");
break;
default: default:
optionData = new EnumOptionData(ChargeTimeType.INVALID.getValue().longValue(), ChargeTimeType.INVALID.getCode(), "Invalid"); optionData = new EnumOptionData(ChargeTimeType.INVALID.getValue().longValue(), ChargeTimeType.INVALID.getCode(), "Invalid");
break; break;
@@ -145,8 +145,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService
+ "c.is_active as active, oc.name as currencyName, oc.decimal_places as currencyDecimalPlaces, " + "c.is_active as active, oc.name as currencyName, oc.decimal_places as currencyDecimalPlaces, "
+ "oc.currency_multiplesof as inMultiplesOf, oc.display_symbol as currencyDisplaySymbol, " + "oc.currency_multiplesof as inMultiplesOf, oc.display_symbol as currencyDisplaySymbol, "
+ "oc.internationalized_name_code as currencyNameCode, c.fee_on_day as feeOnDay, c.fee_on_month as feeOnMonth, " + "oc.internationalized_name_code as currencyNameCode, c.fee_on_day as feeOnDay, c.fee_on_month as feeOnMonth, "
+ "c.fee_interval as feeInterval,c.min_cap as minCap,c.max_cap as maxCap " + "c.fee_interval as feeInterval,c.min_cap as minCap,c.max_cap as maxCap " + "from m_charge c "
+ "from m_charge c "
+ "join m_organisation_currency oc on c.currency_code = oc.code"; + "join m_organisation_currency oc on c.currency_code = oc.code";
} }
@@ -200,7 +199,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService
final BigDecimal maxCap = rs.getBigDecimal("maxCap"); final BigDecimal maxCap = rs.getBigDecimal("maxCap");
return ChargeData.instance(id, name, amount, currency, chargeTimeType, chargeAppliesToType, chargeCalculationType, return ChargeData.instance(id, name, amount, currency, chargeTimeType, chargeAppliesToType, chargeCalculationType,
chargePaymentMode, feeOnMonthDay, feeInterval, penalty, active,minCap,maxCap); chargePaymentMode, feeOnMonthDay, feeInterval, penalty, active, minCap, maxCap);
} }
} }
@@ -83,21 +83,18 @@ public class ChargeWritePlatformServiceJpaRepositoryImpl implements ChargeWriteP
final Map<String, Object> changes = chargeForUpdate.update(command); final Map<String, Object> changes = chargeForUpdate.update(command);
// MIFOSX-900: Check if the Charge has been active before and now is deactivated: // MIFOSX-900: Check if the Charge has been active before and now is
// deactivated:
if (changes.containsKey("active")) { if (changes.containsKey("active")) {
// IF the key exists then it has changed (otherwise it would have been filtered), so check current state: // IF the key exists then it has changed (otherwise it would
if(!chargeForUpdate.isActive()) // have been filtered), so check current state:
{ if (!chargeForUpdate.isActive()) {
// TODO: Change this function to only check the mappings!!! // TODO: Change this function to only check the mappings!!!
final Boolean isChargeExistWithLoans = isAnyLoanProductsAssociateWithThisCharge(chargeId); final Boolean isChargeExistWithLoans = isAnyLoanProductsAssociateWithThisCharge(chargeId);
final Boolean isChargeExistWithSavings = isAnySavingsProductsAssociateWithThisCharge(chargeId); final Boolean isChargeExistWithSavings = isAnySavingsProductsAssociateWithThisCharge(chargeId);
if(isChargeExistWithLoans || isChargeExistWithSavings) if (isChargeExistWithLoans || isChargeExistWithSavings) { throw new ChargeCannotBeUpdatedException(
{ "error.msg.charge.cannot.be.updated.it.is.used.in.loan", "This charge cannot be updated, it is used in loan"); }
throw new ChargeCannotBeUpdatedException(
"error.msg.charge.cannot.be.updated.it.is.used.in.loan",
"This charge cannot be updated, it is used in loan");
}
} }
} }
@@ -169,8 +166,7 @@ public class ChargeWritePlatformServiceJpaRepositoryImpl implements ChargeWriteP
return new Boolean(isSavingsUsingCharge); return new Boolean(isSavingsUsingCharge);
} }
private boolean isAnyLoanProductsAssociateWithThisCharge(final Long chargeId) {
private boolean isAnyLoanProductsAssociateWithThisCharge(final Long chargeId) {
final String sql = "select if((exists (select 1 from m_product_loan_charge lc where lc.charge_id = ?)) = 1, 'true', 'false')"; final String sql = "select if((exists (select 1 from m_product_loan_charge lc where lc.charge_id = ?)) = 1, 'true', 'false')";
final String isLoansUsingCharge = this.jdbcTemplate.queryForObject(sql, String.class, new Object[] { chargeId }); final String isLoansUsingCharge = this.jdbcTemplate.queryForObject(sql, String.class, new Object[] { chargeId });
@@ -37,8 +37,8 @@ public class ClientApiConstants {
public static final String staffIdParamName = "staffId"; public static final String staffIdParamName = "staffId";
public static final String closureDateParamName = "closureDate"; public static final String closureDateParamName = "closureDate";
public static final String closureReasonIdParamName = "closureReasonId"; public static final String closureReasonIdParamName = "closureReasonId";
public static final String submittedOnDateParamName="submittedOnDate"; public static final String submittedOnDateParamName = "submittedOnDate";
public static final String savingsProductIdParamName="savingsProductId"; public static final String savingsProductIdParamName = "savingsProductId";
// response parameters // response parameters
public static final String statusParamName = "status"; public static final String statusParamName = "status";
public static final String hierarchyParamName = "hierarchy"; public static final String hierarchyParamName = "hierarchy";
@@ -63,11 +63,11 @@ public class ClientApiConstants {
public static final Set<String> CLIENT_CREATE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName, public static final Set<String> CLIENT_CREATE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName,
dateFormatParamName, groupIdParamName, accountNoParamName, externalIdParamName, mobileNoParamName, firstnameParamName, dateFormatParamName, groupIdParamName, accountNoParamName, externalIdParamName, mobileNoParamName, firstnameParamName,
middlenameParamName, lastnameParamName, fullnameParamName, officeIdParamName, activeParamName, activationDateParamName, middlenameParamName, lastnameParamName, fullnameParamName, officeIdParamName, activeParamName, activationDateParamName,
staffIdParamName,submittedOnDateParamName,savingsProductIdParamName)); staffIdParamName, submittedOnDateParamName, savingsProductIdParamName));
public static final Set<String> CLIENT_UPDATE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName, public static final Set<String> CLIENT_UPDATE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName,
dateFormatParamName, accountNoParamName, externalIdParamName, mobileNoParamName, firstnameParamName, middlenameParamName, dateFormatParamName, accountNoParamName, externalIdParamName, mobileNoParamName, firstnameParamName, middlenameParamName,
lastnameParamName, fullnameParamName, activeParamName, activationDateParamName, staffIdParamName,savingsProductIdParamName)); lastnameParamName, fullnameParamName, activeParamName, activationDateParamName, staffIdParamName, savingsProductIdParamName));
/** /**
* These parameters will match the class level parameters of * These parameters will match the class level parameters of
@@ -135,7 +135,6 @@ public class ClientsApiResource {
clientData = ClientData.templateOnTop(clientData, templateData); clientData = ClientData.templateOnTop(clientData, templateData);
} }
return this.toApiJsonSerializer.serialize(settings, clientData, ClientApiConstants.CLIENT_RESPONSE_DATA_PARAMETERS); return this.toApiJsonSerializer.serialize(settings, clientData, ClientApiConstants.CLIENT_RESPONSE_DATA_PARAMETERS);
} }
@@ -68,7 +68,7 @@ final public class ClientData implements Comparable<ClientData> {
final Collection<StaffData> staffOptions, final Collection<CodeValueData> closureReasons, final Collection<StaffData> staffOptions, final Collection<CodeValueData> closureReasons,
final Collection<SavingsProductData> savingProductOptions) { final Collection<SavingsProductData> savingProductOptions) {
return new ClientData(null, null, officeId, null, null, null, null, null, null, null, null, null, null, null, joinedDate, null, return new ClientData(null, null, officeId, null, null, null, null, null, null, null, null, null, null, null, joinedDate, null,
null, null, officeOptions, null, staffOptions, closureReasons,null, savingProductOptions,null,null); null, null, officeOptions, null, staffOptions, closureReasons, null, savingProductOptions, null, null);
} }
@@ -78,8 +78,8 @@ final public class ClientData implements Comparable<ClientData> {
clientData.transferToOfficeId, clientData.transferToOfficeName, clientData.id, clientData.firstname, clientData.middlename, clientData.transferToOfficeId, clientData.transferToOfficeName, clientData.id, clientData.firstname, clientData.middlename,
clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, clientData.mobileNo, clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, clientData.mobileNo,
clientData.activationDate, clientData.imageId, clientData.staffId, clientData.staffName, templateData.officeOptions, clientData.activationDate, clientData.imageId, clientData.staffId, clientData.staffName, templateData.officeOptions,
clientData.groups, templateData.staffOptions, null,null, templateData.savingProductOptions, clientData.groups, templateData.staffOptions, null, null, templateData.savingProductOptions, clientData.savingsProductId,
clientData.savingsProductId, clientData.savingsProductName); clientData.savingsProductName);
} }
@@ -88,7 +88,7 @@ final public class ClientData implements Comparable<ClientData> {
clientData.transferToOfficeId, clientData.transferToOfficeName, clientData.id, clientData.firstname, clientData.middlename, clientData.transferToOfficeId, clientData.transferToOfficeName, clientData.id, clientData.firstname, clientData.middlename,
clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, clientData.mobileNo, clientData.lastname, clientData.fullname, clientData.displayName, clientData.externalId, clientData.mobileNo,
clientData.activationDate, clientData.imageId, clientData.staffId, clientData.staffName, clientData.officeOptions, clientData.activationDate, clientData.imageId, clientData.staffId, clientData.staffName, clientData.officeOptions,
parentGroups, clientData.staffOptions, null,clientData.timeline, clientData.savingProductOptions, parentGroups, clientData.staffOptions, null, clientData.timeline, clientData.savingProductOptions,
clientData.savingsProductId, clientData.savingsProductName); clientData.savingsProductId, clientData.savingsProductName);
} }
@@ -98,13 +98,13 @@ final public class ClientData implements Comparable<ClientData> {
final String officeName) { final String officeName) {
return new ClientData(accountNo, status, officeId, officeName, null, null, id, firstname, middlename, lastname, fullname, return new ClientData(accountNo, status, officeId, officeName, null, null, id, firstname, middlename, lastname, fullname,
displayName, null, null, null, null, null, null, null, null, null, null,null, null,null,null); displayName, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
} }
public static ClientData lookup(final Long id, final String displayName, final Long officeId, final String officeName) { public static ClientData lookup(final Long id, final String displayName, final Long officeId, final String officeName) {
return new ClientData(null, null, officeId, officeName, null, null, id, null, null, null, null, displayName, null, null, null, return new ClientData(null, null, officeId, officeName, null, null, id, null, null, null, null, displayName, null, null, null,
null, null, null, null, null, null, null,null, null,null,null); null, null, null, null, null, null, null, null, null, null, null);
} }
@@ -112,10 +112,10 @@ final public class ClientData implements Comparable<ClientData> {
final Long transferToOfficeId, final String transferToOfficeName, final Long id, final String firstname, final Long transferToOfficeId, final String transferToOfficeName, final Long id, final String firstname,
final String middlename, final String lastname, final String fullname, final String displayName, final String externalId, final String middlename, final String lastname, final String fullname, final String displayName, final String externalId,
final String mobileNo, final LocalDate activationDate, final Long imageId, final Long staffId, final String staffName, final String mobileNo, final LocalDate activationDate, final Long imageId, final Long staffId, final String staffName,
final ClientTimelineData timeline,final Long savingsProductId,final String savingsProductName) { final ClientTimelineData timeline, final Long savingsProductId, final String savingsProductName) {
return new ClientData(accountNo, status, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname, middlename, return new ClientData(accountNo, status, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname, middlename,
lastname, fullname, displayName, externalId, mobileNo, activationDate, imageId, staffId, staffName, null, null, null, null, lastname, fullname, displayName, externalId, mobileNo, activationDate, imageId, staffId, staffName, null, null, null, null,
timeline, null,savingsProductId,savingsProductName); timeline, null, savingsProductId, savingsProductName);
} }
@@ -124,8 +124,8 @@ final public class ClientData implements Comparable<ClientData> {
final String middlename, final String lastname, final String fullname, final String displayName, final String externalId, final String middlename, final String lastname, final String fullname, final String displayName, final String externalId,
final String mobileNo, final LocalDate activationDate, final Long imageId, final Long staffId, final String staffName, final String mobileNo, final LocalDate activationDate, final Long imageId, final Long staffId, final String staffName,
final Collection<OfficeData> allowedOffices, final Collection<GroupGeneralData> groups, final Collection<OfficeData> allowedOffices, final Collection<GroupGeneralData> groups,
final Collection<StaffData> staffOptions, final Collection<CodeValueData> closureReasons,final ClientTimelineData timeline, final Collection<StaffData> staffOptions, final Collection<CodeValueData> closureReasons, final ClientTimelineData timeline,
final Collection<SavingsProductData> savingProductOptions,final Long savingsProductId, final String savingsProductName) { final Collection<SavingsProductData> savingProductOptions, final Long savingsProductId, final String savingsProductName) {
this.accountNo = accountNo; this.accountNo = accountNo;
this.status = status; this.status = status;
if (status != null) { if (status != null) {
@@ -71,7 +71,8 @@ public final class ClientDataValidator {
if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.savingsProductIdParamName, element)) { if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.savingsProductIdParamName, element)) {
final Long savingsProductId = this.fromApiJsonHelper.extractLongNamed(ClientApiConstants.savingsProductIdParamName, element); final Long savingsProductId = this.fromApiJsonHelper.extractLongNamed(ClientApiConstants.savingsProductIdParamName, element);
baseDataValidator.reset().parameter(ClientApiConstants.savingsProductIdParamName).value(savingsProductId).ignoreIfNull().longGreaterThanZero(); baseDataValidator.reset().parameter(ClientApiConstants.savingsProductIdParamName).value(savingsProductId).ignoreIfNull()
.longGreaterThanZero();
} }
if (isFullnameProvided(element) || isIndividualNameProvided(element)) { if (isFullnameProvided(element) || isIndividualNameProvided(element)) {
@@ -137,9 +138,9 @@ public final class ClientDataValidator {
baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false); baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
} }
if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.submittedOnDateParamName, element)) if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.submittedOnDateParamName, element)) {
{ final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(ClientApiConstants.submittedOnDateParamName,
final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(ClientApiConstants.submittedOnDateParamName, element); element);
baseDataValidator.reset().parameter(ClientApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull(); baseDataValidator.reset().parameter(ClientApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull();
} }
@@ -313,7 +314,8 @@ public final class ClientDataValidator {
if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.savingsProductIdParamName, element)) { if (this.fromApiJsonHelper.parameterExists(ClientApiConstants.savingsProductIdParamName, element)) {
final Long savingsProductId = this.fromApiJsonHelper.extractLongNamed(ClientApiConstants.savingsProductIdParamName, element); final Long savingsProductId = this.fromApiJsonHelper.extractLongNamed(ClientApiConstants.savingsProductIdParamName, element);
baseDataValidator.reset().parameter(ClientApiConstants.savingsProductIdParamName).value(savingsProductId).ignoreIfNull().longGreaterThanZero(); baseDataValidator.reset().parameter(ClientApiConstants.savingsProductIdParamName).value(savingsProductId).ignoreIfNull()
.longGreaterThanZero();
} }
if (!atLeastOneParameterPassedForUpdate) { if (!atLeastOneParameterPassedForUpdate) {
@@ -33,12 +33,10 @@ public class ClientTimelineData {
private final String closedByFirstname; private final String closedByFirstname;
private final String closedByLastname; private final String closedByLastname;
public ClientTimelineData(final LocalDate submittedOnDate, final String submittedByUsername, final String submittedByFirstname,
public ClientTimelineData(final LocalDate submittedOnDate, final String submittedByUsername, final String submittedByLastname, final LocalDate activatedOnDate, final String activatedByUsername,
final String submittedByFirstname, final String submittedByLastname, final LocalDate activatedOnDate, final String activatedByFirstname, final String activatedByLastname, final LocalDate closedOnDate,
final String activatedByUsername, final String activatedByFirstname, final String activatedByLastname, final String closedByUsername, final String closedByFirstname, final String closedByLastname) {
final LocalDate closedOnDate, final String closedByUsername, final String closedByFirstname,
final String closedByLastname) {
this.submittedOnDate = submittedOnDate; this.submittedOnDate = submittedOnDate;
this.submittedByUsername = submittedByUsername; this.submittedByUsername = submittedByUsername;
this.submittedByFirstname = submittedByFirstname; this.submittedByFirstname = submittedByFirstname;
@@ -56,5 +54,4 @@ public class ClientTimelineData {
} }
} }
@@ -179,7 +179,7 @@ public final class Client extends AbstractPersistable<Long> {
} }
return new Client(currentUser, status, clientOffice, clientParentGroup, accountNo, firstname, middlename, lastname, fullname, return new Client(currentUser, status, clientOffice, clientParentGroup, accountNo, firstname, middlename, lastname, fullname,
activationDate, officeJoiningDate, externalId, mobileNo, staff, submittedOnDate,savingsProduct); activationDate, officeJoiningDate, externalId, mobileNo, staff, submittedOnDate, savingsProduct);
} }
protected Client() { protected Client() {
@@ -640,7 +640,6 @@ public final class Client extends AbstractPersistable<Long> {
return false; return false;
} }
private Long savingsProductId() { private Long savingsProductId() {
Long savingsProductId = null; Long savingsProductId = null;
if (this.savingsProduct != null) { if (this.savingsProduct != null) {
@@ -649,17 +648,14 @@ public final class Client extends AbstractPersistable<Long> {
return savingsProductId; return savingsProductId;
} }
public SavingsProduct SavingsProduct() { public SavingsProduct SavingsProduct() {
return this.savingsProduct; return this.savingsProduct;
} }
public void updateSavingsProduct(SavingsProduct savingsProduct) { public void updateSavingsProduct(SavingsProduct savingsProduct) {
this.savingsProduct = savingsProduct; this.savingsProduct = savingsProduct;
} }
public AppUser activatedBy() { public AppUser activatedBy() {
return this.activatedBy; return this.activatedBy;
} }
@@ -4,8 +4,9 @@ import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRul
public class ClientActiveForUpdateException extends AbstractPlatformDomainRuleException { public class ClientActiveForUpdateException extends AbstractPlatformDomainRuleException {
public ClientActiveForUpdateException(final Long clientId,final String parameterName) { public ClientActiveForUpdateException(final Long clientId, final String parameterName) {
super("error.msg.client.active.for.update.parameter."+parameterName, "The Client with id `" + clientId + "` is active,can't update parameter "+parameterName, clientId,parameterName); super("error.msg.client.active.for.update.parameter." + parameterName, "The Client with id `" + clientId
+ "` is active,can't update parameter " + parameterName, clientId, parameterName);
} }
} }
@@ -82,7 +82,6 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
final Collection<SavingsProductData> savingsProductDatas = this.savingsProductReadPlatformService.retrieveAllForLookupByType(true); final Collection<SavingsProductData> savingsProductDatas = this.savingsProductReadPlatformService.retrieveAllForLookupByType(true);
Collection<StaffData> staffOptions = null; Collection<StaffData> staffOptions = null;
final boolean loanOfficersOnly = false; final boolean loanOfficersOnly = false;
@@ -96,7 +95,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
staffOptions = null; staffOptions = null;
} }
return ClientData.template(defaultOfficeId, new LocalDate(), offices, staffOptions, null,savingsProductDatas); return ClientData.template(defaultOfficeId, new LocalDate(), offices, staffOptions, null, savingsProductDatas);
} }
@Override @Override
@@ -105,10 +104,10 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
final String userOfficeHierarchy = this.context.officeHierarchy(); final String userOfficeHierarchy = this.context.officeHierarchy();
final String underHierarchySearchString = userOfficeHierarchy + "%"; final String underHierarchySearchString = userOfficeHierarchy + "%";
// if (searchParameters.isScopedByOfficeHierarchy()) { // if (searchParameters.isScopedByOfficeHierarchy()) {
// this.context.validateAccessRights(searchParameters.getHierarchy()); // this.context.validateAccessRights(searchParameters.getHierarchy());
// underHierarchySearchString = searchParameters.getHierarchy() + "%"; // underHierarchySearchString = searchParameters.getHierarchy() + "%";
// } // }
final StringBuilder sqlBuilder = new StringBuilder(200); final StringBuilder sqlBuilder = new StringBuilder(200);
sqlBuilder.append("select SQL_CALC_FOUND_ROWS "); sqlBuilder.append("select SQL_CALC_FOUND_ROWS ");
@@ -338,7 +337,6 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
final Long savingsProductId = JdbcSupport.getLong(rs, "savingsProductId"); final Long savingsProductId = JdbcSupport.getLong(rs, "savingsProductId");
final String savingsProductName = rs.getString("savingsProductName"); final String savingsProductName = rs.getString("savingsProductName");
final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate"); final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate");
final String closedByUsername = rs.getString("closedByUsername"); final String closedByUsername = rs.getString("closedByUsername");
final String closedByFirstname = rs.getString("closedByFirstname"); final String closedByFirstname = rs.getString("closedByFirstname");
@@ -349,18 +347,17 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
final String submittedByFirstname = rs.getString("submittedByFirstname"); final String submittedByFirstname = rs.getString("submittedByFirstname");
final String submittedByLastname = rs.getString("submittedByLastname"); final String submittedByLastname = rs.getString("submittedByLastname");
final String activatedByUsername = rs.getString("activatedByUsername"); final String activatedByUsername = rs.getString("activatedByUsername");
final String activatedByFirstname = rs.getString("activatedByFirstname"); final String activatedByFirstname = rs.getString("activatedByFirstname");
final String activatedByLastname = rs.getString("activatedByLastname"); final String activatedByLastname = rs.getString("activatedByLastname");
final ClientTimelineData timeline = new ClientTimelineData (submittedOnDate, submittedByUsername, submittedByFirstname, submittedByLastname, final ClientTimelineData timeline = new ClientTimelineData(submittedOnDate, submittedByUsername, submittedByFirstname,
activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate, closedByUsername, submittedByLastname, activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate,
closedByFirstname, closedByLastname); closedByUsername, closedByFirstname, closedByLastname);
return ClientData.instance(accountNo, status, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname, return ClientData.instance(accountNo, status, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname,
middlename, lastname, fullname, displayName, externalId, mobileNo, activationDate, imageId, staffId, staffName,timeline, middlename, lastname, fullname, displayName, externalId, mobileNo, activationDate, imageId, staffId, staffName,
savingsProductId, savingsProductName); timeline, savingsProductId, savingsProductName);
} }
} }
@@ -394,7 +391,6 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
builder.append("c.fullname as fullname, c.display_name as displayName, "); builder.append("c.fullname as fullname, c.display_name as displayName, ");
builder.append("c.mobile_no as mobileNo, "); builder.append("c.mobile_no as mobileNo, ");
builder.append("c.submittedon_date as submittedOnDate, "); builder.append("c.submittedon_date as submittedOnDate, ");
builder.append("sbu.username as submittedByUsername, "); builder.append("sbu.username as submittedByUsername, ");
builder.append("sbu.firstname as submittedByFirstname, "); builder.append("sbu.firstname as submittedByFirstname, ");
@@ -405,12 +401,11 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
builder.append("clu.firstname as closedByFirstname, "); builder.append("clu.firstname as closedByFirstname, ");
builder.append("clu.lastname as closedByLastname, "); builder.append("clu.lastname as closedByLastname, ");
// builder.append("c.submittedon as submittedOnDate, "); // builder.append("c.submittedon as submittedOnDate, ");
builder.append("acu.username as activatedByUsername, "); builder.append("acu.username as activatedByUsername, ");
builder.append("acu.firstname as activatedByFirstname, "); builder.append("acu.firstname as activatedByFirstname, ");
builder.append("acu.lastname as activatedByLastname, "); builder.append("acu.lastname as activatedByLastname, ");
builder.append("c.activation_date as activationDate, c.image_id as imageId, "); builder.append("c.activation_date as activationDate, c.image_id as imageId, ");
builder.append("c.staff_id as staffId, s.display_name as staffName, "); builder.append("c.staff_id as staffId, s.display_name as staffName, ");
builder.append("c.default_savings_product as savingsProductId, sp.name as savingsProductName "); builder.append("c.default_savings_product as savingsProductId, sp.name as savingsProductName ");
@@ -460,7 +455,6 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
final Long savingsProductId = JdbcSupport.getLong(rs, "savingsProductId"); final Long savingsProductId = JdbcSupport.getLong(rs, "savingsProductId");
final String savingsProductName = rs.getString("savingsProductName"); final String savingsProductName = rs.getString("savingsProductName");
final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate"); final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate");
final String closedByUsername = rs.getString("closedByUsername"); final String closedByUsername = rs.getString("closedByUsername");
final String closedByFirstname = rs.getString("closedByFirstname"); final String closedByFirstname = rs.getString("closedByFirstname");
@@ -475,13 +469,13 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
final String activatedByFirstname = rs.getString("activatedByFirstname"); final String activatedByFirstname = rs.getString("activatedByFirstname");
final String activatedByLastname = rs.getString("activatedByLastname"); final String activatedByLastname = rs.getString("activatedByLastname");
final ClientTimelineData timeline = new ClientTimelineData (submittedOnDate, submittedByUsername, submittedByFirstname, submittedByLastname, final ClientTimelineData timeline = new ClientTimelineData(submittedOnDate, submittedByUsername, submittedByFirstname,
activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate, closedByUsername, submittedByLastname, activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate,
closedByFirstname, closedByLastname); closedByUsername, closedByFirstname, closedByLastname);
return ClientData.instance(accountNo, status, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname, return ClientData.instance(accountNo, status, officeId, officeName, transferToOfficeId, transferToOfficeName, id, firstname,
middlename, lastname, fullname, displayName, externalId, mobileNo, activationDate, imageId, staffId, staffName,timeline, middlename, lastname, fullname, displayName, externalId, mobileNo, activationDate, imageId, staffId, staffName,
savingsProductId, savingsProductName); timeline, savingsProductId, savingsProductName);
} }
} }
@@ -593,7 +587,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
public ClientData retrieveAllClosureReasons(final String clientClosureReason) { public ClientData retrieveAllClosureReasons(final String clientClosureReason) {
final List<CodeValueData> closureReasons = new ArrayList<CodeValueData>( final List<CodeValueData> closureReasons = new ArrayList<CodeValueData>(
this.codeValueReadPlatformService.retrieveCodeValuesByCode(clientClosureReason)); this.codeValueReadPlatformService.retrieveCodeValuesByCode(clientClosureReason));
return ClientData.template(null, null, null, null, closureReasons,null); return ClientData.template(null, null, null, null, closureReasons, null);
} }
} }
@@ -141,9 +141,11 @@ public class CentersApiResource {
this.context.authenticatedUser().validateHasReadPermission(GroupingTypesApiConstants.CENTER_RESOURCE_NAME); this.context.authenticatedUser().validateHasReadPermission(GroupingTypesApiConstants.CENTER_RESOURCE_NAME);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
if (meetingDateParam != null && officeId != null) { if (meetingDateParam != null && officeId != null) {
Date meetingDate = meetingDateParam.getDate("meetingDate", dateFormat, locale); Date meetingDate = meetingDateParam.getDate("meetingDate", dateFormat, locale);
Collection<StaffCenterData> staffCenterDataArray = this.centerReadPlatformService.retriveAllCentersByMeetingDate(officeId, meetingDate, staffId); Collection<StaffCenterData> staffCenterDataArray = this.centerReadPlatformService.retriveAllCentersByMeetingDate(officeId,
return this.toApiJsonSerializer.serialize(settings, staffCenterDataArray, GroupingTypesApiConstants.STAFF_CENTER_RESPONSE_DATA_PARAMETERS); meetingDate, staffId);
return this.toApiJsonSerializer.serialize(settings, staffCenterDataArray,
GroupingTypesApiConstants.STAFF_CENTER_RESPONSE_DATA_PARAMETERS);
} }
final PaginationParameters parameters = PaginationParameters.instance(paged, offset, limit, orderBy, sortOrder); final PaginationParameters parameters = PaginationParameters.instance(paged, offset, limit, orderBy, sortOrder);
final SearchParameters searchParameters = SearchParameters.forGroups(sqlSearch, officeId, staffId, externalId, name, hierarchy, final SearchParameters searchParameters = SearchParameters.forGroups(sqlSearch, officeId, staffId, externalId, name, hierarchy,
@@ -187,11 +189,16 @@ public class CentersApiResource {
if (collectionMeetingCalendar != null) { if (collectionMeetingCalendar != null) {
final boolean withHistory = true; final boolean withHistory = true;
final LocalDate tillDate = null; final LocalDate tillDate = null;
final Collection<LocalDate> recurringDates = this.calendarReadPlatformService.generateRecurringDates(collectionMeetingCalendar, withHistory, tillDate); final Collection<LocalDate> recurringDates = this.calendarReadPlatformService.generateRecurringDates(
final Collection<LocalDate> nextTenRecurringDates = this.calendarReadPlatformService.generateNextTenRecurringDates(collectionMeetingCalendar); collectionMeetingCalendar, withHistory, tillDate);
final MeetingData lastMeeting = this.meetingReadPlatformService.retrieveLastMeeting(collectionMeetingCalendar.getCalendarInstanceId()); final Collection<LocalDate> nextTenRecurringDates = this.calendarReadPlatformService
final LocalDate recentEligibleMeetingDate = this.calendarReadPlatformService.generateNextEligibleMeetingDateForCollection(collectionMeetingCalendar, lastMeeting); .generateNextTenRecurringDates(collectionMeetingCalendar);
collectionMeetingCalendar = CalendarData.withRecurringDates(collectionMeetingCalendar, recurringDates, nextTenRecurringDates, recentEligibleMeetingDate); final MeetingData lastMeeting = this.meetingReadPlatformService.retrieveLastMeeting(collectionMeetingCalendar
.getCalendarInstanceId());
final LocalDate recentEligibleMeetingDate = this.calendarReadPlatformService
.generateNextEligibleMeetingDateForCollection(collectionMeetingCalendar, lastMeeting);
collectionMeetingCalendar = CalendarData.withRecurringDates(collectionMeetingCalendar, recurringDates,
nextTenRecurringDates, recentEligibleMeetingDate);
} }
} }
@@ -248,7 +255,7 @@ public class CentersApiResource {
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String activate(@PathParam("centerId") final Long centerId, @QueryParam("command") final String commandParam, public String activate(@PathParam("centerId") final Long centerId, @QueryParam("command") final String commandParam,
final String apiRequestBodyAsJson, @Context final UriInfo uriInfo) { final String apiRequestBodyAsJson, @Context final UriInfo uriInfo) {
final CommandWrapperBuilder builder = new CommandWrapperBuilder().withJson(apiRequestBodyAsJson); final CommandWrapperBuilder builder = new CommandWrapperBuilder().withJson(apiRequestBodyAsJson);
@@ -57,23 +57,23 @@ public class GroupingTypesApiConstants {
public static final String staffOptionsParamName = "staffOptions"; public static final String staffOptionsParamName = "staffOptions";
public static final String clientOptionsParamName = "clientOptions"; public static final String clientOptionsParamName = "clientOptions";
public static final String collectionMeetingCalendar = "collectionMeetingCalendar"; public static final String collectionMeetingCalendar = "collectionMeetingCalendar";
public static final String timeLine ="timeline"; public static final String timeLine = "timeline";
public static final String closureReasons = "closureReasons"; public static final String closureReasons = "closureReasons";
// group close parameters // group close parameters
public static final String closureDateParamName = "closureDate"; public static final String closureDateParamName = "closureDate";
public static final String closureReasonIdParamName = "closureReasonId"; public static final String closureReasonIdParamName = "closureReasonId";
//staff centres parameters // staff centres parameters
public static final String meetingFallCenters = "meetingFallCenters"; public static final String meetingFallCenters = "meetingFallCenters";
public static final Set<String> CENTER_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName, public static final Set<String> CENTER_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName,
dateFormatParamName, idParamName, nameParamName, externalIdParamName, officeIdParamName, staffIdParamName, activeParamName, dateFormatParamName, idParamName, nameParamName, externalIdParamName, officeIdParamName, staffIdParamName, activeParamName,
activationDateParamName, groupMembersParamName,submittedOnDateParamName)); activationDateParamName, groupMembersParamName, submittedOnDateParamName));
public static final Set<String> GROUP_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName, dateFormatParamName, public static final Set<String> GROUP_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName, dateFormatParamName,
idParamName, nameParamName, externalIdParamName, centerIdParamName, officeIdParamName, staffIdParamName, activeParamName, idParamName, nameParamName, externalIdParamName, centerIdParamName, officeIdParamName, staffIdParamName, activeParamName,
activationDateParamName, clientMembersParamName, collectionMeetingCalendar,submittedOnDateParamName)); activationDateParamName, clientMembersParamName, collectionMeetingCalendar, submittedOnDateParamName));
public static final Set<String> GROUP_ROLES_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(roleParamName, public static final Set<String> GROUP_ROLES_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(roleParamName,
clientIdParamName)); clientIdParamName));
@@ -106,6 +106,6 @@ public class GroupingTypesApiConstants {
public static final Set<String> GROUP_CLOSE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName, public static final Set<String> GROUP_CLOSE_REQUEST_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(localeParamName,
dateFormatParamName, closureDateParamName, closureReasonIdParamName)); dateFormatParamName, closureDateParamName, closureReasonIdParamName));
public static final Set<String> STAFF_CENTER_RESPONSE_DATA_PARAMETERS = new HashSet<String>( public static final Set<String> STAFF_CENTER_RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList(staffIdParamName,
Arrays.asList(staffIdParamName, staffNameParamName, meetingFallCenters)); staffNameParamName, meetingFallCenters));
} }
@@ -230,11 +230,16 @@ public class GroupsApiResource {
if (collectionMeetingCalendar != null) { if (collectionMeetingCalendar != null) {
final boolean withHistory = true; final boolean withHistory = true;
final LocalDate tillDate = null; final LocalDate tillDate = null;
final Collection<LocalDate> recurringDates = this.calendarReadPlatformService.generateRecurringDates(collectionMeetingCalendar, withHistory, tillDate); final Collection<LocalDate> recurringDates = this.calendarReadPlatformService.generateRecurringDates(
final Collection<LocalDate> nextTenRecurringDates = this.calendarReadPlatformService.generateNextTenRecurringDates(collectionMeetingCalendar); collectionMeetingCalendar, withHistory, tillDate);
final MeetingData lastMeeting = this.meetingReadPlatformService.retrieveLastMeeting(collectionMeetingCalendar.getCalendarInstanceId()); final Collection<LocalDate> nextTenRecurringDates = this.calendarReadPlatformService
final LocalDate recentEligibleMeetingDate = this.calendarReadPlatformService.generateNextEligibleMeetingDateForCollection(collectionMeetingCalendar, lastMeeting); .generateNextTenRecurringDates(collectionMeetingCalendar);
collectionMeetingCalendar = CalendarData.withRecurringDates(collectionMeetingCalendar, recurringDates, nextTenRecurringDates, recentEligibleMeetingDate); final MeetingData lastMeeting = this.meetingReadPlatformService.retrieveLastMeeting(collectionMeetingCalendar
.getCalendarInstanceId());
final LocalDate recentEligibleMeetingDate = this.calendarReadPlatformService
.generateNextEligibleMeetingDateForCollection(collectionMeetingCalendar, lastMeeting);
collectionMeetingCalendar = CalendarData.withRecurringDates(collectionMeetingCalendar, recurringDates,
nextTenRecurringDates, recentEligibleMeetingDate);
} }
} }
@@ -156,8 +156,8 @@ public class CenterData {
} }
public CalendarData getCollectionMeetingCalendar() { public CalendarData getCollectionMeetingCalendar() {
return collectionMeetingCalendar; return collectionMeetingCalendar;
} }
public String getStaffName() { public String getStaffName() {
return this.staffName; return this.staffName;
@@ -59,7 +59,7 @@ public class GroupGeneralData {
final Collection<GroupRoleData> groupRoles = null; final Collection<GroupRoleData> groupRoles = null;
final Collection<CodeValueData> closureReasons = null; final Collection<CodeValueData> closureReasons = null;
return new GroupGeneralData(groupId, groupName, null, null, null, null, null, null, null, null, null, null, clientMembers, null, return new GroupGeneralData(groupId, groupName, null, null, null, null, null, null, null, null, null, null, clientMembers, null,
null, null, null, groupRoles, null, null, null, null, closureReasons,null); null, null, null, groupRoles, null, null, null, null, closureReasons, null);
} }
public static GroupGeneralData template(final Long officeId, final Long centerId, final String centerName, final Long staffId, public static GroupGeneralData template(final Long officeId, final Long centerId, final String centerName, final Long staffId,
@@ -73,7 +73,7 @@ public class GroupGeneralData {
return new GroupGeneralData(null, null, null, null, null, officeId, null, centerId, centerName, staffId, staffName, null, return new GroupGeneralData(null, null, null, null, null, officeId, null, centerId, centerName, staffId, staffName, null,
clientMembers, centerOptions, officeOptions, staffOptions, clientOptions, groupRoles, availableRoles, null, null, null, clientMembers, centerOptions, officeOptions, staffOptions, clientOptions, groupRoles, availableRoles, null, null, null,
closureReasons,null); closureReasons, null);
} }
public static GroupGeneralData withTemplate(final GroupGeneralData templatedGrouping, final GroupGeneralData grouping) { public static GroupGeneralData withTemplate(final GroupGeneralData templatedGrouping, final GroupGeneralData grouping) {
@@ -81,7 +81,8 @@ public class GroupGeneralData {
grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName, grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName,
grouping.hierarchy, grouping.clientMembers, templatedGrouping.centerOptions, templatedGrouping.officeOptions, grouping.hierarchy, grouping.clientMembers, templatedGrouping.centerOptions, templatedGrouping.officeOptions,
templatedGrouping.staffOptions, templatedGrouping.clientOptions, grouping.groupRoles, templatedGrouping.availableRoles, templatedGrouping.staffOptions, templatedGrouping.clientOptions, grouping.groupRoles, templatedGrouping.availableRoles,
grouping.selectedRole, grouping.calendarsData, grouping.collectionMeetingCalendar, grouping.closureReasons,templatedGrouping.timeline); grouping.selectedRole, grouping.calendarsData, grouping.collectionMeetingCalendar, grouping.closureReasons,
templatedGrouping.timeline);
} }
public static GroupGeneralData withAssocations(final GroupGeneralData grouping, final Collection<ClientData> membersOfGroup, public static GroupGeneralData withAssocations(final GroupGeneralData grouping, final Collection<ClientData> membersOfGroup,
@@ -91,12 +92,12 @@ public class GroupGeneralData {
grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName, grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName,
grouping.hierarchy, membersOfGroup, grouping.centerOptions, grouping.officeOptions, grouping.staffOptions, grouping.hierarchy, membersOfGroup, grouping.centerOptions, grouping.officeOptions, grouping.staffOptions,
grouping.clientOptions, groupRoles, grouping.availableRoles, grouping.selectedRole, calendarsData, grouping.clientOptions, groupRoles, grouping.availableRoles, grouping.selectedRole, calendarsData,
collectionMeetingCalendar, grouping.closureReasons,grouping.timeline); collectionMeetingCalendar, grouping.closureReasons, grouping.timeline);
} }
public static GroupGeneralData instance(final Long id, final String name, final String externalId, final EnumOptionData status, public static GroupGeneralData instance(final Long id, final String name, final String externalId, final EnumOptionData status,
final LocalDate activationDate, final Long officeId, final String officeName, final Long centerId, final String centerName, final LocalDate activationDate, final Long officeId, final String officeName, final Long centerId, final String centerName,
final Long staffId, final String staffName, final String hierarchy,final GroupTimelineData timeline) { final Long staffId, final String staffName, final String hierarchy, final GroupTimelineData timeline) {
final Collection<ClientData> clientMembers = null; final Collection<ClientData> clientMembers = null;
final Collection<CenterData> centerOptions = null; final Collection<CenterData> centerOptions = null;
@@ -112,7 +113,7 @@ public class GroupGeneralData {
return new GroupGeneralData(id, name, externalId, status, activationDate, officeId, officeName, centerId, centerName, staffId, return new GroupGeneralData(id, name, externalId, status, activationDate, officeId, officeName, centerId, centerName, staffId,
staffName, hierarchy, clientMembers, centerOptions, officeOptions, staffOptions, clientOptions, groupRoles, availableRoles, staffName, hierarchy, clientMembers, centerOptions, officeOptions, staffOptions, clientOptions, groupRoles, availableRoles,
role, calendarsData, collectionMeetingCalendar, closureReasons,timeline); role, calendarsData, collectionMeetingCalendar, closureReasons, timeline);
} }
private GroupGeneralData(final Long id, final String name, final String externalId, final EnumOptionData status, private GroupGeneralData(final Long id, final String name, final String externalId, final EnumOptionData status,
@@ -122,7 +123,7 @@ public class GroupGeneralData {
final Collection<StaffData> staffOptions, final Collection<ClientData> clientOptions, final Collection<StaffData> staffOptions, final Collection<ClientData> clientOptions,
final Collection<GroupRoleData> groupRoles, final Collection<CodeValueData> availableRoles, final GroupRoleData role, final Collection<GroupRoleData> groupRoles, final Collection<CodeValueData> availableRoles, final GroupRoleData role,
final Collection<CalendarData> calendarsData, final CalendarData collectionMeetingCalendar, final Collection<CalendarData> calendarsData, final CalendarData collectionMeetingCalendar,
final Collection<CodeValueData> closureReasons,final GroupTimelineData timeline) { final Collection<CodeValueData> closureReasons, final GroupTimelineData timeline) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.externalId = externalId; this.externalId = externalId;
@@ -192,7 +193,7 @@ public class GroupGeneralData {
grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName, grouping.officeId, grouping.officeName, grouping.centerId, grouping.centerName, grouping.staffId, grouping.staffName,
grouping.hierarchy, grouping.clientMembers, grouping.centerOptions, grouping.officeOptions, grouping.staffOptions, grouping.hierarchy, grouping.clientMembers, grouping.centerOptions, grouping.officeOptions, grouping.staffOptions,
grouping.clientOptions, grouping.groupRoles, grouping.availableRoles, selectedRole, grouping.calendarsData, grouping.clientOptions, grouping.groupRoles, grouping.availableRoles, selectedRole, grouping.calendarsData,
grouping.collectionMeetingCalendar, grouping.closureReasons,null); grouping.collectionMeetingCalendar, grouping.closureReasons, null);
} }
public static GroupGeneralData withClosureReasons(final Collection<CodeValueData> closureReasons) { public static GroupGeneralData withClosureReasons(final Collection<CodeValueData> closureReasons) {
@@ -221,10 +222,9 @@ public class GroupGeneralData {
return new GroupGeneralData(id, name, externalId, status, activationDate, officeId, officeName, centerId, centerName, staffId, return new GroupGeneralData(id, name, externalId, status, activationDate, officeId, officeName, centerId, centerName, staffId,
staffName, hierarchy, clientMembers, centerOptions, officeOptions, staffOptions, clientOptions, groupRoles, availableRoles, staffName, hierarchy, clientMembers, centerOptions, officeOptions, staffOptions, clientOptions, groupRoles, availableRoles,
role, calendarsData, collectionMeetingCalendar, closureReasons,null); role, calendarsData, collectionMeetingCalendar, closureReasons, null);
} }
public Collection<ClientData> clientMembers() { public Collection<ClientData> clientMembers() {
return this.clientMembers; return this.clientMembers;
} }
@@ -8,7 +8,8 @@ package org.mifosplatform.portfolio.group.data;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
/** /**
* Immutable data object represent the important time-line events of a group/center. * Immutable data object represent the important time-line events of a
* group/center.
* *
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
@@ -29,12 +30,10 @@ public class GroupTimelineData {
private final String closedByFirstname; private final String closedByFirstname;
private final String closedByLastname; private final String closedByLastname;
public GroupTimelineData(final LocalDate submittedOnDate, final String submittedByUsername, final String submittedByFirstname,
public GroupTimelineData(final LocalDate submittedOnDate, final String submittedByUsername, final String submittedByLastname, final LocalDate activatedOnDate, final String activatedByUsername,
final String submittedByFirstname, final String submittedByLastname, final LocalDate activatedOnDate, final String activatedByFirstname, final String activatedByLastname, final LocalDate closedOnDate,
final String activatedByUsername, final String activatedByFirstname, final String activatedByLastname, final String closedByUsername, final String closedByFirstname, final String closedByLastname) {
final LocalDate closedOnDate, final String closedByUsername, final String closedByFirstname,
final String closedByLastname) {
this.submittedOnDate = submittedOnDate; this.submittedOnDate = submittedOnDate;
this.submittedByUsername = submittedByUsername; this.submittedByUsername = submittedByUsername;
this.submittedByFirstname = submittedByFirstname; this.submittedByFirstname = submittedByFirstname;
@@ -52,5 +51,4 @@ public class GroupTimelineData {
} }
} }
@@ -4,26 +4,26 @@ import java.util.Collection;
public class StaffCenterData { public class StaffCenterData {
private final Long staffId; private final Long staffId;
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final String staffName; private final String staffName;
private final Collection<CenterData> meetingFallCenters; private final Collection<CenterData> meetingFallCenters;
private StaffCenterData(final Long staffId, final String staffName, final Collection<CenterData> meetingFallCenters) { private StaffCenterData(final Long staffId, final String staffName, final Collection<CenterData> meetingFallCenters) {
this.staffId = staffId; this.staffId = staffId;
this.staffName = staffName; this.staffName = staffName;
this.meetingFallCenters = meetingFallCenters; this.meetingFallCenters = meetingFallCenters;
} }
public static StaffCenterData instance(final Long staffId, final String staffName, final Collection<CenterData> meetingFallCenters) { public static StaffCenterData instance(final Long staffId, final String staffName, final Collection<CenterData> meetingFallCenters) {
return new StaffCenterData(staffId, staffName, meetingFallCenters); return new StaffCenterData(staffId, staffName, meetingFallCenters);
} }
public Long getStaffId() {
return staffId;
}
public Collection<CenterData> getMeetingFallCenters() { public Long getStaffId() {
return meetingFallCenters; return staffId;
} }
public Collection<CenterData> getMeetingFallCenters() {
return meetingFallCenters;
}
} }
@@ -97,10 +97,10 @@ public final class GroupingTypesDataValidator {
baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false); baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
} }
if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element)) if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element)) {
{ final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(
final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(GroupingTypesApiConstants.submittedOnDateParamName, element); GroupingTypesApiConstants.submittedOnDateParamName, element);
baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull(); baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull();
} }
throwExceptionIfValidationWarningsExist(dataValidationErrors); throwExceptionIfValidationWarningsExist(dataValidationErrors);
@@ -161,9 +161,9 @@ public final class GroupingTypesDataValidator {
baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false); baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
} }
if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element)) if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element)) {
{ final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(
final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(GroupingTypesApiConstants.submittedOnDateParamName, element); GroupingTypesApiConstants.submittedOnDateParamName, element);
baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull(); baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull();
} }
@@ -221,9 +221,9 @@ public final class GroupingTypesDataValidator {
baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false); baseDataValidator.reset().parameter(ClientApiConstants.activeParamName).value(active).trueOrFalseRequired(false);
} }
if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element)) if (this.fromApiJsonHelper.parameterExists(GroupingTypesApiConstants.submittedOnDateParamName, element)) {
{ final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(
final LocalDate submittedOnDate = this.fromApiJsonHelper.extractLocalDateNamed(GroupingTypesApiConstants.submittedOnDateParamName, element); GroupingTypesApiConstants.submittedOnDateParamName, element);
baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull(); baseDataValidator.reset().parameter(GroupingTypesApiConstants.submittedOnDateParamName).value(submittedOnDate).notNull();
} }
@@ -37,7 +37,6 @@ public final class AllGroupTypesDataMapper implements RowMapper<GroupGeneralData
sqlBuilder.append("sbu.firstname as submittedByFirstname, "); sqlBuilder.append("sbu.firstname as submittedByFirstname, ");
sqlBuilder.append("sbu.lastname as submittedByLastname, "); sqlBuilder.append("sbu.lastname as submittedByLastname, ");
sqlBuilder.append("clu.username as closedByUsername, "); sqlBuilder.append("clu.username as closedByUsername, ");
sqlBuilder.append("clu.firstname as closedByFirstname, "); sqlBuilder.append("clu.firstname as closedByFirstname, ");
sqlBuilder.append("clu.lastname as closedByLastname, "); sqlBuilder.append("clu.lastname as closedByLastname, ");
@@ -83,24 +82,23 @@ public final class AllGroupTypesDataMapper implements RowMapper<GroupGeneralData
final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate"); final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate");
final String closedByUsername = rs.getString("closedByUsername"); final String closedByUsername = rs.getString("closedByUsername");
final String closedByFirstname = rs.getString("closedByFirstname"); final String closedByFirstname = rs.getString("closedByFirstname");
final String closedByLastname = rs.getString("closedByLastname"); final String closedByLastname = rs.getString("closedByLastname");
final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate"); final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate");
final String submittedByUsername = rs.getString("submittedByUsername"); final String submittedByUsername = rs.getString("submittedByUsername");
final String submittedByFirstname = rs.getString("submittedByFirstname"); final String submittedByFirstname = rs.getString("submittedByFirstname");
final String submittedByLastname = rs.getString("submittedByLastname"); final String submittedByLastname = rs.getString("submittedByLastname");
final String activatedByUsername = rs.getString("activatedByUsername"); final String activatedByUsername = rs.getString("activatedByUsername");
final String activatedByFirstname = rs.getString("activatedByFirstname"); final String activatedByFirstname = rs.getString("activatedByFirstname");
final String activatedByLastname = rs.getString("activatedByLastname"); final String activatedByLastname = rs.getString("activatedByLastname");
final GroupTimelineData timeline = new GroupTimelineData (submittedOnDate, submittedByUsername, submittedByFirstname, submittedByLastname, final GroupTimelineData timeline = new GroupTimelineData(submittedOnDate, submittedByUsername, submittedByFirstname,
activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate, closedByUsername, submittedByLastname, activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate,
closedByFirstname, closedByLastname); closedByUsername, closedByFirstname, closedByLastname);
return GroupGeneralData.instance(id, name, externalId, status, activationDate, officeId, officeName, centerId, centerName, staffId, return GroupGeneralData.instance(id, name, externalId, status, activationDate, officeId, officeName, centerId, centerName, staffId,
staffName, hierarchy,timeline); staffName, hierarchy, timeline);
} }
} }
@@ -135,24 +135,15 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
+ "g.staff_id as staffId, s.display_name as staffName, " // + "g.staff_id as staffId, s.display_name as staffName, " //
+ "g.status_enum as statusEnum, g.activation_date as activationDate, " // + "g.status_enum as statusEnum, g.activation_date as activationDate, " //
+ "g.hierarchy as hierarchy, " // + "g.hierarchy as hierarchy, " //
+ "g.closedon_date as closedOnDate, " + "g.closedon_date as closedOnDate, " + "g.submittedon_date as submittedOnDate, " + "sbu.username as submittedByUsername, "
+ "g.submittedon_date as submittedOnDate, " + "sbu.firstname as submittedByFirstname, " + "sbu.lastname as submittedByLastname, " + "clu.username as closedByUsername, "
+ "sbu.username as submittedByUsername, " + "clu.firstname as closedByFirstname, " + "clu.lastname as closedByLastname, " + "acu.username as activatedByUsername, "
+ "sbu.firstname as submittedByFirstname, "
+ "sbu.lastname as submittedByLastname, "
+ "clu.username as closedByUsername, "
+ "clu.firstname as closedByFirstname, "
+ "clu.lastname as closedByLastname, "
+ "acu.username as activatedByUsername, "
+ "acu.firstname as activatedByFirstname, " + "acu.firstname as activatedByFirstname, "
+ "acu.lastname as activatedByLastname " + "acu.lastname as activatedByLastname "
+ "from m_group g " // + "from m_group g " //
+ "join m_office o on o.id = g.office_id " + "join m_office o on o.id = g.office_id " + "left join m_staff s on s.id = g.staff_id "
+ "left join m_staff s on s.id = g.staff_id " + "left join m_group pg on pg.id = g.parent_id " + "left join m_appuser sbu on sbu.id = g.submittedon_userid "
+ "left join m_group pg on pg.id = g.parent_id " + "left join m_appuser acu on acu.id = g.activatedon_userid " + "left join m_appuser clu on clu.id = g.closedon_userid ";
+ "left join m_appuser sbu on sbu.id = g.submittedon_userid "
+ "left join m_appuser acu on acu.id = g.activatedon_userid "
+ "left join m_appuser clu on clu.id = g.closedon_userid ";
private static final class CenterDataMapper implements RowMapper<CenterData> { private static final class CenterDataMapper implements RowMapper<CenterData> {
@@ -184,24 +175,24 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate"); final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate");
final String closedByUsername = rs.getString("closedByUsername"); final String closedByUsername = rs.getString("closedByUsername");
final String closedByFirstname = rs.getString("closedByFirstname"); final String closedByFirstname = rs.getString("closedByFirstname");
final String closedByLastname = rs.getString("closedByLastname"); final String closedByLastname = rs.getString("closedByLastname");
final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate"); final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate");
final String submittedByUsername = rs.getString("submittedByUsername"); final String submittedByUsername = rs.getString("submittedByUsername");
final String submittedByFirstname = rs.getString("submittedByFirstname"); final String submittedByFirstname = rs.getString("submittedByFirstname");
final String submittedByLastname = rs.getString("submittedByLastname"); final String submittedByLastname = rs.getString("submittedByLastname");
final String activatedByUsername = rs.getString("activatedByUsername"); final String activatedByUsername = rs.getString("activatedByUsername");
final String activatedByFirstname = rs.getString("activatedByFirstname"); final String activatedByFirstname = rs.getString("activatedByFirstname");
final String activatedByLastname = rs.getString("activatedByLastname"); final String activatedByLastname = rs.getString("activatedByLastname");
final GroupTimelineData timeline = new GroupTimelineData (submittedOnDate, submittedByUsername, submittedByFirstname, submittedByLastname, final GroupTimelineData timeline = new GroupTimelineData(submittedOnDate, submittedByUsername, submittedByFirstname,
activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate, closedByUsername, submittedByLastname, activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate,
closedByFirstname, closedByLastname); closedByUsername, closedByFirstname, closedByLastname);
return CenterData.instance(id, name, externalId, status, activationDate, officeId, officeName, staffId, staffName, hierarchy, timeline, null); return CenterData.instance(id, name, externalId, status, activationDate, officeId, officeName, staffId, staffName, hierarchy,
timeline, null);
} }
} }
@@ -211,13 +202,13 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
public CenterCalendarDataMapper() { public CenterCalendarDataMapper() {
schemaSql = " select g.id as id, g.display_name as name, g.office_id as officeId, g.staff_id as staffId, s.display_name as staffName, g.external_id as externalId, " schemaSql = " select g.id as id, g.display_name as name, g.office_id as officeId, g.staff_id as staffId, s.display_name as staffName, g.external_id as externalId, "
+" g.status_enum as statusEnum, g.activation_date as activationDate, g.hierarchy as hierarchy, " + " g.status_enum as statusEnum, g.activation_date as activationDate, g.hierarchy as hierarchy, "
+" c.id as calendarId, ci.id as calendarInstanceId, ci.entity_id as entityId, " + " c.id as calendarId, ci.id as calendarInstanceId, ci.entity_id as entityId, "
+" ci.entity_type_enum as entityTypeId, c.title as title, c.description as description, " + " ci.entity_type_enum as entityTypeId, c.title as title, c.description as description, "
+" c.location as location, c.start_date as startDate, c.end_date as endDate, c.recurrence as recurrence " + " c.location as location, c.start_date as startDate, c.end_date as endDate, c.recurrence as recurrence "
+" from m_calendar c join m_calendar_instance ci on ci.calendar_id=c.id and ci.entity_type_enum=4 join m_group g " + " from m_calendar c join m_calendar_instance ci on ci.calendar_id=c.id and ci.entity_type_enum=4 join m_group g "
+" on g.id = ci.entity_id join m_staff s on g.staff_id = s.id where g.office_id=? "; + " on g.id = ci.entity_id join m_staff s on g.staff_id = s.id where g.office_id=? ";
} }
public String schema() { public String schema() {
@@ -250,9 +241,11 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
final LocalDate endDate = JdbcSupport.getLocalDate(rs, "endDate"); final LocalDate endDate = JdbcSupport.getLocalDate(rs, "endDate");
final String recurrence = rs.getString("recurrence"); final String recurrence = rs.getString("recurrence");
CalendarData calendarData = CalendarData.instance(calendarId, calendarInstanceId, entityId, entityType, title, description, location, startDate, CalendarData calendarData = CalendarData.instance(calendarId, calendarInstanceId, entityId, entityType, title, description,
endDate, null, null, false, recurrence, null, null, null, null, null, null, null, null, null, null, null, null, null); location, startDate, endDate, null, null, false, recurrence, null, null, null, null, null, null, null, null, null,
return CenterData.instance(id, name, externalId, status, activationDate, officeId, null, staffId, staffName, hierarchy, null, calendarData); null, null, null, null);
return CenterData.instance(id, name, externalId, status, activationDate, officeId, null, staffId, staffName, hierarchy, null,
calendarData);
} }
} }
@@ -288,25 +281,24 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate"); final LocalDate closedOnDate = JdbcSupport.getLocalDate(rs, "closedOnDate");
final String closedByUsername = rs.getString("closedByUsername"); final String closedByUsername = rs.getString("closedByUsername");
final String closedByFirstname = rs.getString("closedByFirstname"); final String closedByFirstname = rs.getString("closedByFirstname");
final String closedByLastname = rs.getString("closedByLastname"); final String closedByLastname = rs.getString("closedByLastname");
final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate"); final LocalDate submittedOnDate = JdbcSupport.getLocalDate(rs, "submittedOnDate");
final String submittedByUsername = rs.getString("submittedByUsername"); final String submittedByUsername = rs.getString("submittedByUsername");
final String submittedByFirstname = rs.getString("submittedByFirstname"); final String submittedByFirstname = rs.getString("submittedByFirstname");
final String submittedByLastname = rs.getString("submittedByLastname"); final String submittedByLastname = rs.getString("submittedByLastname");
final String activatedByUsername = rs.getString("activatedByUsername"); final String activatedByUsername = rs.getString("activatedByUsername");
final String activatedByFirstname = rs.getString("activatedByFirstname"); final String activatedByFirstname = rs.getString("activatedByFirstname");
final String activatedByLastname = rs.getString("activatedByLastname"); final String activatedByLastname = rs.getString("activatedByLastname");
final GroupTimelineData timeline = new GroupTimelineData (submittedOnDate, submittedByUsername, submittedByFirstname, submittedByLastname, final GroupTimelineData timeline = new GroupTimelineData(submittedOnDate, submittedByUsername, submittedByFirstname,
activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate, closedByUsername, submittedByLastname, activationDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate,
closedByFirstname, closedByLastname); closedByUsername, closedByFirstname, closedByLastname);
return GroupGeneralData.instance(id, name, externalId, status, activationDate, officeId, officeName, null, null, staffId, return GroupGeneralData.instance(id, name, externalId, status, activationDate, officeId, officeName, null, null, staffId,
staffName, hierarchy,timeline); staffName, hierarchy, timeline);
} }
} }
@@ -375,7 +367,7 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
} }
} }
return this.jdbcTemplate.query(sqlBuilder.toString(), this.centerMapper, new Object[] {hierarchySearchString}); return this.jdbcTemplate.query(sqlBuilder.toString(), this.centerMapper, new Object[] { hierarchySearchString });
} }
@Override @Override
@@ -507,45 +499,46 @@ public class CenterReadPlatformServiceImpl implements CenterReadPlatformService
return CenterData.withClosureReasons(closureReasons); return CenterData.withClosureReasons(closureReasons);
} }
@Override @Override
public Collection<StaffCenterData> retriveAllCentersByMeetingDate(final Long officeId, final Date meetingDate, final Long staffId) { public Collection<StaffCenterData> retriveAllCentersByMeetingDate(final Long officeId, final Date meetingDate, final Long staffId) {
final CenterCalendarDataMapper centerCalendarMapper = new CenterCalendarDataMapper(); final CenterCalendarDataMapper centerCalendarMapper = new CenterCalendarDataMapper();
String sql = centerCalendarMapper.schema(); String sql = centerCalendarMapper.schema();
Collection<CenterData> centerDataArray = null; Collection<CenterData> centerDataArray = null;
if (staffId != null) { if (staffId != null) {
sql += " and g.staff_id=? "; sql += " and g.staff_id=? ";
centerDataArray = this.jdbcTemplate.query(sql, centerCalendarMapper, new Object[] {officeId, staffId}); centerDataArray = this.jdbcTemplate.query(sql, centerCalendarMapper, new Object[] { officeId, staffId });
} else { } else {
centerDataArray = this.jdbcTemplate.query(sql, centerCalendarMapper, new Object[] {officeId}); centerDataArray = this.jdbcTemplate.query(sql, centerCalendarMapper, new Object[] { officeId });
} }
Collection<StaffCenterData> staffCenterDataArray = new ArrayList<StaffCenterData>(); Collection<StaffCenterData> staffCenterDataArray = new ArrayList<StaffCenterData>();
Boolean flag = false; Boolean flag = false;
for (CenterData centerData : centerDataArray) { for (CenterData centerData : centerDataArray) {
if (centerData.getCollectionMeetingCalendar().isValidRecurringDate(new LocalDate(meetingDate))){ if (centerData.getCollectionMeetingCalendar().isValidRecurringDate(new LocalDate(meetingDate))) {
if (staffCenterDataArray.size() <= 0) { if (staffCenterDataArray.size() <= 0) {
Collection<CenterData> meetingFallCenter = new ArrayList<CenterData>(); Collection<CenterData> meetingFallCenter = new ArrayList<CenterData>();
meetingFallCenter.add(centerData); meetingFallCenter.add(centerData);
staffCenterDataArray.add(StaffCenterData.instance(centerData.staffId(), centerData.getStaffName(), meetingFallCenter)); staffCenterDataArray.add(StaffCenterData.instance(centerData.staffId(), centerData.getStaffName(), meetingFallCenter));
} else { } else {
for(StaffCenterData staffCenterData : staffCenterDataArray) { for (StaffCenterData staffCenterData : staffCenterDataArray) {
flag = false; flag = false;
if (staffCenterData.getStaffId() == centerData.staffId()) { if (staffCenterData.getStaffId() == centerData.staffId()) {
staffCenterData.getMeetingFallCenters().add(centerData); staffCenterData.getMeetingFallCenters().add(centerData);
flag = true; flag = true;
break; break;
} }
} }
if (!flag) { if (!flag) {
Collection<CenterData> meetingFallCenter = new ArrayList<CenterData>(); Collection<CenterData> meetingFallCenter = new ArrayList<CenterData>();
meetingFallCenter.add(centerData); meetingFallCenter.add(centerData);
staffCenterDataArray.add(StaffCenterData.instance(centerData.staffId(), centerData.getStaffName(), meetingFallCenter)); staffCenterDataArray.add(StaffCenterData.instance(centerData.staffId(), centerData.getStaffName(),
} meetingFallCenter));
} }
}
} }
} }
return staffCenterDataArray; return staffCenterDataArray;
} }
} }
@@ -65,7 +65,8 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
public GroupReadPlatformServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource, public GroupReadPlatformServiceImpl(final PlatformSecurityContext context, final RoutingDataSource dataSource,
final CenterReadPlatformService centerReadPlatformService, final ClientReadPlatformService clientReadPlatformService, final CenterReadPlatformService centerReadPlatformService, final ClientReadPlatformService clientReadPlatformService,
final OfficeReadPlatformService officeReadPlatformService, final StaffReadPlatformService staffReadPlatformService, final OfficeReadPlatformService officeReadPlatformService, final StaffReadPlatformService staffReadPlatformService,
final CodeValueReadPlatformService codeValueReadPlatformService, final PaginationParametersDataValidator paginationParametersDataValidator) { final CodeValueReadPlatformService codeValueReadPlatformService,
final PaginationParametersDataValidator paginationParametersDataValidator) {
this.context = context; this.context = context;
this.jdbcTemplate = new JdbcTemplate(dataSource); this.jdbcTemplate = new JdbcTemplate(dataSource);
this.centerReadPlatformService = centerReadPlatformService; this.centerReadPlatformService = centerReadPlatformService;
@@ -161,7 +162,6 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
new Object[] { hierarchySearchString }, this.allGroupTypesDataMapper); new Object[] { hierarchySearchString }, this.allGroupTypesDataMapper);
} }
@Override @Override
public Collection<GroupGeneralData> retrieveAll(SearchParameters searchParameters, final PaginationParameters parameters) { public Collection<GroupGeneralData> retrieveAll(SearchParameters searchParameters, final PaginationParameters parameters) {
final AppUser currentUser = this.context.authenticatedUser(); final AppUser currentUser = this.context.authenticatedUser();
@@ -187,7 +187,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
sqlBuilder.append(parameters.limitSql()); sqlBuilder.append(parameters.limitSql());
} }
return this.jdbcTemplate.query(sqlBuilder.toString(), this.allGroupTypesDataMapper, new Object[] {hierarchySearchString}); return this.jdbcTemplate.query(sqlBuilder.toString(), this.allGroupTypesDataMapper, new Object[] { hierarchySearchString });
} }
// 'g.' preffix because of ERROR 1052 (23000): Column 'column_name' in where // 'g.' preffix because of ERROR 1052 (23000): Column 'column_name' in where
@@ -224,7 +224,7 @@ public class GroupReadPlatformServiceImpl implements GroupReadPlatformService {
extraCriteria.append(" and o.hierarchy like ").append(ApiParameterHelper.sqlEncodeString(hierarchy + "%")); extraCriteria.append(" and o.hierarchy like ").append(ApiParameterHelper.sqlEncodeString(hierarchy + "%"));
} }
if (searchCriteria.isStaffIdPassed()){ if (searchCriteria.isStaffIdPassed()) {
extraCriteria.append(" and g.staff_id = ").append(searchCriteria.getStaffId()); extraCriteria.append(" and g.staff_id = ").append(searchCriteria.getStaffId());
} }
@@ -137,12 +137,12 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group
if (active && submittedOnDate.isAfter(activationDate)) { if (active && submittedOnDate.isAfter(activationDate)) {
submittedOnDate = activationDate; submittedOnDate = activationDate;
} }
if(command.hasParameter(GroupingTypesApiConstants.submittedOnDateParamName)){ if (command.hasParameter(GroupingTypesApiConstants.submittedOnDateParamName)) {
submittedOnDate = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.submittedOnDateParamName); submittedOnDate = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.submittedOnDateParamName);
} }
final Group newGroup = Group.newGroup(groupOffice, staff, parentGroup, groupLevel, name, externalId, active, activationDate, final Group newGroup = Group.newGroup(groupOffice, staff, parentGroup, groupLevel, name, externalId, active, activationDate,
clientMembers, groupMembers,submittedOnDate,currentUser); clientMembers, groupMembers, submittedOnDate, currentUser);
// pre-save to generate id for use in group hierarchy // pre-save to generate id for use in group hierarchy
this.groupRepository.save(newGroup); this.groupRepository.save(newGroup);
@@ -203,7 +203,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group
final LocalDate activationDate = command.localDateValueOfParameterNamed("activationDate"); final LocalDate activationDate = command.localDateValueOfParameterNamed("activationDate");
validateOfficeOpeningDateisAfterGroupOrCenterOpeningDate(group.getOffice(), group.getGroupLevel(), activationDate); validateOfficeOpeningDateisAfterGroupOrCenterOpeningDate(group.getOffice(), group.getGroupLevel(), activationDate);
group.activate(currentUser,fmt, activationDate); group.activate(currentUser, fmt, activationDate);
this.groupRepository.saveAndFlush(group); this.groupRepository.saveAndFlush(group);
@@ -442,7 +442,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group
validateLoansAndSavingsForGroupOrCenterClose(group, closureDate); validateLoansAndSavingsForGroupOrCenterClose(group, closureDate);
group.close(currentUser,closureReason, closureDate); group.close(currentUser, closureReason, closureDate);
this.groupRepository.saveAndFlush(group); this.groupRepository.saveAndFlush(group);
@@ -503,7 +503,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group
final CodeValue closureReason = this.codeValueRepository.findOneByCodeNameAndIdWithNotFoundDetection( final CodeValue closureReason = this.codeValueRepository.findOneByCodeNameAndIdWithNotFoundDetection(
GroupingTypesApiConstants.GROUP_CLOSURE_REASON, closureReasonId); GroupingTypesApiConstants.GROUP_CLOSURE_REASON, closureReasonId);
final AppUser currentUser = this.context.authenticatedUser(); final AppUser currentUser = this.context.authenticatedUser();
if (center.hasActiveGroups()) { if (center.hasActiveGroups()) {
final String errorMessage = center.getGroupLevel().getLevelName() final String errorMessage = center.getGroupLevel().getLevelName()
@@ -514,7 +514,7 @@ public class GroupingTypesWritePlatformServiceJpaRepositoryImpl implements Group
validateLoansAndSavingsForGroupOrCenterClose(center, closureDate); validateLoansAndSavingsForGroupOrCenterClose(center, closureDate);
center.close(currentUser,closureReason, closureDate); center.close(currentUser, closureReason, closureDate);
this.groupRepository.saveAndFlush(center); this.groupRepository.saveAndFlush(center);
@@ -22,14 +22,14 @@ public final class SearchParameters {
private final String sortOrder; private final String sortOrder;
private final String accountNo; private final String accountNo;
@SuppressWarnings("unused")
private final Long staffId; private final Long staffId;
public static SearchParameters from(final String sqlSearch, final Long officeId, final String externalId, final String name, public static SearchParameters from(final String sqlSearch, final Long officeId, final String externalId, final String name,
final String hierarchy) { final String hierarchy) {
final Long staffId = null; final Long staffId = null;
final String accountNo = null; final String accountNo = null;
return new SearchParameters(sqlSearch, officeId, externalId, name, hierarchy, null, null, null, null, null, null, staffId, accountNo); return new SearchParameters(sqlSearch, officeId, externalId, name, hierarchy, null, null, null, null, null, null, staffId,
accountNo);
} }
public static SearchParameters forClients(final String sqlSearch, final Long officeId, final String externalId, public static SearchParameters forClients(final String sqlSearch, final Long officeId, final String externalId,
@@ -44,8 +44,9 @@ public final class SearchParameters {
orderBy, sortOrder, staffId, accountNo); orderBy, sortOrder, staffId, accountNo);
} }
public static SearchParameters forGroups(final String sqlSearch, final Long officeId, final Long staffId, final String externalId, final String name, public static SearchParameters forGroups(final String sqlSearch, final Long officeId, final Long staffId, final String externalId,
final String hierarchy, final Integer offset, final Integer limit, final String orderBy, final String sortOrder) { final String name, final String hierarchy, final Integer offset, final Integer limit, final String orderBy,
final String sortOrder) {
final Integer maxLimitAllowed = getCheckedLimit(limit); final Integer maxLimitAllowed = getCheckedLimit(limit);
final String accountNo = null; final String accountNo = null;
@@ -60,7 +61,8 @@ public final class SearchParameters {
final Integer maxLimitAllowed = getCheckedLimit(limit); final Integer maxLimitAllowed = getCheckedLimit(limit);
final Long staffId = null; final Long staffId = null;
return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId, accountNo); return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder,
staffId, accountNo);
} }
public static SearchParameters forJournalEntries(final Long officeId, final Integer offset, final Integer limit, final String orderBy, public static SearchParameters forJournalEntries(final Long officeId, final Integer offset, final Integer limit, final String orderBy,
@@ -69,7 +71,8 @@ public final class SearchParameters {
final Integer maxLimitAllowed = getCheckedLimit(limit); final Integer maxLimitAllowed = getCheckedLimit(limit);
final Long staffId = null; final Long staffId = null;
return new SearchParameters(null, officeId, null, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId, null); return new SearchParameters(null, officeId, null, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId,
null);
} }
public static SearchParameters forPagination(final Integer offset, final Integer limit, final String orderBy, final String sortOrder) { public static SearchParameters forPagination(final Integer offset, final Integer limit, final String orderBy, final String sortOrder) {
@@ -87,17 +90,19 @@ public final class SearchParameters {
final Long staffId = null; final Long staffId = null;
final String accountNo = null; final String accountNo = null;
return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId, accountNo); return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder,
staffId, accountNo);
} }
public static SearchParameters forAccountTransfer(final String sqlSearch, final String externalId, final Integer offset, final Integer limit, public static SearchParameters forAccountTransfer(final String sqlSearch, final String externalId, final Integer offset,
final String orderBy, final String sortOrder) { final Integer limit, final String orderBy, final String sortOrder) {
final Integer maxLimitAllowed = getCheckedLimit(limit); final Integer maxLimitAllowed = getCheckedLimit(limit);
final Long staffId = null; final Long staffId = null;
final String accountNo = null; final String accountNo = null;
return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder, staffId, accountNo); return new SearchParameters(sqlSearch, null, externalId, null, null, null, null, offset, maxLimitAllowed, orderBy, sortOrder,
staffId, accountNo);
} }
private SearchParameters(final String sqlSearch, final Long officeId, final String externalId, final String name, private SearchParameters(final String sqlSearch, final Long officeId, final String externalId, final String name,
@@ -49,7 +49,8 @@ public class LoanChargesApiResource {
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "chargeId", "name", "penalty", private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "chargeId", "name", "penalty",
"chargeTimeType", "dueAsOfDate", "chargeCalculationType", "percentage", "amountPercentageAppliedTo", "currency", "chargeTimeType", "dueAsOfDate", "chargeCalculationType", "percentage", "amountPercentageAppliedTo", "currency",
"amountWaived", "amountWrittenOff", "amountOutstanding", "amountOrPercentage", "amount", "amountPaid", "chargeOptions","installmentChargeData")); "amountWaived", "amountWrittenOff", "amountOutstanding", "amountOrPercentage", "amount", "amountPaid", "chargeOptions",
"installmentChargeData"));
private final String resourceNameForPermissions = "LOAN"; private final String resourceNameForPermissions = "LOAN";
@@ -118,9 +119,10 @@ public class LoanChargesApiResource {
final LoanChargeData loanCharge = this.loanChargeReadPlatformService.retrieveLoanChargeDetails(loanChargeId, loanId); final LoanChargeData loanCharge = this.loanChargeReadPlatformService.retrieveLoanChargeDetails(loanChargeId, loanId);
final Collection<LoanInstallmentChargeData> installmentChargeData = this.loanChargeReadPlatformService.retrieveInstallmentLoanCharges(loanChargeId, true); final Collection<LoanInstallmentChargeData> installmentChargeData = this.loanChargeReadPlatformService
.retrieveInstallmentLoanCharges(loanChargeId, true);
final LoanChargeData loanChargeData = new LoanChargeData(loanCharge, installmentChargeData); final LoanChargeData loanChargeData = new LoanChargeData(loanCharge, installmentChargeData);
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
return this.toApiJsonSerializer.serialize(settings, loanChargeData, this.RESPONSE_DATA_PARAMETERS); return this.toApiJsonSerializer.serialize(settings, loanChargeData, this.RESPONSE_DATA_PARAMETERS);
@@ -38,8 +38,8 @@ import org.springframework.stereotype.Component;
@Scope("singleton") @Scope("singleton")
public class LoanDisbursementDetailApiResource { public class LoanDisbursementDetailApiResource {
private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "expectedDisbursementDate","actualDisbursementDate", private final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "expectedDisbursementDate",
"principal","approvedPrincipal")); "actualDisbursementDate", "principal", "approvedPrincipal"));
private final String resourceNameForPermissions = "LOAN"; private final String resourceNameForPermissions = "LOAN";
@@ -51,7 +51,7 @@ public class LoanDisbursementDetailApiResource {
@Autowired @Autowired
public LoanDisbursementDetailApiResource(final DefaultToApiJsonSerializer<DisbursementData> toApiJsonSerializer, public LoanDisbursementDetailApiResource(final DefaultToApiJsonSerializer<DisbursementData> toApiJsonSerializer,
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService,final PlatformSecurityContext context, final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService, final PlatformSecurityContext context,
final ApiRequestParameterHelper apiRequestParameterHelper, final LoanReadPlatformService loanReadPlatformService) { final ApiRequestParameterHelper apiRequestParameterHelper, final LoanReadPlatformService loanReadPlatformService) {
this.toApiJsonSerializer = toApiJsonSerializer; this.toApiJsonSerializer = toApiJsonSerializer;
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService; this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
@@ -67,19 +67,19 @@ public class LoanDisbursementDetailApiResource {
public String updateDisbursementDate(@PathParam("loanId") final Long loanId, @PathParam("disbursementId") final Long disbursementId, public String updateDisbursementDate(@PathParam("loanId") final Long loanId, @PathParam("disbursementId") final Long disbursementId,
final String apiRequestBodyAsJson) { final String apiRequestBodyAsJson) {
final CommandWrapper commandRequest = new CommandWrapperBuilder().updateDisbusementDate(loanId,disbursementId).withJson(apiRequestBodyAsJson).build(); final CommandWrapper commandRequest = new CommandWrapperBuilder().updateDisbusementDate(loanId, disbursementId)
.withJson(apiRequestBodyAsJson).build();
final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
return this.toApiJsonSerializer.serialize(result); return this.toApiJsonSerializer.serialize(result);
} }
@GET @GET
@Path("{disbursementId}") @Path("{disbursementId}")
@Consumes({ MediaType.APPLICATION_JSON }) @Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON })
public String retriveDetail(@PathParam("loanId") final Long loanId,@PathParam("disbursementId") final Long disbursementId, public String retriveDetail(@PathParam("loanId") final Long loanId, @PathParam("disbursementId") final Long disbursementId,
@Context final UriInfo uriInfo) { @Context final UriInfo uriInfo) {
this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions); this.context.authenticatedUser().validateHasReadPermission(this.resourceNameForPermissions);
@@ -90,6 +90,4 @@ public class LoanDisbursementDetailApiResource {
return this.toApiJsonSerializer.serialize(settings, disbursementData, this.RESPONSE_DATA_PARAMETERS); return this.toApiJsonSerializer.serialize(settings, disbursementData, this.RESPONSE_DATA_PARAMETERS);
} }
} }
@@ -149,7 +149,7 @@ public class LoanTransactionsApiResource {
} else if (is(commandParam, "close")) { } else if (is(commandParam, "close")) {
final CommandWrapper commandRequest = builder.closeLoanTransaction(loanId).build(); final CommandWrapper commandRequest = builder.closeLoanTransaction(loanId).build();
result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
}else if (is(commandParam, "undowriteoff")) { } else if (is(commandParam, "undowriteoff")) {
final CommandWrapper commandRequest = builder.undoWriteOffLoanTransaction(loanId).build(); final CommandWrapper commandRequest = builder.undoWriteOffLoanTransaction(loanId).build();
result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
} }

Some files were not shown because too many files have changed in this diff Show More