Search in sources :

Example 1 with XlsParsingException

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;
}
Also used : ArrayList(java.util.ArrayList) PrdOfferingDto(org.mifos.dto.domain.PrdOfferingDto) XlsParsingException(org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException)

Example 2 with XlsParsingException

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;
}
Also used : XlsParsingException(org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException)

Example 3 with XlsParsingException

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;
}
Also used : HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString) HSSFCell(org.apache.poi.hssf.usermodel.HSSFCell) XlsParsingException(org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException) BigDecimal(java.math.BigDecimal)

Example 4 with XlsParsingException

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;
}
Also used : ParsedSavingsDto(org.mifos.dto.domain.ParsedSavingsDto) ArrayList(java.util.ArrayList) HSSFRow(org.apache.poi.hssf.usermodel.HSSFRow) XlsParsingException(org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException) HSSFRichTextString(org.apache.poi.hssf.usermodel.HSSFRichTextString) LocalDate(org.joda.time.LocalDate) HSSFWorkbook(org.apache.poi.hssf.usermodel.HSSFWorkbook) BigDecimal(java.math.BigDecimal) XlsParsingException(org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException) ImportedSavingDetail(org.mifos.dto.domain.ImportedSavingDetail) CustomerBO(org.mifos.customers.business.CustomerBO) PrdOfferingDto(org.mifos.dto.domain.PrdOfferingDto) HSSFSheet(org.apache.poi.hssf.usermodel.HSSFSheet) HSSFRow(org.apache.poi.hssf.usermodel.HSSFRow) Row(org.apache.poi.ss.usermodel.Row)

Aggregations

XlsParsingException (org.mifos.application.importexport.xls.XlsLoansAccountImporter.XlsParsingException)4 BigDecimal (java.math.BigDecimal)2 ArrayList (java.util.ArrayList)2 HSSFRichTextString (org.apache.poi.hssf.usermodel.HSSFRichTextString)2 PrdOfferingDto (org.mifos.dto.domain.PrdOfferingDto)2 HSSFCell (org.apache.poi.hssf.usermodel.HSSFCell)1 HSSFRow (org.apache.poi.hssf.usermodel.HSSFRow)1 HSSFSheet (org.apache.poi.hssf.usermodel.HSSFSheet)1 HSSFWorkbook (org.apache.poi.hssf.usermodel.HSSFWorkbook)1 Row (org.apache.poi.ss.usermodel.Row)1 LocalDate (org.joda.time.LocalDate)1 CustomerBO (org.mifos.customers.business.CustomerBO)1 ImportedSavingDetail (org.mifos.dto.domain.ImportedSavingDetail)1 ParsedSavingsDto (org.mifos.dto.domain.ParsedSavingsDto)1