From 0b9d76582f19233d6ef4cbc9c0198942e962ee17 Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Wed, 16 Jan 2013 17:01:00 +0000 Subject: [PATCH] fix client update to support data integrity errors on accountNo and externalId. --- .../portfolio/client/domain/Client.java | 13 +++++++------ ...ientWritePlatformServiceJpaRepositoryImpl.java | 15 ++++++++++++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java index 6b0ad9cd5..30da25ebd 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/domain/Client.java @@ -14,6 +14,7 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; +import javax.persistence.UniqueConstraint; import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; @@ -26,7 +27,7 @@ import org.mifosplatform.organisation.office.domain.Office; import org.springframework.data.jpa.domain.AbstractPersistable; @Entity -@Table(name = "m_client") +@Table(name = "m_client", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_no" }, name = "account_no_UNIQUE")}) public class Client extends AbstractPersistable { @Column(name = "account_no", length = 20, unique = true, nullable = false) @@ -85,8 +86,8 @@ public class Client extends AbstractPersistable { // } - private Client(final Office office, final String accountNo, final String firstname, final String middlename, final String lastname, final String fullname, - final LocalDate openingDate, final String externalId) { + private Client(final Office office, final String accountNo, final String firstname, final String middlename, final String lastname, + final String fullname, final LocalDate openingDate, final String externalId) { if (StringUtils.isBlank(accountNo)) { this.accountNumber = new RandomPasswordGenerator(19).generate(); this.accountNumberRequiresAutoGeneration = true; @@ -123,15 +124,15 @@ public class Client extends AbstractPersistable { } else { this.fullname = null; } - + deriveDisplayName(); validateNameParts(); } - + public boolean isAccountNumberRequiresAutoGeneration() { return this.accountNumberRequiresAutoGeneration; } - + public void setAccountNumberRequiresAutoGeneration(boolean accountNumberRequiresAutoGeneration) { this.accountNumberRequiresAutoGeneration = accountNumberRequiresAutoGeneration; } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java index 87fc68d19..78d57488c 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java @@ -107,6 +107,10 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP final String externalId = command.stringValueOfParameterNamed("externalId"); throw new PlatformDataIntegrityException("error.msg.client.duplicate.externalId", "Client with externalId `" + externalId + "` already exists", "externalId", externalId); + } else if (realCause.getMessage().contains("account_no_UNIQUE")) { + final String accountNo = command.stringValueOfParameterNamed("accountNo"); + throw new PlatformDataIntegrityException("error.msg.client.duplicate.accountNo", "Client with accountNo `" + accountNo + + "` already exists", "accountNo", accountNo); } logAsErrorUnexpectedDataIntegrityException(dve); @@ -173,11 +177,16 @@ public class ClientWritePlatformServiceJpaRepositoryImpl implements ClientWriteP } if (!changes.isEmpty()) { - this.clientRepository.save(clientForUpdate); + this.clientRepository.saveAndFlush(clientForUpdate); } - return new CommandProcessingResultBuilder().withCommandId(command.commandId()) - .withOfficeId(clientForUpdate.getOffice().getId()).withClientId(clientId).withEntityId(clientId).with(changes).build(); + return new CommandProcessingResultBuilder() // + .withCommandId(command.commandId()) // + .withOfficeId(clientForUpdate.getOffice().getId()) // + .withClientId(clientId) // + .withEntityId(clientId) // + .with(changes) // + .build(); } catch (DataIntegrityViolationException dve) { handleDataIntegrityIssues(command, dve); return new CommandProcessingResult(Long.valueOf(-1));