FINERACT-656 and FINERACT-655 unable to import client via bulk import when address is enabled

This commit is contained in:
ShruthiRajaram
2018-11-02 16:03:12 +05:30
parent f811fa32bc
commit 2a772b18eb
7 changed files with 100 additions and 67 deletions
@@ -18,7 +18,11 @@
*/
package org.apache.fineract.infrastructure.bulkimport.importhandler.client;
import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder;
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
@@ -29,17 +33,19 @@ import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandler
import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandlerUtils;
import org.apache.fineract.infrastructure.bulkimport.importhandler.helper.DateSerializer;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.exception.*;
import org.apache.fineract.portfolio.address.data.AddressData;
import org.apache.fineract.portfolio.client.data.ClientData;
import org.apache.fineract.portfolio.client.data.ClientNonPersonData;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.GsonBuilder;
@Service
public class ClientEntityImportHandler implements ImportHandler {
@@ -134,6 +140,7 @@ public class ClientEntityImportHandler implements ImportHandler {
activationDate=submittedOn;
}
AddressData addressDataObj=null;
Collection<AddressData> addressList = null;
if (ImportHandlerUtils.readAsBoolean(ClientEntityConstants.ADDRESS_ENABLED,row)) {
String addressType = ImportHandlerUtils.readAsString(ClientEntityConstants.ADDRESS_TYPE_COL, row);
Long addressTypeId = null;
@@ -167,10 +174,12 @@ public class ClientEntityImportHandler implements ImportHandler {
}
addressDataObj = new AddressData(addressTypeId, street, addressLine1, addressLine2, addressLine3,
city, postalCode, isActiveAddress, stateProvinceId, countryId);
addressList = new ArrayList<AddressData>(Arrays.asList(addressDataObj));
}
return ClientData.importClientEntityInstance(legalFormId,row.getRowNum(),name,officeId,clientTypeId,clientClassicationId,
staffId,active,activationDate,submittedOn, externalId,incorportionDate,mobileNo,clientNonPersonData,addressDataObj,locale,dateFormat);
}
staffId, active, activationDate, submittedOn, externalId, incorportionDate, mobileNo,
clientNonPersonData, addressList, locale, dateFormat);
}
public Count importEntity(String dateFormat) {
Sheet clientSheet=workbook.getSheet(TemplatePopulateImportConstants.CLIENT_ENTITY_SHEET_NAME);
@@ -18,7 +18,11 @@
*/
package org.apache.fineract.infrastructure.bulkimport.importhandler.client;
import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder;
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
@@ -28,17 +32,18 @@ import org.apache.fineract.infrastructure.bulkimport.data.Count;
import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandler;
import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandlerUtils;
import org.apache.fineract.infrastructure.bulkimport.importhandler.helper.DateSerializer;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.exception.*;
import org.apache.fineract.portfolio.address.data.AddressData;
import org.apache.fineract.portfolio.client.data.ClientData;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.GsonBuilder;
@Service
public class ClientPersonImportHandler implements ImportHandler {
@@ -120,6 +125,7 @@ public class ClientPersonImportHandler implements ImportHandler {
Boolean isStaff = ImportHandlerUtils.readAsBoolean(ClientPersonConstants.IS_STAFF_COL, row);
AddressData addressDataObj=null;
Collection<AddressData> addressList = null;
if (ImportHandlerUtils.readAsBoolean(ClientPersonConstants.ADDRESS_ENABLED_COL,row)) {
String addressType=ImportHandlerUtils.readAsString(ClientPersonConstants.ADDRESS_TYPE_COL, row);
Long addressTypeId = null;
@@ -154,11 +160,13 @@ public class ClientPersonImportHandler implements ImportHandler {
}
addressDataObj = new AddressData(addressTypeId, street, addressLine1, addressLine2, addressLine3,
city, postalCode, isActiveAddress, stateProvinceId, countryId);
addressList = new ArrayList<AddressData>(Arrays.asList(addressDataObj));
}
return ClientData.importClientPersonInstance(legalFormId,row.getRowNum(),firstName,lastName,middleName,submittedOn,activationDate,active,externalId,
officeId,staffId,mobileNo,dob,clientTypeId,genderId,clientClassicationId,isStaff,addressDataObj,locale,dateFormat);
officeId, staffId, mobileNo, dob, clientTypeId, genderId, clientClassicationId, isStaff,
addressList, locale, dateFormat);
}
}
public Count importEntity(String dateFormat) {
Sheet clientSheet=workbook.getSheet(TemplatePopulateImportConstants.CLIENT_PERSON_SHEET_NAME);
@@ -174,7 +182,7 @@ public class ClientPersonImportHandler implements ImportHandler {
.createClient() //
.withJson(payload) //
.build(); //
final CommandProcessingResult result = commandsSourceWritePlatformService.logCommandSource(commandRequest);
commandsSourceWritePlatformService.logCommandSource(commandRequest);
successCount++;
Cell statusCell = clientSheet.getRow(client.getRowIndex()).createCell(ClientPersonConstants.STATUS_COL);
statusCell.setCellValue(TemplatePopulateImportConstants.STATUS_CELL_IMPORTED);
@@ -24,7 +24,9 @@ import java.util.Date;
import org.apache.fineract.infrastructure.codes.data.CodeValueData;
@SuppressWarnings("unused")
public class AddressData {
private final Long client_id;
private final String addressType;
@@ -115,42 +115,44 @@ public class AddressWritePlatformServiceImpl implements AddressWritePlatformServ
long countryId;
ClientAddress clientAddressobj = new ClientAddress();
final JsonArray addressArray = command.arrayOfParameterNamed("address");
if(addressArray != null){
for (int i = 0; i < addressArray.size(); i++) {
final JsonObject jsonObject = addressArray.get(i).getAsJsonObject();
for (int i = 0; i < addressArray.size(); i++) {
final JsonObject jsonObject = addressArray.get(i).getAsJsonObject();
// validate every address
this.fromApiJsonDeserializer.validateForCreate(jsonObject.toString(), true);
// validate every address
this.fromApiJsonDeserializer.validateForCreate(jsonObject.toString(), true);
if (jsonObject.get("stateProvinceId") != null) {
stateId = jsonObject.get("stateProvinceId").getAsLong();
stateIdobj = this.codeValueRepository.getOne(stateId);
}
if (jsonObject.get("countryId") != null) {
countryId = jsonObject.get("countryId").getAsLong();
countryIdObj = this.codeValueRepository.getOne(countryId);
}
final long addressTypeId = jsonObject.get("addressTypeId").getAsLong();
final CodeValue addressTypeIdObj = this.codeValueRepository.getOne(addressTypeId);
final Address add = Address.fromJsonObject(jsonObject, stateIdobj, countryIdObj);
this.addressRepository.save(add);
final Long addressid = add.getId();
final Address addobj = this.addressRepository.getOne(addressid);
//final boolean isActive = jsonObject.get("isActive").getAsBoolean();
boolean isActive=false;
if(jsonObject.get("isActive")!= null)
{
isActive= jsonObject.get("isActive").getAsBoolean();
}
clientAddressobj = ClientAddress.fromJson(isActive, client, addobj, addressTypeIdObj);
this.clientAddressRepository.save(clientAddressobj);
if (jsonObject.get("stateProvinceId") != null) {
stateId = jsonObject.get("stateProvinceId").getAsLong();
stateIdobj = this.codeValueRepository.getOne(stateId);
}
if (jsonObject.get("countryId") != null) {
countryId = jsonObject.get("countryId").getAsLong();
countryIdObj = this.codeValueRepository.getOne(countryId);
}
final long addressTypeId = jsonObject.get("addressTypeId").getAsLong();
final CodeValue addressTypeIdObj = this.codeValueRepository.getOne(addressTypeId);
final Address add = Address.fromJsonObject(jsonObject, stateIdobj, countryIdObj);
this.addressRepository.save(add);
final Long addressid = add.getId();
final Address addobj = this.addressRepository.getOne(addressid);
//final boolean isActive = jsonObject.get("isActive").getAsBoolean();
boolean isActive=false;
if(jsonObject.get("isActive")!= null)
{
isActive= jsonObject.get("isActive").getAsBoolean();
}
clientAddressobj = ClientAddress.fromJson(isActive, client, addobj, addressTypeIdObj);
this.clientAddressRepository.save(clientAddressobj);
}
return new CommandProcessingResultBuilder().withCommandId(command.commandId())
@@ -21,12 +21,10 @@ package org.apache.fineract.portfolio.client.data;
import java.util.Collection;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
import org.apache.fineract.infrastructure.codes.data.CodeValueData;
import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.dataqueries.data.DatatableData;
@@ -41,6 +39,7 @@ import org.joda.time.LocalDate;
/**
* Immutable data object representing client data.
*/
@SuppressWarnings("unused")
final public class ClientData implements Comparable<ClientData> {
private final Long id;
@@ -50,7 +49,6 @@ final public class ClientData implements Comparable<ClientData> {
private final EnumOptionData status;
private final CodeValueData subStatus;
@SuppressWarnings("unused")
private final Boolean active;
private final LocalDate activationDate;
@@ -103,11 +101,12 @@ final public class ClientData implements Comparable<ClientData> {
private final ClientNonPersonData clientNonPersonDetails;
private final AddressData address;
private final Collection<AddressData> address;
private final Boolean isAddressEnabled;
private final List<DatatableData> datatables;
private final List<DatatableData> datatables;
//import fields
private transient Integer rowIndex;
@@ -122,7 +121,7 @@ final public class ClientData implements Comparable<ClientData> {
public static ClientData importClientEntityInstance(Long legalFormId,Integer rowIndex,String fullname,Long officeId, Long clientTypeId,
Long clientClassificationId,Long staffId,Boolean active,LocalDate activationDate,LocalDate submittedOnDate,
String externalId,LocalDate dateOfBirth,String mobileNo,ClientNonPersonData clientNonPersonDetails,
AddressData address,String locale,String dateFormat){
Collection<AddressData> address,String locale,String dateFormat){
return new ClientData(legalFormId,rowIndex,fullname, null, null, null, submittedOnDate,activationDate,active, externalId,
officeId, staffId,mobileNo,dateOfBirth,clientTypeId, null,clientClassificationId,null,
address,clientNonPersonDetails, locale,dateFormat);
@@ -131,7 +130,7 @@ final public class ClientData implements Comparable<ClientData> {
public static ClientData importClientPersonInstance(Long legalFormId,Integer rowIndex,String firstName,String lastName,String middleName,
LocalDate submittedOn,LocalDate activationDate,Boolean active,String externalId,Long officeId,
Long staffId,String mobileNo, LocalDate dob,Long clientTypeId,Long genderId,
Long clientClassificationId, Boolean isStaff, AddressData address,String locale,String dateFormat){
Long clientClassificationId, Boolean isStaff, Collection<AddressData> address,String locale,String dateFormat){
return new ClientData(legalFormId,rowIndex, null, firstName,lastName,middleName,submittedOn,activationDate,active,externalId,
officeId,staffId,mobileNo,dob,clientTypeId,genderId,clientClassificationId,isStaff,address, null, locale,dateFormat);
@@ -144,7 +143,7 @@ final public class ClientData implements Comparable<ClientData> {
private ClientData(Long legalFormId,Integer rowIndex, String fullname, String firstname,String lastname,String middlename,
LocalDate submittedOn,LocalDate activationDate,Boolean active,String externalId,Long officeId,
Long staffId,String mobileNo, LocalDate dob,Long clientTypeId,Long genderId,
Long clientClassificationId,Boolean isStaff, AddressData address, ClientNonPersonData clientNonPersonDetails,
Long clientClassificationId,Boolean isStaff, Collection<AddressData> address, ClientNonPersonData clientNonPersonDetails,
String locale,String dateFormat ) {
this.rowIndex=rowIndex;
this.dateFormat=dateFormat;
@@ -225,7 +224,7 @@ final public class ClientData implements Comparable<ClientData> {
final Collection<StaffData> staffOptions, final Collection<CodeValueData> narrations,
final Collection<CodeValueData> genderOptions, final Collection<SavingsProductData> savingProductOptions,
final Collection<CodeValueData> clientTypeOptions, final Collection<CodeValueData> clientClassificationOptions, final Collection<CodeValueData> clientNonPersonConstitutionOptions,
final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions, final List<EnumOptionData> clientLegalFormOptions,final ClientFamilyMembersData familyMemberOptions, final AddressData address,
final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions, final List<EnumOptionData> clientLegalFormOptions,final ClientFamilyMembersData familyMemberOptions, final Collection<AddressData> address,
final Boolean isAddressEnabled, final List<DatatableData> datatables) {
final String accountNo = null;
final EnumOptionData status = null;
@@ -456,7 +455,7 @@ final public class ClientData implements Comparable<ClientData> {
final CodeValueData clientClassification, final Collection<CodeValueData> clientTypeOptions,
final Collection<CodeValueData> clientClassificationOptions, final Collection<CodeValueData> clientNonPersonConstitutionOptions,
final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions, final ClientNonPersonData clientNonPerson,
final List<EnumOptionData> clientLegalFormOptions,final ClientFamilyMembersData familyMemberOptions, final EnumOptionData legalForm, final AddressData address,
final List<EnumOptionData> clientLegalFormOptions,final ClientFamilyMembersData familyMemberOptions, final EnumOptionData legalForm, final Collection<AddressData> address,
final Boolean isAddressEnabled, final List<DatatableData> datatables, final Boolean isStaff) {
this.accountNo = accountNo;
this.status = status;
@@ -29,6 +29,8 @@ import java.util.Set;
import com.google.gson.JsonArray;
import org.apache.commons.lang.StringUtils;
import org.apache.fineract.infrastructure.configuration.data.GlobalConfigurationPropertyData;
import org.apache.fineract.infrastructure.configuration.service.ConfigurationReadPlatformService;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
@@ -49,11 +51,14 @@ import com.google.gson.reflect.TypeToken;
public final class ClientDataValidator {
private final FromJsonHelper fromApiJsonHelper;
private final ConfigurationReadPlatformService configurationReadPlatformService;
@Autowired
public ClientDataValidator(final FromJsonHelper fromApiJsonHelper) {
public ClientDataValidator(final FromJsonHelper fromApiJsonHelper,
final ConfigurationReadPlatformService configurationReadPlatformService) {
this.fromApiJsonHelper = fromApiJsonHelper;
}
this.configurationReadPlatformService = configurationReadPlatformService;
}
public void validateForCreate(final String json) {
@@ -217,6 +222,13 @@ public final class ClientDataValidator {
baseDataValidator.reset().parameter("isStaff").value(isStaffFlag).notNull();
}
if(this.configurationReadPlatformService
.retrieveGlobalConfiguration("Enable-Address").isEnabled()){
final JsonArray address =this.fromApiJsonHelper.extractJsonArrayNamed(ClientApiConstants.address, element);
baseDataValidator.reset().parameter(ClientApiConstants.address).value(address).notNull().jsonArrayNotEmpty();
}
List<ApiParameterError> dataValidationErrorsForClientNonPerson = getDataValidationErrorsForCreateOnClientNonPerson(element.getAsJsonObject().get(ClientApiConstants.clientNonPersonDetailsParamName));
dataValidationErrors.addAll(dataValidationErrorsForClientNonPerson);
@@ -169,8 +169,9 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
return ClientData.template(defaultOfficeId, new LocalDate(), offices, staffOptions, null, genderOptions, savingsProductDatas,
clientTypeOptions, clientClassificationOptions, clientNonPersonConstitutionOptions, clientNonPersonMainBusinessLineOptions,
clientLegalFormOptions,familyMemberOptions,address,isAddressEnabled, datatableTemplates);
}
clientLegalFormOptions, familyMemberOptions, new ArrayList<AddressData>(Arrays.asList(address)),
isAddressEnabled, datatableTemplates);
}
@Override
// @Transactional(readOnly=true)
@@ -427,7 +428,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
}
@Override
public ClientData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
public ClientData mapRow(final ResultSet rs, final int rowNum) throws SQLException {
final String accountNo = rs.getString("accountNo");
@@ -612,7 +613,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
}
@Override
public ClientData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
public ClientData mapRow(final ResultSet rs, final int rowNum) throws SQLException {
final String accountNo = rs.getString("accountNo");
@@ -714,7 +715,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
}
@Override
public GroupGeneralData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
public GroupGeneralData mapRow(final ResultSet rs, final int rowNum) throws SQLException {
final Long groupId = JdbcSupport.getLong(rs, "groupId");
final String groupName = rs.getString("groupName");
@@ -744,7 +745,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
}
@Override
public ClientData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
public ClientData mapRow(final ResultSet rs, final int rowNum) throws SQLException {
final Long id = rs.getLong("id");
final String displayName = rs.getString("displayName");
@@ -778,7 +779,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
}
@Override
public ClientData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
public ClientData mapRow(final ResultSet rs, final int rowNum) throws SQLException {
final Long id = rs.getLong("id");
final String accountNo = rs.getString("accountNo");