Merge branch 'develop' into swagger-documentation-integration

This commit is contained in:
Sanyam Goel
2018-11-16 16:49:36 +05:30
committed by GitHub
13 changed files with 145 additions and 93 deletions
@@ -18,7 +18,11 @@
*/ */
package org.apache.fineract.infrastructure.bulkimport.importhandler.client; 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.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.commands.service.CommandWrapperBuilder;
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService; 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.ImportHandlerUtils;
import org.apache.fineract.infrastructure.bulkimport.importhandler.helper.DateSerializer; import org.apache.fineract.infrastructure.bulkimport.importhandler.helper.DateSerializer;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; 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.address.data.AddressData;
import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.client.data.ClientData;
import org.apache.fineract.portfolio.client.data.ClientNonPersonData; 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.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import com.google.gson.GsonBuilder;
import java.util.List;
@Service @Service
public class ClientEntityImportHandler implements ImportHandler { public class ClientEntityImportHandler implements ImportHandler {
@@ -134,6 +140,7 @@ public class ClientEntityImportHandler implements ImportHandler {
activationDate=submittedOn; activationDate=submittedOn;
} }
AddressData addressDataObj=null; AddressData addressDataObj=null;
Collection<AddressData> addressList = null;
if (ImportHandlerUtils.readAsBoolean(ClientEntityConstants.ADDRESS_ENABLED,row)) { if (ImportHandlerUtils.readAsBoolean(ClientEntityConstants.ADDRESS_ENABLED,row)) {
String addressType = ImportHandlerUtils.readAsString(ClientEntityConstants.ADDRESS_TYPE_COL, row); String addressType = ImportHandlerUtils.readAsString(ClientEntityConstants.ADDRESS_TYPE_COL, row);
Long addressTypeId = null; Long addressTypeId = null;
@@ -167,10 +174,12 @@ public class ClientEntityImportHandler implements ImportHandler {
} }
addressDataObj = new AddressData(addressTypeId, street, addressLine1, addressLine2, addressLine3, addressDataObj = new AddressData(addressTypeId, street, addressLine1, addressLine2, addressLine3,
city, postalCode, isActiveAddress, stateProvinceId, countryId); city, postalCode, isActiveAddress, stateProvinceId, countryId);
addressList = new ArrayList<AddressData>(Arrays.asList(addressDataObj));
} }
return ClientData.importClientEntityInstance(legalFormId,row.getRowNum(),name,officeId,clientTypeId,clientClassicationId, 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) { public Count importEntity(String dateFormat) {
Sheet clientSheet=workbook.getSheet(TemplatePopulateImportConstants.CLIENT_ENTITY_SHEET_NAME); Sheet clientSheet=workbook.getSheet(TemplatePopulateImportConstants.CLIENT_ENTITY_SHEET_NAME);
@@ -18,7 +18,11 @@
*/ */
package org.apache.fineract.infrastructure.bulkimport.importhandler.client; 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.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.commands.service.CommandWrapperBuilder;
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService; 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.ImportHandler;
import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandlerUtils; import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandlerUtils;
import org.apache.fineract.infrastructure.bulkimport.importhandler.helper.DateSerializer; 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.address.data.AddressData;
import org.apache.fineract.portfolio.client.data.ClientData; 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.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import com.google.gson.GsonBuilder;
import java.util.List;
@Service @Service
public class ClientPersonImportHandler implements ImportHandler { public class ClientPersonImportHandler implements ImportHandler {
@@ -120,6 +125,7 @@ public class ClientPersonImportHandler implements ImportHandler {
Boolean isStaff = ImportHandlerUtils.readAsBoolean(ClientPersonConstants.IS_STAFF_COL, row); Boolean isStaff = ImportHandlerUtils.readAsBoolean(ClientPersonConstants.IS_STAFF_COL, row);
AddressData addressDataObj=null; AddressData addressDataObj=null;
Collection<AddressData> addressList = null;
if (ImportHandlerUtils.readAsBoolean(ClientPersonConstants.ADDRESS_ENABLED_COL,row)) { if (ImportHandlerUtils.readAsBoolean(ClientPersonConstants.ADDRESS_ENABLED_COL,row)) {
String addressType=ImportHandlerUtils.readAsString(ClientPersonConstants.ADDRESS_TYPE_COL, row); String addressType=ImportHandlerUtils.readAsString(ClientPersonConstants.ADDRESS_TYPE_COL, row);
Long addressTypeId = null; Long addressTypeId = null;
@@ -154,11 +160,13 @@ public class ClientPersonImportHandler implements ImportHandler {
} }
addressDataObj = new AddressData(addressTypeId, street, addressLine1, addressLine2, addressLine3, addressDataObj = new AddressData(addressTypeId, street, addressLine1, addressLine2, addressLine3,
city, postalCode, isActiveAddress, stateProvinceId, countryId); 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, 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) { public Count importEntity(String dateFormat) {
Sheet clientSheet=workbook.getSheet(TemplatePopulateImportConstants.CLIENT_PERSON_SHEET_NAME); Sheet clientSheet=workbook.getSheet(TemplatePopulateImportConstants.CLIENT_PERSON_SHEET_NAME);
@@ -174,7 +182,7 @@ public class ClientPersonImportHandler implements ImportHandler {
.createClient() // .createClient() //
.withJson(payload) // .withJson(payload) //
.build(); // .build(); //
final CommandProcessingResult result = commandsSourceWritePlatformService.logCommandSource(commandRequest); commandsSourceWritePlatformService.logCommandSource(commandRequest);
successCount++; successCount++;
Cell statusCell = clientSheet.getRow(client.getRowIndex()).createCell(ClientPersonConstants.STATUS_COL); Cell statusCell = clientSheet.getRow(client.getRowIndex()).createCell(ClientPersonConstants.STATUS_COL);
statusCell.setCellValue(TemplatePopulateImportConstants.STATUS_CELL_IMPORTED); statusCell.setCellValue(TemplatePopulateImportConstants.STATUS_CELL_IMPORTED);
@@ -18,8 +18,10 @@
*/ */
package org.apache.fineract.infrastructure.bulkimport.importhandler.loanrepayment; package org.apache.fineract.infrastructure.bulkimport.importhandler.loanrepayment;
import com.google.gson.GsonBuilder; import java.math.BigDecimal;
import com.google.gson.JsonObject; import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.commands.domain.CommandWrapper; import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder; import org.apache.fineract.commands.service.CommandWrapperBuilder;
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService; import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
@@ -29,28 +31,32 @@ import org.apache.fineract.infrastructure.bulkimport.data.Count;
import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandler; import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandler;
import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandlerUtils; import org.apache.fineract.infrastructure.bulkimport.importhandler.ImportHandlerUtils;
import org.apache.fineract.infrastructure.bulkimport.importhandler.helper.DateSerializer; 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.loanaccount.data.LoanTransactionData; import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
import org.apache.poi.ss.usermodel.*; import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService;
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.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import com.google.gson.GsonBuilder;
import java.util.ArrayList; import com.google.gson.JsonObject;
import java.util.List;
@Service @Service
public class LoanRepaymentImportHandler implements ImportHandler { public class LoanRepaymentImportHandler implements ImportHandler {
private Workbook workbook; private Workbook workbook;
private List<LoanTransactionData> loanRepayments; private List<LoanTransactionData> loanRepayments;
private Integer loanAccountId; private Long loanAccountId;
private final LoanReadPlatformService loanReadPlatformService;
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService; private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
@Autowired @Autowired
public LoanRepaymentImportHandler(final PortfolioCommandSourceWritePlatformService public LoanRepaymentImportHandler(final PortfolioCommandSourceWritePlatformService
commandsSourceWritePlatformService) { commandsSourceWritePlatformService, final LoanReadPlatformService loanReadPlatformService) {
this.commandsSourceWritePlatformService = commandsSourceWritePlatformService; this.commandsSourceWritePlatformService = commandsSourceWritePlatformService;
this.loanReadPlatformService = loanReadPlatformService;
} }
@Override @Override
@@ -75,7 +81,7 @@ public class LoanRepaymentImportHandler implements ImportHandler {
String loanaccountInfo=ImportHandlerUtils.readAsString(LoanRepaymentConstants.LOAN_ACCOUNT_NO_COL, row); String loanaccountInfo=ImportHandlerUtils.readAsString(LoanRepaymentConstants.LOAN_ACCOUNT_NO_COL, row);
if (loanaccountInfo!=null){ if (loanaccountInfo!=null){
String loanAccountAr[]=loanaccountInfo.split("-"); String loanAccountAr[]=loanaccountInfo.split("-");
loanAccountId=Integer.parseInt(loanAccountAr[0]); loanAccountId = this.loanReadPlatformService.retrieveLoanIdByAccountNumber(loanAccountAr[0]);
} }
BigDecimal repaymentAmount=null; BigDecimal repaymentAmount=null;
if (ImportHandlerUtils.readAsDouble(LoanRepaymentConstants.AMOUNT_COL, row)!=null) if (ImportHandlerUtils.readAsDouble(LoanRepaymentConstants.AMOUNT_COL, row)!=null)
@@ -107,10 +113,10 @@ public class LoanRepaymentImportHandler implements ImportHandler {
loanRepaymentJsonob.remove("manuallyReversed"); loanRepaymentJsonob.remove("manuallyReversed");
String payload=loanRepaymentJsonob.toString(); String payload=loanRepaymentJsonob.toString();
final CommandWrapper commandRequest = new CommandWrapperBuilder() // final CommandWrapper commandRequest = new CommandWrapperBuilder() //
.loanRepaymentTransaction(loanRepayment.getAccountId().longValue()) // .loanRepaymentTransaction(loanRepayment.getAccountId()) //
.withJson(payload) // .withJson(payload) //
.build(); // .build(); //
final CommandProcessingResult result = commandsSourceWritePlatformService.logCommandSource(commandRequest); commandsSourceWritePlatformService.logCommandSource(commandRequest);
successCount++; successCount++;
Cell statusCell = loanRepaymentSheet.getRow(loanRepayment.getRowIndex()).createCell(LoanRepaymentConstants.STATUS_COL); Cell statusCell = loanRepaymentSheet.getRow(loanRepayment.getRowIndex()).createCell(LoanRepaymentConstants.STATUS_COL);
statusCell.setCellValue(TemplatePopulateImportConstants.STATUS_CELL_IMPORTED); statusCell.setCellValue(TemplatePopulateImportConstants.STATUS_CELL_IMPORTED);
@@ -213,7 +213,7 @@ public class LoanRepaymentWorkbookPopulator extends AbstractWorkbookPopulator {
row = loanRepaymentSheet.createRow(rowIndex++); row = loanRepaymentSheet.createRow(rowIndex++);
writeString(LoanRepaymentConstants.LOOKUP_CLIENT_NAME_COL, row, loan.getClientName() + "(" + loan.getClientId() + ")"); writeString(LoanRepaymentConstants.LOOKUP_CLIENT_NAME_COL, row, loan.getClientName() + "(" + loan.getClientId() + ")");
writeString(LoanRepaymentConstants.LOOKUP_CLIENT_EXTERNAL_ID,row, clientIdToClientExternalId.get(loan.getClientId())); writeString(LoanRepaymentConstants.LOOKUP_CLIENT_EXTERNAL_ID,row, clientIdToClientExternalId.get(loan.getClientId()));
writeString(LoanRepaymentConstants.LOOKUP_ACCOUNT_NO_COL, row, Long.parseLong(loan.getAccountNo())+"-"+loan.getStatusStringValue()); writeString(LoanRepaymentConstants.LOOKUP_ACCOUNT_NO_COL, row, loan.getAccountNo()+"-"+loan.getStatusStringValue());
writeString(LoanRepaymentConstants.LOOKUP_PRODUCT_COL, row, loan.getLoanProductName()); writeString(LoanRepaymentConstants.LOOKUP_PRODUCT_COL, row, loan.getLoanProductName());
writeDouble(LoanRepaymentConstants.LOOKUP_PRINCIPAL_COL, row, loan.getPrincipal().doubleValue()); writeDouble(LoanRepaymentConstants.LOOKUP_PRINCIPAL_COL, row, loan.getPrincipal().doubleValue());
if (loan.getDisbursementDate() != null) { if (loan.getDisbursementDate() != null) {
@@ -24,7 +24,9 @@ import java.util.Date;
import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.codes.data.CodeValueData;
@SuppressWarnings("unused")
public class AddressData { public class AddressData {
private final Long client_id; private final Long client_id;
private final String addressType; private final String addressType;
@@ -115,42 +115,44 @@ public class AddressWritePlatformServiceImpl implements AddressWritePlatformServ
long countryId; long countryId;
ClientAddress clientAddressobj = new ClientAddress(); ClientAddress clientAddressobj = new ClientAddress();
final JsonArray addressArray = command.arrayOfParameterNamed("address"); 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++) { // validate every address
final JsonObject jsonObject = addressArray.get(i).getAsJsonObject(); this.fromApiJsonDeserializer.validateForCreate(jsonObject.toString(), true);
// validate every address if (jsonObject.get("stateProvinceId") != null) {
this.fromApiJsonDeserializer.validateForCreate(jsonObject.toString(), true); 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()) return new CommandProcessingResultBuilder().withCommandId(command.commandId())
@@ -21,12 +21,10 @@ package org.apache.fineract.portfolio.client.data;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; 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.codes.data.CodeValueData;
import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.core.data.EnumOptionData;
import org.apache.fineract.infrastructure.dataqueries.data.DatatableData; import org.apache.fineract.infrastructure.dataqueries.data.DatatableData;
@@ -41,6 +39,7 @@ import org.joda.time.LocalDate;
/** /**
* Immutable data object representing client data. * Immutable data object representing client data.
*/ */
@SuppressWarnings("unused")
final public class ClientData implements Comparable<ClientData> { final public class ClientData implements Comparable<ClientData> {
private final Long id; private final Long id;
@@ -50,7 +49,6 @@ final public class ClientData implements Comparable<ClientData> {
private final EnumOptionData status; private final EnumOptionData status;
private final CodeValueData subStatus; private final CodeValueData subStatus;
@SuppressWarnings("unused")
private final Boolean active; private final Boolean active;
private final LocalDate activationDate; private final LocalDate activationDate;
@@ -102,12 +100,13 @@ final public class ClientData implements Comparable<ClientData> {
private final ClientFamilyMembersData familyMemberOptions; private final ClientFamilyMembersData familyMemberOptions;
private final ClientNonPersonData clientNonPersonDetails; private final ClientNonPersonData clientNonPersonDetails;
private final AddressData address; private final Collection<AddressData> address;
private final Boolean isAddressEnabled; private final Boolean isAddressEnabled;
private final List<DatatableData> datatables;
private final List<DatatableData> datatables;
//import fields //import fields
private transient Integer rowIndex; 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, public static ClientData importClientEntityInstance(Long legalFormId,Integer rowIndex,String fullname,Long officeId, Long clientTypeId,
Long clientClassificationId,Long staffId,Boolean active,LocalDate activationDate,LocalDate submittedOnDate, Long clientClassificationId,Long staffId,Boolean active,LocalDate activationDate,LocalDate submittedOnDate,
String externalId,LocalDate dateOfBirth,String mobileNo,ClientNonPersonData clientNonPersonDetails, 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, return new ClientData(legalFormId,rowIndex,fullname, null, null, null, submittedOnDate,activationDate,active, externalId,
officeId, staffId,mobileNo,dateOfBirth,clientTypeId, null,clientClassificationId,null, officeId, staffId,mobileNo,dateOfBirth,clientTypeId, null,clientClassificationId,null,
address,clientNonPersonDetails, locale,dateFormat); 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, public static ClientData importClientPersonInstance(Long legalFormId,Integer rowIndex,String firstName,String lastName,String middleName,
LocalDate submittedOn,LocalDate activationDate,Boolean active,String externalId,Long officeId, LocalDate submittedOn,LocalDate activationDate,Boolean active,String externalId,Long officeId,
Long staffId,String mobileNo, LocalDate dob,Long clientTypeId,Long genderId, 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, 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); 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, private ClientData(Long legalFormId,Integer rowIndex, String fullname, String firstname,String lastname,String middlename,
LocalDate submittedOn,LocalDate activationDate,Boolean active,String externalId,Long officeId, LocalDate submittedOn,LocalDate activationDate,Boolean active,String externalId,Long officeId,
Long staffId,String mobileNo, LocalDate dob,Long clientTypeId,Long genderId, 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 ) { String locale,String dateFormat ) {
this.rowIndex=rowIndex; this.rowIndex=rowIndex;
this.dateFormat=dateFormat; this.dateFormat=dateFormat;
@@ -225,7 +224,7 @@ final public class ClientData implements Comparable<ClientData> {
final Collection<StaffData> staffOptions, final Collection<CodeValueData> narrations, final Collection<StaffData> staffOptions, final Collection<CodeValueData> narrations,
final Collection<CodeValueData> genderOptions, final Collection<SavingsProductData> savingProductOptions, final Collection<CodeValueData> genderOptions, final Collection<SavingsProductData> savingProductOptions,
final Collection<CodeValueData> clientTypeOptions, final Collection<CodeValueData> clientClassificationOptions, final Collection<CodeValueData> clientNonPersonConstitutionOptions, 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 Boolean isAddressEnabled, final List<DatatableData> datatables) {
final String accountNo = null; final String accountNo = null;
final EnumOptionData status = null; final EnumOptionData status = null;
@@ -456,7 +455,7 @@ final public class ClientData implements Comparable<ClientData> {
final CodeValueData clientClassification, final Collection<CodeValueData> clientTypeOptions, final CodeValueData clientClassification, final Collection<CodeValueData> clientTypeOptions,
final Collection<CodeValueData> clientClassificationOptions, final Collection<CodeValueData> clientNonPersonConstitutionOptions, final Collection<CodeValueData> clientClassificationOptions, final Collection<CodeValueData> clientNonPersonConstitutionOptions,
final Collection<CodeValueData> clientNonPersonMainBusinessLineOptions, final ClientNonPersonData clientNonPerson, 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) { final Boolean isAddressEnabled, final List<DatatableData> datatables, final Boolean isStaff) {
this.accountNo = accountNo; this.accountNo = accountNo;
this.status = status; this.status = status;
@@ -29,6 +29,8 @@ import java.util.Set;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import org.apache.commons.lang.StringUtils; 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.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
@@ -49,11 +51,14 @@ import com.google.gson.reflect.TypeToken;
public final class ClientDataValidator { public final class ClientDataValidator {
private final FromJsonHelper fromApiJsonHelper; private final FromJsonHelper fromApiJsonHelper;
private final ConfigurationReadPlatformService configurationReadPlatformService;
@Autowired @Autowired
public ClientDataValidator(final FromJsonHelper fromApiJsonHelper) { public ClientDataValidator(final FromJsonHelper fromApiJsonHelper,
final ConfigurationReadPlatformService configurationReadPlatformService) {
this.fromApiJsonHelper = fromApiJsonHelper; this.fromApiJsonHelper = fromApiJsonHelper;
} this.configurationReadPlatformService = configurationReadPlatformService;
}
public void validateForCreate(final String json) { public void validateForCreate(final String json) {
@@ -217,6 +222,13 @@ public final class ClientDataValidator {
baseDataValidator.reset().parameter("isStaff").value(isStaffFlag).notNull(); 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)); List<ApiParameterError> dataValidationErrorsForClientNonPerson = getDataValidationErrorsForCreateOnClientNonPerson(element.getAsJsonObject().get(ClientApiConstants.clientNonPersonDetailsParamName));
dataValidationErrors.addAll(dataValidationErrorsForClientNonPerson); dataValidationErrors.addAll(dataValidationErrorsForClientNonPerson);
@@ -169,8 +169,9 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
return ClientData.template(defaultOfficeId, new LocalDate(), offices, staffOptions, null, genderOptions, savingsProductDatas, return ClientData.template(defaultOfficeId, new LocalDate(), offices, staffOptions, null, genderOptions, savingsProductDatas,
clientTypeOptions, clientClassificationOptions, clientNonPersonConstitutionOptions, clientNonPersonMainBusinessLineOptions, clientTypeOptions, clientClassificationOptions, clientNonPersonConstitutionOptions, clientNonPersonMainBusinessLineOptions,
clientLegalFormOptions,familyMemberOptions,address,isAddressEnabled, datatableTemplates); clientLegalFormOptions, familyMemberOptions, new ArrayList<AddressData>(Arrays.asList(address)),
} isAddressEnabled, datatableTemplates);
}
@Override @Override
// @Transactional(readOnly=true) // @Transactional(readOnly=true)
@@ -427,7 +428,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
} }
@Override @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"); final String accountNo = rs.getString("accountNo");
@@ -612,7 +613,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
} }
@Override @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"); final String accountNo = rs.getString("accountNo");
@@ -714,7 +715,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
} }
@Override @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 Long groupId = JdbcSupport.getLong(rs, "groupId");
final String groupName = rs.getString("groupName"); final String groupName = rs.getString("groupName");
@@ -744,7 +745,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
} }
@Override @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 Long id = rs.getLong("id");
final String displayName = rs.getString("displayName"); final String displayName = rs.getString("displayName");
@@ -778,7 +779,7 @@ public class ClientReadPlatformServiceImpl implements ClientReadPlatformService
} }
@Override @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 Long id = rs.getLong("id");
final String accountNo = rs.getString("accountNo"); final String accountNo = rs.getString("accountNo");
@@ -46,10 +46,10 @@ import org.apache.commons.lang.StringUtils;
import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.codes.domain.CodeValue;
import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException; import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.infrastructure.security.service.RandomPasswordGenerator; import org.apache.fineract.infrastructure.security.service.RandomPasswordGenerator;
import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.Office;
import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.organisation.staff.domain.Staff;
@@ -334,7 +334,9 @@ public final class Group extends AbstractPersistableCustom<Long> {
actualChanges.put(GroupingTypesApiConstants.localeParamName, localeAsInput); actualChanges.put(GroupingTypesApiConstants.localeParamName, localeAsInput);
final LocalDate newValue = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.activationDateParamName); final LocalDate newValue = command.localDateValueOfParameterNamed(GroupingTypesApiConstants.activationDateParamName);
this.activationDate = newValue.toDate(); if (newValue != null) {
this.activationDate = newValue.toDate();
}
} }
if (command.isChangeInStringParameterNamed(GroupingTypesApiConstants.accountNoParamName, this.accountNumber)) { if (command.isChangeInStringParameterNamed(GroupingTypesApiConstants.accountNoParamName, this.accountNumber)) {
@@ -21,7 +21,6 @@ package org.apache.fineract.portfolio.loanaccount.data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.codes.data.CodeValueData;
import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.monetary.data.CurrencyData;
import org.apache.fineract.portfolio.account.data.AccountTransferData; import org.apache.fineract.portfolio.account.data.AccountTransferData;
@@ -32,6 +31,7 @@ import org.joda.time.LocalDate;
/** /**
* Immutable data object representing a loan transaction. * Immutable data object representing a loan transaction.
*/ */
@SuppressWarnings("unused")
public class LoanTransactionData { public class LoanTransactionData {
private final Long id; private final Long id;
@@ -56,16 +56,14 @@ public class LoanTransactionData {
private final AccountTransferData transfer; private final AccountTransferData transfer;
private final BigDecimal fixedEmiAmount; private final BigDecimal fixedEmiAmount;
private final BigDecimal outstandingLoanBalance; private final BigDecimal outstandingLoanBalance;
@SuppressWarnings("unused")
private final LocalDate submittedOnDate; private final LocalDate submittedOnDate;
private final boolean manuallyReversed; private final boolean manuallyReversed;
@SuppressWarnings("unused")
private final LocalDate possibleNextRepaymentDate; private final LocalDate possibleNextRepaymentDate;
// templates // templates
final Collection<PaymentTypeData> paymentTypeOptions; final Collection<PaymentTypeData> paymentTypeOptions;
private Collection<CodeValueData> writeOffReasonOptions = null; private Collection<CodeValueData> writeOffReasonOptions = null;
//import fields //import fields
private transient Integer rowIndex; private transient Integer rowIndex;
@@ -79,7 +77,7 @@ public class LoanTransactionData {
private Integer routingCode; private Integer routingCode;
private Integer receiptNumber; private Integer receiptNumber;
private Integer bankNumber; private Integer bankNumber;
private transient Integer accountId; private transient Long accountId;
private transient String transactionType; private transient String transactionType;
public static LoanTransactionData importInstance(BigDecimal repaymentAmount,LocalDate lastRepaymentDate, public static LoanTransactionData importInstance(BigDecimal repaymentAmount,LocalDate lastRepaymentDate,
@@ -120,7 +118,7 @@ public class LoanTransactionData {
} }
public static LoanTransactionData importInstance(BigDecimal repaymentAmount,LocalDate repaymentDate, public static LoanTransactionData importInstance(BigDecimal repaymentAmount,LocalDate repaymentDate,
Long repaymentTypeId, String accountNumber,Integer checkNumber,Integer routingCode, Long repaymentTypeId, String accountNumber,Integer checkNumber,Integer routingCode,
Integer receiptNumber, Integer bankNumber,Integer loanAccountId,String transactionType, Integer receiptNumber, Integer bankNumber,Long loanAccountId,String transactionType,
Integer rowIndex,String locale, String dateFormat){ Integer rowIndex,String locale, String dateFormat){
return new LoanTransactionData(repaymentAmount, repaymentDate, repaymentTypeId, accountNumber, return new LoanTransactionData(repaymentAmount, repaymentDate, repaymentTypeId, accountNumber,
checkNumber, routingCode, receiptNumber, bankNumber, loanAccountId, "", checkNumber, routingCode, receiptNumber, bankNumber, loanAccountId, "",
@@ -129,7 +127,7 @@ public class LoanTransactionData {
private LoanTransactionData(BigDecimal transactionAmount,LocalDate transactionDate, Long paymentTypeId, private LoanTransactionData(BigDecimal transactionAmount,LocalDate transactionDate, Long paymentTypeId,
String accountNumber,Integer checkNumber,Integer routingCode,Integer receiptNumber, String accountNumber,Integer checkNumber,Integer routingCode,Integer receiptNumber,
Integer bankNumber,Integer accountId,String transactionType,Integer rowIndex,String locale, Integer bankNumber,Long accountId,String transactionType,Integer rowIndex,String locale,
String dateFormat) { String dateFormat) {
this.transactionAmount = transactionAmount; this.transactionAmount = transactionAmount;
this.transactionDate = transactionDate; this.transactionDate = transactionDate;
@@ -169,7 +167,7 @@ public class LoanTransactionData {
this.writeOffReasonOptions = null; this.writeOffReasonOptions = null;
} }
public Integer getAccountId() { public Long getAccountId() {
return accountId; return accountId;
} }
@@ -132,4 +132,6 @@ public interface LoanReadPlatformService {
LoanTransactionData retrieveLoanForeclosureTemplate(final Long loanId, final LocalDate transactionDate); LoanTransactionData retrieveLoanForeclosureTemplate(final Long loanId, final LocalDate transactionDate);
LoanAccountData retrieveLoanByLoanAccount(String loanAccountNumber); LoanAccountData retrieveLoanByLoanAccount(String loanAccountNumber);
Long retrieveLoanIdByAccountNumber(String loanAccountNumber);
} }
@@ -2197,5 +2197,16 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
} }
} }
@Override
public Long retrieveLoanIdByAccountNumber(String loanAccountNumber) {
try {
return this.jdbcTemplate.queryForObject("select l.id from m_loan l where l.account_no = ?",
new Object[] { loanAccountNumber }, Long.class);
} catch (final EmptyResultDataAccessException e) {
return null;
}
}
} }