@CloseSession @TransactionDemarcate(validateAndResetToken = true) public ActionForward removeGroupMemberShip( ActionMapping mapping, ActionForm form, HttpServletRequest request, @SuppressWarnings("unused") HttpServletResponse response) throws Exception { GroupTransferActionForm actionForm = (GroupTransferActionForm) form; CustomerBO customerBOInSession = (CustomerBO) SessionUtils.getAttribute(Constants.BUSINESS_KEY, request); ClientBO client = this.customerDao.findClientBySystemId(customerBOInSession.getGlobalCustNum()); checkVersionMismatch(customerBOInSession.getVersionNo(), client.getVersionNo()); Short loanOfficerId = null; if (StringUtils.isNotBlank(actionForm.getAssignedLoanOfficerId())) { loanOfficerId = Short.valueOf(actionForm.getAssignedLoanOfficerId()); } this.clientServiceFacade.removeGroupMembership( customerBOInSession.getGlobalCustNum(), loanOfficerId, actionForm.getComment()); return mapping.findForward(ActionForwards.view_client_details_page.toString()); }
@Override public void initializeClientStates(String clientGlobalNum) { ClientBO client = this.customerDao.findClientBySystemId(clientGlobalNum); try { List<ListElement> savingsStatesList = new ArrayList<ListElement>(); AccountStateMachines.getInstance().initializeClientStates(); List<CustomerStatusEntity> statusList = AccountStateMachines.getInstance().getClientStatusList(client.getCustomerStatus()); for (CustomerStatusEntity customerState : statusList) { savingsStatesList.add( new ListElement(customerState.getId().intValue(), customerState.getName())); } } catch (StatesInitializationException e) { throw new MifosRuntimeException(e); } }
@TransactionDemarcate(joinToken = true) public ActionForward loadGrpMemberShip( ActionMapping mapping, ActionForm form, HttpServletRequest request, @SuppressWarnings("unused") HttpServletResponse response) throws Exception { GroupTransferActionForm actionForm = (GroupTransferActionForm) form; actionForm.setComment(null); ClientBO clientInSession = (ClientBO) SessionUtils.getAttribute(Constants.BUSINESS_KEY, request); ClientRemovalFromGroupDto clientRemovalFromGroupDetail = this.clientServiceFacade.retreiveClientDetailsForRemovalFromGroup( clientInSession.getGlobalCustNum()); actionForm.setAssignedLoanOfficerId(clientRemovalFromGroupDetail.getLoanOfficerId().toString()); actionForm.setIsActive(clientRemovalFromGroupDetail.isActive() ? Constants.YES : Constants.NO); ClientBO client = this.customerDao.findClientBySystemId(clientInSession.getGlobalCustNum()); SessionUtils.removeAttribute(Constants.BUSINESS_KEY, request); SessionUtils.setAttribute(Constants.BUSINESS_KEY, client, request); SessionUtils.setCollectionAttribute( OfficeConstants.OFFICESBRANCHOFFICESLIST, clientRemovalFromGroupDetail.getActiveBranches(), request); SessionUtils.setAttribute( CollectionSheetEntryConstants.ISCENTERHIERARCHYEXISTS, clientRemovalFromGroupDetail.isCenterHierarchyExists() ? Constants.YES : Constants.NO, request); SessionUtils.setCollectionAttribute( CustomerConstants.LOAN_OFFICER_LIST, clientRemovalFromGroupDetail.getLoanOfficers(), request); return mapping.findForward(ActionForwards.loadGrpMemberShip_success.toString()); }
public void testSuccessfulPreview() throws Exception { CollectionSheetEntryGridDto bulkEntry = getSuccessfulBulkEntry(); Calendar meetinDateCalendar = new GregorianCalendar(); int year = meetinDateCalendar.get(Calendar.YEAR); int month = meetinDateCalendar.get(Calendar.MONTH); int day = meetinDateCalendar.get(Calendar.DAY_OF_MONTH); meetinDateCalendar = new GregorianCalendar(year, month, day); request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); SessionUtils.setAttribute(CollectionSheetEntryConstants.BULKENTRY, bulkEntry, request); setRequestPathInfo("/collectionsheetaction.do"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("method", "preview"); addRequestParameter("attendanceSelected[0]", "1"); addRequestParameter("enteredAmount[0][0]", "212.0"); addRequestParameter("enteredAmount[1][1]", "212.0"); addRequestParameter("enteredAmount[0][1]", "212.0"); addRequestParameter("enteredAmount[1][0]", "212.0"); addRequestParameter("withDrawalAmountEntered[2][2]", "100.0"); addRequestParameter("depositAmountEntered[2][2]", "100.0"); addRequestParameter("withDrawalAmountEntered[0][0]", "100.0"); addRequestParameter("depositAmountEntered[0][0]", "100.0"); addRequestDateParameter("transactionDate", day + "/" + (month + 1) + "/" + year); performNoErrors(); verifyForward("preview_success"); groupAccount = TestObjectFactory.getObject(LoanBO.class, groupAccount.getAccountId()); clientAccount = TestObjectFactory.getObject(LoanBO.class, clientAccount.getAccountId()); centerSavingsAccount = TestObjectFactory.getObject(SavingsBO.class, centerSavingsAccount.getAccountId()); clientSavingsAccount = TestObjectFactory.getObject(SavingsBO.class, clientSavingsAccount.getAccountId()); groupSavingsAccount = TestObjectFactory.getObject(SavingsBO.class, groupSavingsAccount.getAccountId()); center = TestObjectFactory.getCustomer(center.getCustomerId()); group = TestObjectFactory.getCustomer(group.getCustomerId()); client = TestObjectFactory.getClient(client.getCustomerId()); }
public void testSuccessfulCreate() throws Exception { CollectionSheetEntryGridDto bulkEntry = getSuccessfulBulkEntry(); Calendar meetingDateCalendar = new GregorianCalendar(); int year = meetingDateCalendar.get(Calendar.YEAR); int month = meetingDateCalendar.get(Calendar.MONTH); int day = meetingDateCalendar.get(Calendar.DAY_OF_MONTH); meetingDateCalendar = new GregorianCalendar(year, month, day); Date meetingDate = new Date(meetingDateCalendar.getTimeInMillis()); HashMap<Integer, ClientAttendanceDto> clientAttendance = new HashMap<Integer, ClientAttendanceDto>(); clientAttendance.put(1, getClientAttendanceDto(1, meetingDate)); clientAttendance.put(2, getClientAttendanceDto(2, meetingDate)); clientAttendance.put(3, getClientAttendanceDto(3, meetingDate)); request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("attendanceSelected[0]", "2"); request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); SessionUtils.setAttribute(CollectionSheetEntryConstants.BULKENTRY, bulkEntry, request); setRequestPathInfo("/collectionsheetaction.do"); addRequestParameter("method", "preview"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestDateParameter("transactionDate", day + "/" + (month + 1) + "/" + year); if (SUPPLY_ENTERED_AMOUNT_PARAMETERS) { addParametersForEnteredAmount(); addParametersForDisbursalEnteredAmount(); } performNoErrors(); request.setAttribute(Constants.CURRENTFLOWKEY, flowKey); setRequestPathInfo("/collectionsheetaction.do"); addRequestParameter("method", "create"); addRequestParameter(Constants.CURRENTFLOWKEY, flowKey); addRequestParameter("attendanceSelected[0]", "2"); addRequestDateParameter("transactionDate", day + "/" + (month + 1) + "/" + year); addRequestParameter("customerId", "1"); performNoErrors(); verifyForward("create_success"); Assert.assertNotNull(request.getAttribute(CollectionSheetEntryConstants.CENTER)); Assert.assertEquals( request.getAttribute(CollectionSheetEntryConstants.CENTER), center.getDisplayName()); groupAccount = TestObjectFactory.getObject(LoanBO.class, groupAccount.getAccountId()); clientAccount = TestObjectFactory.getObject(LoanBO.class, clientAccount.getAccountId()); centerSavingsAccount = TestObjectFactory.getObject(SavingsBO.class, centerSavingsAccount.getAccountId()); clientSavingsAccount = TestObjectFactory.getObject(SavingsBO.class, clientSavingsAccount.getAccountId()); groupSavingsAccount = TestObjectFactory.getObject(SavingsBO.class, groupSavingsAccount.getAccountId()); center = TestObjectFactory.getCustomer(center.getCustomerId()); group = TestObjectFactory.getCustomer(group.getCustomerId()); client = TestObjectFactory.getClient(client.getCustomerId()); Assert.assertEquals(1, client.getClientAttendances().size()); Assert.assertEquals( AttendanceType.ABSENT, client .getClientAttendanceForMeeting(new java.sql.Date(meetingDateCalendar.getTimeInMillis())) .getAttendanceAsEnum()); }
@Override public ParsedClientsDto save(ParsedClientsDto parsedClientsDto) { MifosUser user = (MifosUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); UserContext userContext = toUserContext(user); OfficeBO userOffice = this.officeDao.findOfficeById(userContext.getBranchId()); userContext.setBranchGlobalNum(userOffice.getGlobalOfficeNum()); DateTimeService dateTimeService = new DateTimeService(); /* Construct ClientBO objects */ List<NewClientDto> newClients = new ArrayList<NewClientDto>(); for (ImportedClientDetail importedClient : parsedClientsDto.getSuccessfullyParsedRows()) { String secondMiddleName = null; ClientCreationDetail clientCreationDetail = importedClient.getClientCreationDetail(); PersonnelBO formedBy = null; /* Client name details */ ClientNameDetailDto clientNameDetails = clientCreationDetail.getClientNameDetailDto(); ClientNameDetailEntity clientNameDetailEntity = new ClientNameDetailEntity(null, secondMiddleName, clientNameDetails); ClientDetailEntity clientDetailEntity = new ClientDetailEntity(); clientDetailEntity.updateClientDetails(clientCreationDetail.getClientPersonalDetailDto()); String clientFirstName = clientNameDetails.getFirstName(); String clientLastName = clientNameDetails.getLastName(); String secondLastName = clientNameDetails.getSecondLastName(); /* Spouse/father name details */ ClientNameDetailEntity spouseFatherNameDetailEntity = null; if (clientCreationDetail.getSpouseFatherName() != null) { spouseFatherNameDetailEntity = new ClientNameDetailEntity( null, secondMiddleName, clientCreationDetail.getSpouseFatherName()); } /* Data conversion */ DateTime dateOfBirth = new DateTime(clientCreationDetail.getDateOfBirth()); DateTime mfiJoiningDate = new DateTime(clientCreationDetail.getMfiJoiningDate()); DateTime trainedDateTime = null; if (clientCreationDetail.getTrainedDate() != null) { trainedDateTime = new DateTime(clientCreationDetail.getTrainedDate()); } /* Status */ CustomerStatus clientStatus = CustomerStatus.fromInt(clientCreationDetail.getClientStatus()); CustomerStatus finalStatus = clientStatus; if (clientStatus == CustomerStatus.CLIENT_ACTIVE && clientCreationDetail.getActivationDate() == null) { clientStatus = CustomerStatus.CLIENT_PENDING; } /* Address */ Address address = null; if (clientCreationDetail.getAddress() != null) { AddressDto dto = clientCreationDetail.getAddress(); address = new Address( dto.getLine1(), dto.getLine2(), dto.getLine3(), dto.getCity(), dto.getState(), dto.getCountry(), dto.getZip(), dto.getPhoneNumber()); } // empty list List<ClientInitialSavingsOfferingEntity> associatedOfferings = new ArrayList<ClientInitialSavingsOfferingEntity>(); // client object ClientBO client; if (clientCreationDetail.getGroupFlag() == 1) { CustomerBO group = customerDao.findCustomerBySystemId(clientCreationDetail.getParentGroupId()); if (clientCreationDetail.getFormedBy() != null) { formedBy = this.personnelDao.findPersonnelById(clientCreationDetail.getFormedBy()); } else { formedBy = group.getPersonnel(); } client = ClientBO.createNewInGroupHierarchy( userContext, clientCreationDetail.getClientName(), clientStatus, mfiJoiningDate, group, formedBy, clientNameDetailEntity, dateOfBirth, clientCreationDetail.getGovernmentId(), clientCreationDetail.isTrained(), trainedDateTime, clientCreationDetail.getGroupFlag(), clientFirstName, clientLastName, secondLastName, spouseFatherNameDetailEntity, clientDetailEntity, associatedOfferings, clientCreationDetail.getExternalId(), address, clientCreationDetail.getActivationDate()); } else { Short officeId = clientCreationDetail.getOfficeId(); Short officerId = clientCreationDetail.getLoanOfficerId(); PersonnelBO loanOfficer = personnelDao.findPersonnelById(officerId); OfficeBO office = this.officeDao.findOfficeById(officeId); if (clientCreationDetail.getFormedBy() != null) { formedBy = this.personnelDao.findPersonnelById(clientCreationDetail.getFormedBy()); } else { formedBy = loanOfficer; } int lastSearchIdCustomerValue = customerDao.retrieveLastSearchIdValueForNonParentCustomersInOffice(officeId); /* meeting */ final MeetingDto meetingDto = importedClient.getMeeting(); MeetingBO clientMeeting = null; if (meetingDto != null) { clientMeeting = new MeetingFactory().create(meetingDto); clientMeeting.setUserContext(userContext); } client = ClientBO.createNewOutOfGroupHierarchy( userContext, clientCreationDetail.getClientName(), clientStatus, mfiJoiningDate, office, loanOfficer, clientMeeting, formedBy, clientNameDetailEntity, dateOfBirth, clientCreationDetail.getGovernmentId(), clientCreationDetail.isTrained(), trainedDateTime, clientCreationDetail.getGroupFlag(), clientFirstName, clientLastName, secondLastName, spouseFatherNameDetailEntity, clientDetailEntity, associatedOfferings, clientCreationDetail.getExternalId(), address, lastSearchIdCustomerValue); if (clientCreationDetail.getActivationDate() != null) { client.setCustomerActivationDate( clientCreationDetail.getActivationDate().toDateMidnight().toDate()); } } // global id if (importedClient.getClientGlobalNum() != null) { client.setGlobalCustNum(importedClient.getClientGlobalNum()); } NewClientDto newClient = new NewClientDto(client, finalStatus); newClients.add(newClient); } /* Validate client data */ for (NewClientDto newClient : newClients) { ClientBO client = newClient.getClientBO(); try { client.validate(); customerDao.validateClientForDuplicateNameOrGovtId( client.getDisplayName(), client.getDateOfBirth(), client.getGovernmentId()); } catch (CustomerException ex) { throw new MifosRuntimeException(ex); } } /* Save clients */ List<AccountFeesEntity> accountFees = new ArrayList<AccountFeesEntity>(); // empty list try { hibernateTransactionHelper.startTransaction(); for (NewClientDto newClient : newClients) { ClientBO client = newClient.getClientBO(); CustomerStatus finalStatus = newClient.getCustomerStatus(); // status to pending approval if active MeetingBO meeting = client.getCustomerMeetingValue(); customerDao.save(client); hibernateTransactionHelper.flushSession(); CalendarEvent applicableCalendarEvents = holidayDao.findCalendarEventsForThisYearAndNext(client.getOfficeId()); CustomerAccountBO customerAccount = customerAccountFactory.create(client, accountFees, meeting, applicableCalendarEvents); client.addAccount(customerAccount); customerDao.save(client); hibernateTransactionHelper.flushSession(); if (client.getParentCustomer() != null) { customerDao.save(client.getParentCustomer()); } if (client.getGlobalCustNum() == null) { client.generateGlobalCustomerNumber(); } client.generateSearchId(); customerDao.save(client); hibernateTransactionHelper.flushSession(); if (client.getParentCustomer() != null) { customerDao.save(client.getParentCustomer()); } /* activate client */ if (finalStatus == CustomerStatus.CLIENT_ACTIVE) { hibernateTransactionHelper.flushSession(); hibernateTransactionHelper.beginAuditLoggingFor(client); client.clearCustomerFlagsIfApplicable(client.getStatus(), finalStatus); client.updateCustomerStatus(finalStatus); // changeStatus(client, oldStatus, newStatus); if (client.getParentCustomer() != null) { CustomerHierarchyEntity hierarchy = new CustomerHierarchyEntity(client, client.getParentCustomer()); client.addCustomerHierarchy(hierarchy); } if (client.getCustomerActivationDate() != null) { client.setCustomerActivationDate(client.getCustomerActivationDate()); } else { client.setCustomerActivationDate(dateTimeService.getCurrentJavaDateTime()); } customerAccount.createSchedulesAndFeeSchedulesForFirstTimeActiveCustomer( client, accountFees, meeting, applicableCalendarEvents, new DateTime(client.getCustomerActivationDate())); customerDao.save(client); } } hibernateTransactionHelper.commitTransaction(); } catch (Exception ex) { hibernateTransactionHelper.rollbackTransaction(); throw new MifosRuntimeException(ex); } return parsedClientsDto; }