FINERACT-1017: Fixing LoanImport integration tests

This commit is contained in:
Petri Tuomola
2020-06-03 22:25:36 +02:00
committed by Michael Vorburger ⛑️
parent 7a2d459af3
commit 14b14aecac
5 changed files with 115 additions and 79 deletions
@@ -18,9 +18,11 @@
*/ */
package org.apache.fineract.integrationtests.bulkimport.importhandler.loan; package org.apache.fineract.integrationtests.bulkimport.importhandler.loan;
import com.google.gson.Gson;
import io.restassured.builder.RequestSpecBuilder; import io.restassured.builder.RequestSpecBuilder;
import io.restassured.builder.ResponseSpecBuilder; import io.restassured.builder.ResponseSpecBuilder;
import io.restassured.http.ContentType; import io.restassured.http.ContentType;
import io.restassured.path.json.JsonPath;
import io.restassured.specification.RequestSpecification; import io.restassured.specification.RequestSpecification;
import io.restassured.specification.ResponseSpecification; import io.restassured.specification.ResponseSpecification;
import java.io.File; import java.io.File;
@@ -31,14 +33,20 @@ import java.io.OutputStream;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import org.apache.fineract.infrastructure.bulkimport.constants.LoanConstants; import org.apache.fineract.infrastructure.bulkimport.constants.LoanConstants;
import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants;
import org.apache.fineract.integrationtests.common.ClientHelper;
import org.apache.fineract.integrationtests.common.GroupHelper; import org.apache.fineract.integrationtests.common.GroupHelper;
import org.apache.fineract.integrationtests.common.OfficeDomain;
import org.apache.fineract.integrationtests.common.OfficeHelper; import org.apache.fineract.integrationtests.common.OfficeHelper;
import org.apache.fineract.integrationtests.common.PaymentTypeHelper;
import org.apache.fineract.integrationtests.common.Utils; import org.apache.fineract.integrationtests.common.Utils;
import org.apache.fineract.integrationtests.common.funds.FundsHelper;
import org.apache.fineract.integrationtests.common.funds.FundsResourceHandler;
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
import org.apache.fineract.integrationtests.common.organisation.StaffHelper; import org.apache.fineract.integrationtests.common.organisation.StaffHelper;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -47,10 +55,16 @@ import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoanImportHandlerTest { public class LoanImportHandlerTest {
private final static Logger LOG = LoggerFactory.getLogger(LoanImportHandlerTest.class);
private static final String CREATE_CLIENT_URL = "/fineract-provider/api/v1/clients?" + Utils.TENANT_IDENTIFIER;
public static final String DATE_FORMAT = "dd MMMM yyyy";
private ResponseSpecification responseSpec; private ResponseSpecification responseSpec;
private RequestSpecification requestSpec; private RequestSpecification requestSpec;
@@ -63,49 +77,65 @@ public class LoanImportHandlerTest {
} }
@Test @Test
@Ignore
public void testLoanImport() throws InterruptedException, IOException, ParseException { public void testLoanImport() throws InterruptedException, IOException, ParseException {
requestSpec.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); requestSpec.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
//in order to populate helper sheets //in order to populate helper sheets
OfficeHelper officeHelper=new OfficeHelper(requestSpec,responseSpec); OfficeHelper officeHelper=new OfficeHelper(requestSpec,responseSpec);
Integer outcome_office_creation=officeHelper.createOffice("02 May 2000"); Integer outcome_office_creation=officeHelper.createOffice("02 May 2000");
Assert.assertNotNull("Could not create office" ,outcome_office_creation); Assert.assertNotNull("Could not create office" ,outcome_office_creation);
//in order to populate helper sheets OfficeDomain office = officeHelper.retrieveOfficeByID(outcome_office_creation);
ClientHelper clientHelper=new ClientHelper(requestSpec,responseSpec); Assert.assertNotNull("Could not retrieve created office", office);
Integer outcome_client_creation=clientHelper.createClient(requestSpec,responseSpec);
String firstName = Utils.randomNameGenerator("Client_FirstName_", 5);
String lastName = Utils.randomNameGenerator("Client_LastName_", 4);
String externalId = Utils.randomStringGenerator("ID_", 7, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
final HashMap<String, String> clientMap = new HashMap<>();
clientMap.put("officeId", outcome_office_creation.toString());
clientMap.put("firstname", firstName);
clientMap.put("lastname", lastName);
clientMap.put("externalId", externalId);
clientMap.put("dateFormat", DATE_FORMAT);
clientMap.put("locale", "en");
clientMap.put("active", "true");
clientMap.put("activationDate", "04 March 2011");
Integer outcome_client_creation= Utils.performServerPost(requestSpec, responseSpec, CREATE_CLIENT_URL,
new Gson().toJson(clientMap), "clientId");
Assert.assertNotNull("Could not create client" ,outcome_client_creation); Assert.assertNotNull("Could not create client" ,outcome_client_creation);
//in order to populate helper sheets //in order to populate helper sheets
GroupHelper groupHelper=new GroupHelper(requestSpec,responseSpec); Integer outcome_group_creation = GroupHelper.createGroup(requestSpec,responseSpec,true);
Integer outcome_group_creation=groupHelper.createGroup(requestSpec,responseSpec,true);
Assert.assertNotNull("Could not create group" ,outcome_group_creation); Assert.assertNotNull("Could not create group" ,outcome_group_creation);
//in order to populate helper sheets //in order to populate helper sheets
StaffHelper staffHelper=new StaffHelper(); Integer outcome_staff_creation = StaffHelper.createStaff(requestSpec,responseSpec);
Integer outcome_staff_creation =staffHelper.createStaff(requestSpec,responseSpec);
Assert.assertNotNull("Could not create staff",outcome_staff_creation); Assert.assertNotNull("Could not create staff",outcome_staff_creation);
// LoanTransactionHelper ltHelper=new LoanTransactionHelper(requestSpec,responseSpec); Map<String, Object> staffMap = StaffHelper.getStaff(requestSpec, responseSpec, outcome_staff_creation);
// LoanProductTestBuilder loanProductTestBuilder=new LoanProductTestBuilder(); Assert.assertNotNull("Could not retrieve created staff", staffMap);
// String jsonLoanProduct=loanProductTestBuilder.build(null);
// Integer outcome_lp_creaion=ltHelper.getLoanProductId(jsonLoanProduct);
// Assert.assertNotNull("Could not create Loan Product" ,outcome_lp_creaion);
// FundsResourceHandler fundsResourceHandler=new FundsResourceHandler(); LoanTransactionHelper ltHelper=new LoanTransactionHelper(requestSpec,responseSpec);
// String jsonFund="{\n" + LoanProductTestBuilder loanProductTestBuilder=new LoanProductTestBuilder();
// "\t\"name\": \""+Utils.randomNameGenerator("Fund_Name",9)+"\"\n" + String jsonLoanProduct=loanProductTestBuilder.build(null);
// "}"; Integer outcome_lp_creation=ltHelper.getLoanProductId(jsonLoanProduct);
// Integer outcome_fund_creation=fundsResourceHandler.createFund(jsonFund,requestSpec,responseSpec); Assert.assertNotNull("Could not create Loan Product" ,outcome_lp_creation);
// Assert.assertNotNull("Could not create Fund" ,outcome_fund_creation);
// PaymentTypeHelper paymentTypeHelper=new PaymentTypeHelper(); String loanProductStr = ltHelper.getLoanProductDetails(requestSpec, responseSpec, outcome_lp_creation);
// String name = PaymentTypeHelper.randomNameGenerator("P_T", 5); Assert.assertNotNull("Could not get created Loan Product" , loanProductStr);
// String description = PaymentTypeHelper.randomNameGenerator("PT_Desc", 15); JsonPath loanProductJson = JsonPath.from(loanProductStr);
// Boolean isCashPayment = true;
// Integer position = 1; String fundName = Utils.randomNameGenerator("",9);
// Integer outcome_payment_creation= paymentTypeHelper.createPaymentType(requestSpec, responseSpec,name,description,isCashPayment,position); FundsHelper fh = FundsHelper.create(fundName).externalId("fund-" + fundName).build();
// Assert.assertNotNull("Could not create payment type" ,outcome_payment_creation); Integer outcome_fund_creation= FundsResourceHandler.createFund(new Gson().toJson(fh),requestSpec,responseSpec);
Assert.assertNotNull("Could not create Fund" ,outcome_fund_creation);
String paymentTypeName = PaymentTypeHelper.randomNameGenerator("P_T", 5);
String paymentTypeDescription = PaymentTypeHelper.randomNameGenerator("PT_Desc", 15);
Integer outcome_payment_creation= PaymentTypeHelper.createPaymentType(requestSpec, responseSpec, paymentTypeName, paymentTypeDescription, true,1);
Assert.assertNotNull("Could not create payment type" ,outcome_payment_creation);
LoanTransactionHelper loanTransactionHelper=new LoanTransactionHelper(requestSpec,responseSpec); LoanTransactionHelper loanTransactionHelper=new LoanTransactionHelper(requestSpec,responseSpec);
Workbook workbook=loanTransactionHelper.getLoanWorkbook("dd MMMM yyyy"); Workbook workbook=loanTransactionHelper.getLoanWorkbook("dd MMMM yyyy");
@@ -113,43 +143,39 @@ public class LoanImportHandlerTest {
//insert dummy data into loan Sheet //insert dummy data into loan Sheet
Sheet loanSheet = workbook.getSheet(TemplatePopulateImportConstants.LOANS_SHEET_NAME); Sheet loanSheet = workbook.getSheet(TemplatePopulateImportConstants.LOANS_SHEET_NAME);
Row firstLoanRow=loanSheet.getRow(1); Row firstLoanRow=loanSheet.getRow(1);
Sheet officeSheet=workbook.getSheet(TemplatePopulateImportConstants.OFFICE_SHEET_NAME); firstLoanRow.createCell(LoanConstants.OFFICE_NAME_COL).setCellValue(office.getName());
firstLoanRow.createCell(LoanConstants.OFFICE_NAME_COL).setCellValue(officeSheet.getRow(1).getCell(1).getStringCellValue());
firstLoanRow.createCell(LoanConstants.LOAN_TYPE_COL).setCellValue("Individual"); firstLoanRow.createCell(LoanConstants.LOAN_TYPE_COL).setCellValue("Individual");
firstLoanRow.createCell(LoanConstants.CLIENT_NAME_COL).setCellValue(loanSheet.getRow(1).getCell(LoanConstants.LOOKUP_CLIENT_NAME_COL).getStringCellValue()); firstLoanRow.createCell(LoanConstants.CLIENT_NAME_COL).setCellValue(firstName + " " + lastName + "(" + outcome_client_creation + ")");
firstLoanRow.createCell(LoanConstants.CLIENT_EXTERNAL_ID).setCellValue(loanSheet.getRow(1).getCell(LoanConstants.LOOKUP_CLIENT_EXTERNAL_ID).getStringCellValue()); firstLoanRow.createCell(LoanConstants.CLIENT_EXTERNAL_ID).setCellValue(externalId);
Sheet loanProductSheet=workbook.getSheet(TemplatePopulateImportConstants.PRODUCT_SHEET_NAME); firstLoanRow.createCell(LoanConstants.PRODUCT_COL).setCellValue(loanProductJson.getString("name"));
firstLoanRow.createCell(LoanConstants.PRODUCT_COL).setCellValue(loanProductSheet.getRow(1).getCell(1).getStringCellValue()); firstLoanRow.createCell(LoanConstants.LOAN_OFFICER_NAME_COL).setCellValue((String) staffMap.get("displayName"));
Sheet staffSheet=workbook.getSheet(TemplatePopulateImportConstants.STAFF_SHEET_NAME);
firstLoanRow.createCell(LoanConstants.LOAN_OFFICER_NAME_COL).setCellValue(staffSheet.getRow(1).getCell(1).getStringCellValue());
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd MMMM yyyy"); SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd MMMM yyyy");
Date date=simpleDateFormat.parse("13 May 2017"); Date date=simpleDateFormat.parse("13 May 2017");
firstLoanRow.createCell(LoanConstants.SUBMITTED_ON_DATE_COL).setCellValue(date); firstLoanRow.createCell(LoanConstants.SUBMITTED_ON_DATE_COL).setCellValue(date);
firstLoanRow.createCell(LoanConstants.APPROVED_DATE_COL).setCellValue(date); firstLoanRow.createCell(LoanConstants.APPROVED_DATE_COL).setCellValue(date);
firstLoanRow.createCell(LoanConstants.DISBURSED_DATE_COL).setCellValue(date); firstLoanRow.createCell(LoanConstants.DISBURSED_DATE_COL).setCellValue(date);
Sheet extrasSheet=workbook.getSheet(TemplatePopulateImportConstants.EXTRAS_SHEET_NAME); firstLoanRow.createCell(LoanConstants.DISBURSED_PAYMENT_TYPE_COL).setCellValue(paymentTypeName);
firstLoanRow.createCell(LoanConstants.DISBURSED_PAYMENT_TYPE_COL).setCellValue(extrasSheet.getRow(1).getCell(3).getStringCellValue()); firstLoanRow.createCell(LoanConstants.FUND_NAME_COL).setCellValue(fundName);
firstLoanRow.createCell(LoanConstants.FUND_NAME_COL).setCellValue(extrasSheet.getRow(1).getCell(1).getStringCellValue()); firstLoanRow.createCell(LoanConstants.PRINCIPAL_COL).setCellValue(loanProductJson.getFloat("principal"));
firstLoanRow.createCell(LoanConstants.PRINCIPAL_COL).setCellValue(loanProductSheet.getRow(1).getCell(3).getNumericCellValue()); firstLoanRow.createCell(LoanConstants.NO_OF_REPAYMENTS_COL).setCellValue(loanProductJson.getInt("numberOfRepayments"));
firstLoanRow.createCell(LoanConstants.NO_OF_REPAYMENTS_COL).setCellValue(loanProductSheet.getRow(1).getCell(6).getNumericCellValue()); firstLoanRow.createCell(LoanConstants.REPAID_EVERY_COL).setCellValue(loanProductJson.getInt("repaymentEvery"));
firstLoanRow.createCell(LoanConstants.REPAID_EVERY_COL).setCellValue(loanProductSheet.getRow(1).getCell(9).getNumericCellValue()); firstLoanRow.createCell(LoanConstants.REPAID_EVERY_FREQUENCY_COL).setCellValue(loanProductJson.getString("repaymentFrequencyType.value"));
firstLoanRow.createCell(LoanConstants.REPAID_EVERY_FREQUENCY_COL).setCellValue(loanProductSheet.getRow(1).getCell(10).getStringCellValue()); firstLoanRow.createCell(LoanConstants.LOAN_TERM_COL).setCellValue(loanProductJson.getInt("repaymentEvery") * loanProductJson.getInt("numberOfRepayments"));
firstLoanRow.createCell(LoanConstants.LOAN_TERM_COL).setCellValue(60); firstLoanRow.createCell(LoanConstants.LOAN_TERM_FREQUENCY_COL).setCellValue(loanProductJson.getString("repaymentFrequencyType.value"));
firstLoanRow.createCell(LoanConstants.LOAN_TERM_FREQUENCY_COL).setCellValue(loanProductSheet.getRow(1).getCell(10).getStringCellValue()); firstLoanRow.createCell(LoanConstants.NOMINAL_INTEREST_RATE_COL).setCellValue(loanProductJson.getDouble("interestRatePerPeriod"));
firstLoanRow.createCell(LoanConstants.NOMINAL_INTEREST_RATE_COL).setCellValue(loanProductSheet.getRow(1).getCell(11).getNumericCellValue()); firstLoanRow.createCell(LoanConstants.NOMINAL_INTEREST_RATE_FREQUENCY_COL).setCellValue(loanProductJson.getString("interestRateFrequencyType.value"));
firstLoanRow.createCell(LoanConstants.NOMINAL_INTEREST_RATE_FREQUENCY_COL).setCellValue(loanProductSheet.getRow(1).getCell(14).getStringCellValue()); firstLoanRow.createCell(LoanConstants.AMORTIZATION_COL).setCellValue(loanProductJson.getString("amortizationType.value"));
firstLoanRow.createCell(LoanConstants.AMORTIZATION_COL).setCellValue(loanProductSheet.getRow(1).getCell(15).getStringCellValue()); firstLoanRow.createCell(LoanConstants.INTEREST_METHOD_COL).setCellValue(loanProductJson.getString("interestType.value"));
firstLoanRow.createCell(LoanConstants.INTEREST_METHOD_COL).setCellValue(loanProductSheet.getRow(1).getCell(16).getStringCellValue()); firstLoanRow.createCell(LoanConstants.INTEREST_CALCULATION_PERIOD_COL).setCellValue(loanProductJson.getString("interestCalculationPeriodType.value"));
firstLoanRow.createCell(LoanConstants.INTEREST_CALCULATION_PERIOD_COL).setCellValue(loanProductSheet.getRow(1).getCell(17).getStringCellValue());
firstLoanRow.createCell(LoanConstants.ARREARS_TOLERANCE_COL).setCellValue(0); firstLoanRow.createCell(LoanConstants.ARREARS_TOLERANCE_COL).setCellValue(0);
firstLoanRow.createCell(LoanConstants.REPAYMENT_STRATEGY_COL).setCellValue(loanProductSheet.getRow(1).getCell(19).getStringCellValue()); firstLoanRow.createCell(LoanConstants.REPAYMENT_STRATEGY_COL).setCellValue(loanProductJson.getString("transactionProcessingStrategyName"));
firstLoanRow.createCell(LoanConstants.GRACE_ON_PRINCIPAL_PAYMENT_COL).setCellValue(0); firstLoanRow.createCell(LoanConstants.GRACE_ON_PRINCIPAL_PAYMENT_COL).setCellValue(0);
firstLoanRow.createCell(LoanConstants.GRACE_ON_INTEREST_PAYMENT_COL).setCellValue(0); firstLoanRow.createCell(LoanConstants.GRACE_ON_INTEREST_PAYMENT_COL).setCellValue(0);
firstLoanRow.createCell(LoanConstants.GRACE_ON_INTEREST_CHARGED_COL).setCellValue(0); firstLoanRow.createCell(LoanConstants.GRACE_ON_INTEREST_CHARGED_COL).setCellValue(0);
firstLoanRow.createCell(LoanConstants.FIRST_REPAYMENT_COL).setCellValue(date); firstLoanRow.createCell(LoanConstants.FIRST_REPAYMENT_COL).setCellValue(date);
firstLoanRow.createCell(LoanConstants.TOTAL_AMOUNT_REPAID_COL).setCellValue(6000); firstLoanRow.createCell(LoanConstants.TOTAL_AMOUNT_REPAID_COL).setCellValue(6000);
firstLoanRow.createCell(LoanConstants.LAST_REPAYMENT_DATE_COL).setCellValue(date); firstLoanRow.createCell(LoanConstants.LAST_REPAYMENT_DATE_COL).setCellValue(date);
firstLoanRow.createCell(LoanConstants.REPAYMENT_TYPE_COL).setCellValue(extrasSheet.getRow(1).getCell(3).getStringCellValue()); firstLoanRow.createCell(LoanConstants.REPAYMENT_TYPE_COL).setCellValue(paymentTypeName);
String currentdirectory = new File("").getAbsolutePath(); String currentdirectory = new File("").getAbsolutePath();
File directory=new File(currentdirectory+File.separator+"src"+File.separator+"integrationTest"+File.separator+ File directory=new File(currentdirectory+File.separator+"src"+File.separator+"integrationTest"+File.separator+
@@ -172,10 +198,14 @@ public class LoanImportHandlerTest {
//check status column of output excel //check status column of output excel
String location=loanTransactionHelper.getOutputTemplateLocation(importDocumentId); String location=loanTransactionHelper.getOutputTemplateLocation(importDocumentId);
FileInputStream fileInputStream = new FileInputStream(location); FileInputStream fileInputStream = new FileInputStream(location);
Workbook Outputworkbook=new HSSFWorkbook(fileInputStream); Workbook outputworkbook=new HSSFWorkbook(fileInputStream);
Sheet outputLoanSheet = Outputworkbook.getSheet(TemplatePopulateImportConstants.LOANS_SHEET_NAME); Sheet outputLoanSheet = outputworkbook.getSheet(TemplatePopulateImportConstants.LOANS_SHEET_NAME);
Row row= outputLoanSheet.getRow(1); Row row= outputLoanSheet.getRow(1);
Assert.assertEquals("Imported",row.getCell(LoanConstants.STATUS_COL).getStringCellValue());
LOG.info("Output location: {}", location);
LOG.info("Failure reason column: {}", row.getCell(LoanConstants.FAILURE_REPORT_COL).getStringCellValue());
Assert.assertEquals("Imported",row.getCell(LoanConstants.STATUS_COL).getStringCellValue());
outputworkbook.close();
} }
} }
@@ -111,9 +111,9 @@ public class LoanImportHandler implements ImportHandler {
if (repaymentAmount!=null&&lastRepaymentDate!=null&&repaymentType!=null&&repaymentTypeId!=null) { if (repaymentAmount!=null&&lastRepaymentDate!=null&&repaymentType!=null&&repaymentTypeId!=null) {
return LoanTransactionData.importInstance(repaymentAmount, lastRepaymentDate, repaymentTypeId, return LoanTransactionData.importInstance(repaymentAmount, lastRepaymentDate, repaymentTypeId,
row.getRowNum(), locale, dateFormat); row.getRowNum(), locale, dateFormat);
} else {
return null;
} }
return null;
} }
private DisbursementData readDisbursalData(Row row,String locale,String dateFormat) { private DisbursementData readDisbursalData(Row row,String locale,String dateFormat) {
@@ -133,9 +133,9 @@ public class LoanImportHandler implements ImportHandler {
LocalDate approvedDate = ImportHandlerUtils.readAsDate(LoanConstants.APPROVED_DATE_COL, row); LocalDate approvedDate = ImportHandlerUtils.readAsDate(LoanConstants.APPROVED_DATE_COL, row);
if (approvedDate!=null) { if (approvedDate!=null) {
return LoanApprovalData.importInstance(approvedDate, row.getRowNum(), locale, dateFormat); return LoanApprovalData.importInstance(approvedDate, row.getRowNum(), locale, dateFormat);
} else {
return null;
} }
return null;
} }
private LoanAccountData readLoan(Row row,String locale,String dateFormat) { private LoanAccountData readLoan(Row row,String locale,String dateFormat) {
@@ -324,9 +324,9 @@ public class LoanImportHandler implements ImportHandler {
repaymentStrategyId, graceOnPrincipalPayment, graceOnInterestPayment, graceOnInterestCharged, repaymentStrategyId, graceOnPrincipalPayment, graceOnInterestPayment, graceOnInterestCharged,
interestChargedFromDate, firstRepaymentOnDate, row.getRowNum(), externalId, linkAccountId,locale,dateFormat); interestChargedFromDate, firstRepaymentOnDate, row.getRowNum(), externalId, linkAccountId,locale,dateFormat);
} }
}else {
return null;
} }
return null;
} }
public Count importEntity(String dateFormat) { public Count importEntity(String dateFormat) {
@@ -419,7 +419,8 @@ public class LoanImportHandler implements ImportHandler {
.loanRepaymentTransaction(result.getLoanId()) // .loanRepaymentTransaction(result.getLoanId()) //
.withJson(payload) // .withJson(payload) //
.build(); // .build(); //
final CommandProcessingResult loanRepaymentResult = commandsSourceWritePlatformService.logCommandSource(commandRequest);
commandsSourceWritePlatformService.logCommandSource(commandRequest);
return 4; return 4;
} }
@@ -436,14 +437,15 @@ public class LoanImportHandler implements ImportHandler {
.disburseLoanToSavingsApplication(result.getLoanId()) // .disburseLoanToSavingsApplication(result.getLoanId()) //
.withJson(payload) // .withJson(payload) //
.build(); // .build(); //
final CommandProcessingResult loanDisburseToSavingsResult = commandsSourceWritePlatformService.logCommandSource(commandRequest); commandsSourceWritePlatformService.logCommandSource(commandRequest);
} else { } else {
String payload = gsonBuilder.create().toJson(disbusalData); String payload = gsonBuilder.create().toJson(disbusalData);
final CommandWrapper commandRequest = new CommandWrapperBuilder() // final CommandWrapper commandRequest = new CommandWrapperBuilder() //
.disburseLoanApplication(result.getLoanId()) // .disburseLoanApplication(result.getLoanId()) //
.withJson(payload) // .withJson(payload) //
.build(); // .build(); //
final CommandProcessingResult loanDisburseResult = commandsSourceWritePlatformService.logCommandSource(commandRequest);
commandsSourceWritePlatformService.logCommandSource(commandRequest);
} }
} }
return 3; return 3;
@@ -458,7 +460,8 @@ public class LoanImportHandler implements ImportHandler {
.approveLoanApplication(result.getLoanId()) // .approveLoanApplication(result.getLoanId()) //
.withJson(payload) // .withJson(payload) //
.build(); // .build(); //
final CommandProcessingResult loanapprovalresult = commandsSourceWritePlatformService.logCommandSource(commandRequest);
commandsSourceWritePlatformService.logCommandSource(commandRequest);
} }
return 2; return 2;
} }
@@ -471,6 +474,7 @@ public class LoanImportHandler implements ImportHandler {
loanJsonOb.remove("isLoanProductLinkedToFloatingRate"); loanJsonOb.remove("isLoanProductLinkedToFloatingRate");
loanJsonOb.remove("isInterestRecalculationEnabled"); loanJsonOb.remove("isInterestRecalculationEnabled");
loanJsonOb.remove("isFloatingInterestRate"); loanJsonOb.remove("isFloatingInterestRate");
loanJsonOb.remove("isRatesEnabled");
JsonArray chargesJsonAr=loanJsonOb.getAsJsonArray("charges"); JsonArray chargesJsonAr=loanJsonOb.getAsJsonArray("charges");
if (chargesJsonAr!=null) { if (chargesJsonAr!=null) {
for (int i = 0; i < chargesJsonAr.size(); i++) { for (int i = 0; i < chargesJsonAr.size(); i++) {
@@ -72,7 +72,7 @@ public class ExtrasSheetPopulator extends AbstractWorkbookPopulator {
int currencyCodeRowIndex = 1; int currencyCodeRowIndex = 1;
for (CurrencyData currencies : currencies) { for (CurrencyData currencies : currencies) {
Row row; Row row;
if (currencyCodeRowIndex < paymentTypeRowIndex) { if (currencyCodeRowIndex < paymentTypeRowIndex || currencyCodeRowIndex < fundRowIndex) {
row = extrasSheet.getRow(currencyCodeRowIndex++); row = extrasSheet.getRow(currencyCodeRowIndex++);
} else { } else {
row = extrasSheet.createRow(currencyCodeRowIndex++); row = extrasSheet.createRow(currencyCodeRowIndex++);
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.infrastructure.bulkimport.service; package org.apache.fineract.infrastructure.bulkimport.service;
import com.google.common.io.Files;
import com.sun.jersey.core.header.FormDataContentDisposition; import com.sun.jersey.core.header.FormDataContentDisposition;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@@ -33,10 +32,8 @@ import javax.ws.rs.core.Response;
import org.apache.fineract.infrastructure.bulkimport.data.BulkImportEvent; import org.apache.fineract.infrastructure.bulkimport.data.BulkImportEvent;
import org.apache.fineract.infrastructure.bulkimport.data.GlobalEntityType; import org.apache.fineract.infrastructure.bulkimport.data.GlobalEntityType;
import org.apache.fineract.infrastructure.bulkimport.data.ImportData; import org.apache.fineract.infrastructure.bulkimport.data.ImportData;
import org.apache.fineract.infrastructure.bulkimport.data.ImportFormatType;
import org.apache.fineract.infrastructure.bulkimport.domain.ImportDocument; import org.apache.fineract.infrastructure.bulkimport.domain.ImportDocument;
import org.apache.fineract.infrastructure.bulkimport.domain.ImportDocumentRepository; import org.apache.fineract.infrastructure.bulkimport.domain.ImportDocumentRepository;
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.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException; import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRuleException;
@@ -61,7 +58,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapper;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
@@ -102,8 +98,6 @@ public class BulkImportWorkbookServiceImpl implements BulkImportWorkbookService
final Tika tika = new Tika(); final Tika tika = new Tika();
final TikaInputStream tikaInputStream = TikaInputStream.get(clonedInputStream); final TikaInputStream tikaInputStream = TikaInputStream.get(clonedInputStream);
final String fileType = tika.detect(tikaInputStream); final String fileType = tika.detect(tikaInputStream);
final String fileExtension = Files.getFileExtension(fileDetail.getFileName()).toLowerCase();
ImportFormatType format = ImportFormatType.of(fileExtension);
if (!fileType.contains("msoffice") && !fileType.contains("application/vnd.ms-excel")) { if (!fileType.contains("msoffice") && !fileType.contains("application/vnd.ms-excel")) {
// We had a problem where we tried to upload the downloaded file from the import options, it was somehow changed the // We had a problem where we tried to upload the downloaded file from the import options, it was somehow changed the
// extension we use this fix. // extension we use this fix.
@@ -114,7 +108,6 @@ public class BulkImportWorkbookServiceImpl implements BulkImportWorkbookService
Workbook workbook = new HSSFWorkbook(clonedInputStreamWorkbook); Workbook workbook = new HSSFWorkbook(clonedInputStreamWorkbook);
GlobalEntityType entityType=null; GlobalEntityType entityType=null;
int primaryColumn=0; int primaryColumn=0;
ImportHandler importHandler = null;
if (entity.trim().equalsIgnoreCase(GlobalEntityType.CLIENTS_PERSON.toString())) { if (entity.trim().equalsIgnoreCase(GlobalEntityType.CLIENTS_PERSON.toString())) {
entityType = GlobalEntityType.CLIENTS_PERSON; entityType = GlobalEntityType.CLIENTS_PERSON;
primaryColumn = 0; primaryColumn = 0;
@@ -173,14 +166,15 @@ public class BulkImportWorkbookServiceImpl implements BulkImportWorkbookService
entityType = GlobalEntityType.USERS; entityType = GlobalEntityType.USERS;
primaryColumn = 0; primaryColumn = 0;
}else{ }else{
workbook.close();
throw new GeneralPlatformDomainRuleException("error.msg.unable.to.find.resource", throw new GeneralPlatformDomainRuleException("error.msg.unable.to.find.resource",
"Unable to find requested resource"); "Unable to find requested resource");
} }
return publishEvent(primaryColumn, fileDetail, clonedInputStreamWorkbook, entityType, return publishEvent(primaryColumn, fileDetail, clonedInputStreamWorkbook, entityType,
workbook, locale, dateFormat); workbook, locale, dateFormat);
}else {
throw new GeneralPlatformDomainRuleException("error.msg.null","One or more of the given parameters not found");
} }
throw new GeneralPlatformDomainRuleException("error.msg.null","One or more of the given parameters not found");
} catch (IOException e) { } catch (IOException e) {
LOG.error("Problem occurred in importWorkbook function",e); LOG.error("Problem occurred in importWorkbook function",e);
throw new GeneralPlatformDomainRuleException("error.msg.io.exception","IO exception occured with "+fileDetail.getFileName()+" "+e.getMessage()); throw new GeneralPlatformDomainRuleException("error.msg.io.exception","IO exception occured with "+fileDetail.getFileName()+" "+e.getMessage());
@@ -196,8 +190,6 @@ public class BulkImportWorkbookServiceImpl implements BulkImportWorkbookService
final String fileName = fileDetail.getFileName(); final String fileName = fileDetail.getFileName();
SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);
final Long documentId = this.documentWritePlatformService.createInternalDocument( final Long documentId = this.documentWritePlatformService.createInternalDocument(
DocumentWritePlatformServiceJpaRepositoryImpl.DocumentManagementEntity.IMPORT.name(), DocumentWritePlatformServiceJpaRepositoryImpl.DocumentManagementEntity.IMPORT.name(),
this.securityContext.authenticatedUser().getId(), null, clonedInputStreamWorkbook, this.securityContext.authenticatedUser().getId(), null, clonedInputStreamWorkbook,
@@ -280,7 +272,7 @@ public class BulkImportWorkbookServiceImpl implements BulkImportWorkbookService
String fileName="Output"+documentData.fileName(); String fileName="Output"+documentData.fileName();
String fileLocation=documentData.fileLocation(); String fileLocation=documentData.fileLocation();
File file=new File(fileLocation); File file=new File(fileLocation);
final Response.ResponseBuilder response = Response.ok((Object)file); final Response.ResponseBuilder response = Response.ok(file);
response.header("Content-Disposition", "attachment; filename=\"" + fileName + "\""); response.header("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.header("Content-Type", "application/vnd.ms-excel"); response.header("Content-Type", "application/vnd.ms-excel");
return response.build(); return response.build();
@@ -295,7 +287,7 @@ public class BulkImportWorkbookServiceImpl implements BulkImportWorkbookService
return sql.toString(); return sql.toString();
} }
@Override @Override
public DocumentData mapRow (ResultSet rs,int rowNum) throws SQLException { public DocumentData mapRow (ResultSet rs, @SuppressWarnings("unused") int rowNum) throws SQLException {
final String location = rs.getString("location"); final String location = rs.getString("location");
final String fileName=rs.getString("file_name"); final String fileName=rs.getString("file_name");
return new DocumentData(null,null,null,null,fileName, return new DocumentData(null,null,null,null,fileName,
@@ -100,6 +100,16 @@
<bean class="org.springframework.core.task.SimpleAsyncTaskExecutor"/> <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
</property> </property>
</bean> </bean>
<!-- The application events (for importing) rely on the inheritable thread local security context strategy
This is NOT compatible with threadpools so if we use threadpools the below will need to be reworked -->
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass"
value="org.springframework.security.core.context.SecurityContextHolder" />
<property name="targetMethod" value="setStrategyName" />
<property name="arguments" value="MODE_INHERITABLETHREADLOCAL" />
</bean>
<import resource="spmContext.xml"/> <import resource="spmContext.xml"/>