diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientEntityImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientEntityImportHandler.java index 36fb4cdb8..28ab011df 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientEntityImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientEntityImportHandler.java @@ -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 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(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); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientPersonImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientPersonImportHandler.java index 34e0fae47..1e828c102 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientPersonImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/client/ClientPersonImportHandler.java @@ -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 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(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); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/AddressData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/AddressData.java index 61bd88946..d4de82bbe 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/AddressData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/AddressData.java @@ -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; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/AddressWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/AddressWritePlatformServiceImpl.java index 913ad2b01..b552c2518 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/AddressWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/service/AddressWritePlatformServiceImpl.java @@ -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()) diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java index 96f136db6..c25730569 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java @@ -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 { private final Long id; @@ -50,7 +49,6 @@ final public class ClientData implements Comparable { 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 { private final ClientNonPersonData clientNonPersonDetails; - private final AddressData address; + private final Collection address; private final Boolean isAddressEnabled; - private final List datatables; + + private final List datatables; //import fields private transient Integer rowIndex; @@ -122,7 +121,7 @@ final public class ClientData implements Comparable { 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 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 { 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 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 { 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 address, ClientNonPersonData clientNonPersonDetails, String locale,String dateFormat ) { this.rowIndex=rowIndex; this.dateFormat=dateFormat; @@ -225,7 +224,7 @@ final public class ClientData implements Comparable { final Collection staffOptions, final Collection narrations, final Collection genderOptions, final Collection savingProductOptions, final Collection clientTypeOptions, final Collection clientClassificationOptions, final Collection clientNonPersonConstitutionOptions, - final Collection clientNonPersonMainBusinessLineOptions, final List clientLegalFormOptions,final ClientFamilyMembersData familyMemberOptions, final AddressData address, + final Collection clientNonPersonMainBusinessLineOptions, final List clientLegalFormOptions,final ClientFamilyMembersData familyMemberOptions, final Collection address, final Boolean isAddressEnabled, final List datatables) { final String accountNo = null; final EnumOptionData status = null; @@ -456,7 +455,7 @@ final public class ClientData implements Comparable { final CodeValueData clientClassification, final Collection clientTypeOptions, final Collection clientClassificationOptions, final Collection clientNonPersonConstitutionOptions, final Collection clientNonPersonMainBusinessLineOptions, final ClientNonPersonData clientNonPerson, - final List clientLegalFormOptions,final ClientFamilyMembersData familyMemberOptions, final EnumOptionData legalForm, final AddressData address, + final List clientLegalFormOptions,final ClientFamilyMembersData familyMemberOptions, final EnumOptionData legalForm, final Collection address, final Boolean isAddressEnabled, final List datatables, final Boolean isStaff) { this.accountNo = accountNo; this.status = status; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java index 7af776ef5..ffa1dadb9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientDataValidator.java @@ -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 dataValidationErrorsForClientNonPerson = getDataValidationErrorsForCreateOnClientNonPerson(element.getAsJsonObject().get(ClientApiConstants.clientNonPersonDetailsParamName)); dataValidationErrors.addAll(dataValidationErrorsForClientNonPerson); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java index 4b1313b44..9d1babd8a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientReadPlatformServiceImpl.java @@ -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(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");