http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeWritePlatformServiceJpaRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeWritePlatformServiceJpaRepositoryImpl.java index 1377e47..ba12c41 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/service/OfficeWritePlatformServiceJpaRepositoryImpl.java @@ -20,6 +20,9 @@ package org.apache.fineract.organisation.office.service; import java.util.Map; +import javax.persistence.PersistenceException; + +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; @@ -105,8 +108,12 @@ public class OfficeWritePlatformServiceJpaRepositoryImpl implements OfficeWriteP .withOfficeId(office.getId()) // .build(); } catch (final DataIntegrityViolationException dve) { - handleOfficeDataIntegrityIssues(command, dve); + handleOfficeDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleOfficeDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -148,8 +155,12 @@ public class OfficeWritePlatformServiceJpaRepositoryImpl implements OfficeWriteP .with(changes) // .build(); } catch (final DataIntegrityViolationException dve) { - handleOfficeDataIntegrityIssues(command, dve); + handleOfficeDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleOfficeDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -211,9 +222,8 @@ public class OfficeWritePlatformServiceJpaRepositoryImpl implements OfficeWriteP * Guaranteed to throw an exception no matter what the data integrity issue * is. */ - private void handleOfficeDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) { + private void handleOfficeDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) { - final Throwable realCause = dve.getMostSpecificCause(); if (realCause.getMessage().contains("externalid_org")) { final String externalId = command.stringValueOfParameterNamed("externalId"); throw new PlatformDataIntegrityException("error.msg.office.duplicate.externalId", "Office with externalId `" + externalId
http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java index 0ddf762..042c401 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java @@ -24,12 +24,12 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.UniqueConstraint; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_loanproduct_provisioning_mapping", uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id" }, name = "product_id") }) -public class LoanProductProvisionCriteria extends AbstractPersistable<Long> { +public class LoanProductProvisionCriteria extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false) @JoinColumn(name = "criteria_id", referencedColumnName = "id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java index 7492d12..2c79dd8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java @@ -27,11 +27,11 @@ import javax.persistence.Table; import javax.persistence.UniqueConstraint; import org.apache.fineract.infrastructure.core.api.JsonCommand; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_provision_category", uniqueConstraints = { @UniqueConstraint(columnNames = { "category_name" }, name = "category_name") }) -public class ProvisioningCategory extends AbstractPersistable<Long> { +public class ProvisioningCategory extends AbstractPersistableCustom<Long> { @Column(name = "category_name", nullable = false, unique = true) private String categoryName; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java index 320b3cc..e3de373 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java @@ -116,7 +116,7 @@ public class ProvisioningCriteria extends AbstractAuditableCustom<AppUser, Long> public void update(ProvisioningCriteriaDefinitionData data, GLAccount liability, GLAccount expense) { for(ProvisioningCriteriaDefinition def: provisioningCriteriaDefinition) { - if(data.getId() == def.getId()) { + if(data.getId().equals(def.getId())) { def.update(data.getMinAge(), data.getMaxAge(), data.getProvisioningPercentage(), liability, expense) ; break ; } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java index 01eb54b..28e0657 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java @@ -20,6 +20,7 @@ package org.apache.fineract.organisation.provisioning.domain; import java.math.BigDecimal; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.JoinColumn; @@ -27,11 +28,11 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.fineract.accounting.glaccount.domain.GLAccount; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_provisioning_criteria_definition") -public class ProvisioningCriteriaDefinition extends AbstractPersistable<Long> { +public class ProvisioningCriteriaDefinition extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false) @JoinColumn(name = "criteria_id", referencedColumnName = "id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java index 91dc24f..8f79236 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java @@ -20,6 +20,9 @@ package org.apache.fineract.organisation.provisioning.service; import java.util.Map; +import javax.persistence.PersistenceException; + +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; @@ -65,8 +68,12 @@ public class ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl implement return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(provisioningCategory.getId()) .build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -96,8 +103,12 @@ public class ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl implement } return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(categoryId).with(changes).build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -110,9 +121,8 @@ public class ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl implement * Guaranteed to throw an exception no matter what the data integrity issue * is. */ - private void handleDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) { + private void handleDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) { - final Throwable realCause = dve.getMostSpecificCause(); if (realCause.getMessage().contains("category_name")) { final String name = command.stringValueOfParameterNamed("category_name"); throw new PlatformDataIntegrityException("error.msg.provisioning.duplicate.categoryname", "Provisioning Cateory with name `" http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java index 0c7f599..1be4d72 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java @@ -23,6 +23,9 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import javax.persistence.PersistenceException; + +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.accounting.glaccount.domain.GLAccount; import org.apache.fineract.accounting.glaccount.domain.GLAccountRepository; import org.apache.fineract.accounting.provisioning.service.ProvisioningEntriesReadPlatformService; @@ -84,8 +87,12 @@ public class ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl implement this.provisioningCriteriaRepository.save(provisioningCriteria); return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(provisioningCriteria.getId()).build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -114,12 +121,16 @@ public class ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl implement final Map<String, Object> changes = provisioningCriteria.update(command, products) ; if(!changes.isEmpty()) { updateProvisioningCriteriaDefinitions(provisioningCriteria, command) ; - provisioningCriteriaRepository.save(provisioningCriteria) ; + provisioningCriteriaRepository.saveAndFlush(provisioningCriteria) ; } return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(provisioningCriteria.getId()).build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -153,9 +164,7 @@ public class ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl implement * Guaranteed to throw an exception no matter what the data integrity issue * is. */ - private void handleDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) { - - final Throwable realCause = dve.getMostSpecificCause(); + private void handleDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) { if (realCause.getMessage().contains("criteria_name")) { final String name = command.stringValueOfParameterNamed("criteria_name"); throw new PlatformDataIntegrityException("error.msg.provisioning.duplicate.criterianame", "Provisioning Criteria with name `" http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java index d616ab4..64f6f90 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java @@ -22,21 +22,29 @@ import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.UniqueConstraint; import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.EnumOptionData; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.infrastructure.documentmanagement.domain.Image; import org.apache.fineract.organisation.office.domain.Office; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_staff", uniqueConstraints = { @UniqueConstraint(columnNames = { "display_name" }, name = "display_name"), @UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE"), @UniqueConstraint(columnNames = { "mobile_no" }, name = "mobile_no_UNIQUE") }) -public class Staff extends AbstractPersistable<Long> { +public class Staff extends AbstractPersistableCustom<Long> { @Column(name = "firstname", length = 50) private String firstname; @@ -57,7 +65,7 @@ public class Staff extends AbstractPersistable<Long> { @JoinColumn(name = "office_id", nullable = false) private Office office; - @Column(name = "is_loan_officer ", nullable = false) + @Column(name = "is_loan_officer", nullable = false) private boolean loanOfficer; @Column(name = "organisational_role_enum", nullable = true) @@ -66,7 +74,7 @@ public class Staff extends AbstractPersistable<Long> { @Column(name = "is_active", nullable = false) private boolean active; - @Column(name = "joining_date", nullable = false) + @Column(name = "joining_date", nullable = true) @Temporal(TemporalType.DATE) private Date joiningDate; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffWritePlatformServiceJpaRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffWritePlatformServiceJpaRepositoryImpl.java index b10dd12..a46e90d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/service/StaffWritePlatformServiceJpaRepositoryImpl.java @@ -20,7 +20,10 @@ package org.apache.fineract.organisation.staff.service; import java.util.Map; +import javax.persistence.PersistenceException; + import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; @@ -74,8 +77,12 @@ public class StaffWritePlatformServiceJpaRepositoryImpl implements StaffWritePla .withEntityId(staff.getId()).withOfficeId(officeId) // .build(); } catch (final DataIntegrityViolationException dve) { - handleStaffDataIntegrityIssues(command, dve); + handleStaffDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleStaffDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -104,8 +111,12 @@ public class StaffWritePlatformServiceJpaRepositoryImpl implements StaffWritePla return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(staffId) .withOfficeId(staffForUpdate.officeId()).with(changesOnly).build(); } catch (final DataIntegrityViolationException dve) { - handleStaffDataIntegrityIssues(command, dve); + handleStaffDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleStaffDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -113,8 +124,7 @@ public class StaffWritePlatformServiceJpaRepositoryImpl implements StaffWritePla * Guaranteed to throw an exception no matter what the data integrity issue * is. */ - private void handleStaffDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) { - final Throwable realCause = dve.getMostSpecificCause(); + private void handleStaffDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) { if (realCause.getMessage().contains("external_id")) { http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java index cb2c16d..1d5922f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java @@ -22,7 +22,7 @@ import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.staff.domain.Staff; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import javax.persistence.*; import java.util.Date; @@ -40,7 +40,7 @@ import java.util.Map; @Entity @Table(name = "m_cashiers", uniqueConstraints = { @UniqueConstraint(name = "ux_cashiers_staff_teller", columnNames = { "staff_id", "teller_id" }) }) -public class Cashier extends AbstractPersistable<Long> { +public class Cashier extends AbstractPersistableCustom<Long> { // ManyToOne(fetch = FetchType.LAZY) // JoinColumn(name = "office_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java index 28ff20c..65af4dd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java @@ -22,7 +22,7 @@ package org.apache.fineract.organisation.teller.domain; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.organisation.office.domain.Office; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import javax.persistence.*; @@ -33,7 +33,7 @@ import java.util.Map; @Entity @Table(name = "m_cashier_transactions") -public class CashierTransaction extends AbstractPersistable<Long> { +public class CashierTransaction extends AbstractPersistableCustom<Long> { @Transient private Office office; @@ -58,10 +58,10 @@ public class CashierTransaction extends AbstractPersistable<Long> { @Column(name = "txn_note", nullable = true) private String txnNote; - @Column(name = "entity_type", nullable = false) + @Column(name = "entity_type", nullable = true) private String entityType; - @Column(name = "entity_id", nullable = false) + @Column(name = "entity_id", nullable = true) private Long entityId; @Temporal(TemporalType.TIMESTAMP) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java index ec3d0f3..b1fc196 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java @@ -39,24 +39,24 @@ import org.apache.fineract.accounting.glaccount.domain.GLAccount; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.organisation.office.domain.Office; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_tellers", uniqueConstraints = { @UniqueConstraint(name = "ux_tellers_name", columnNames = {"name"}) }) -public class Teller extends AbstractPersistable<Long> { +public class Teller extends AbstractPersistableCustom<Long> { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "office_id", nullable = false) private Office office; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "debit_account_id", nullable = false) + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "debit_account_id", nullable = true) private GLAccount debitAccount; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "credit_account_id", nullable = false) + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "credit_account_id", nullable = true) private GLAccount creditAccount; @Column(name = "name", nullable = false, length = 100) @@ -66,11 +66,11 @@ public class Teller extends AbstractPersistable<Long> { private String description; @Temporal(TemporalType.TIMESTAMP) - @Column(name = "valid_from", nullable = false) + @Column(name = "valid_from", nullable = true) private Date startDate; @Temporal(TemporalType.TIMESTAMP) - @Column(name = "valid_to", nullable = false) + @Column(name = "valid_to", nullable = true) private Date endDate; @Column(name = "state", nullable = false) @@ -79,9 +79,6 @@ public class Teller extends AbstractPersistable<Long> { @OneToMany(mappedBy = "teller", fetch = FetchType.LAZY) private Set<Cashier> cashiers; - @OneToMany(mappedBy = "teller", fetch = FetchType.LAZY) - private Set<TellerTransaction> tellerTransactions; - public Teller() { super(); } @@ -287,11 +284,8 @@ public class Teller extends AbstractPersistable<Long> { this.cashiers = cashiers; } - public Set<TellerTransaction> getTransactions() { - return tellerTransactions; - } - - public void setTransactions(Set<TellerTransaction> tellerTransactions) { - this.tellerTransactions = tellerTransactions; - } + public void initializeLazyCollections() { + this.office.getId(); + this.cashiers.size(); + } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerRepositoryWrapper.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerRepositoryWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerRepositoryWrapper.java index bb447bc..183bc3e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerRepositoryWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerRepositoryWrapper.java @@ -21,6 +21,7 @@ package org.apache.fineract.organisation.teller.domain; import org.apache.fineract.organisation.teller.exception.TellerNotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class TellerRepositoryWrapper { @@ -32,9 +33,23 @@ public class TellerRepositoryWrapper { this.repository = repository; } + @Transactional(readOnly=true) public Teller findOneWithNotFoundDetection(final Long id) { final Teller teller = this.repository.findOne(id); if (teller == null) { throw new TellerNotFoundException(id); } + teller.initializeLazyCollections(); return teller; } + + public Teller save(final Teller teller) { + return this.repository.save(teller) ; + } + + public Teller saveAndFlush(final Teller teller) { + return this.repository.saveAndFlush(teller) ; + } + + public void delete(final Teller teller) { + this.repository.delete(teller); + } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java index 1b4aea9..17be51c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java @@ -20,14 +20,14 @@ package org.apache.fineract.organisation.teller.domain; import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.portfolio.client.domain.Client; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import javax.persistence.*; import java.util.Date; @Entity @Table(name = "m_teller_transactions") -public class TellerTransaction extends AbstractPersistable<Long> { +public class TellerTransaction extends AbstractPersistableCustom<Long> { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "office_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerWritePlatformServiceJpaImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerWritePlatformServiceJpaImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerWritePlatformServiceJpaImpl.java index bbaad90..925fa11 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerWritePlatformServiceJpaImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerWritePlatformServiceJpaImpl.java @@ -21,6 +21,9 @@ package org.apache.fineract.organisation.teller.service; import java.util.Map; import java.util.Set; +import javax.persistence.PersistenceException; + +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.accounting.common.AccountingConstants.FINANCIAL_ACTIVITY; import org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccount; import org.apache.fineract.accounting.financialactivityaccount.domain.FinancialActivityAccountRepositoryWrapper; @@ -45,11 +48,9 @@ import org.apache.fineract.organisation.teller.domain.CashierTransaction; import org.apache.fineract.organisation.teller.domain.CashierTransactionRepository; import org.apache.fineract.organisation.teller.domain.CashierTxnType; import org.apache.fineract.organisation.teller.domain.Teller; -import org.apache.fineract.organisation.teller.domain.TellerRepository; import org.apache.fineract.organisation.teller.domain.TellerRepositoryWrapper; import org.apache.fineract.organisation.teller.exception.CashierExistForTellerException; import org.apache.fineract.organisation.teller.exception.CashierNotFoundException; -import org.apache.fineract.organisation.teller.exception.TellerNotFoundException; import org.apache.fineract.organisation.teller.serialization.TellerCommandFromApiJsonDeserializer; import org.apache.fineract.portfolio.client.domain.ClientTransaction; import org.apache.fineract.useradministration.domain.AppUser; @@ -67,7 +68,6 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer private final PlatformSecurityContext context; private final TellerCommandFromApiJsonDeserializer fromApiJsonDeserializer; - private final TellerRepository tellerRepository; private final TellerRepositoryWrapper tellerRepositoryWrapper; private final OfficeRepositoryWrapper officeRepositoryWrapper; private final StaffRepository staffRepository; @@ -78,14 +78,13 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer @Autowired public TellerWritePlatformServiceJpaImpl(final PlatformSecurityContext context, - final TellerCommandFromApiJsonDeserializer fromApiJsonDeserializer, final TellerRepository tellerRepository, + final TellerCommandFromApiJsonDeserializer fromApiJsonDeserializer, final TellerRepositoryWrapper tellerRepositoryWrapper, final OfficeRepositoryWrapper officeRepositoryWrapper, final StaffRepository staffRepository, CashierRepository cashierRepository, CashierTransactionRepository cashierTxnRepository, JournalEntryRepository glJournalEntryRepository, FinancialActivityAccountRepositoryWrapper financialActivityAccountRepositoryWrapper) { this.context = context; this.fromApiJsonDeserializer = fromApiJsonDeserializer; - this.tellerRepository = tellerRepository; this.tellerRepositoryWrapper = tellerRepositoryWrapper; this.officeRepositoryWrapper = officeRepositoryWrapper; this.staffRepository = staffRepository; @@ -111,7 +110,7 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer final Teller teller = Teller.fromJson(tellerOffice, command); // pre save to generate id for use in office hierarchy - this.tellerRepository.save(teller); + this.tellerRepositoryWrapper.save(teller); return new CommandProcessingResultBuilder() // .withCommandId(command.commandId()) // @@ -119,8 +118,12 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer .withOfficeId(teller.getOffice().getId()) // .build(); } catch (final DataIntegrityViolationException dve) { - handleTellerDataIntegrityIssues(command, dve); + handleTellerDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleTellerDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -140,7 +143,7 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer final Map<String, Object> changes = teller.update(tellerOffice, command); if (!changes.isEmpty()) { - this.tellerRepository.saveAndFlush(teller); + this.tellerRepositoryWrapper.saveAndFlush(teller); } return new CommandProcessingResultBuilder() // @@ -150,8 +153,12 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer .with(changes) // .build(); } catch (final DataIntegrityViolationException dve) { - handleTellerDataIntegrityIssues(command, dve); + handleTellerDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleTellerDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -163,15 +170,10 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer final Long userOfficeId = currentUser.getOffice().getId(); final Office userOffice = this.officeRepositoryWrapper.findOfficeHierarchy(userOfficeId); - final Teller tellerToReturn = this.tellerRepository.findOne(tellerId); - if (tellerToReturn != null) { - final Long tellerOfficeId = tellerToReturn.officeId(); - if (userOffice.doesNotHaveAnOfficeInHierarchyWithId(tellerOfficeId)) { throw new NoAuthorizationException( + final Teller tellerToReturn = this.tellerRepositoryWrapper.findOneWithNotFoundDetection(tellerId); + final Long tellerOfficeId = tellerToReturn.officeId(); + if (userOffice.doesNotHaveAnOfficeInHierarchyWithId(tellerOfficeId)) { throw new NoAuthorizationException( "User does not have sufficient priviledges to act on the provided office."); } - } else { - throw new TellerNotFoundException(tellerId); - } - return tellerToReturn; } @@ -188,7 +190,7 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer .equalsIgnoreCase(tellerId.toString())) { throw new CashierExistForTellerException(tellerId); } } - tellerRepository.delete(teller); + tellerRepositoryWrapper.delete(teller); return new CommandProcessingResultBuilder() // .withEntityId(teller.getId()) // .build(); @@ -199,9 +201,8 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer * Guaranteed to throw an exception no matter what the data integrity issue * is. */ - private void handleTellerDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) { + private void handleTellerDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) { - final Throwable realCause = dve.getMostSpecificCause(); if (realCause.getMessage().contains("m_tellers_name_unq")) { final String name = command.stringValueOfParameterNamed("name"); throw new PlatformDataIntegrityException("error.msg.teller.duplicate.name", "Teller with name `" + name + "` already exists", @@ -223,8 +224,7 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer Long minEndTime; String startTime = " "; String endTime = " "; - final Teller teller = this.tellerRepository.findOne(tellerId); - if (teller == null) { throw new TellerNotFoundException(tellerId); } + final Teller teller = this.tellerRepositoryWrapper.findOneWithNotFoundDetection(tellerId); final Office tellerOffice = teller.getOffice(); final Long staffId = command.longValueOfParameterNamed("staffId"); @@ -262,8 +262,12 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer .withSubEntityId(cashier.getId()) // .build(); } catch (final DataIntegrityViolationException dve) { - handleTellerDataIntegrityIssues(command, dve); + handleTellerDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleTellerDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -298,8 +302,12 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer .with(changes) // .build(); } catch (final DataIntegrityViolationException dve) { - handleTellerDataIntegrityIssues(command, dve); + handleTellerDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleTellerDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -321,8 +329,12 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer this.cashierRepository.delete(cashier); } catch (final DataIntegrityViolationException dve) { - handleTellerDataIntegrityIssues(command, dve); + handleTellerDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleTellerDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } return new CommandProcessingResultBuilder() // @@ -444,8 +456,12 @@ public class TellerWritePlatformServiceJpaImpl implements TellerWritePlatformSer .withSubEntityId(cashierTxn.getId()) // .build(); } catch (final DataIntegrityViolationException dve) { - handleTellerDataIntegrityIssues(command, dve); + handleTellerDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch (final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleTellerDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java index adeba4a..9562719 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java @@ -20,7 +20,7 @@ package org.apache.fineract.organisation.workingdays.domain; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.organisation.workingdays.api.WorkingDaysApiConstants; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import javax.persistence.Column; import javax.persistence.Entity; @@ -31,7 +31,7 @@ import java.util.Map; @Entity @Table(name = "m_working_days") -public class WorkingDays extends AbstractPersistable<Long> { +public class WorkingDays extends AbstractPersistableCustom<Long> { @Column(name = "recurrence", length = 100, nullable = true) private String recurrence; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java index 82574bb..0891397 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java @@ -26,11 +26,11 @@ import javax.persistence.Table; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_portfolio_account_associations") -public class AccountAssociations extends AbstractPersistable<Long> { +public class AccountAssociations extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "loan_account_id", nullable = true) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociationsRepository.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociationsRepository.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociationsRepository.java index 141a8bd..00266c4 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociationsRepository.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociationsRepository.java @@ -26,9 +26,9 @@ import org.springframework.data.repository.query.Param; public interface AccountAssociationsRepository extends JpaRepository<AccountAssociations, Long>, JpaSpecificationExecutor<AccountAssociations> { - @Query("from AccountAssociations aa where aa.loanAccount.id= :loanId and aa.associationType = :associationType") + @Query("select aa from AccountAssociations aa where aa.loanAccount.id= :loanId and aa.associationType = :associationType") AccountAssociations findByLoanIdAndType(@Param("loanId") Long loanId, @Param("associationType") Integer accountAssociationType); - @Query("from AccountAssociations aa where aa.savingsAccount.id= :savingsId and aa.associationType = :associationType") + @Query("select aa from AccountAssociations aa where aa.savingsAccount.id= :savingsId and aa.associationType = :associationType") AccountAssociations findBySavingsIdAndType(@Param("savingsId") Long savingsId, @Param("associationType") Integer accountAssociationType); } http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java index 3a19ce6..8ec66ca 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java @@ -35,11 +35,11 @@ import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.portfolio.client.domain.Client; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_account_transfer_details") -public class AccountTransferDetails extends AbstractPersistable<Long> { +public class AccountTransferDetails extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "from_office_id", nullable = false) @@ -77,9 +77,9 @@ public class AccountTransferDetails extends AbstractPersistable<Long> { private Integer transferType; @OneToMany(cascade = CascadeType.ALL, mappedBy = "accountTransferDetails", orphanRemoval = true, fetch=FetchType.EAGER) - private final List<AccountTransferTransaction> accountTransferTransactions = new ArrayList<>(); + private List<AccountTransferTransaction> accountTransferTransactions = new ArrayList<>(); - @OneToOne(mappedBy = "accountTransferDetails", cascade = CascadeType.ALL, optional = true, orphanRemoval = true, fetch = FetchType.LAZY) + @OneToOne(mappedBy = "accountTransferDetails", cascade = CascadeType.ALL, optional = true, orphanRemoval = true, fetch = FetchType.EAGER) private AccountTransferStandingInstruction accountTransferStandingInstruction; public static AccountTransferDetails savingsToSavingsTransfer(final Office fromOffice, final Client fromClient, http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferRepository.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferRepository.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferRepository.java index 8158cb8..e790c4c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferRepository.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferRepository.java @@ -29,15 +29,15 @@ import org.springframework.data.repository.query.Param; public interface AccountTransferRepository extends JpaRepository<AccountTransferTransaction, Long>, JpaSpecificationExecutor<AccountTransferTransaction> { - @Query("from AccountTransferTransaction att where att.accountTransferDetails.fromLoanAccount.id= :accountNumber and att.reversed=false") + @Query("select att from AccountTransferTransaction att where att.accountTransferDetails.fromLoanAccount.id= :accountNumber and att.reversed=false") List<AccountTransferTransaction> findByFromLoanId(@Param("accountNumber") Long accountNumber); - @Query("from AccountTransferTransaction att where (att.accountTransferDetails.fromLoanAccount.id= :accountNumber or att.accountTransferDetails.toLoanAccount.id=:accountNumber) and att.reversed=false order by att.id desc") + @Query("select att from AccountTransferTransaction att where (att.accountTransferDetails.fromLoanAccount.id= :accountNumber or att.accountTransferDetails.toLoanAccount.id=:accountNumber) and att.reversed=false order by att.id desc") List<AccountTransferTransaction> findAllByLoanId(@Param("accountNumber") Long accountNumber); - @Query("from AccountTransferTransaction att where att.toLoanTransaction.id= :loanTransactionId and att.reversed=false") + @Query("select att from AccountTransferTransaction att where att.toLoanTransaction.id= :loanTransactionId and att.reversed=false") AccountTransferTransaction findByToLoanTransactionId(@Param("loanTransactionId") Long loanTransactionId); - @Query("from AccountTransferTransaction att where att.fromLoanTransaction.id IN :loanTransactions and att.reversed=false") + @Query("select att from AccountTransferTransaction att where att.fromLoanTransaction.id IN :loanTransactions and att.reversed=false") List<AccountTransferTransaction> findByFromLoanTransactions(@Param("loanTransactions") Collection<Long> loanTransactions); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java index 4249338..2335789 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java @@ -54,11 +54,11 @@ import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidati import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType; import org.joda.time.LocalDate; import org.joda.time.MonthDay; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_account_transfer_standing_instructions", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name") }) -public class AccountTransferStandingInstruction extends AbstractPersistable<Long> { +public class AccountTransferStandingInstruction extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "account_transfer_details_id", nullable = true) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java index bcec4f4..d5bbd30 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java @@ -35,11 +35,11 @@ import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction; import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_account_transfer_transaction") -public class AccountTransferTransaction extends AbstractPersistable<Long> { +public class AccountTransferTransaction extends AbstractPersistableCustom<Long> { @ManyToOne @JoinColumn(name = "account_transfer_details_id", nullable = true) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java index 6143a5b..85c39a2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java @@ -33,17 +33,17 @@ import javax.persistence.Table; import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.core.api.JsonCommand; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.client.domain.ClientAddress; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; -import org.springframework.data.jpa.domain.AbstractPersistable; import com.google.gson.JsonObject; @Entity @Table(name = "m_address") -public class Address extends AbstractPersistable<Long> { +public class Address extends AbstractPersistableCustom<Long> { /* * @OneToMany(mappedBy = "address", cascade = CascadeType.ALL) private http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java index 8afcb93..7353c7e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java @@ -22,11 +22,11 @@ import javax.persistence.Entity; import javax.persistence.Table; import org.apache.fineract.infrastructure.core.api.JsonCommand; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_field_configuration") -public class FieldConfiguration extends AbstractPersistable<Long> { +public class FieldConfiguration extends AbstractPersistableCustom<Long> { private String entity; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java index 93dc0bf..e9d2cf4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java @@ -29,11 +29,11 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_calendar_history") -public class CalendarHistory extends AbstractPersistable<Long> { +public class CalendarHistory extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false) @JoinColumn(name = "calendar_id", referencedColumnName = "id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java index 6ae6c60..b9ce4e3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java @@ -25,11 +25,11 @@ import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_calendar_instance") -public class CalendarInstance extends AbstractPersistable<Long> { +public class CalendarInstance extends AbstractPersistableCustom<Long> { @ManyToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "calendar_id", nullable = false) http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstanceRepository.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstanceRepository.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstanceRepository.java index 8fe3c24..8b1ea7e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstanceRepository.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstanceRepository.java @@ -44,13 +44,13 @@ public interface CalendarInstanceRepository extends JpaRepository<CalendarInstan */ CalendarInstance findByEntityIdAndEntityTypeIdAndCalendarTypeId(Long entityId, Integer entityTypeId, Integer calendarTypeId); - @Query("from CalendarInstance ci where ci.entityId = :entityId and ci.entityTypeId = :entityTypeId") + @Query("select ci from CalendarInstance ci where ci.entityId = :entityId and ci.entityTypeId = :entityTypeId") CalendarInstance findCalendarInstaneByEntityId(@Param("entityId") Long entityId, @Param("entityTypeId") Integer entityTypeId); Collection<CalendarInstance> findByCalendarIdAndEntityTypeId(Long calendarId, Integer entityTypeId); /** Should use in clause, can I do it without creating a new class? **/ - @Query("from CalendarInstance ci where ci.entityId in (select id from Loan loan where loan.client.id = :clientId and loan.group.id = :groupId and (loan.loanStatus = 100 or loan.loanStatus = 200 or loan.loanStatus = 300)) and ci.entityTypeId = 3") + @Query("select ci from CalendarInstance ci where ci.entityId in (select id from Loan loan where loan.client.id = :clientId and loan.group.id = :groupId and (loan.loanStatus = 100 or loan.loanStatus = 200 or loan.loanStatus = 300)) and ci.entityTypeId = 3") List<CalendarInstance> findCalendarInstancesForActiveLoansByGroupIdAndClientId(@Param("groupId") Long groupId, @Param("clientId") Long clientId); http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java index 3e20582..19c46b3 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java @@ -52,11 +52,11 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.apache.fineract.portfolio.tax.domain.TaxGroup; import org.joda.time.MonthDay; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_charge", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name") }) -public class Charge extends AbstractPersistable<Long> { +public class Charge extends AbstractPersistableCustom<Long> { @Column(name = "name", length = 100) private String name; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java index 3366a24..8d438cc 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java @@ -89,7 +89,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService public Collection<ChargeData> retrieveAllCharges() { final ChargeMapper rm = new ChargeMapper(); - String sql = "select " + rm.chargeSchema() + " where c.is_deleted=0 "; + String sql = "select " + rm.chargeSchema() + " where c.is_deleted=false "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); @@ -102,7 +102,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService public Collection<ChargeData> retrieveAllChargesForCurrency(String currencyCode) { final ChargeMapper rm = new ChargeMapper(); - String sql = "select " + rm.chargeSchema() + " where c.is_deleted=0 and c.currency_code='" + currencyCode + "' "; + String sql = "select " + rm.chargeSchema() + " where c.is_deleted=false and c.currency_code='" + currencyCode + "' "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); @@ -116,10 +116,11 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService try { final ChargeMapper rm = new ChargeMapper(); - String sql = "select " + rm.chargeSchema() + " where c.id = ? and c.is_deleted=0 "; + String sql = "select " + rm.chargeSchema() + " where c.id = ? and c.is_deleted=false "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); + sql = sql + " ;" ; return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { chargeId }); } catch (final EmptyResultDataAccessException e) { throw new ChargeNotFoundException(chargeId); @@ -162,7 +163,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService public Collection<ChargeData> retrieveLoanProductCharges(final Long loanProductId) { final ChargeMapper rm = new ChargeMapper(); - String sql = "select " + rm.loanProductChargeSchema() + " where c.is_deleted=0 and c.is_active=1 and plc.product_loan_id=? "; + String sql = "select " + rm.loanProductChargeSchema() + " where c.is_deleted=false and c.is_active=true and plc.product_loan_id=? "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); @@ -175,7 +176,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService final ChargeMapper rm = new ChargeMapper(); String sql = "select " + rm.loanProductChargeSchema() - + " where c.is_deleted=0 and c.is_active=1 and plc.product_loan_id=? and c.charge_time_enum=? "; + + " where c.is_deleted=false and c.is_active=true and plc.product_loan_id=? and c.charge_time_enum=? "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); return this.jdbcTemplate.query(sql, rm, new Object[] { loanProductId, chargeTime.getValue() }); @@ -186,7 +187,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService final ChargeMapper rm = new ChargeMapper(); Object[] params = new Object[] { ChargeAppliesTo.LOAN.getValue() }; String sql = "select " + rm.chargeSchema() - + " where c.is_deleted=0 and c.is_active=1 and c.is_penalty=0 and c.charge_applies_to_enum=? "; + + " where c.is_deleted=false and c.is_active=true and c.is_penalty=false and c.charge_applies_to_enum=? "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); sql += " order by c.name "; @@ -202,7 +203,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService paramMap.put("chargeAppliesTo", ChargeAppliesTo.LOAN.getValue()); processChargeExclusionsForLoans(excludeChargeTimes, excludeClause); String sql = "select " + rm.chargeSchema() + " join m_loan la on la.currency_code = c.currency_code" + " where la.id=:loanId" - + " and c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=:chargeAppliesTo" + excludeClause + " "; + + " and c.is_deleted=false and c.is_active=true and c.charge_applies_to_enum=:chargeAppliesTo" + excludeClause + " "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); sql += " order by c.name "; return this.namedParameterJdbcTemplate.query(sql, paramMap, rm); @@ -236,7 +237,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService paramMap.put("chargeAppliesTo", ChargeAppliesTo.LOAN.getValue()); processChargeExclusionsForLoans(excludeChargeTimes, excludeClause); String sql = "select " + rm.chargeSchema() + " join m_product_loan lp on lp.currency_code = c.currency_code" - + " where lp.id=:productId" + " and c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=:chargeAppliesTo" + + " where lp.id=:productId" + " and c.is_deleted=false and c.is_active=true and c.charge_applies_to_enum=:chargeAppliesTo" + excludeClause + " "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); sql += " order by c.name "; @@ -249,7 +250,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService final ChargeMapper rm = new ChargeMapper(); String sql = "select " + rm.chargeSchema() - + " where c.is_deleted=0 and c.is_active=1 and c.is_penalty=1 and c.charge_applies_to_enum=? "; + + " where c.is_deleted=false and c.is_active=true and c.is_penalty=true and c.charge_applies_to_enum=? "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); sql += " order by c.name "; return this.jdbcTemplate.query(sql, rm, new Object[] { ChargeAppliesTo.LOAN.getValue() }); @@ -372,10 +373,10 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService public Collection<ChargeData> retrieveSavingsProductApplicableCharges(final boolean feeChargesOnly) { final ChargeMapper rm = new ChargeMapper(); - String sql = "select " + rm.chargeSchema() + " where c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=? "; + String sql = "select " + rm.chargeSchema() + " where c.is_deleted=false and c.is_active=true and c.charge_applies_to_enum=? "; if (feeChargesOnly) { sql = "select " + rm.chargeSchema() - + " where c.is_deleted=0 and c.is_active=1 and c.is_penalty=0 and c.charge_applies_to_enum=? "; + + " where c.is_deleted=false and c.is_active=true and c.is_penalty=false and c.charge_applies_to_enum=? "; } sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); sql += " order by c.name "; @@ -388,7 +389,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService final ChargeMapper rm = new ChargeMapper(); String sql = "select " + rm.chargeSchema() - + " where c.is_deleted=0 and c.is_active=1 and c.is_penalty=1 and c.charge_applies_to_enum=? "; + + " where c.is_deleted=false and c.is_active=true and c.is_penalty=true and c.charge_applies_to_enum=? "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); sql += " order by c.name "; return this.jdbcTemplate.query(sql, rm, new Object[] { ChargeAppliesTo.SAVINGS.getValue() }); @@ -408,7 +409,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService public Collection<ChargeData> retrieveShareProductCharges(final Long shareProductId) { final ChargeMapper rm = new ChargeMapper(); - String sql = "select " + rm.shareProductChargeSchema() + " where c.is_deleted=0 and c.is_active=1 and mspc.product_id=? "; + String sql = "select " + rm.shareProductChargeSchema() + " where c.is_deleted=false and c.is_active=true and mspc.product_id=? "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); return this.jdbcTemplate.query(sql, rm, new Object[] { shareProductId }); @@ -420,7 +421,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService final ChargeMapper rm = new ChargeMapper(); String sql = "select " + rm.chargeSchema() + " join m_savings_account sa on sa.currency_code = c.currency_code" - + " where c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=? " + " and sa.id = ?"; + + " where c.is_deleted=false and c.is_active=true and c.charge_applies_to_enum=? " + " and sa.id = ?"; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); return this.jdbcTemplate.query(sql, rm, new Object[] { ChargeAppliesTo.SAVINGS.getValue(), savingsAccountId }); @@ -430,7 +431,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService @Override public Collection<ChargeData> retrieveAllChargesApplicableToClients() { final ChargeMapper rm = new ChargeMapper(); - String sql = "select " + rm.chargeSchema() + " where c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=? "; + String sql = "select " + rm.chargeSchema() + " where c.is_deleted=false and c.is_active=true and c.charge_applies_to_enum=? "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); sql += " order by c.name "; @@ -440,7 +441,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService @Override public Collection<ChargeData> retrieveSharesApplicableCharges() { final ChargeMapper rm = new ChargeMapper(); - String sql = "select " + rm.chargeSchema() + " where c.is_deleted=0 and c.is_active=1 and c.charge_applies_to_enum=? "; + String sql = "select " + rm.chargeSchema() + " where c.is_deleted=false and c.is_active=true and c.charge_applies_to_enum=? "; sql += addInClauseToSQL_toLimitChargesMappedToOffice_ifOfficeSpecificProductsEnabled(); sql += " order by c.name "; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformServiceJpaRepositoryImpl.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformServiceJpaRepositoryImpl.java index fdc14cf..bfa2c5d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeWritePlatformServiceJpaRepositoryImpl.java @@ -21,8 +21,10 @@ package org.apache.fineract.portfolio.charge.service; import java.util.Collection; import java.util.Map; +import javax.persistence.PersistenceException; import javax.sql.DataSource; +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.accounting.glaccount.domain.GLAccount; import org.apache.fineract.accounting.glaccount.domain.GLAccountRepositoryWrapper; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -31,7 +33,6 @@ import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuild import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityAccessType; -import org.apache.fineract.infrastructure.entityaccess.domain.FineractEntityType; import org.apache.fineract.infrastructure.entityaccess.service.FineractEntityAccessUtil; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.portfolio.charge.api.ChargesApiConstants; @@ -117,9 +118,13 @@ public class ChargeWritePlatformServiceJpaRepositoryImpl implements ChargeWriteP FineractEntityAccessType.OFFICE_ACCESS_TO_CHARGES, charge.getId()); return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(charge.getId()).build(); - } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + }catch (final DataIntegrityViolationException dve) { + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch(final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -184,8 +189,12 @@ public class ChargeWritePlatformServiceJpaRepositoryImpl implements ChargeWriteP return new CommandProcessingResultBuilder().withCommandId(command.commandId()).withEntityId(chargeId).with(changes).build(); } catch (final DataIntegrityViolationException dve) { - handleDataIntegrityIssues(command, dve); + handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); return CommandProcessingResult.empty(); + }catch(final PersistenceException dve) { + Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; + handleDataIntegrityIssues(command, throwable, dve); + return CommandProcessingResult.empty(); } } @@ -217,9 +226,8 @@ public class ChargeWritePlatformServiceJpaRepositoryImpl implements ChargeWriteP * Guaranteed to throw an exception no matter what the data integrity issue * is. */ - private void handleDataIntegrityIssues(final JsonCommand command, final DataIntegrityViolationException dve) { + private void handleDataIntegrityIssues(final JsonCommand command, final Throwable realCause, final Exception dve) { - final Throwable realCause = dve.getMostSpecificCause(); if (realCause.getMessage().contains("name")) { final String name = command.stringValueOfParameterNamed("name"); throw new PlatformDataIntegrityException("error.msg.charge.duplicate.name", "Charge with name `" + name + "` already exists", http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java index a857b4b..0530452 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java @@ -57,12 +57,12 @@ import org.apache.fineract.portfolio.group.domain.Group; import org.apache.fineract.useradministration.domain.AppUser; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormatter; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_client", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_no" }, name = "account_no_UNIQUE"), // @UniqueConstraint(columnNames = { "mobile_no" }, name = "mobile_no_UNIQUE") }) -public final class Client extends AbstractPersistable<Long> { +public final class Client extends AbstractPersistableCustom<Long> { @Column(name = "account_no", length = 20, unique = true, nullable = false) private String accountNumber; @@ -153,7 +153,7 @@ public final class Client extends AbstractPersistable<Long> { @Temporal(TemporalType.DATE) private Date rejectionDate; - @ManyToOne(optional = true) + @ManyToOne(optional = true, fetch=FetchType.LAZY) @JoinColumn(name = "rejectedon_userid", nullable = true) private AppUser rejectedBy; @@ -165,7 +165,7 @@ public final class Client extends AbstractPersistable<Long> { @Temporal(TemporalType.DATE) private Date withdrawalDate; - @ManyToOne(optional = true) + @ManyToOne(optional = true, fetch=FetchType.LAZY) @JoinColumn(name = "withdraw_on_userid", nullable = true) private AppUser withdrawnBy; @@ -173,11 +173,11 @@ public final class Client extends AbstractPersistable<Long> { @Temporal(TemporalType.DATE) private Date reactivateDate; - @ManyToOne(optional = true) + @ManyToOne(optional = true, fetch=FetchType.LAZY) @JoinColumn(name = "reactivated_on_userid", nullable = true) private AppUser reactivatedBy; - @ManyToOne(optional = true) + @ManyToOne(optional = true, fetch=FetchType.LAZY) @JoinColumn(name = "closedon_userid", nullable = true) private AppUser closedBy; @@ -185,7 +185,7 @@ public final class Client extends AbstractPersistable<Long> { @Temporal(TemporalType.DATE) private Date submittedOnDate; - @ManyToOne(optional = true) + @ManyToOne(optional = true, fetch=FetchType.LAZY) @JoinColumn(name = "submittedon_userid", nullable = true) private AppUser submittedBy; @@ -193,11 +193,11 @@ public final class Client extends AbstractPersistable<Long> { @Temporal(TemporalType.DATE) private Date updatedOnDate; - @ManyToOne(optional = true) + @ManyToOne(optional = true, fetch=FetchType.LAZY) @JoinColumn(name = "updated_by", nullable = true) private AppUser updatedBy; - @ManyToOne(optional = true) + @ManyToOne(optional = true, fetch=FetchType.LAZY) @JoinColumn(name = "activatedon_userid", nullable = true) private AppUser activatedBy; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java index a9624b5..5eff173 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java @@ -25,12 +25,12 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.fineract.infrastructure.codes.domain.CodeValue; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.address.domain.Address; -import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Table(name = "m_client_address") -public class ClientAddress extends AbstractPersistable<Long> { +public class ClientAddress extends AbstractPersistableCustom<Long> { @ManyToOne private Client client; http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9d7f1c21/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java ---------------------------------------------------------------------- diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java index 1410c5f..2374336 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java @@ -39,11 +39,11 @@ import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.apache.fineract.portfolio.client.api.ClientApiConstants; import org.joda.time.LocalDate; -import org.springframework.data.jpa.domain.AbstractPersistable; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; @Entity @Table(name = "m_client_charge") -public class ClientCharge extends AbstractPersistable<Long> { +public class ClientCharge extends AbstractPersistableCustom<Long> { @ManyToOne(optional = false) @JoinColumn(name = "client_id", referencedColumnName = "id", nullable = false)