adding relationship for guarantor + adding wrappers
This commit is contained in:
+34
@@ -0,0 +1,34 @@
|
||||
-- Adding new system defined code for tracking guarantor relation ship type
|
||||
insert into m_code (code_name,is_system_defined) values ('GuarantorRelationship',1);
|
||||
|
||||
-- Adding a few Default Guarantor Relationships
|
||||
|
||||
insert into m_code_value (code_id,code_value,order_position)
|
||||
select id,"Spouse",0
|
||||
from m_code
|
||||
where m_code.code_name="GuarantorRelationship";
|
||||
|
||||
insert into m_code_value (code_id,code_value,order_position)
|
||||
select id,"Parent",0
|
||||
from m_code
|
||||
where m_code.code_name="GuarantorRelationship";
|
||||
|
||||
insert into m_code_value (code_id,code_value,order_position)
|
||||
select id,"Sibling",0
|
||||
from m_code
|
||||
where m_code.code_name="GuarantorRelationship";
|
||||
|
||||
insert into m_code_value (code_id,code_value,order_position)
|
||||
select id,"Business Associate",0
|
||||
from m_code
|
||||
where m_code.code_name="GuarantorRelationship";
|
||||
|
||||
insert into m_code_value (code_id,code_value,order_position)
|
||||
select id,"Other",0
|
||||
from m_code
|
||||
where m_code.code_name="GuarantorRelationship";
|
||||
|
||||
-- Add a column to link Guarantor to Code value
|
||||
ALTER TABLE `m_guarantor`
|
||||
ADD COLUMN `client_reln_cv_id` INT(11) NULL DEFAULT NULL AFTER `loan_id`,
|
||||
ADD CONSTRAINT `FK_m_guarantor_m_code_value` FOREIGN KEY (`client_reln_cv_id`) REFERENCES `m_code_value` (`id`);
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
package org.mifosplatform.organisation.staff.domain;
|
||||
|
||||
import org.mifosplatform.organisation.staff.exception.StaffNotFoundException;
|
||||
import org.mifosplatform.portfolio.client.domain.ClientRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Wrapper for {@link ClientRepository} that adds NULL checking and Error
|
||||
* handling capabilities
|
||||
* </p>
|
||||
*/
|
||||
@Service
|
||||
public class StaffRepositoryWrapper {
|
||||
|
||||
private final StaffRepository repository;
|
||||
|
||||
@Autowired
|
||||
public StaffRepositoryWrapper(final StaffRepository repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Staff findOneWithNotFoundDetection(final Long id) {
|
||||
final Staff staff = this.repository.findOne(id);
|
||||
if (staff == null) { throw new StaffNotFoundException(id); }
|
||||
return staff;
|
||||
}
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
package org.mifosplatform.portfolio.client.domain;
|
||||
|
||||
import org.mifosplatform.portfolio.client.exception.ClientNotFoundException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Wrapper for {@link ClientRepository} that adds NULL checking and Error
|
||||
* handling capabilities
|
||||
* </p>
|
||||
*/
|
||||
@Service
|
||||
public class ClientRepositoryWrapper {
|
||||
|
||||
private final ClientRepository repository;
|
||||
|
||||
@Autowired
|
||||
public ClientRepositoryWrapper(final ClientRepository repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Client findOneWithNotFoundDetection(final Long id) {
|
||||
final Client client = this.repository.findOne(id);
|
||||
if (client == null) { throw new ClientNotFoundException(id); }
|
||||
return client;
|
||||
}
|
||||
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
package org.mifosplatform.portfolio.loanaccount.domain;
|
||||
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanNotFoundException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Wrapper for {@link LoanRepository} that adds NULL checking and Error handling
|
||||
* capabilities
|
||||
* </p>
|
||||
*/
|
||||
@Service
|
||||
public class LoanRepositoryWrapper {
|
||||
|
||||
private final LoanRepository repository;
|
||||
|
||||
@Autowired
|
||||
public LoanRepositoryWrapper(final LoanRepository repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Loan findOneWithNotFoundDetection(final Long id) {
|
||||
final Loan loan = this.repository.findOne(id);
|
||||
if (loan == null) { throw new LoanNotFoundException(id); }
|
||||
return loan;
|
||||
}
|
||||
|
||||
}
|
||||
+6
-3
@@ -10,13 +10,16 @@ import java.util.Set;
|
||||
|
||||
public class GuarantorConstants {
|
||||
|
||||
public static final String GUARANTOR_RELATIONSHIP_CODE_NAME = "GuarantorRelationship";
|
||||
|
||||
/***
|
||||
* Enum of all parameters passed in while creating/updating a loan product
|
||||
***/
|
||||
public static enum GUARANTOR_JSON_INPUT_PARAMS {
|
||||
LOAN_ID("loanId"), GUARANTOR_TYPE_ID("guarantorTypeId"), ENTITY_ID("entityId"), FIRSTNAME("firstname"), LASTNAME("lastname"), ADDRESS_LINE_1(
|
||||
"addressLine1"), ADDRESS_LINE_2("addressLine2"), CITY("city"), STATE("state"), ZIP("zip"), COUNTRY("country"), MOBILE_NUMBER(
|
||||
"mobileNumber"), PHONE_NUMBER("housePhoneNumber"), COMMENT("comment"), DATE_OF_BIRTH("dob");
|
||||
LOAN_ID("loanId"), CLIENT_RELATIONSHIP_TYPE_ID("clientRelationshipTypeId"), GUARANTOR_TYPE_ID("guarantorTypeId"), ENTITY_ID(
|
||||
"entityId"), FIRSTNAME("firstname"), LASTNAME("lastname"), ADDRESS_LINE_1("addressLine1"), ADDRESS_LINE_2("addressLine2"), CITY(
|
||||
"city"), STATE("state"), ZIP("zip"), COUNTRY("country"), MOBILE_NUMBER("mobileNumber"), PHONE_NUMBER("housePhoneNumber"), COMMENT(
|
||||
"comment"), DATE_OF_BIRTH("dob");
|
||||
|
||||
private final String value;
|
||||
|
||||
|
||||
+19
-6
@@ -6,6 +6,7 @@
|
||||
package org.mifosplatform.portfolio.loanaccount.guarantor.api;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -25,12 +26,15 @@ import javax.ws.rs.core.UriInfo;
|
||||
import org.mifosplatform.commands.domain.CommandWrapper;
|
||||
import org.mifosplatform.commands.service.CommandWrapperBuilder;
|
||||
import org.mifosplatform.commands.service.PortfolioCommandSourceWritePlatformService;
|
||||
import org.mifosplatform.infrastructure.codes.data.CodeValueData;
|
||||
import org.mifosplatform.infrastructure.codes.service.CodeValueReadPlatformService;
|
||||
import org.mifosplatform.infrastructure.core.api.ApiRequestParameterHelper;
|
||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
|
||||
import org.mifosplatform.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
|
||||
import org.mifosplatform.infrastructure.core.serialization.DefaultToApiJsonSerializer;
|
||||
import org.mifosplatform.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.GuarantorConstants;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.data.GuarantorData;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.domain.GuarantorType;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.service.GuarantorEnumerations;
|
||||
@@ -44,13 +48,15 @@ import org.springframework.stereotype.Component;
|
||||
@Scope("singleton")
|
||||
public class GuarantorsApiResource {
|
||||
|
||||
private static final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("guarantorType", "entityId",
|
||||
"firstname", "lastname", "addressLine1", "addressLine2", "city", "state", "zip", "country", "mobileNumber", "housePhoneNumber",
|
||||
"comment", "dob"));
|
||||
private static final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<String>(Arrays.asList("id", "loanId", "clientRelationshipType",
|
||||
"guarantorType", "firstname", "lastname", "entityId", "externalId", "officeName", "joinedDate", "addressLine1", "addressLine2",
|
||||
"city", "state", "zip", "country", "mobileNumber", "housePhoneNumber", "comment", "dob", "guarantorTypeOptions",
|
||||
"allowedClientRelationshipTypes"));
|
||||
|
||||
private final String resourceNameForPermission = "GUARANTOR";
|
||||
|
||||
private final GuarantorReadPlatformService guarantorReadPlatformService;
|
||||
private final CodeValueReadPlatformService codeValueReadPlatformService;
|
||||
private final DefaultToApiJsonSerializer<GuarantorData> apiJsonSerializerService;
|
||||
private final ApiRequestParameterHelper apiRequestParameterHelper;
|
||||
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
|
||||
@@ -59,12 +65,14 @@ public class GuarantorsApiResource {
|
||||
@Autowired
|
||||
public GuarantorsApiResource(final PlatformSecurityContext context, final GuarantorReadPlatformService guarantorReadPlatformService,
|
||||
final DefaultToApiJsonSerializer<GuarantorData> toApiJsonSerializer, final ApiRequestParameterHelper apiRequestParameterHelper,
|
||||
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService) {
|
||||
final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService,
|
||||
final CodeValueReadPlatformService codeValueReadPlatformService) {
|
||||
this.context = context;
|
||||
this.apiRequestParameterHelper = apiRequestParameterHelper;
|
||||
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
|
||||
this.apiJsonSerializerService = toApiJsonSerializer;
|
||||
this.guarantorReadPlatformService = guarantorReadPlatformService;
|
||||
this.codeValueReadPlatformService = codeValueReadPlatformService;
|
||||
}
|
||||
|
||||
@GET
|
||||
@@ -74,7 +82,10 @@ public class GuarantorsApiResource {
|
||||
public String newGuarantorTemplate(@Context final UriInfo uriInfo) {
|
||||
context.authenticatedUser().validateHasReadPermission(resourceNameForPermission);
|
||||
|
||||
GuarantorData guarantorData = guarantorReadPlatformService.retrieveNewGuarantorDetails();
|
||||
final List<EnumOptionData> guarantorTypeOptions = GuarantorEnumerations.guarantorType(GuarantorType.values());
|
||||
final Collection<CodeValueData> allowedClientRelationshipTypes = this.codeValueReadPlatformService
|
||||
.retrieveCodeValuesByCode(GuarantorConstants.GUARANTOR_RELATIONSHIP_CODE_NAME);
|
||||
GuarantorData guarantorData = GuarantorData.template(guarantorTypeOptions, allowedClientRelationshipTypes);
|
||||
|
||||
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||
return this.apiJsonSerializerService.serialize(settings, guarantorData, RESPONSE_DATA_PARAMETERS);
|
||||
@@ -105,8 +116,10 @@ public class GuarantorsApiResource {
|
||||
|
||||
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||
if (settings.isTemplate()) {
|
||||
final Collection<CodeValueData> allowedClientRelationshipTypes = this.codeValueReadPlatformService
|
||||
.retrieveCodeValuesByCode(GuarantorConstants.GUARANTOR_RELATIONSHIP_CODE_NAME);
|
||||
final List<EnumOptionData> guarantorTypeOptions = GuarantorEnumerations.guarantorType(GuarantorType.values());
|
||||
guarantorData = GuarantorData.templateOnTop(guarantorData, guarantorTypeOptions);
|
||||
guarantorData = GuarantorData.templateOnTop(guarantorData, guarantorTypeOptions, allowedClientRelationshipTypes);
|
||||
}
|
||||
|
||||
return this.apiJsonSerializerService.serialize(settings, guarantorData, RESPONSE_DATA_PARAMETERS);
|
||||
|
||||
+20
-4
@@ -21,6 +21,9 @@ import org.mifosplatform.portfolio.loanaccount.guarantor.domain.GuarantorType;
|
||||
*/
|
||||
public class GuarantorCommand {
|
||||
|
||||
/*** Fields for capturing relationship of Guarantor with customer **/
|
||||
private final Long clientRelationshipTypeId;
|
||||
|
||||
/*** Fields for current customers serving as guarantors **/
|
||||
private final Integer guarantorTypeId;
|
||||
private final Long entityId;
|
||||
@@ -39,10 +42,13 @@ public class GuarantorCommand {
|
||||
private final String comment;
|
||||
private final LocalDate dob;
|
||||
|
||||
public GuarantorCommand(final Integer guarantorTypeId, final Long entityId, final String firstname,
|
||||
final String lastname, final String addressLine1, final String addressLine2, final String city, final String state,
|
||||
final String zip, final String country, final String mobileNumber, final String housePhoneNumber, final String comment,
|
||||
final LocalDate dob) {
|
||||
public GuarantorCommand(final Long clientRelationshipTypeId, final Integer guarantorTypeId, final Long entityId,
|
||||
final String firstname, final String lastname, final String addressLine1, final String addressLine2, final String city,
|
||||
final String state, final String zip, final String country, final String mobileNumber, final String housePhoneNumber,
|
||||
final String comment, final LocalDate dob) {
|
||||
|
||||
this.clientRelationshipTypeId = clientRelationshipTypeId;
|
||||
|
||||
/*** Fields for current entities serving as guarantors **/
|
||||
this.guarantorTypeId = guarantorTypeId;
|
||||
this.entityId = entityId;
|
||||
@@ -76,6 +82,9 @@ public class GuarantorCommand {
|
||||
|
||||
DataValidatorBuilder baseDataValidator = getDataValidator(dataValidationErrors);
|
||||
|
||||
baseDataValidator.reset().parameter(GUARANTOR_JSON_INPUT_PARAMS.CLIENT_RELATIONSHIP_TYPE_ID.getValue())
|
||||
.value(this.clientRelationshipTypeId).ignoreIfNull().integerGreaterThanZero();
|
||||
|
||||
baseDataValidator.reset().parameter(GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID.getValue()).value(this.guarantorTypeId).notNull()
|
||||
.inMinMaxRange(GuarantorType.getMinValue(), GuarantorType.getMaxValue());
|
||||
|
||||
@@ -101,6 +110,9 @@ public class GuarantorCommand {
|
||||
|
||||
DataValidatorBuilder baseDataValidator = getDataValidator(dataValidationErrors);
|
||||
|
||||
baseDataValidator.reset().parameter(GUARANTOR_JSON_INPUT_PARAMS.CLIENT_RELATIONSHIP_TYPE_ID.getValue())
|
||||
.value(this.clientRelationshipTypeId).ignoreIfNull().integerGreaterThanZero();
|
||||
|
||||
baseDataValidator.reset().parameter(GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID.getValue()).value(this.guarantorTypeId)
|
||||
.ignoreIfNull().inMinMaxRange(GuarantorType.getMinValue(), GuarantorType.getMaxValue());
|
||||
|
||||
@@ -161,4 +173,8 @@ public class GuarantorCommand {
|
||||
DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("Guarantor");
|
||||
return baseDataValidator;
|
||||
}
|
||||
|
||||
public Long getClientRelationshipTypeId() {
|
||||
return this.clientRelationshipTypeId;
|
||||
}
|
||||
}
|
||||
+31
-19
@@ -5,9 +5,11 @@
|
||||
*/
|
||||
package org.mifosplatform.portfolio.loanaccount.guarantor.data;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.mifosplatform.infrastructure.codes.data.CodeValueData;
|
||||
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
|
||||
import org.mifosplatform.organisation.staff.data.StaffData;
|
||||
import org.mifosplatform.portfolio.client.data.ClientData;
|
||||
@@ -18,6 +20,7 @@ public class GuarantorData {
|
||||
|
||||
private final Long id;
|
||||
private final Long loanId;
|
||||
private final CodeValueData clientRelationshipType;
|
||||
private final EnumOptionData guarantorType;
|
||||
|
||||
private final String firstname;
|
||||
@@ -45,38 +48,46 @@ public class GuarantorData {
|
||||
// template
|
||||
@SuppressWarnings("unused")
|
||||
private final List<EnumOptionData> guarantorTypeOptions;
|
||||
private final Collection<CodeValueData> allowedClientRelationshipTypes;
|
||||
|
||||
public static GuarantorData template(final List<EnumOptionData> guarantorTypeOptions) {
|
||||
return new GuarantorData(null, null, null, GuarantorEnumerations.guarantorType(GuarantorType.CUSTOMER), null, null, null, null,
|
||||
null, null, null, null, null, null, null, null, null, null, null, guarantorTypeOptions);
|
||||
public static GuarantorData template(final List<EnumOptionData> guarantorTypeOptions,
|
||||
final Collection<CodeValueData> allowedClientRelationshipTypes) {
|
||||
return new GuarantorData(null, null, null, null, GuarantorEnumerations.guarantorType(GuarantorType.CUSTOMER), null, null, null,
|
||||
null, null, null, null, null, null, null, null, null, null, null, null, guarantorTypeOptions,
|
||||
allowedClientRelationshipTypes);
|
||||
}
|
||||
|
||||
public static GuarantorData templateOnTop(final GuarantorData guarantorData, final List<EnumOptionData> guarantorTypeOptions) {
|
||||
return new GuarantorData(guarantorData.id, guarantorData.loanId, guarantorData.entityId, guarantorData.guarantorType,
|
||||
guarantorData.firstname, guarantorData.lastname, guarantorData.dob, guarantorData.addressLine1, guarantorData.addressLine2,
|
||||
guarantorData.city, guarantorData.state, guarantorData.zip, guarantorData.country, guarantorData.mobileNumber,
|
||||
guarantorData.housePhoneNumber, guarantorData.comment, guarantorData.officeName, guarantorData.joinedDate,
|
||||
guarantorData.externalId, guarantorTypeOptions);
|
||||
public static GuarantorData templateOnTop(final GuarantorData guarantorData, final List<EnumOptionData> guarantorTypeOptions,
|
||||
final Collection<CodeValueData> allowedClientRelationshipTypes) {
|
||||
return new GuarantorData(guarantorData.id, guarantorData.loanId, guarantorData.clientRelationshipType, guarantorData.entityId,
|
||||
guarantorData.guarantorType, guarantorData.firstname, guarantorData.lastname, guarantorData.dob,
|
||||
guarantorData.addressLine1, guarantorData.addressLine2, guarantorData.city, guarantorData.state, guarantorData.zip,
|
||||
guarantorData.country, guarantorData.mobileNumber, guarantorData.housePhoneNumber, guarantorData.comment,
|
||||
guarantorData.officeName, guarantorData.joinedDate, guarantorData.externalId, guarantorTypeOptions,
|
||||
allowedClientRelationshipTypes);
|
||||
}
|
||||
|
||||
public static GuarantorData mergeClientData(ClientData clientData, GuarantorData guarantorData) {
|
||||
return new GuarantorData(guarantorData.id, guarantorData.loanId, guarantorData.entityId, guarantorData.guarantorType,
|
||||
clientData.getFirstname(), clientData.getLastname(), null, null, null, null, null, null, null, null, null, null,
|
||||
clientData.getOfficeName(), clientData.getJoinedDate(), clientData.getExternalId(), null);
|
||||
return new GuarantorData(guarantorData.id, guarantorData.loanId, guarantorData.clientRelationshipType, guarantorData.entityId,
|
||||
guarantorData.guarantorType, clientData.getFirstname(), clientData.getLastname(), null, null, null, null, null, null, null,
|
||||
null, null, null, clientData.getOfficeName(), clientData.getJoinedDate(), clientData.getExternalId(), null,
|
||||
guarantorData.allowedClientRelationshipTypes);
|
||||
}
|
||||
|
||||
public static GuarantorData mergeStaffData(StaffData staffData, GuarantorData guarantorData) {
|
||||
return new GuarantorData(guarantorData.id, guarantorData.loanId, guarantorData.entityId, guarantorData.guarantorType,
|
||||
staffData.getFirstname(), staffData.getLastname(), null, null, null, null, null, null, null, null, null, null,
|
||||
staffData.getOfficeName(), null, null, null);
|
||||
return new GuarantorData(guarantorData.id, guarantorData.loanId, guarantorData.clientRelationshipType, guarantorData.entityId,
|
||||
guarantorData.guarantorType, staffData.getFirstname(), staffData.getLastname(), null, null, null, null, null, null, null,
|
||||
null, null, null, staffData.getOfficeName(), null, null, null, guarantorData.allowedClientRelationshipTypes);
|
||||
}
|
||||
|
||||
public GuarantorData(Long id, Long loanId, Long entityId, EnumOptionData guarantorType, String firstname, String lastname,
|
||||
LocalDate dob, String addressLine1, String addressLine2, String city, String state, String zip, String country,
|
||||
String mobileNumber, String housePhoneNumber, String comment, String officeName, LocalDate joinedDate, String externalId,
|
||||
List<EnumOptionData> guarantorTypeOptions) {
|
||||
public GuarantorData(Long id, Long loanId, final CodeValueData clientRelationshipType, Long entityId, EnumOptionData guarantorType,
|
||||
String firstname, String lastname, LocalDate dob, String addressLine1, String addressLine2, String city, String state,
|
||||
String zip, String country, String mobileNumber, String housePhoneNumber, String comment, String officeName,
|
||||
LocalDate joinedDate, String externalId, List<EnumOptionData> guarantorTypeOptions,
|
||||
Collection<CodeValueData> allowedClientRelationshipTypes) {
|
||||
this.id = id;
|
||||
this.loanId = loanId;
|
||||
this.clientRelationshipType = clientRelationshipType;
|
||||
this.guarantorType = guarantorType;
|
||||
this.entityId = entityId;
|
||||
this.firstname = firstname;
|
||||
@@ -95,6 +106,7 @@ public class GuarantorData {
|
||||
this.joinedDate = joinedDate;
|
||||
this.externalId = externalId;
|
||||
this.guarantorTypeOptions = guarantorTypeOptions;
|
||||
this.allowedClientRelationshipTypes = allowedClientRelationshipTypes;
|
||||
}
|
||||
|
||||
public boolean isExternalGuarantor() {
|
||||
|
||||
+29
-13
@@ -18,6 +18,7 @@ import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.mifosplatform.infrastructure.codes.domain.CodeValue;
|
||||
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
||||
import org.mifosplatform.portfolio.loanaccount.domain.Loan;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.GuarantorConstants.GUARANTOR_JSON_INPUT_PARAMS;
|
||||
@@ -31,6 +32,10 @@ public class Guarantor extends AbstractPersistable<Long> {
|
||||
@JoinColumn(name = "loan_id", nullable = false)
|
||||
private Loan loan;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "client_reln_cv_id", nullable = false)
|
||||
private CodeValue clientRelationshipType;
|
||||
|
||||
@Column(name = "type_enum", nullable = false)
|
||||
private Integer gurantorType;
|
||||
|
||||
@@ -78,17 +83,18 @@ public class Guarantor extends AbstractPersistable<Long> {
|
||||
|
||||
}
|
||||
|
||||
public static Guarantor createNew(Loan loan, Integer gurantorType, Long entityId, String firstname, String lastname, Date dateOfBirth,
|
||||
String addressLine1, String addressLine2, String city, String state, String country, String zip, String housePhoneNumber,
|
||||
String mobilePhoneNumber, String comment) {
|
||||
return new Guarantor(loan, gurantorType, entityId, firstname, lastname, dateOfBirth, addressLine1, addressLine2, city, state,
|
||||
country, zip, housePhoneNumber, mobilePhoneNumber, comment);
|
||||
public static Guarantor createNew(Loan loan, CodeValue clientRelationshipType, Integer gurantorType, Long entityId, String firstname,
|
||||
String lastname, Date dateOfBirth, String addressLine1, String addressLine2, String city, String state, String country,
|
||||
String zip, String housePhoneNumber, String mobilePhoneNumber, String comment) {
|
||||
return new Guarantor(loan, clientRelationshipType, gurantorType, entityId, firstname, lastname, dateOfBirth, addressLine1,
|
||||
addressLine2, city, state, country, zip, housePhoneNumber, mobilePhoneNumber, comment);
|
||||
}
|
||||
|
||||
public Guarantor(Loan loan, Integer gurantorType, Long entityId, String firstname, String lastname, Date dateOfBirth,
|
||||
String addressLine1, String addressLine2, String city, String state, String country, String zip, String housePhoneNumber,
|
||||
String mobilePhoneNumber, String comment) {
|
||||
public Guarantor(Loan loan, CodeValue clientRelationshipType, Integer gurantorType, Long entityId, String firstname, String lastname,
|
||||
Date dateOfBirth, String addressLine1, String addressLine2, String city, String state, String country, String zip,
|
||||
String housePhoneNumber, String mobilePhoneNumber, String comment) {
|
||||
this.loan = loan;
|
||||
this.clientRelationshipType = clientRelationshipType;
|
||||
this.gurantorType = gurantorType;
|
||||
this.entityId = entityId;
|
||||
this.firstname = StringUtils.defaultIfEmpty(firstname, null);
|
||||
@@ -105,7 +111,7 @@ public class Guarantor extends AbstractPersistable<Long> {
|
||||
this.comment = StringUtils.defaultIfEmpty(comment, null);
|
||||
}
|
||||
|
||||
public static Guarantor fromJson(final Loan loan, final JsonCommand command) {
|
||||
public static Guarantor fromJson(final Loan loan, final CodeValue clientRelationshipType, final JsonCommand command) {
|
||||
Integer gurantorType = command.integerValueSansLocaleOfParameterNamed(GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID.getValue());
|
||||
Long entityId = command.longValueOfParameterNamed(GUARANTOR_JSON_INPUT_PARAMS.ENTITY_ID.getValue());
|
||||
|
||||
@@ -123,19 +129,21 @@ public class Guarantor extends AbstractPersistable<Long> {
|
||||
String mobilePhoneNumber = command.stringValueOfParameterNamed(GUARANTOR_JSON_INPUT_PARAMS.MOBILE_NUMBER.getValue());
|
||||
String comment = command.stringValueOfParameterNamed(GUARANTOR_JSON_INPUT_PARAMS.COMMENT.getValue());
|
||||
|
||||
return new Guarantor(loan, gurantorType, entityId, firstname, lastname, dateOfBirth, addressLine1, addressLine2, city, state,
|
||||
country, zip, housePhoneNumber, mobilePhoneNumber, comment);
|
||||
return new Guarantor(loan, clientRelationshipType, gurantorType, entityId, firstname, lastname, dateOfBirth, addressLine1,
|
||||
addressLine2, city, state, country, zip, housePhoneNumber, mobilePhoneNumber, comment);
|
||||
}
|
||||
|
||||
return new Guarantor(loan, gurantorType, entityId, null, null, null, null, null, null, null, null, null, null, null, null);
|
||||
return new Guarantor(loan, clientRelationshipType, gurantorType, entityId, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null);
|
||||
|
||||
}
|
||||
|
||||
public Map<String, Object> update(final JsonCommand command) {
|
||||
|
||||
final Map<String, Object> actualChanges = new LinkedHashMap<String, Object>(7);
|
||||
final Map<String, Object> actualChanges = new LinkedHashMap<String, Object>();
|
||||
|
||||
handlePropertyUpdate(command, actualChanges, GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID.getValue(), this.gurantorType, true);
|
||||
handlePropertyUpdate(command, actualChanges, GUARANTOR_JSON_INPUT_PARAMS.CLIENT_RELATIONSHIP_TYPE_ID.getValue(), 0, true);
|
||||
handlePropertyUpdate(command, actualChanges, GUARANTOR_JSON_INPUT_PARAMS.ENTITY_ID.getValue(), this.entityId);
|
||||
|
||||
if (this.isExternalGuarantor()) {
|
||||
@@ -265,4 +273,12 @@ public class Guarantor extends AbstractPersistable<Long> {
|
||||
return this.loan.getOfficeId();
|
||||
}
|
||||
|
||||
public CodeValue getClientRelationshipType() {
|
||||
return this.clientRelationshipType;
|
||||
}
|
||||
|
||||
public void setClientRelationshipType(CodeValue clientRelationshipType) {
|
||||
this.clientRelationshipType = clientRelationshipType;
|
||||
}
|
||||
|
||||
}
|
||||
+3
-1
@@ -5,9 +5,11 @@
|
||||
*/
|
||||
package org.mifosplatform.portfolio.loanaccount.guarantor.domain;
|
||||
|
||||
import org.mifosplatform.portfolio.loanaccount.domain.Loan;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
|
||||
public interface GuarantorRepository extends JpaRepository<Guarantor, Long>, JpaSpecificationExecutor<Guarantor> {
|
||||
// no behaviour
|
||||
|
||||
Guarantor findByLoanAndId(Loan loan, Long id);
|
||||
}
|
||||
+5
@@ -15,4 +15,9 @@ public class GuarantorNotFoundException extends AbstractPlatformResourceNotFound
|
||||
public GuarantorNotFoundException(Long id) {
|
||||
super("error.msg.loan.guarantor.", "Guarantor with identifier " + id + " does not exist", id);
|
||||
}
|
||||
|
||||
public GuarantorNotFoundException(Long loanId, Long guarantorId) {
|
||||
super("error.msg.loan.guarantor.", "Guarantor with identifier " + guarantorId + " does not exist for loan with Identifier "
|
||||
+ loanId, loanId, guarantorId);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -27,6 +27,6 @@ public class CreateGuarantorCommandHandler implements NewCommandSourceHandler {
|
||||
@Override
|
||||
public CommandProcessingResult processCommand(final JsonCommand command) {
|
||||
|
||||
return this.writePlatformService.createGuarantor(command);
|
||||
return this.writePlatformService.createGuarantor(command.getLoanId(), command);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -26,6 +26,6 @@ public class DeleteGuarantorCommandHandler implements NewCommandSourceHandler {
|
||||
@Transactional
|
||||
@Override
|
||||
public CommandProcessingResult processCommand(final JsonCommand command) {
|
||||
return this.guarantorWritePlatformService.removeGuarantor(command.entityId());
|
||||
return this.guarantorWritePlatformService.removeGuarantor(command.getLoanId(), command.entityId());
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -26,6 +26,6 @@ public class UpdateGuarantorCommandHandler implements NewCommandSourceHandler {
|
||||
@Transactional
|
||||
@Override
|
||||
public CommandProcessingResult processCommand(final JsonCommand command) {
|
||||
return this.writePlatformService.updateGuarantor(command.entityId(), command);
|
||||
return this.writePlatformService.updateGuarantor(command.getLoanId(), command.entityId(), command);
|
||||
}
|
||||
}
|
||||
+4
-2
@@ -49,6 +49,8 @@ public final class GuarantorCommandFromApiJsonDeserializer extends AbstractFromA
|
||||
|
||||
final JsonElement element = fromApiJsonHelper.parse(json);
|
||||
|
||||
Long clientRelationshipTypeId = fromApiJsonHelper.extractLongNamed(
|
||||
GUARANTOR_JSON_INPUT_PARAMS.CLIENT_RELATIONSHIP_TYPE_ID.getValue(), element);
|
||||
Integer guarantorTypeId = fromApiJsonHelper.extractIntegerSansLocaleNamed(GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID.getValue(),
|
||||
element);
|
||||
Long entityId = fromApiJsonHelper.extractLongNamed(GUARANTOR_JSON_INPUT_PARAMS.ENTITY_ID.getValue(), element);
|
||||
@@ -65,7 +67,7 @@ public final class GuarantorCommandFromApiJsonDeserializer extends AbstractFromA
|
||||
String comment = fromApiJsonHelper.extractStringNamed(GUARANTOR_JSON_INPUT_PARAMS.COMMENT.getValue(), element);
|
||||
LocalDate dob = fromApiJsonHelper.extractLocalDateNamed(GUARANTOR_JSON_INPUT_PARAMS.DATE_OF_BIRTH.getValue(), element);
|
||||
|
||||
return new GuarantorCommand(guarantorTypeId, entityId, firstname, lastname, addressLine1, addressLine2, city, state, zip,
|
||||
country, mobileNumber, housePhoneNumber, comment, dob);
|
||||
return new GuarantorCommand(clientRelationshipTypeId, guarantorTypeId, entityId, firstname, lastname, addressLine1, addressLine2,
|
||||
city, state, zip, country, mobileNumber, housePhoneNumber, comment, dob);
|
||||
}
|
||||
}
|
||||
-2
@@ -30,6 +30,4 @@ public interface GuarantorReadPlatformService {
|
||||
|
||||
GuarantorData retrieveGuarantor(Long loanId, Long guarantorId);
|
||||
|
||||
GuarantorData retrieveNewGuarantorDetails();
|
||||
|
||||
}
|
||||
+18
-13
@@ -11,6 +11,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.mifosplatform.infrastructure.codes.data.CodeValueData;
|
||||
import org.mifosplatform.infrastructure.core.data.EnumOptionData;
|
||||
import org.mifosplatform.infrastructure.core.domain.JdbcSupport;
|
||||
import org.mifosplatform.infrastructure.core.service.TenantAwareRoutingDataSource;
|
||||
@@ -22,7 +23,6 @@ import org.mifosplatform.portfolio.loanaccount.domain.Loan;
|
||||
import org.mifosplatform.portfolio.loanaccount.domain.LoanRepository;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanNotFoundException;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.data.GuarantorData;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.domain.GuarantorType;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
@@ -48,17 +48,28 @@ public class GuarantorReadPlatformServiceImpl implements GuarantorReadPlatformSe
|
||||
|
||||
private static final class GuarantorMapper implements RowMapper<GuarantorData> {
|
||||
|
||||
private StringBuilder sqlBuilder = new StringBuilder(
|
||||
" g.id as id, g.loan_id as loanId, g.client_reln_cv_id clientRelationshipTypeId, g.entity_id as entityId, g.type_enum guarantorType ,g.firstname as firstname, g.lastname as lastname, g.dob as dateOfBirth, g.address_line_1 as addressLine1, g.address_line_2 as addressLine2, g.city as city, g.state as state, g.country as country, g.zip as zip, g.house_phone_number as housePhoneNumber, g.mobile_number as mobilePhoneNumber, g.comment as comment, ")
|
||||
.append(" cv.code_value as typeName")//
|
||||
.append(" FROM m_guarantor g") //
|
||||
.append(" left JOIN m_code_value cv on g.client_reln_cv_id = cv.id");
|
||||
|
||||
public String schema() {
|
||||
return " g.id as id, g.loan_id as loanId, g.entity_id as entityId, g.type_enum guarantorType ,g.firstname as firstname,"
|
||||
+ " g.lastname as lastname, g.dob as dateOfBirth, g.address_line_1 as addressLine1, g.address_line_2 as addressLine2,"
|
||||
+ " g.city as city, g.state as state, g.country as country, g.zip as zip, g.house_phone_number as housePhoneNumber, "
|
||||
+ " g.mobile_number as mobilePhoneNumber, g.comment as comment from m_guarantor g";
|
||||
return sqlBuilder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuarantorData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
|
||||
Long id = rs.getLong("id");
|
||||
Long loanId = rs.getLong("loanId");
|
||||
Long clientRelationshipTypeId = JdbcSupport.getLong(rs, "clientRelationshipTypeId");
|
||||
CodeValueData clientRelationshipType = null;
|
||||
|
||||
if (clientRelationshipTypeId != null) {
|
||||
final String typeName = rs.getString("typeName");
|
||||
clientRelationshipType = CodeValueData.instance(clientRelationshipTypeId, typeName);
|
||||
}
|
||||
|
||||
Integer guarantorTypeId = rs.getInt("guarantorType");
|
||||
final EnumOptionData guarantorType = GuarantorEnumerations.guarantorType(guarantorTypeId);
|
||||
Long entityId = rs.getLong("entityId");
|
||||
@@ -74,8 +85,8 @@ public class GuarantorReadPlatformServiceImpl implements GuarantorReadPlatformSe
|
||||
String mobileNumber = rs.getString("mobilePhoneNumber");
|
||||
String housePhoneNumber = rs.getString("housePhoneNumber");
|
||||
String comment = rs.getString("comment");
|
||||
return new GuarantorData(id, loanId, entityId, guarantorType, firstname, lastname, dob, addressLine1, addressLine2, city,
|
||||
state, zip, country, mobileNumber, housePhoneNumber, comment, null, null, null, null);
|
||||
return new GuarantorData(id, loanId, clientRelationshipType, entityId, guarantorType, firstname, lastname, dob, addressLine1,
|
||||
addressLine2, city, state, zip, country, mobileNumber, housePhoneNumber, comment, null, null, null, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,12 +122,6 @@ public class GuarantorReadPlatformServiceImpl implements GuarantorReadPlatformSe
|
||||
return mergeDetailsForClientOrStaffGuarantor(guarantorData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuarantorData retrieveNewGuarantorDetails() {
|
||||
final List<EnumOptionData> guarantorTypeOptions = GuarantorEnumerations.guarantorType(GuarantorType.values());
|
||||
return GuarantorData.template(guarantorTypeOptions);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param guarantorData
|
||||
*/
|
||||
|
||||
+3
-3
@@ -10,10 +10,10 @@ import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||
|
||||
public interface GuarantorWritePlatformService {
|
||||
|
||||
CommandProcessingResult createGuarantor(final JsonCommand command);
|
||||
CommandProcessingResult createGuarantor(final Long loanId, final JsonCommand command);
|
||||
|
||||
CommandProcessingResult updateGuarantor(final Long guarantorId, final JsonCommand command);
|
||||
CommandProcessingResult updateGuarantor(final Long loanId, final Long guarantorId, final JsonCommand command);
|
||||
|
||||
CommandProcessingResult removeGuarantor(final Long guarantorId);
|
||||
CommandProcessingResult removeGuarantor(final Long loanId, final Long guarantorId);
|
||||
|
||||
}
|
||||
+50
-41
@@ -7,19 +7,17 @@ package org.mifosplatform.portfolio.loanaccount.guarantor.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.mifosplatform.infrastructure.codes.domain.CodeValue;
|
||||
import org.mifosplatform.infrastructure.codes.domain.CodeValueRepositoryWrapper;
|
||||
import org.mifosplatform.infrastructure.core.api.JsonCommand;
|
||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResultBuilder;
|
||||
import org.mifosplatform.infrastructure.core.exception.PlatformDataIntegrityException;
|
||||
import org.mifosplatform.organisation.staff.domain.Staff;
|
||||
import org.mifosplatform.organisation.staff.domain.StaffRepository;
|
||||
import org.mifosplatform.organisation.staff.exception.StaffNotFoundException;
|
||||
import org.mifosplatform.portfolio.client.domain.Client;
|
||||
import org.mifosplatform.portfolio.client.domain.ClientRepository;
|
||||
import org.mifosplatform.portfolio.client.exception.ClientNotFoundException;
|
||||
import org.mifosplatform.organisation.staff.domain.StaffRepositoryWrapper;
|
||||
import org.mifosplatform.portfolio.client.domain.ClientRepositoryWrapper;
|
||||
import org.mifosplatform.portfolio.loanaccount.domain.Loan;
|
||||
import org.mifosplatform.portfolio.loanaccount.domain.LoanRepository;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanNotFoundException;
|
||||
import org.mifosplatform.portfolio.loanaccount.domain.LoanRepositoryWrapper;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.GuarantorConstants;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.GuarantorConstants.GUARANTOR_JSON_INPUT_PARAMS;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.command.GuarantorCommand;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.domain.Guarantor;
|
||||
@@ -39,34 +37,45 @@ public class GuarantorWritePlatformServiceJpaRepositoryIImpl implements Guaranto
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(GuarantorWritePlatformServiceJpaRepositoryIImpl.class);
|
||||
|
||||
private final ClientRepository clientRepository;
|
||||
private final StaffRepository staffRepository;
|
||||
private final LoanRepository loanRepository;
|
||||
private final ClientRepositoryWrapper clientRepositoryWrapper;
|
||||
private final StaffRepositoryWrapper staffRepositoryWrapper;
|
||||
private final LoanRepositoryWrapper loanRepositoryWrapper;
|
||||
private final GuarantorRepository guarantorRepository;
|
||||
private final GuarantorCommandFromApiJsonDeserializer fromApiJsonDeserializer;
|
||||
private final CodeValueRepositoryWrapper codeValueRepositoryWrapper;
|
||||
|
||||
@Autowired
|
||||
public GuarantorWritePlatformServiceJpaRepositoryIImpl(final LoanRepository loanRepository,
|
||||
final GuarantorRepository guarantorRepository, final ClientRepository clientRepository, final StaffRepository staffRepository,
|
||||
final GuarantorCommandFromApiJsonDeserializer fromApiJsonDeserializer) {
|
||||
this.loanRepository = loanRepository;
|
||||
this.clientRepository = clientRepository;
|
||||
public GuarantorWritePlatformServiceJpaRepositoryIImpl(final LoanRepositoryWrapper loanRepositoryWrapper,
|
||||
final GuarantorRepository guarantorRepository, final ClientRepositoryWrapper clientRepositoryWrapper,
|
||||
final StaffRepositoryWrapper staffRepositoryWrapper, final GuarantorCommandFromApiJsonDeserializer fromApiJsonDeserializer,
|
||||
final CodeValueRepositoryWrapper codeValueRepositoryWrapper) {
|
||||
this.loanRepositoryWrapper = loanRepositoryWrapper;
|
||||
this.clientRepositoryWrapper = clientRepositoryWrapper;
|
||||
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
|
||||
this.guarantorRepository = guarantorRepository;
|
||||
this.staffRepository = staffRepository;
|
||||
this.staffRepositoryWrapper = staffRepositoryWrapper;
|
||||
this.codeValueRepositoryWrapper = codeValueRepositoryWrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public CommandProcessingResult createGuarantor(final JsonCommand command) {
|
||||
public CommandProcessingResult createGuarantor(final Long loanId, final JsonCommand command) {
|
||||
try {
|
||||
final GuarantorCommand guarantorCommand = this.fromApiJsonDeserializer.commandFromApiJson(command.json());
|
||||
guarantorCommand.validateForCreate();
|
||||
|
||||
final Long loanId = command.getLoanId();
|
||||
Loan loan = retrieveLoanById(loanId);
|
||||
Loan loan = this.loanRepositoryWrapper.findOneWithNotFoundDetection(loanId);
|
||||
|
||||
Long clientRelationshipId = guarantorCommand.getClientRelationshipTypeId();
|
||||
CodeValue clientRelationshipType = null;
|
||||
|
||||
if (clientRelationshipId != null) {
|
||||
clientRelationshipType = this.codeValueRepositoryWrapper.findOneByCodeNameAndIdWithNotFoundDetection(
|
||||
GuarantorConstants.GUARANTOR_RELATIONSHIP_CODE_NAME, clientRelationshipId);
|
||||
}
|
||||
|
||||
Guarantor guarantor = null;
|
||||
guarantor = Guarantor.fromJson(loan, command);
|
||||
guarantor = Guarantor.fromJson(loan, clientRelationshipType, command);
|
||||
|
||||
validateGuarantorBusinessRules(guarantor);
|
||||
|
||||
@@ -78,22 +87,31 @@ public class GuarantorWritePlatformServiceJpaRepositoryIImpl implements Guaranto
|
||||
handleGuarantorDataIntegrityIssues(command, dve);
|
||||
return CommandProcessingResult.empty();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public CommandProcessingResult updateGuarantor(final Long guarantorId, final JsonCommand command) {
|
||||
public CommandProcessingResult updateGuarantor(final Long loanId, final Long guarantorId, final JsonCommand command) {
|
||||
try {
|
||||
final GuarantorCommand guarantorCommand = this.fromApiJsonDeserializer.commandFromApiJson(command.json());
|
||||
guarantorCommand.validateForUpdate();
|
||||
|
||||
// TODO: Vishwas need to fetch by both loan and Guarantor Id
|
||||
final Guarantor guarantorForUpdate = this.guarantorRepository.findOne(guarantorId);
|
||||
if (guarantorForUpdate == null) { throw new GuarantorNotFoundException(guarantorId); }
|
||||
final Loan loan = this.loanRepositoryWrapper.findOneWithNotFoundDetection(loanId);
|
||||
final Guarantor guarantorForUpdate = this.guarantorRepository.findByLoanAndId(loan, guarantorId);
|
||||
if (guarantorForUpdate == null) { throw new GuarantorNotFoundException(loanId, guarantorId); }
|
||||
|
||||
final Map<String, Object> changesOnly = guarantorForUpdate.update(command);
|
||||
|
||||
if (changesOnly.containsKey(GUARANTOR_JSON_INPUT_PARAMS.CLIENT_RELATIONSHIP_TYPE_ID)) {
|
||||
Long clientRelationshipId = guarantorCommand.getClientRelationshipTypeId();
|
||||
CodeValue clientRelationshipType = null;
|
||||
if (clientRelationshipId != null) {
|
||||
clientRelationshipType = this.codeValueRepositoryWrapper.findOneByCodeNameAndIdWithNotFoundDetection(
|
||||
GuarantorConstants.GUARANTOR_RELATIONSHIP_CODE_NAME, clientRelationshipId);
|
||||
}
|
||||
guarantorForUpdate.setClientRelationshipType(clientRelationshipType);
|
||||
}
|
||||
|
||||
if (changesOnly.containsKey(GUARANTOR_JSON_INPUT_PARAMS.ENTITY_ID)
|
||||
|| changesOnly.containsKey(GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID)) {
|
||||
validateGuarantorBusinessRules(guarantorForUpdate);
|
||||
@@ -113,10 +131,10 @@ public class GuarantorWritePlatformServiceJpaRepositoryIImpl implements Guaranto
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public CommandProcessingResult removeGuarantor(final Long guarantorId) {
|
||||
// TODO: Vishwas need to fetch by both loan and Guarantor Id
|
||||
final Guarantor guarantorForDelete = this.guarantorRepository.findOne(guarantorId);
|
||||
if (guarantorForDelete == null) { throw new GuarantorNotFoundException(guarantorId); }
|
||||
public CommandProcessingResult removeGuarantor(final Long loanId, final Long guarantorId) {
|
||||
final Loan loan = this.loanRepositoryWrapper.findOneWithNotFoundDetection(loanId);
|
||||
final Guarantor guarantorForDelete = this.guarantorRepository.findByLoanAndId(loan, guarantorId);
|
||||
if (guarantorForDelete == null) { throw new GuarantorNotFoundException(loanId, guarantorId); }
|
||||
|
||||
this.guarantorRepository.delete(guarantorForDelete);
|
||||
|
||||
@@ -133,24 +151,15 @@ public class GuarantorWritePlatformServiceJpaRepositoryIImpl implements Guaranto
|
||||
// validate guarantor conditions
|
||||
if (guarantor.isExistingCustomer()) {
|
||||
// check client exists
|
||||
Client client = clientRepository.findOne(guarantor.getEntityId());
|
||||
if (client == null) { throw new ClientNotFoundException(guarantor.getEntityId()); }
|
||||
|
||||
clientRepositoryWrapper.findOneWithNotFoundDetection(guarantor.getEntityId());
|
||||
// validate that the client is not set as a self guarantor
|
||||
if (guarantor.getClientId().equals(guarantor.getEntityId())) { throw new InvalidGuarantorException(guarantor.getEntityId(),
|
||||
guarantor.getLoanId()); }
|
||||
} else if (guarantor.isExistingEmployee()) {
|
||||
Staff staff = staffRepository.findOne(guarantor.getEntityId());
|
||||
if (staff == null) { throw new StaffNotFoundException(guarantor.getEntityId()); }
|
||||
staffRepositoryWrapper.findOneWithNotFoundDetection(guarantor.getEntityId());
|
||||
}
|
||||
}
|
||||
|
||||
private Loan retrieveLoanById(final Long loanId) {
|
||||
Loan loan = loanRepository.findOne(loanId);
|
||||
if (loan == null) { throw new LoanNotFoundException(loanId); }
|
||||
return loan;
|
||||
}
|
||||
|
||||
/**
|
||||
* Throws an exception for any data Integrity issue
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user