use of org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException in project head by mifos.
the class XlsSavingsAccountImporter method validateProductName.
private PrdOfferingDto validateProductName(String productName, CustomerBO customerBO, HSSFRow row, int currentCell) throws XlsParsingException {
if (StringUtils.isBlank(productName)) {
throw new XlsParsingException(getCellError(XlsMessageConstants.MISSING_PRODUCT_NAME, row, currentCell, null));
}
List<PrdOfferingDto> products = savingsProductDao.findSavingsProductByCustomerLevel(customerBO.getCustomerLevel());
PrdOfferingDto foundProduct = null;
for (PrdOfferingDto prdOfferingDto : products) {
if (prdOfferingDto.getPrdOfferingName().equals(productName)) {
foundProduct = prdOfferingDto;
break;
}
}
if (foundProduct == null) {
List<Object> params = new ArrayList<Object>();
params.add(productName);
throw new XlsParsingException(getCellError(XlsMessageConstants.PRODUCT_NOT_FOUND, row, currentCell, params));
}
return foundProduct;
}
use of org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException in project head by mifos.
the class XlsSavingsAccountImporter method validateStatusFlagReason.
private XlsLoanSavingsFlagsConstants validateStatusFlagReason(String cancelReason, String statusName, AccountTypes type, HSSFRow row, int currentCell) throws Exception {
boolean cancelled = false;
XlsLoanSavingsFlagsConstants flag = null;
// check if status is equals to 'cancelled'
if (type.equals(AccountTypes.LOAN_ACCOUNT)) {
cancelled = statusName.equalsIgnoreCase(XlsLoanSavingsAccountStatesConstants.LOAN_CANCELLED.getName());
} else if (type.equals(AccountTypes.SAVINGS_ACCOUNT)) {
cancelled = statusName.equalsIgnoreCase(XlsLoanSavingsAccountStatesConstants.SAVINGS_CANCELLED.getName());
} else {
throw new XlsParsingException("This parser does not support accounts other than loans and savings");
}
if (cancelled) {
if (StringUtils.isBlank(cancelReason)) {
throw new XlsParsingException(getCellError(XlsMessageConstants.MISSING_STATUS_REASON, row, currentCell, null));
}
flag = XlsLoanSavingsFlagsConstants.findByNameForAccountType(cancelReason, type);
if (flag == null) {
throw new XlsParsingException(getCellError(XlsMessageConstants.WRONG_STATUS_REASON, row, currentCell, null));
}
}
return flag;
}
use of org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException in project head by mifos.
the class XlsSavingsAccountImporter method getCellDecimalValue.
private BigDecimal getCellDecimalValue(HSSFRow row, XlsSavingsImportTemplateConstants currentCell) throws XlsParsingException {
final HSSFCell cell = row.getCell(currentCell.getValue(), HSSFRow.RETURN_BLANK_AS_NULL);
BigDecimal result = null;
if (cell != null) {
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
HSSFRichTextString richText = cell.getRichStringCellValue();
try {
result = new BigDecimal(richText.getString());
} catch (NumberFormatException ex) {
throw new XlsParsingException(getCellError(XlsMessageConstants.NOT_A_NUMBER, row, currentCell.getValue(), null));
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
double val = cell.getNumericCellValue();
result = new BigDecimal(val);
break;
default:
return null;
}
}
return result;
}
use of org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException in project head by mifos.
the class XlsSavingsAccountImporter method parse.
public ParsedSavingsDto parse(InputStream is) {
ParsedSavingsDto result = null;
List<String> errors = new ArrayList<String>();
// temporary list for new accounts numbers, currently
List<String> newAccountsNumbers = new ArrayList<String>();
// not used
List<ImportedSavingDetail> parsedSavingDetails = new ArrayList<ImportedSavingDetail>();
try {
HSSFWorkbook workbook = new HSSFWorkbook(is);
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = sheet.getRow(XlsSavingsImportTemplateConstants.FIRST_ROW_WITH_DATA.getValue());
if (row == null) {
throw new XlsParsingException(getMessage(XlsMessageConstants.NOT_ENOUGH_INPUT_ROW, null));
}
Iterator<Row> iterator = sheet.rowIterator();
while (iterator.hasNext() && (iterator.next().getRowNum() < XlsSavingsImportTemplateConstants.FIRST_ROW_WITH_DATA.getValue() - 1)) ;
while (iterator.hasNext()) {
row = (HSSFRow) iterator.next();
List<Object> params = new ArrayList<Object>();
XlsSavingsImportTemplateConstants currentCell = XlsSavingsImportTemplateConstants.ACCOUNT_NUMBER;
try {
String accountNumber = getCellStringValue(row, currentCell);
if (StringUtils.isBlank(accountNumber)) {
accountNumber = null;
} else if (!StringUtils.isBlank(accountNumber)) {
// ...but it's duplicate
if (!validateAccountNumber(accountNumber, newAccountsNumbers)) {
params.clear();
params.add(accountNumber);
throw new XlsParsingException(getCellError(XlsMessageConstants.DUPLICATE_GLOBAL_NUM_ERROR, row, currentCell.getValue(), params));
}
}
currentCell = XlsSavingsImportTemplateConstants.CUSTOMER_GLOBAL_ID;
String customerGlobalId = getCellStringValue(row, currentCell);
if (customerGlobalId.isEmpty()) {
params.clear();
params.add(customerGlobalId);
throw new XlsParsingException(getCellError(XlsMessageConstants.CUSTOMER_NOT_BLANK, row, currentCell.getValue(), params));
}
CustomerBO customerBO = null;
customerBO = validateCustomerGlobalId(customerGlobalId);
if (customerBO == null) {
params.clear();
params.add(customerGlobalId);
throw new XlsParsingException(getCellError(XlsMessageConstants.CUSTOMER_NOT_FOUND, row, currentCell.getValue(), params));
}
currentCell = XlsSavingsImportTemplateConstants.PRODUCT_NAME;
String productName = getCellStringValue(row, currentCell);
PrdOfferingDto prdOfferingDto = null;
prdOfferingDto = validateProductName(productName, customerBO, row, currentCell.getValue());
currentCell = XlsSavingsImportTemplateConstants.STATUS_NAME;
String statusName = getCellStringValue(row, currentCell);
XlsLoanSavingsAccountStatesConstants statusConstant = null;
statusConstant = validateStatusName(statusName, customerBO, row, currentCell.getValue());
currentCell = XlsSavingsImportTemplateConstants.CANCEL_FlAG_REASON;
String cancelReason = getCellStringValue(row, currentCell);
XlsLoanSavingsFlagsConstants flagConstant = null;
flagConstant = validateStatusFlagReason(cancelReason, statusName, AccountTypes.SAVINGS_ACCOUNT, row, currentCell.getValue());
currentCell = XlsSavingsImportTemplateConstants.SAVINGS_AMOUNT;
BigDecimal savingAmount = getCellDecimalValue(row, currentCell);
if (savingAmount == BigDecimal.valueOf(0) || null == savingAmount) {
savingAmount = savingsProductDao.findBySystemId(prdOfferingDto.getGlobalPrdOfferingNum()).getRecommendedAmount().getAmount();
}
currentCell = XlsSavingsImportTemplateConstants.SAVINGS_BALANCE;
BigDecimal savingBalance = getCellDecimalValue(row, currentCell);
if (savingBalance == null) {
savingBalance = BigDecimal.valueOf(0);
}
if (accountNumber != null) {
newAccountsNumbers.add(accountNumber);
}
LocalDate date = new LocalDate();
Short flagValue = flagConstant == null ? null : flagConstant.getFlag().getValue();
ImportedSavingDetail detail = new ImportedSavingDetail(accountNumber, customerGlobalId, prdOfferingDto.getGlobalPrdOfferingNum(), statusConstant.getState().getValue(), flagValue, savingAmount, savingBalance, date);
parsedSavingDetails.add(detail);
} catch (XlsParsingException xex) {
if (xex.isMultiple()) {
for (String msg : xex.getMessages()) {
errors.add(msg);
}
} else {
errors.add(xex.getMessage());
}
} catch (Exception cex) {
errors.add(cex.getMessage());
}
}
} catch (Exception ex) {
errors.add(ex.getMessage());
}
result = new ParsedSavingsDto(errors, parsedSavingDetails);
return result;
}
Aggregations