Skip to content

Commit

Permalink
FINERACT-656 and FINERACT-655 unable to import client via bulk import…
Browse files Browse the repository at this point in the history
… when address is enabled
  • Loading branch information
ShruthiRajaram committed Nov 2, 2018
1 parent f811fa3 commit 2a772b1
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -29,17 +33,19 @@
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 {

Expand Down Expand Up @@ -134,6 +140,7 @@ private ClientData readClient(Row row,final String locale, final String dateForm
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;
Expand Down Expand Up @@ -167,10 +174,12 @@ private ClientData readClient(Row row,final String locale, final String dateForm
}
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,17 +32,18 @@
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 {
Expand Down Expand Up @@ -120,6 +125,7 @@ private ClientData readClient(Row row,final String locale, final String dateForm
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;
Expand Down Expand Up @@ -154,11 +160,13 @@ private ClientData readClient(Row row,final String locale, final String dateForm
}
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);
Expand All @@ -174,7 +182,7 @@ public Count importEntity(String dateFormat) {
.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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@

import org.apache.fineract.infrastructure.codes.data.CodeValueData;

@SuppressWarnings("unused")
public class AddressData {

private final Long client_id;

private final String addressType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,42 +115,44 @@ public CommandProcessingResult addNewClientAddress(final Client client, final Js
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();

// 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);

for (int i = 0; i < addressArray.size(); i++) {
final JsonObject jsonObject = addressArray.get(i).getAsJsonObject();

// 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);

}

return new CommandProcessingResultBuilder().withCommandId(command.commandId())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,10 @@
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;
Expand All @@ -41,6 +39,7 @@
/**
* Immutable data object representing client data.
*/
@SuppressWarnings("unused")
final public class ClientData implements Comparable<ClientData> {

private final Long id;
Expand All @@ -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;

Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -131,7 +130,7 @@ public static ClientData importClientEntityInstance(Long legalFormId,Integer row
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);
Expand All @@ -144,7 +143,7 @@ public static ClientData emptyInstance(Long clientId) {
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;
Expand Down Expand Up @@ -225,7 +224,7 @@ public static ClientData template(final Long officeId, final LocalDate joinedDat
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;
Expand Down Expand Up @@ -456,7 +455,7 @@ private ClientData(final String accountNo, final EnumOptionData status, final Co
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

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;
Expand All @@ -49,11 +51,14 @@
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) {

Expand Down Expand Up @@ -217,6 +222,13 @@ public void validateForCreate(final String json) {
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);

Expand Down
Loading

0 comments on commit 2a772b1

Please sign in to comment.