use of org.mifos.dto.domain.MeetingRecurrenceDto in project head by mifos.
the class XlsClientsImporter method parse.
public ParsedClientsDto parse(final InputStream input) {
final List<ValueListElement> buisnessActivitiesList = customerDao.retrieveBusinessActivities();
final List<ValueListElement> gendersList = customerDao.retrieveGenders();
final List<ValueListElement> citizenshipsList = customerDao.retrieveCitizenship();
final List<ValueListElement> ethinicitiesList = customerDao.retrieveEthnicity();
final List<ValueListElement> educationLevelsList = customerDao.retrieveEducationLevels();
final List<ValueListElement> handicappedList = customerDao.retrieveHandicapped();
final List<ValueListElement> povertyStatusList = customerDao.retrievePoverty();
final List<ValueListElement> maritalStatusList = customerDao.retrieveMaritalStatuses();
final List<ValueListElement> salutationsList = customerDao.retrieveSalutations();
final List<OfficeDto> allOfficess = officeDao.findAllOffices();
final FieldConfig fieldConfig = FieldConfig.getInstance();
final List<String> globalCustNums = new ArrayList<String>();
final List<String> errorsList = new ArrayList<String>();
final List<ImportedClientDetail> parsedClientDetails = new ArrayList<ImportedClientDetail>();
try {
final HSSFWorkbook workbook = new HSSFWorkbook(input);
final HSSFSheet sheet = workbook.getSheetAt(0);
/* test first data row */
HSSFRow row = sheet.getRow(XlsImportConstants.FIRST_CLIENT_ROW.value());
if (row == null) {
errorsList.add(getMessage(XlsMessageConstants.NOT_ENOUGH_INPUT_ROW));
}
@SuppressWarnings("rawtypes") Iterator rowIterator = sheet.rowIterator();
/* Skip first rows */
if (errorsList.isEmpty()) {
for (int i = 0; i < XlsImportConstants.SKIPPED_ROWS.value(); i++) {
if (rowIterator.hasNext()) {
rowIterator.next();
} else {
errorsList.add(getMessage(XlsMessageConstants.NOT_ENOUGH_INPUT_ROW));
break;
}
}
}
XlsImportConstants currentCell = XlsImportConstants.CLIENT_NUM_CELL;
int friendlyRowNumber = 0;
/* Parse client data */
if (errorsList.isEmpty()) {
while (rowIterator.hasNext()) {
try {
row = (HSSFRow) rowIterator.next();
friendlyRowNumber = row.getRowNum() + 1;
/* Get data from sheet */
currentCell = XlsImportConstants.CLIENT_NUM_CELL;
String clientGlobalNum = getCellStringValue(row, currentCell);
if (StringUtils.isBlank(clientGlobalNum)) {
// generate number
clientGlobalNum = null;
} else {
// check for duplicates
validateGlobalCustNum(clientGlobalNum, globalCustNums);
globalCustNums.add(clientGlobalNum);
}
currentCell = XlsImportConstants.BRANCH_SHORT_NAME_CELL;
final String branchShortName = getCellStringValue(row, currentCell);
final Short branchOfficeId = getBranchId(branchShortName, allOfficess);
currentCell = XlsImportConstants.GROUP_GLOBAL_NUM_CELL;
final String groupGlobalNum = getCellStringValue(row, currentCell);
validateGroup(groupGlobalNum);
if (StringUtils.isBlank(groupGlobalNum) && branchOfficeId == null) {
String error = getRowError(friendlyRowNumber) + getMessage(XlsMessageConstants.OFFICE_AND_BRANCH);
errorsList.add(error);
continue;
}
currentCell = XlsImportConstants.SALUTATION_CELL;
final String salutation = getCellStringValue(row, currentCell);
final Integer salutationId = getValueElementId(salutation, salutationsList);
validateMandatoryField(salutationId);
currentCell = XlsImportConstants.FIRST_NAME_CELL;
final String clientFirstName = getCellStringValue(row, currentCell);
validateMandatoryField(clientFirstName);
currentCell = XlsImportConstants.MIDDLE_NAME_CELL;
final String clientMiddleName = getCellStringValue(row, currentCell);
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.MIDDLE_NAME)) {
validateMandatoryField(clientMiddleName);
}
currentCell = XlsImportConstants.LAST_NAME_CELL;
final String clientLastName = getCellStringValue(row, currentCell);
validateMandatoryField(clientLastName);
currentCell = XlsImportConstants.SECOND_LAST_NAME_CELL;
final String clientSecondLastName = getCellStringValue(row, currentCell);
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.SECOND_LAST_NAME)) {
validateMandatoryField(clientSecondLastName);
}
currentCell = XlsImportConstants.GOVERNMENT_ID_CELL;
String governmentId = getCellStringValue(row, currentCell);
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.GOVERNMENT_ID)) {
validateMandatoryField(governmentId);
}
currentCell = XlsImportConstants.DATE_OF_BIRTH_CELL;
final Date dateOfBirth = getCellDateValue(row, currentCell);
validateMandatoryField(dateOfBirth);
validateAge(dateOfBirth);
currentCell = XlsImportConstants.GENDER_CELL;
final String gender = getCellStringValue(row, currentCell);
final Short genderId = intToShort(getValueElementId(gender, gendersList));
validateMandatoryField(genderId);
currentCell = XlsImportConstants.MARITAL_STATUS_CELL;
final String maritalStatus = getCellStringValue(row, currentCell);
final Integer maritalStatusId = getValueElementId(maritalStatus, maritalStatusList);
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.MARITAL_STATUS)) {
validateMandatoryField(maritalStatusId);
}
currentCell = XlsImportConstants.NUMBER_OF_CHILDREN_CELL;
final Short numberOfChildren = intToShort(getCellIntegerValue(row, currentCell));
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.NUMBER_OF_CHILDREN)) {
validateMandatoryField(numberOfChildren);
}
currentCell = XlsImportConstants.CITIZENSHIP_CELL;
final String citizenship = getCellStringValue(row, currentCell);
final Integer citizenshipId = getValueElementId(citizenship, citizenshipsList);
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.CITIZENSHIP)) {
validateMandatoryField(citizenshipId);
}
currentCell = XlsImportConstants.ETHINICITY_CELL;
final String ethinicity = getCellStringValue(row, currentCell);
final Integer ethinicityId = getValueElementId(ethinicity, ethinicitiesList);
if (fieldConfig.isFieldHidden(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.ETHNICITY)) {
validateMandatoryField(ethinicityId);
}
currentCell = XlsImportConstants.EDUCATION_LEVEL_CELL;
final String educationLevel = getCellStringValue(row, currentCell);
final Integer educationLevelId = getValueElementId(educationLevel, educationLevelsList);
if (fieldConfig.isFieldHidden(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.EDUCATION_LEVEL)) {
validateMandatoryField(educationLevelId);
}
currentCell = XlsImportConstants.ACTIVITIES_CELL;
final String activites = getCellStringValue(row, currentCell);
final Integer activityId = getValueElementId(activites, buisnessActivitiesList);
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.BUSINESS_ACTIVITIES)) {
validateMandatoryField(activityId);
}
currentCell = XlsImportConstants.POVERTY_STATUS_CELL;
final String povertyStatus = getCellStringValue(row, currentCell);
final Short povertyStatusId = intToShort(getValueElementId(povertyStatus, povertyStatusList));
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.POVERTY_STATUS)) {
validateMandatoryField(povertyStatusId);
}
currentCell = XlsImportConstants.HANDICAPPED_CELL;
final String handicapped = getCellStringValue(row, currentCell);
final Integer handicappedId = getValueElementId(handicapped, handicappedList);
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.HANDICAPPED)) {
validateMandatoryField(handicappedId);
}
currentCell = XlsImportConstants.SPOUSE_FATHER_RELATIONSHIP_CELL;
final String spouseOrFather = getCellStringValue(row, currentCell);
final Short spouseFatherNameType = getSpouseNameType(spouseOrFather);
final boolean familyMandatory = fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.FAMILY_DETAILS);
if (familyMandatory) {
validateMandatoryField(spouseFatherNameType);
}
currentCell = XlsImportConstants.SPOUSE_FIRST_NAME_CELL;
final String spouseFirstName = getCellStringValue(row, currentCell);
if (familyMandatory) {
validateMandatoryField(spouseFirstName);
}
currentCell = XlsImportConstants.SPOUSE_MIDDLE_NAME_CELL;
final String spouseMiddleName = getCellStringValue(row, currentCell);
currentCell = XlsImportConstants.SPOUSE_SECOND_LAST_NAME_CELL;
final String spouseSecondLastName = getCellStringValue(row, currentCell);
if (familyMandatory && fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.SPOUSE_FATHER_SECOND_LAST_NAME)) {
validateMandatoryField(spouseSecondLastName);
}
currentCell = XlsImportConstants.SPOUSE_LAST_NAME_CELL;
final String spouseLastName = getCellStringValue(row, currentCell);
if (familyMandatory) {
validateMandatoryField(spouseLastName);
}
currentCell = XlsImportConstants.ADDRESS_CELL;
final String address = getCellStringValue(row, currentCell);
if (fieldConfig.isFieldManadatory(CLIENT_ENTITY + HiddenMandatoryFieldNamesConstants.ADDRESS1)) {
validateMandatoryField(address);
}
currentCell = XlsImportConstants.CITY_DISTRICT_CELL;
final String cityDistrict = getCellStringValue(row, currentCell);
currentCell = XlsImportConstants.STATE_CELL;
final String state = getCellStringValue(row, currentCell);
currentCell = XlsImportConstants.COUNTRY_CELL;
final String country = getCellStringValue(row, currentCell);
currentCell = XlsImportConstants.POSTAL_CODE_CELL;
final String postalCode = getCellStringValue(row, currentCell);
currentCell = XlsImportConstants.TELEPHONE_CELL;
final String telephone = getCellStringValue(row, currentCell);
currentCell = XlsImportConstants.RECRUITED_BY_CELL;
final String recruitedBy = getCellStringValue(row, currentCell);
validateMandatoryField(recruitedBy);
final Short formedBy = getOfficerId(recruitedBy);
currentCell = XlsImportConstants.STATUS_CELL;
final String status = getCellStringValue(row, currentCell);
final Short statusId = statusToShort(status);
currentCell = XlsImportConstants.LOAN_OFFICER_CELL;
final String loanOfficer = getCellStringValue(row, currentCell);
if (!StringUtils.isBlank(groupGlobalNum) && !StringUtils.isBlank(loanOfficer)) {
throw new CellException(getMessage(XlsMessageConstants.LOAN_OFFICER_FOR_GROUP_CLIENT));
}
currentCell = XlsImportConstants.ACTIVATION_DATE_CELL;
final LocalDate activationDate = DateUtils.getLocalDateFromDate(getCellDateValue(row, currentCell));
if (activationDate != null && !status.equals(getMessage(XlsMessageConstants.ACTIVE))) {
throw new CellException(getMessage(XlsMessageConstants.ACTIVE_STATUS_FOR_ACTIVATION_DATE));
}
/* Meeting data */
currentCell = XlsImportConstants.MEETING_FREQUENCY_CELL;
final Integer recurrenceType = getRecurrenceType(getCellStringValue(row, currentCell));
currentCell = XlsImportConstants.MEETING_RECUR_EVERY_WEEK_CELL;
final Integer recurEveryWeek = getCellIntegerValue(row, currentCell);
currentCell = XlsImportConstants.MEETING_ON_WEEK_CELL;
final Integer weeklyMeetingDay = getDayValue(getCellStringValue(row, currentCell));
currentCell = XlsImportConstants.MEETING_OPT1_DAY_CELL;
final Integer opt1Day = getCellIntegerValue(row, currentCell);
validateMonthDay(opt1Day);
currentCell = XlsImportConstants.MEETING_OPT1_EVERY_CELL;
final Integer opt1Every = getCellIntegerValue(row, currentCell);
validatePositive(opt1Every);
currentCell = XlsImportConstants.MEETING_OPT2_THE_CELL;
final Integer opt2The = getDayRankValue(getCellStringValue(row, currentCell));
currentCell = XlsImportConstants.MEETING_OPT2_DAY_CELL;
final Integer opt2Day = getDayValue(getCellStringValue(row, currentCell));
currentCell = XlsImportConstants.MEETING_OPT2_EVERY_CELL;
final Integer opt2Every = getCellIntegerValue(row, currentCell);
validatePositive(opt2Every);
currentCell = XlsImportConstants.MEETING_LOCATION_CELL;
final String meetingLocation = getCellStringValue(row, currentCell);
Integer recurrenceDayNumber = 0;
Integer recurrenceWeekOfMonth = 0;
Integer recurrenceDayOfWeek = 0;
Integer recurEvery = 0;
/*
* Validate meeting data
*/
if (!StringUtils.isBlank(groupGlobalNum) && recurrenceType != null) {
// no meeting allowed for a group
throw new RowException(getMessage(XlsMessageConstants.MEETING_FOR_GROUP));
} else if (recurrenceType == null) {
// make sure everything is empty
if (recurEveryWeek != null || weeklyMeetingDay != null || opt1Day != null || opt1Every != null || opt2Day != null || opt2Every != null || opt2The != null || !StringUtils.isBlank(meetingLocation)) {
throw new RowException(getMessage(XlsMessageConstants.INCOMPLETE_MEETING_DATA));
}
} else if (recurrenceType == RecurrenceType.WEEKLY.getValue().intValue()) {
// make sure weekly data is set
if (recurEveryWeek == null || weeklyMeetingDay == null) {
throw new RowException(getMessage(XlsMessageConstants.INCOMPLETE_MEETING_DATA));
}
// make sure monthly details are empty
if (opt1Day != null || opt1Every != null || opt2Day != null || opt2Every != null || opt2The != null) {
throw new RowException(getMessage(XlsMessageConstants.MONTHLY_MEETING_DETAILS_NOT_EMPTY));
}
// set data
recurrenceDayOfWeek = weeklyMeetingDay;
recurEvery = recurEveryWeek;
// validate location
validateMandatoryField(meetingLocation);
} else {
// make sure weekly details are empty
if (recurEveryWeek != null || weeklyMeetingDay != null) {
throw new RowException(getMessage(XlsMessageConstants.WEEKLY_MEETING_DETAILS_NOT_EMPTY));
}
if (opt1Day == null) {
// make sure option 2 is set
if (opt2Day == null || opt2Every == null || opt2The == null) {
throw new RowException(getMessage(XlsMessageConstants.INCOMPLETE_MEETING_DATA));
}
// make sure option 1 is empty
if (opt1Every != null) {
throw new RowException(getMessage(XlsMessageConstants.OPTIONS_EXCLUSIVE));
}
// set data
recurrenceWeekOfMonth = opt2The;
recurrenceDayOfWeek = opt2Day;
recurEvery = opt2Every;
} else {
// make sure option 1 is set
if (opt1Every == null) {
throw new RowException(getMessage(XlsMessageConstants.INCOMPLETE_MEETING_DATA));
}
// make sure option 2 is empty
if (opt2Day != null || opt2Every != null || opt2The != null) {
throw new RowException(getMessage(XlsMessageConstants.OPTIONS_EXCLUSIVE));
}
// set data
recurrenceDayNumber = opt1Day;
recurEvery = opt1Every;
}
// validate location
validateMandatoryField(meetingLocation);
}
/*
* Create meeting data
*/
MeetingDto meetingDto = null;
if (recurrenceType != null) {
final LocalDate meetingStartDate = new LocalDate();
final MeetingRecurrenceDto meetingRecurrenceDto = new MeetingRecurrenceDto(recurrenceDayNumber, recurrenceWeekOfMonth, recurrenceDayOfWeek);
final MeetingDetailsDto meetingDetailsDto = new MeetingDetailsDto(recurrenceType, null, recurEvery, meetingRecurrenceDto);
final MeetingTypeDto meetingTypeDto = new MeetingTypeDto(MeetingType.CUSTOMER_MEETING.getValue().intValue(), null, null);
meetingDto = new MeetingDto(meetingStartDate, meetingLocation, meetingTypeDto, meetingDetailsDto);
} else {
}
String clientName = buildName(clientFirstName, clientMiddleName, clientLastName, clientSecondLastName);
customerDao.validateClientForDuplicateNameOrGovtId(clientName, dateOfBirth, governmentId);
/* Create dto's */
/* address */
final Address addressObject = new Address(address, null, null, cityDistrict, state, country, postalCode, telephone);
final AddressDto addressDto = Address.toDto(addressObject);
/* Personal details */
final ClientNameDetailDto clientNameDetailDto = new ClientNameDetailDto(CLIENT_NAME_TYPE, salutationId, clientFirstName, clientMiddleName, clientLastName, clientSecondLastName);
final ClientPersonalDetailDto clientPersonalDetailDto = new ClientPersonalDetailDto(ethinicityId, citizenshipId, handicappedId, activityId, maritalStatusId, educationLevelId, numberOfChildren, genderId, povertyStatusId);
/* Spouse details */
ClientNameDetailDto spouseNameDetailDto = null;
if (spouseFatherNameType == null) {
spouseNameDetailDto = new ClientNameDetailDto();
spouseNameDetailDto.setFirstName("");
spouseNameDetailDto.setLastName("");
} else {
spouseNameDetailDto = new ClientNameDetailDto(spouseFatherNameType, null, spouseFirstName, spouseMiddleName, spouseLastName, spouseSecondLastName);
}
/* branch office */
Short officeId = 0;
Short loanOfficerId = null;
Short groupFlagValue = 1;
if (StringUtils.isBlank(groupGlobalNum)) {
if (statusId == CustomerStatus.CLIENT_ACTIVE.getValue() && meetingDto == null) {
String error = getRowError(friendlyRowNumber) + getMessage(XlsMessageConstants.NO_MEETING_ERROR);
errorsList.add(error);
continue;
}
groupFlagValue = 0;
officeId = branchOfficeId;
List<PersonnelBO> officers = legacyPersonnelDao.getActiveLoanOfficersUnderOffice(officeId);
if (officers.isEmpty()) {
String error = getCellError(friendlyRowNumber, XlsImportConstants.BRANCH_SHORT_NAME_CELL) + getMessage(XlsMessageConstants.NO_OFFICERS_ERROR, branchShortName);
errorsList.add(error);
continue;
}
loanOfficerId = null;
for (PersonnelBO officer : officers) {
if (officer.getDisplayName().equals(loanOfficer)) {
loanOfficerId = officer.getPersonnelId();
break;
}
}
} else {
validateGroupStatus(groupGlobalNum, statusId);
}
/* Not imported values */
final boolean trained = false;
final Date trainedDate = null;
final java.sql.Date mfiJoiningDate = null;
final String externalId = "";
final InputStream picture = null;
final List<ApplicableAccountFeeDto> feesToApply = null;
final List<ClientNameDetailDto> familyNames = null;
final List<ClientFamilyDetailDto> familyDetails = null;
final List<Short> selectedSavingsProducts = null;
/* Final dto */
final ClientCreationDetail clientCreationDetail = new ClientCreationDetail(selectedSavingsProducts, clientName, statusId, mfiJoiningDate, externalId, addressDto, formedBy, dateOfBirth, governmentId, trained, trainedDate, groupFlagValue, clientNameDetailDto, clientPersonalDetailDto, spouseNameDetailDto, picture, feesToApply, groupGlobalNum, familyNames, familyDetails, loanOfficerId, officeId, activationDate);
validateDuplicateCustomers(clientCreationDetail, parsedClientDetails);
final ImportedClientDetail importedClientDetail = new ImportedClientDetail(clientCreationDetail, clientGlobalNum, meetingDto);
parsedClientDetails.add(importedClientDetail);
} catch (RowException ex) {
final String error = getRowError(friendlyRowNumber) + ex.getMessage();
errorsList.add(error);
} catch (CustomerException ex) {
final String error = getRowError(friendlyRowNumber) + getMessage(XlsMessageConstants.DUPLICATE_CLIENT_ERROR);
errorsList.add(error);
} catch (Exception ex) {
final String error = getCellError(friendlyRowNumber, currentCell) + ex.getMessage();
errorsList.add(error);
}
}
}
} catch (Exception ex) {
errorsList.add(getMessage(XlsMessageConstants.ERROR_READING_DOCUMENT, ex.getMessage()));
}
return new ParsedClientsDto(errorsList, parsedClientDetails);
}
use of org.mifos.dto.domain.MeetingRecurrenceDto in project head by mifos.
the class MeetingRecurrenceTypeEntityTest method shouldCreateDtoWithCorrectRecurrenceDetailsForWeekDayAndWeekOfMonth.
@Test
public void shouldCreateDtoWithCorrectRecurrenceDetailsForWeekDayAndWeekOfMonth() throws Exception {
// setup
MeetingDetailsEntity meetingDetails = null;
RankOfDay rank = RankOfDay.FIRST;
WeekDay weekDay = WeekDay.MONDAY;
Short dayNumber = null;
meetingRecurrenceEntity = new MeetingRecurrenceEntity(dayNumber, weekDay, rank, meetingDetails);
// exercise test
MeetingRecurrenceDto meetingRecurrenceDto = meetingRecurrenceEntity.toDto();
// verification
assertThat(meetingRecurrenceDto.getDayNumber(), is(1));
assertThat(meetingRecurrenceDto.getDayOfWeek(), is(WeekDay.MONDAY.getValue().intValue()));
assertThat(meetingRecurrenceDto.getWeekOfMonth(), is(RankOfDay.FIRST.getValue().intValue()));
}
Aggregations