Merge pull request #2 from markusgeiss/develop
Cleanup and adding daily accrual beat
diff --git a/api/src/main/java/io/mifos/deposit/api/v1/definition/domain/DividendDistribution.java b/api/src/main/java/io/mifos/deposit/api/v1/definition/domain/DividendDistribution.java
index 3186deb..01c9a12 100644
--- a/api/src/main/java/io/mifos/deposit/api/v1/definition/domain/DividendDistribution.java
+++ b/api/src/main/java/io/mifos/deposit/api/v1/definition/domain/DividendDistribution.java
@@ -15,12 +15,15 @@
*/
package io.mifos.deposit.api.v1.definition.domain;
+import io.mifos.core.lang.DateOfBirth;
import org.hibernate.validator.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
public class DividendDistribution {
- @NotBlank
- private String dueDate;
+ @NotNull
+ private DateOfBirth dueDate;
@NotBlank
private String dividendRate;
@@ -28,11 +31,11 @@
super();
}
- public String getDueDate() {
+ public DateOfBirth getDueDate() {
return this.dueDate;
}
- public void setDueDate(final String dueDate) {
+ public void setDueDate(final DateOfBirth dueDate) {
this.dueDate = dueDate;
}
@@ -51,13 +54,13 @@
final DividendDistribution that = (DividendDistribution) o;
- if (!dueDate.equals(that.dueDate)) return false;
+ if (!dueDate.toLocalDate().isEqual(that.dueDate.toLocalDate())) return false;
return dividendRate.equals(that.dividendRate);
}
@Override
public int hashCode() {
- int result = dueDate.hashCode();
+ int result = dueDate.toLocalDate().hashCode();
result = 31 * result + dividendRate.hashCode();
return result;
}
diff --git a/component-test/src/main/java/io/mifos/deposit/TestDividendDistribution.java b/component-test/src/main/java/io/mifos/deposit/TestDividendDistribution.java
index e6360ed..27f2410 100644
--- a/component-test/src/main/java/io/mifos/deposit/TestDividendDistribution.java
+++ b/component-test/src/main/java/io/mifos/deposit/TestDividendDistribution.java
@@ -18,6 +18,7 @@
import io.mifos.accounting.api.v1.domain.Account;
import io.mifos.accounting.api.v1.domain.AccountType;
import io.mifos.accounting.api.v1.domain.JournalEntry;
+import io.mifos.core.lang.DateOfBirth;
import io.mifos.deposit.api.v1.EventConstants;
import io.mifos.deposit.api.v1.definition.domain.DividendDistribution;
import io.mifos.deposit.api.v1.definition.domain.ProductDefinition;
@@ -74,7 +75,11 @@
.when(super.accountingServiceSpy).findAccount(shareAccount.getIdentifier());
final DividendDistribution dividendDistribution = new DividendDistribution();
- dividendDistribution.setDueDate("2017-07-31Z");
+ final DateOfBirth dueDate = new DateOfBirth();
+ dueDate.setYear(2017);
+ dueDate.setMonth(7);
+ dueDate.setDay(31);
+ dividendDistribution.setDueDate(dueDate);
dividendDistribution.setDividendRate("2.5");
this.depositAccountManager.dividendDistribution(productDefinition.getIdentifier(), dividendDistribution);
diff --git a/component-test/src/main/java/io/mifos/deposit/TestProductInstance.java b/component-test/src/main/java/io/mifos/deposit/TestProductInstance.java
index d023ee9..cb875e5 100644
--- a/component-test/src/main/java/io/mifos/deposit/TestProductInstance.java
+++ b/component-test/src/main/java/io/mifos/deposit/TestProductInstance.java
@@ -322,8 +322,8 @@
super.depositAccountManager.fetchPossibleTransactionTypes(productInstance.getCustomerIdentifier());
Assert.assertFalse(availableTransactionTypesAfterActivation.isEmpty());
- Assert.assertTrue(availableTransactionTypesAfterActivation.size() == 4);
- final HashSet<String> expectedTransactionTypes = Sets.newHashSet("ACCC", "ACCT", "CDPT", "CWDL");
+ Assert.assertTrue(availableTransactionTypesAfterActivation.size() == 5);
+ final HashSet<String> expectedTransactionTypes = Sets.newHashSet("ACCC", "ACCT", "CDPT", "CWDL", "CCHQ");
availableTransactionTypesAfterActivation.forEach(availableTransactionType ->
expectedTransactionTypes.remove(availableTransactionType.getTransactionType())
);
diff --git a/service/src/main/java/io/mifos/deposit/service/DepositAccountManagementConfiguration.java b/service/src/main/java/io/mifos/deposit/service/DepositAccountManagementConfiguration.java
index 0500302..f3f97cf 100644
--- a/service/src/main/java/io/mifos/deposit/service/DepositAccountManagementConfiguration.java
+++ b/service/src/main/java/io/mifos/deposit/service/DepositAccountManagementConfiguration.java
@@ -23,6 +23,7 @@
import io.mifos.core.lang.config.EnableServiceException;
import io.mifos.core.lang.config.EnableTenantContext;
import io.mifos.core.mariadb.config.EnableMariaDB;
+import io.mifos.rhythm.api.v1.client.RhythmManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -47,7 +48,8 @@
@EnableAnubis
@EnableServiceException
@EnableFeignClients(clients = {
- LedgerManager.class
+ LedgerManager.class,
+ RhythmManager.class
})
@ComponentScan({
"io.mifos.deposit.service.rest",
diff --git a/service/src/main/java/io/mifos/deposit/service/internal/command/handler/MigrationAggregate.java b/service/src/main/java/io/mifos/deposit/service/internal/command/handler/MigrationAggregate.java
index 436cf42..524b6a8 100644
--- a/service/src/main/java/io/mifos/deposit/service/internal/command/handler/MigrationAggregate.java
+++ b/service/src/main/java/io/mifos/deposit/service/internal/command/handler/MigrationAggregate.java
@@ -23,6 +23,7 @@
import io.mifos.deposit.api.v1.EventConstants;
import io.mifos.deposit.service.ServiceConstants;
import io.mifos.deposit.service.internal.command.MigrationCommand;
+import io.mifos.deposit.service.internal.service.helper.RhythmService;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -37,17 +38,20 @@
private final DataSource dataSource;
private final FlywayFactoryBean flywayFactoryBean;
private final ApplicationName applicationName;
+ private final RhythmService rhythmService;
@Autowired
public MigrationAggregate(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
final DataSource dataSource,
final FlywayFactoryBean flywayFactoryBean,
- final ApplicationName applicationName) {
+ final ApplicationName applicationName,
+ final RhythmService rhythmService) {
super();
this.logger = logger;
this.dataSource = dataSource;
this.flywayFactoryBean = flywayFactoryBean;
this.applicationName = applicationName;
+ this.rhythmService = rhythmService;
}
@CommandHandler
@@ -57,6 +61,8 @@
this.logger.info("Starting migration for deposit account management version: {}.", applicationName.getVersionString());
this.flywayFactoryBean.create(this.dataSource).migrate();
+ this.rhythmService.setBeat();
+
this.logger.info("Migration finished.");
return this.applicationName.getVersionString();
}
diff --git a/service/src/main/java/io/mifos/deposit/service/internal/command/handler/ProductDefinitionAggregate.java b/service/src/main/java/io/mifos/deposit/service/internal/command/handler/ProductDefinitionAggregate.java
index 3e51c69..788c4c4 100644
--- a/service/src/main/java/io/mifos/deposit/service/internal/command/handler/ProductDefinitionAggregate.java
+++ b/service/src/main/java/io/mifos/deposit/service/internal/command/handler/ProductDefinitionAggregate.java
@@ -109,7 +109,7 @@
@CommandHandler
@EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.POST_PRODUCT_DEFINITION_COMMAND)
@Transactional
- public String activateProductdefintion(final ActivateProductDefinitionCommand activateProductDefinitionCommand) {
+ public String activateProductDefinition(final ActivateProductDefinitionCommand activateProductDefinitionCommand) {
final Optional<ProductDefinitionEntity> optionalProductDefinition = productDefinitionRepository.findByIdentifier(activateProductDefinitionCommand.identifier());
if (optionalProductDefinition.isPresent()) {
@@ -137,7 +137,7 @@
@CommandHandler
@EventEmitter(selectorName = EventConstants.SELECTOR_NAME, selectorValue = EventConstants.POST_PRODUCT_DEFINITION_COMMAND)
@Transactional
- public String deactivateProductdefintion(final DeactivateProductDefinitionCommand activateProductDefinitionCommand) {
+ public String deactivateProductDefinition(final DeactivateProductDefinitionCommand activateProductDefinitionCommand) {
final Optional<ProductDefinitionEntity> optionalProductDefinition = productDefinitionRepository.findByIdentifier(activateProductDefinitionCommand.identifier());
if (optionalProductDefinition.isPresent()) {
@@ -207,6 +207,7 @@
this.productDefinitionCommandRepository.delete(
this.productDefinitionCommandRepository.findByProductDefinition(productDefinitionEntity)
);
+ this.productDefinitionCommandRepository.flush();
this.deleteDependingEntities(productDefinitionEntity);
diff --git a/service/src/main/java/io/mifos/deposit/service/internal/mapper/DividendDistributionMapper.java b/service/src/main/java/io/mifos/deposit/service/internal/mapper/DividendDistributionMapper.java
index 7c01a8f..6503836 100644
--- a/service/src/main/java/io/mifos/deposit/service/internal/mapper/DividendDistributionMapper.java
+++ b/service/src/main/java/io/mifos/deposit/service/internal/mapper/DividendDistributionMapper.java
@@ -17,6 +17,7 @@
import io.mifos.core.api.util.UserContextHolder;
import io.mifos.core.lang.DateConverter;
+import io.mifos.core.lang.DateOfBirth;
import io.mifos.deposit.api.v1.definition.domain.DividendDistribution;
import io.mifos.deposit.service.internal.repository.DividendDistributionEntity;
import io.mifos.deposit.service.internal.repository.ProductDefinitionEntity;
@@ -36,7 +37,7 @@
final DividendDistributionEntity dividendDistributionEntity = new DividendDistributionEntity();
dividendDistributionEntity.setProductDefinition(productDefinitionEntity);
- final Date dueDate = Date.valueOf(DateConverter.dateFromIsoString(dividendDistribution.getDueDate()));
+ final Date dueDate = Date.valueOf(dividendDistribution.getDueDate().toLocalDate());
dividendDistributionEntity.setDueDate(dueDate);
dividendDistributionEntity.setRate(Double.valueOf(dividendDistribution.getDividendRate()));
dividendDistributionEntity.setCreatedOn(LocalDateTime.now(Clock.systemUTC()));
@@ -49,7 +50,7 @@
final DividendDistribution dividendDistribution = new DividendDistribution();
dividendDistribution.setDividendRate(dividendDistributionEntity.getRate().toString());
- dividendDistribution.setDueDate(DateConverter.toIsoString(dividendDistributionEntity.getDueDate().toLocalDate()));
+ dividendDistribution.setDueDate(DateOfBirth.fromLocalDate(dividendDistributionEntity.getDueDate().toLocalDate()));
return dividendDistribution;
}
diff --git a/service/src/main/java/io/mifos/deposit/service/internal/service/helper/RhythmService.java b/service/src/main/java/io/mifos/deposit/service/internal/service/helper/RhythmService.java
new file mode 100644
index 0000000..dfa7d18
--- /dev/null
+++ b/service/src/main/java/io/mifos/deposit/service/internal/service/helper/RhythmService.java
@@ -0,0 +1,45 @@
+package io.mifos.deposit.service.internal.service.helper;
+
+import io.mifos.core.api.util.NotFoundException;
+import io.mifos.core.lang.ApplicationName;
+import io.mifos.deposit.service.ServiceConstants;
+import io.mifos.rhythm.api.v1.client.RhythmManager;
+import io.mifos.rhythm.api.v1.domain.Beat;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RhythmService {
+
+ private final Logger logger;
+ private final RhythmManager rhythmManager;
+ private final ApplicationName applicationName;
+
+ @Autowired
+ public RhythmService(@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger,
+ final RhythmManager rhythmManager,
+ final ApplicationName applicationName) {
+ super();
+ this.logger = logger;
+ this.rhythmManager = rhythmManager;
+ this.applicationName = applicationName;
+ }
+
+ public void setBeat() {
+ try {
+ rhythmManager.getBeat(this.applicationName.toString(), "deposit-interest-accrual");
+ } catch (final NotFoundException nfex) {
+ final Beat beat = new Beat();
+ beat.setIdentifier("deposit-interest-accrual");
+ beat.setAlignmentHour(22);
+
+ try {
+ this.rhythmManager.createBeat(applicationName.toString(), beat);
+ } catch (final Throwable th) {
+ this.logger.error("Error while creating beat: ", th);
+ }
+ }
+ }
+}
diff --git a/service/src/main/java/io/mifos/deposit/service/rest/ProductDefinitionRestController.java b/service/src/main/java/io/mifos/deposit/service/rest/ProductDefinitionRestController.java
index 7c8f875..dfd1c1f 100644
--- a/service/src/main/java/io/mifos/deposit/service/rest/ProductDefinitionRestController.java
+++ b/service/src/main/java/io/mifos/deposit/service/rest/ProductDefinitionRestController.java
@@ -258,7 +258,7 @@
}
}
- final LocalDate dueDate = DateConverter.dateFromIsoString(dividendDistribution.getDueDate());
+ final LocalDate dueDate = dividendDistribution.getDueDate().toLocalDate();
final Double amount = Double.valueOf(dividendDistribution.getDividendRate());
this.commandGateway.process(new DividendDistributionCommand(identifier, dueDate, amount));
diff --git a/service/src/main/java/io/mifos/deposit/service/rest/ProductInstanceRestController.java b/service/src/main/java/io/mifos/deposit/service/rest/ProductInstanceRestController.java
index 205fd91..0d0deb4 100644
--- a/service/src/main/java/io/mifos/deposit/service/rest/ProductInstanceRestController.java
+++ b/service/src/main/java/io/mifos/deposit/service/rest/ProductInstanceRestController.java
@@ -121,6 +121,9 @@
final AvailableTransactionType actionClose = new AvailableTransactionType();
actionClose.setTransactionType("ACCC");
availableTransactionTypes.add(actionClose);
+ final AvailableTransactionType actionCheque = new AvailableTransactionType();
+ actionCheque.setTransactionType("CCHQ");
+ availableTransactionTypes.add(actionCheque);
}
});
return ResponseEntity.ok(availableTransactionTypes);