List of usage examples for org.hibernate.criterion DetachedCriteria setProjection
public DetachedCriteria setProjection(Projection projection)
From source file:ro.cs.om.model.dao.impl.DaoRoleImpl.java
License:Open Source License
/** * Searches for roles after criterion from searchRoleBean * @author alu//from w w w .j av a 2s . co m * @return A list of role beans * @throws ParseException */ public List<Role> getRoleBeanFromSearch(SearchRoleBean searchRoleBean, boolean isDeleteAction, Set<Integer> modulesIds) throws ParseException { logger.debug("getRoleBeanFromSearch - START - name:".concat(searchRoleBean.getName()).concat(" moduleId - ") .concat(String.valueOf(searchRoleBean.getModuleId())).concat(" orgId - ") .concat(String.valueOf(searchRoleBean.getOrganisationId()))); /*Once a Projection is being set to a Detached Criteria object, it cannot be removed anymore, so two identical DetachedCriteria objects must be created: -dcCount ( on which the projection is being set )used to retrieve the number of distinct results which is set when the request didn't come from the pagination area and needed further more to set the current page after a delete action; -dc used to retrieve the result set after the current page has been set in case of a delete action */ // set search criterion DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.roleForListingEntity); DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.roleForListingEntity); if (searchRoleBean.getName() != null && !"".equals(searchRoleBean.getName())) { dc.add(Restrictions.ilike("name", "%".concat(searchRoleBean.getName()).concat("%"))); dcCount.add(Restrictions.ilike("name", "%".concat(searchRoleBean.getName()).concat("%"))); } if (searchRoleBean.getModuleId() != -1) { dc.add(Restrictions.eq("module.moduleId", searchRoleBean.getModuleId())); dcCount.add(Restrictions.eq("module.moduleId", searchRoleBean.getModuleId())); } else { dc.add(Restrictions.in("module.moduleId", modulesIds)); dcCount.add(Restrictions.in("module.moduleId", modulesIds)); } if (searchRoleBean.getOrganisationId() != -1) { dc.add(Restrictions.eq("organisation.organisationId", searchRoleBean.getOrganisationId())); dcCount.add(Restrictions.eq("organisation.organisationId", searchRoleBean.getOrganisationId())); } // check if I have to order the results if (searchRoleBean.getSortParam() != null && !"".equals(searchRoleBean.getSortParam())) { // if I have to, check if I have to order them ascending or descending if (searchRoleBean.getSortDirection() == -1) { // ascending dc.addOrder(Order.asc(searchRoleBean.getSortParam())); } else { // descending dc.addOrder(Order.desc(searchRoleBean.getSortParam())); } } // if the request didn't come from the pagination area, // it means that I have to set the number of results and pages if (isDeleteAction || searchRoleBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchRoleBean.getNbrOfResults() == -1) { isSearch = true; } // set the count(*) restriction dcCount.setProjection(Projections.countDistinct("roleId")); //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation //sets firstResult and maxResults to -1, which kills the countDistinct Projection int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue(); logger.debug("search results: ".concat(String.valueOf(nbrOfResults))); searchRoleBean.setNbrOfResults(nbrOfResults); // get the number of pages if (nbrOfResults % searchRoleBean.getResultsPerPage() == 0) { searchRoleBean.setNbrOfPages(nbrOfResults / searchRoleBean.getResultsPerPage()); } else { searchRoleBean.setNbrOfPages(nbrOfResults / searchRoleBean.getResultsPerPage() + 1); } // after a role is deleted, the same page has to be displayed; //only when all the roles from last page are deleted, the previous page will be shown if (isDeleteAction && (searchRoleBean.getCurrentPage() > searchRoleBean.getNbrOfPages())) { searchRoleBean.setCurrentPage(searchRoleBean.getNbrOfPages()); } else if (isSearch) { searchRoleBean.setCurrentPage(1); } } List<Role> res = (List<Role>) getHibernateTemplate().findByCriteria(dc, (searchRoleBean.getCurrentPage() - 1) * searchRoleBean.getResultsPerPage(), searchRoleBean.getResultsPerPage()); logger.debug("getRoleBeanFromSearch - END results size : ".concat(String.valueOf(res.size()))); return res; }
From source file:ro.cs.om.model.dao.impl.DaoUserGroupImpl.java
License:Open Source License
public List<UserGroup> getUserGroupBeanFromSearch(SearchUserGroupBean searchUserGroupBean, boolean isDeleteAction) { logger.debug("DaoUserGroupImpl - getUserGroupBeanFromSearch - START - name: " .concat(String.valueOf(searchUserGroupBean.getName())) .concat(" - organisationId: ".concat(String.valueOf(searchUserGroupBean.getOrganisationId())))); /*Once a Projection is being set to a Detached Criteria object, it cannot be removed anymore, so two identical DetachedCriteria objects must be created: //w w w. j av a2s.c o m -dcCount ( on which the projection is being set )used to retrieve the number of distinct results which is set when the request didn't come from the pagination area and needed further more to set the current page after a delete action; -dc used to retrieve the result set after the current page has been set in case of a delete action */ // set search criterion DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.userGroupForListingEntity); DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.userGroupForListingEntity); if (searchUserGroupBean.getName() != null && !"".equals(searchUserGroupBean.getName())) { dc.add(Restrictions.ilike("name", "%".concat(searchUserGroupBean.getName()).concat("%"))); dcCount.add(Restrictions.ilike("name", "%".concat(searchUserGroupBean.getName()).concat("%"))); } if (searchUserGroupBean.getOrganisationId() != -1) { dc.add(Restrictions.eq("organisation.organisationId", searchUserGroupBean.getOrganisationId())); dcCount.add(Restrictions.eq("organisation.organisationId", searchUserGroupBean.getOrganisationId())); } //the organization default user group mustn't be displayed dc.add(Restrictions.eq("status", IConstant.NOM_USER_GROUP_NORMAL)); dcCount.add(Restrictions.eq("status", IConstant.NOM_USER_GROUP_NORMAL)); // check if I have to order the results if (searchUserGroupBean.getSortParam() != null && !"".equals(searchUserGroupBean.getSortParam())) { // if I have to, check if I have to order them ascending or descending if (searchUserGroupBean.getSortDirection() == -1) { // ascending dc.addOrder(Order.asc(searchUserGroupBean.getSortParam())); } else { // descending dc.addOrder(Order.desc(searchUserGroupBean.getSortParam())); } } // if the request didn't come from the pagination area, // it means that I have to set the number of results and pages if (isDeleteAction || searchUserGroupBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchUserGroupBean.getNbrOfResults() == -1) { isSearch = true; } // set the count(*) restriction dcCount.setProjection(Projections.countDistinct("userGroupId")); //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation //sets firstResult and maxResults to -1, which kills the countDistinct Projection int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue(); logger.debug("search results: ".concat(String.valueOf(nbrOfResults))); searchUserGroupBean.setNbrOfResults(nbrOfResults); // get the number of pages if (nbrOfResults % searchUserGroupBean.getResultsPerPage() == 0) { searchUserGroupBean.setNbrOfPages(nbrOfResults / searchUserGroupBean.getResultsPerPage()); } else { searchUserGroupBean.setNbrOfPages(nbrOfResults / searchUserGroupBean.getResultsPerPage() + 1); } // after an user group is deleted, the same page has to be displayed; //only when all the user groups from last page are deleted, the previous page will be shown if (isDeleteAction && (searchUserGroupBean.getCurrentPage() > searchUserGroupBean.getNbrOfPages())) { searchUserGroupBean.setCurrentPage(searchUserGroupBean.getNbrOfPages()); } else if (isSearch) { searchUserGroupBean.setCurrentPage(1); } } List<UserGroup> res = (List<UserGroup>) getHibernateTemplate().findByCriteria(dc, (searchUserGroupBean.getCurrentPage() - 1) * searchUserGroupBean.getResultsPerPage(), searchUserGroupBean.getResultsPerPage()); logger.debug("DaoUserGroupImpl - getUserGroupBeanFromSearch - END"); return res; }
From source file:ro.cs.ts.model.dao.impl.DaoActivityImpl.java
License:Open Source License
/** * Search for activities/* ww w . j av a 2s .com*/ * * @author Adelina * * @param searchActivityBean * @param projectIds * @param isDeleteAction * @return * @throws BusinessException */ public List<Activity> getFromSearch(SearchActivityBean searchActivityBean, Set<Integer> projectIds, Integer organizationId, boolean isDeleteAction, MessageSource messageSource) throws BusinessException { logger.debug("getFromSearch - START "); // set search criterion DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.activityForListingEntity); DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.activityForListingEntity); UserAuth userAuth = (UserAuth) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); // organization if (searchActivityBean.getOrganizationId() != null) { dc.add(Restrictions.eq("organizationId", searchActivityBean.getOrganizationId())); dcCount.add(Restrictions.eq("organizationId", searchActivityBean.getOrganizationId())); } // name if (Tools.getInstance().stringNotEmpty(searchActivityBean.getName())) { dc.add(Restrictions.ilike("name", "%".concat(searchActivityBean.getName().concat("%")))); dcCount.add(Restrictions.ilike("name", "%".concat(searchActivityBean.getName().concat("%")))); logger.debug("name = " + searchActivityBean.getName()); } // project if (searchActivityBean.getProjectId() != null) { if (searchActivityBean.getProjectId() != IConstant.NOM_ACTIVITY_SEARCH_ALL && searchActivityBean.getProjectId() != IConstant.NOM_ACTIVITY_SEARCH_IN_ORGANIZATION) { //set the selected projectId as search criteria dc.createCriteria("projectDetails") .add(Restrictions.eq("projectId", searchActivityBean.getProjectId())); dcCount.createCriteria("projectDetails") .add(Restrictions.eq("projectId", searchActivityBean.getProjectId())); } else if (searchActivityBean.getProjectId() == IConstant.NOM_ACTIVITY_SEARCH_ALL) { if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_ActivityAdvancedSearch())) { DetachedCriteria subquery = DetachedCriteria .forEntityName(IModelConstant.activityForListingEntity); subquery.createCriteria("projectDetails").add(Restrictions.in("projectId", projectIds)); subquery.add(Restrictions.disjunction()); subquery.setProjection(Projections.id()); dc.add(Expression.or(Subqueries.propertyIn("activityId", subquery), Restrictions.isNull("projectDetails"))); dcCount.add(Expression.or(Subqueries.propertyIn("activityId", subquery), Restrictions.isNull("projectDetails"))); } } else if (searchActivityBean.getProjectId() == IConstant.NOM_ACTIVITY_SEARCH_IN_ORGANIZATION) { dc.add(Restrictions.isNull("projectDetails")); dcCount.add(Restrictions.isNull("projectDetails")); } } // Status dc.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED)); dcCount.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED)); // Billable if (searchActivityBean.getBillable() != null) { if (searchActivityBean.getBillable().equals(IConstant.NOM_BILLABLE_YES) || searchActivityBean.getBillable().equals(IConstant.NOM_BILLABLE_NO)) { dc.add(Restrictions.eq("billable", searchActivityBean.getBillable())); dcCount.add(Restrictions.eq("billable", searchActivityBean.getBillable())); } } //the results list List<Activity> res = null; //the order can be done while retrieving the data from the database only if the sort parameter is the activity name or billable; //this cannot be done if the results must be ordered by project name if (searchActivityBean.getSortParam() != null && !"".equals(searchActivityBean.getSortParam()) && !"projectName".equals(searchActivityBean.getSortParam())) { // check if I have to order the results // if I have to, check if I have to order them ascending or descending if (searchActivityBean.getSortDirection() == -1) { // ascending dc.addOrder(Order.asc(searchActivityBean.getSortParam())); } else { // descending dc.addOrder(Order.desc(searchActivityBean.getSortParam())); } // if the request didn't come from the pagination area, // it means that I have to set the number of results and pages if (isDeleteAction || searchActivityBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchActivityBean.getNbrOfResults() == -1) { isSearch = true; } // set the count(*) restriction dcCount.setProjection(Projections.countDistinct("activityId")); //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation //sets firstResult and maxResults to -1, which kills the countDistinct Projection int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)) .intValue(); logger.debug("search results: ".concat(String.valueOf(nbrOfResults))); searchActivityBean.setNbrOfResults(nbrOfResults); // get the number of pages if (nbrOfResults % searchActivityBean.getResultsPerPage() == 0) { searchActivityBean.setNbrOfPages(nbrOfResults / searchActivityBean.getResultsPerPage()); } else { searchActivityBean.setNbrOfPages(nbrOfResults / searchActivityBean.getResultsPerPage() + 1); } // after an activity is deleted, the same page has to be displayed; //only when all the client from last page are deleted, the previous page will be shown if (isDeleteAction && (searchActivityBean.getCurrentPage() > searchActivityBean.getNbrOfPages())) { searchActivityBean.setCurrentPage(searchActivityBean.getNbrOfPages()); } else if (isSearch) { searchActivityBean.setCurrentPage(1); } } res = (List<Activity>) getHibernateTemplate().findByCriteria(dc, (searchActivityBean.getCurrentPage() - 1) * searchActivityBean.getResultsPerPage(), searchActivityBean.getResultsPerPage()); } else { res = (List<Activity>) getHibernateTemplate().findByCriteria(dc); // if the request didn't come from the pagination area, // it means that I have to set the number of results and pages if (isDeleteAction || searchActivityBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchActivityBean.getNbrOfResults() == -1) { isSearch = true; } int nbrOfResults = res.size(); logger.debug("search results: ".concat(String.valueOf(nbrOfResults))); searchActivityBean.setNbrOfResults(nbrOfResults); // get the number of pages if (nbrOfResults % searchActivityBean.getResultsPerPage() == 0) { searchActivityBean.setNbrOfPages(nbrOfResults / searchActivityBean.getResultsPerPage()); } else { searchActivityBean.setNbrOfPages(nbrOfResults / searchActivityBean.getResultsPerPage() + 1); } // after an exchange is deleted, the same page has to be displayed; //only when all the exchanges from last page are deleted, the previous page will be shown if (isDeleteAction && (searchActivityBean.getCurrentPage() > searchActivityBean.getNbrOfPages())) { searchActivityBean.setCurrentPage(searchActivityBean.getNbrOfPages()); } else if (isSearch) { searchActivityBean.setCurrentPage(1); } } } List<Project> projects = new ArrayList<Project>(); if (projectIds.size() > 0) { projects = BLProject.getInstance().getProjectsSimpleByProjectIds(projectIds); logger.debug("projects = " + projects); } // setting the project name for (Activity activity : res) { if (activity.getProjectDetails() != null && activity.getProjectDetails().getProjectId() != null) { if (projects != null && projects.size() > 0) { for (Project project : projects) { if (activity.getProjectDetails().getProjectId().equals(project.getProjectId())) { activity.setProjectName(project.getName()); activity.setProjectId(project.getProjectId()); activity.setProjectManagerId(project.getManagerId()); logger.debug("activity = " + activity); break; } } } } else { activity.setProjectId(-1); activity.setProjectName(messageSource.getMessage(PROJECT_FROM_ORG, null, null)); } logger.debug("projectName = " + activity.getProjectName()); } List<Activity> activities = new ArrayList<Activity>(); if (searchActivityBean.getSortParam() != null && "projectName".equals(searchActivityBean.getSortParam())) { //sorting the exchanges list //------sort the list if (searchActivityBean.getSortParam().equals("projectName")) { Collections.sort(res, ActivityComparator.getInstance().activityProjectNameComparator()); } //ascending or descending if (searchActivityBean.getSortDirection() == IConstant.DESCENDING) { Collections.reverse(res); } long start = (searchActivityBean.getCurrentPage() - 1) * searchActivityBean.getResultsPerPage(); long end = searchActivityBean.getCurrentPage() * searchActivityBean.getResultsPerPage(); // go over the entries for (int i = (int) start; i < end; i++) { if (i >= res.size()) { continue; } activities.add(res.get(i)); } } else { activities = res; } logger.debug("getFromSearch - END"); return activities; }
From source file:ro.cs.ts.model.dao.impl.DaoCostSheetImpl.java
License:Open Source License
/** * Searches for cost sheets using the criterion defined in searchCostSheetBean * @author Coni//from ww w.j av a 2 s . c o m * @param searchCostSheetBean * @param isDeleteAction * @return * @throws BusinessException * @throws BusinessException */ public List<CostSheet> getResultsForSearch(SearchCostSheetBean searchCostSheetBean, boolean isDeleteAction) throws BusinessException { logger.debug("getResultsForSearch - START"); UserAuth userAuth = (UserAuth) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.costSheetForListingEntity); DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.costSheetForListingEntity); //COST SHEET ID if (searchCostSheetBean.getId() != null) { dc.add(Restrictions.eq("costSheetId", searchCostSheetBean.getId())); dcCount.add(Restrictions.eq("costSheetId", searchCostSheetBean.getId())); } //ACTIVITY NAME if (searchCostSheetBean.getActivityName() != null && !"".equals(searchCostSheetBean.getActivityName())) { dc.add(Restrictions.ilike("activityName", "%".concat(searchCostSheetBean.getActivityName().concat("%")))); dcCount.add(Restrictions.ilike("activityName", "%".concat(searchCostSheetBean.getActivityName().concat("%")))); } //START DATE if (searchCostSheetBean.getStartDate() != null) { dc.add(Restrictions.ge("date", searchCostSheetBean.getStartDate())); dcCount.add(Restrictions.ge("date", searchCostSheetBean.getStartDate())); } //END DATE if (searchCostSheetBean.getEndDate() != null) { dc.add(Restrictions.le("date", searchCostSheetBean.getEndDate())); dcCount.add(Restrictions.le("date", searchCostSheetBean.getEndDate())); } //BILLABLE if (searchCostSheetBean.getBillable() != null) { if (searchCostSheetBean.getBillable().equals(IConstant.NOM_BILLABLE_YES) || searchCostSheetBean.getBillable().equals(IConstant.NOM_BILLABLE_NO)) { dc.add(Restrictions.eq("billable", searchCostSheetBean.getBillable())); dcCount.add(Restrictions.eq("billable", searchCostSheetBean.getBillable())); } } //ORGANIZATION ID if (searchCostSheetBean.getOrganizationId() != null) { dc.add(Restrictions.eq("organizationId", searchCostSheetBean.getOrganizationId())); dcCount.add(Restrictions.eq("organizationId", searchCostSheetBean.getOrganizationId())); } //STATUS dc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED)); dcCount.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED)); //COST PRICE MIN if (searchCostSheetBean.getCostPriceMin() != null) { dc.add(Restrictions.ge("costPrice", searchCostSheetBean.getCostPriceMin())); dcCount.add(Restrictions.ge("costPrice", searchCostSheetBean.getCostPriceMin())); } //COST PRICE MAX if (searchCostSheetBean.getCostPriceMax() != null) { dc.add(Restrictions.le("costPrice", searchCostSheetBean.getCostPriceMax())); dcCount.add(Restrictions.le("costPrice", searchCostSheetBean.getCostPriceMax())); } //CURRENCY if (searchCostSheetBean.getCostPriceCurrencyId() != null && !searchCostSheetBean.getCostPriceCurrencyId().equals(-1)) { dc.createCriteria("costPriceCurrency") .add(Restrictions.eq("currencyId", searchCostSheetBean.getCostPriceCurrencyId())); dcCount.createCriteria("costPriceCurrency") .add(Restrictions.eq("currencyId", searchCostSheetBean.getCostPriceCurrencyId())); } List<TeamMember> members = null; List<UserSimple> users = null; //FIRST NAME AND LAST NAME if ((searchCostSheetBean.getFirstName() != null && !"".equals(searchCostSheetBean.getFirstName())) || (searchCostSheetBean.getLastName() != null && !"".equals(searchCostSheetBean.getLastName()))) { List<Integer> memberIds = new ArrayList<Integer>(); if (searchCostSheetBean.getProjectId() != IConstant.NOM_COST_SHEET_SEARCH_FOR_ORG) { List<TeamMember> teamMembers = BLTeamMember.getInstance().getTeamMemberFromSearch( searchCostSheetBean.getOrganizationId(), searchCostSheetBean.getFirstName(), searchCostSheetBean.getLastName(), false); if (teamMembers != null && !teamMembers.isEmpty()) { members = teamMembers; for (TeamMember teamMember : teamMembers) { memberIds.add(new Integer(teamMember.getMemberId())); } } } List<Integer> personIds = new ArrayList<Integer>(); //search for persons only if the selected option is to search in all or per organization, //otherwise only search for team members if (searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_ALL || searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_FOR_ORG) { List<UserSimple> persons = BLUser.getInstance().getUserSimpleFromSearch( searchCostSheetBean.getOrganizationId(), searchCostSheetBean.getFirstName(), searchCostSheetBean.getLastName(), true); if (persons != null && !persons.isEmpty()) { users = persons; for (UserSimple person : persons) { personIds.add(person.getUserId()); } } } if (!memberIds.isEmpty() && !personIds.isEmpty()) { List<Integer> costSheetIds = new ArrayList<Integer>(); DetachedCriteria teamMemberDc = DetachedCriteria .forEntityName(IModelConstant.costSheetWithTeamMemberDetailEntity); teamMemberDc.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds)); teamMemberDc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED)); List<CostSheet> resForTeamMembers = (List<CostSheet>) getHibernateTemplate() .findByCriteria(teamMemberDc); if (resForTeamMembers != null && !resForTeamMembers.isEmpty()) { for (CostSheet cost : resForTeamMembers) { costSheetIds.add(cost.getCostSheetId()); } } DetachedCriteria personDc = DetachedCriteria .forEntityName(IModelConstant.costSheetWithPersonDetailEntity); personDc.createCriteria("personDetail").add(Restrictions.in("personId", personIds)); personDc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED)); List<CostSheet> resForPersons = (List<CostSheet>) getHibernateTemplate().findByCriteria(personDc); if (resForPersons != null && !resForPersons.isEmpty()) { for (CostSheet cost : resForPersons) { costSheetIds.add(cost.getCostSheetId()); } } if (!costSheetIds.isEmpty()) { dc.add(Restrictions.in("costSheetId", costSheetIds)); dcCount.add(Restrictions.in("costSheetId", costSheetIds)); } } else if (!memberIds.isEmpty()) { dc.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds)); dcCount.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds)); } else if (!personIds.isEmpty()) { dc.createCriteria("personDetail").add(Restrictions.in("personId", personIds)); dcCount.createCriteria("personDetail").add(Restrictions.in("personId", personIds)); } else { return new ArrayList<CostSheet>(); } } List<Project> projects = null; //PROJECT AND TEAM MEMBER //if no project is selected, we use a subquery to retrieve a list of cost sheet ids from which we will search for cost sheets //using the other search criteria (including first name and last name) //if a project is selected, firstName or lastName won't exist as search criteria, only teamMemberId must be taken into account if (searchCostSheetBean.getTeamMemberId() == -1 && searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_ALL) { //search in all the cost sheets //if the user doesn't have the permission to search in all the cost sheets, the projectId must be //included in the list of ids for the projects in which the user is a team member if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_CostSheetSearchAll())) { HashMap<Project, TeamMember> projectsAndTeamMembers = BLProject.getInstance() .getProjectsAndTeamMembersByPerson(userAuth.getPersonId(), true, true); if (projectsAndTeamMembers != null && !projectsAndTeamMembers.isEmpty()) { projects = new ArrayList<Project>(projectsAndTeamMembers.keySet()); List<Integer> costSheetIds = new ArrayList<Integer>(); Iterator it = projectsAndTeamMembers.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Project, TeamMember> entry = (Map.Entry<Project, TeamMember>) it.next(); //the subquery is used to retrieve the list of cost sheet ids retrieved for the teamMemberId and projectId search criteria; DetachedCriteria subquery = null; if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) { subquery = DetachedCriteria .forEntityName(IModelConstant.costSheetWithProjectAndTeamMemberDetailsEntity); } else { subquery = DetachedCriteria .forEntityName(IModelConstant.costSheetWithProjectDetailsEntity); } subquery.createCriteria("projectDetails") .add(Restrictions.eq("projectId", entry.getKey().getProjectId())); subquery.setProjection(Projections.id()); subquery.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED)); //if the user is the PM for this project, we set a restriction only on projectId, //otherwise the restriction is on teamMemberId if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) { subquery.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", entry.getValue().getMemberId())); } List<Integer> costSheetIdsTemp = (List<Integer>) getHibernateTemplate() .findByCriteria(subquery); if (costSheetIdsTemp != null) { for (Integer id : costSheetIdsTemp) { costSheetIds.add(id); } } } //search for cost sheets entered by the user for the organization (no project selected) DetachedCriteria subquery = DetachedCriteria .forEntityName(IModelConstant.costSheetWithPersonDetailEntity); subquery.createCriteria("personDetail") .add(Restrictions.eq("personId", userAuth.getPersonId())); subquery.setProjection(Projections.id()); subquery.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED)); List<Integer> costSheetIdsTemp = (List<Integer>) getHibernateTemplate() .findByCriteria(subquery); if (costSheetIdsTemp != null) { for (Integer id : costSheetIdsTemp) { costSheetIds.add(id); } } if (!costSheetIds.isEmpty()) { dc.add(Restrictions.in("costSheetId", costSheetIds)); dcCount.add(Restrictions.in("costSheetId", costSheetIds)); } else { return new ArrayList<CostSheet>(); } } } } else if (searchCostSheetBean.getTeamMemberId() == -1 && searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_FOR_ORG) { //if the user doesn't have the permission to search in all the cost sheets per organization, i must set the personId property //to the user correspondent personId if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_CostSheetSearchAll())) { dc.createCriteria("personDetail").add(Restrictions.eq("personId", userAuth.getPersonId())); dcCount.createCriteria("personDetail").add(Restrictions.eq("personId", userAuth.getPersonId())); } else { //if the user has the permission to search in all the cost sheets for organization, i must set the condition that the personDetail property //mustn't be null dc.add(Restrictions.isNotNull("personDetail")); dcCount.add(Restrictions.isNotNull("personDetail")); } } else if (searchCostSheetBean.getTeamMemberId() == -1 && searchCostSheetBean.getProjectId() == IConstant.NOM_COST_SHEET_SEARCH_IN_ALL_PROJECTS) { //search in the cost sheets for all the projects //if the user doesn't have the permission to search in all the cost sheets, the projectId must be //included in the list of ids for the projects in which the user is a team member if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_CostSheetSearchAll())) { HashMap<Project, TeamMember> projectsAndTeamMembers = BLProject.getInstance() .getProjectsAndTeamMembersByPerson(userAuth.getPersonId(), true, true); if (projectsAndTeamMembers != null && !projectsAndTeamMembers.isEmpty()) { projects = new ArrayList<Project>(projectsAndTeamMembers.keySet()); List<Integer> costSheetIds = new ArrayList<Integer>(); Iterator it = projectsAndTeamMembers.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Project, TeamMember> entry = (Map.Entry<Project, TeamMember>) it.next(); //the subquery is used to retrieve the list of cost sheet ids retrieved for the teamMemberId and projectId search criteria; DetachedCriteria subquery = null; if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) { subquery = DetachedCriteria .forEntityName(IModelConstant.costSheetWithProjectAndTeamMemberDetailsEntity); } else { subquery = DetachedCriteria .forEntityName(IModelConstant.costSheetWithProjectDetailsEntity); } subquery.createCriteria("projectDetails") .add(Restrictions.eq("projectId", entry.getKey().getProjectId())); subquery.setProjection(Projections.id()); subquery.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED)); //if the user is the PM for this project, we set a restriction only on projectId, //otherwise the restriction is on teamMemberId if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) { subquery.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", entry.getValue().getMemberId())); } List<Integer> costSheetIdsTemp = (List<Integer>) getHibernateTemplate() .findByCriteria(subquery); if (costSheetIdsTemp != null) { for (Integer id : costSheetIdsTemp) { costSheetIds.add(id); } } } if (!costSheetIds.isEmpty()) { dc.add(Restrictions.in("costSheetId", costSheetIds)); dcCount.add(Restrictions.in("costSheetId", costSheetIds)); } else { return new ArrayList<CostSheet>(); } } } else { //the cost sheet must be entered for a specific project; cost sheets per organisation are excluded dc.add(Restrictions.isNotNull("projectDetails")); dcCount.add(Restrictions.isNotNull("projectDetails")); } } else if (searchCostSheetBean.getTeamMemberId() == -1 && searchCostSheetBean.getProjectId() > 0) { //search in a project Project project = BLProject.getInstance().get(searchCostSheetBean.getProjectId(), true); if (project != null) { projects = new ArrayList<Project>(); projects.add(project); //if the user is not PM for the selected project nor USER_ALL, it will see only its cost sheets if (!project.getManagerId().equals(userAuth.getPersonId()) && !userAuth.hasAuthority(PermissionConstant.getInstance().getTS_CostSheetSearchAll())) { Iterator<TeamMember> it = project.getProjectTeam().getTeamMembers().iterator(); while (it.hasNext()) { TeamMember member = it.next(); if (member.getPersonId() == userAuth.getPersonId()) { dc.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", member.getMemberId())); dcCount.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", member.getMemberId())); } } } } //set the selected projectId as search criteria dc.createCriteria("projectDetails") .add(Restrictions.eq("projectId", searchCostSheetBean.getProjectId())); dcCount.createCriteria("projectDetails") .add(Restrictions.eq("projectId", searchCostSheetBean.getProjectId())); } else if (searchCostSheetBean.getTeamMemberId() != -1 && searchCostSheetBean.getProjectId() > 0) { //search in a project and for a specific teamMemberDetail //set the selected projectId and teamMemberId as search criteria dc.createCriteria("projectDetails") .add(Restrictions.eq("projectId", searchCostSheetBean.getProjectId())); dc.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", searchCostSheetBean.getTeamMemberId())); dcCount.createCriteria("projectDetails") .add(Restrictions.eq("projectId", searchCostSheetBean.getProjectId())); dcCount.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", searchCostSheetBean.getTeamMemberId())); } //the results list List<CostSheet> res = null; //the order can be done while retrieving the data from the database only if the sort parameter is the activity name, costSheetId, date, billable; //this cannot be done if the results must be ordered by cost sheet owner name or project name if (searchCostSheetBean.getSortParam() != null && !"".equals(searchCostSheetBean.getSortParam()) && !"costSheetReporterName".equals(searchCostSheetBean.getSortParam()) && !"projectName".equals(searchCostSheetBean.getSortParam())) { // check if I have to order the results // if I have to, check if I have to order them ascending or descending if (searchCostSheetBean.getSortDirection() == -1) { // ascending dc.addOrder(Order.asc(searchCostSheetBean.getSortParam())); } else { // descending dc.addOrder(Order.desc(searchCostSheetBean.getSortParam())); } // if the request didn't come from the pagination area, // it means that I have to set the number of results and pages if (isDeleteAction || searchCostSheetBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchCostSheetBean.getNbrOfResults() == -1) { isSearch = true; } // set the count(*) restriction dcCount.setProjection(Projections.countDistinct("costSheetId")); //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation //sets firstResult and maxResults to -1, which kills the countDistinct Projection int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)) .intValue(); logger.debug("search results: ".concat(String.valueOf(nbrOfResults))); searchCostSheetBean.setNbrOfResults(nbrOfResults); // get the number of pages if (nbrOfResults % searchCostSheetBean.getResultsPerPage() == 0) { searchCostSheetBean.setNbrOfPages(nbrOfResults / searchCostSheetBean.getResultsPerPage()); } else { searchCostSheetBean.setNbrOfPages(nbrOfResults / searchCostSheetBean.getResultsPerPage() + 1); } // after a cost sheet is deleted, the same page has to be displayed; //only when all the client from last page are deleted, the previous page will be shown if (isDeleteAction && (searchCostSheetBean.getCurrentPage() > searchCostSheetBean.getNbrOfPages())) { searchCostSheetBean.setCurrentPage(searchCostSheetBean.getNbrOfPages()); } else if (isSearch) { searchCostSheetBean.setCurrentPage(1); } } res = (List<CostSheet>) getHibernateTemplate().findByCriteria(dc, (searchCostSheetBean.getCurrentPage() - 1) * searchCostSheetBean.getResultsPerPage(), searchCostSheetBean.getResultsPerPage()); } //setting the cost sheet reporter name if (res != null && res.size() > 0) { if (members == null) { HashSet<Integer> teamMemberIds = new HashSet<Integer>(); for (CostSheet cost : res) { if (cost.getTeamMemberDetail() != null) { teamMemberIds.add(new Integer(cost.getTeamMemberDetail().getTeamMemberId())); } } if (teamMemberIds.size() > 0) { members = BLTeamMember.getInstance().getTeamMembersByMemberIds(teamMemberIds, false); } } if (users == null) { HashSet<Integer> personIds = new HashSet<Integer>(); for (CostSheet cost : res) { if (cost.getPersonDetail() != null) { personIds.add(new Integer(cost.getPersonDetail().getPersonId())); } } if (personIds.size() > 0) { String[] ids = new String[personIds.size()]; int i = 0; for (Integer personId : personIds) { ids[i++] = personId.toString(); } users = BLUser.getInstance().getUsersByPersonId(ids); } } if (projects == null) { HashSet<Integer> projectIds = new HashSet<Integer>(); for (CostSheet cost : res) { if (cost.getProjectDetails() != null) { projectIds.add(new Integer(cost.getProjectDetails().getProjectId())); } } if (projectIds.size() > 0) { projects = BLProject.getInstance().getProjectsSimpleByProjectIds(projectIds); } } for (CostSheet cost : res) { if (cost.getTeamMemberDetail() != null && members != null) { for (TeamMember member : members) { if (cost.getTeamMemberDetail().getTeamMemberId().equals(member.getMemberId())) { cost.setCostSheetReporterName( member.getFirstName().concat(" ").concat(member.getLastName())); break; } } } else if (cost.getPersonDetail() != null && users != null) { for (UserSimple user : users) { if (cost.getPersonDetail().getPersonId() == user.getUserId()) { cost.setCostSheetReporterName( user.getFirstName().concat(" ").concat(user.getLastName())); break; } } } //setting the project name if (cost.getProjectDetails() != null && cost.getProjectDetails().getProjectId() != null && projects != null) { for (Project project : projects) { if (cost.getProjectDetails().getProjectId().equals(project.getProjectId())) { cost.setProjectName(project.getName()); cost.setProjectManagerId(project.getManagerId()); break; } } } } } logger.debug("getResultsForSearch - END"); return res; }
From source file:ro.cs.ts.model.dao.impl.DaoCurrencyImpl.java
License:Open Source License
/** * Searches for currencies using the criterion defined in searchCurrencyBean * @author Coni/*from w w w .jav a 2s. com*/ * @param searchCurrencyBean * @param isDeleteAction * @return * @throws BusinessException */ public List<Currency> getCurrencyBeanFromSearch(SearchCurrencyBean searchCurrencyBean, boolean isDeleteAction) { logger.debug("getCurrencyBeanFromSearch - START"); DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.currencyEntity); DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.currencyEntity); if (searchCurrencyBean.getName() != null && !"".equals(searchCurrencyBean.getName())) { dc.add(Restrictions.ilike("name", "%".concat(searchCurrencyBean.getName()).concat("%"))); dcCount.add(Restrictions.ilike("name", "%".concat(searchCurrencyBean.getName()).concat("%"))); } if (searchCurrencyBean.getInitials() != null && !"".equals(searchCurrencyBean.getInitials())) { dc.add(Restrictions.ilike("initials", "%".concat(searchCurrencyBean.getInitials()).concat("%"))); dcCount.add(Restrictions.ilike("initials", "%".concat(searchCurrencyBean.getInitials()).concat("%"))); } if (searchCurrencyBean.getOrganizationId() != null) { dc.add(Restrictions.eq("organizationId", searchCurrencyBean.getOrganizationId())); dcCount.add(Restrictions.eq("organizationId", searchCurrencyBean.getOrganizationId())); } dc.add(Restrictions.ne("status", IConstant.NOM_CURRENCY_STATUS_DELETED)); dcCount.add(Restrictions.ne("status", IConstant.NOM_CURRENCY_STATUS_DELETED)); // check if I have to order the results if (searchCurrencyBean.getSortParam() != null && !"".equals(searchCurrencyBean.getSortParam())) { // if I have to, check if I have to order them ascending or descending if (searchCurrencyBean.getSortDirection() == -1) { // ascending dc.addOrder(Order.asc(searchCurrencyBean.getSortParam())); } else { // descending dc.addOrder(Order.desc(searchCurrencyBean.getSortParam())); } } // if the request didn't come from the pagination area, // it means that I have to set the number of results and pages if (isDeleteAction || searchCurrencyBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchCurrencyBean.getNbrOfResults() == -1) { isSearch = true; } // set the count(*) restriction dcCount.setProjection(Projections.countDistinct("currencyId")); //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation //sets firstResult and maxResults to -1, which kills the countDistinct Projection int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue(); logger.debug("search results: ".concat(String.valueOf(nbrOfResults))); searchCurrencyBean.setNbrOfResults(nbrOfResults); // get the number of pages if (nbrOfResults % searchCurrencyBean.getResultsPerPage() == 0) { searchCurrencyBean.setNbrOfPages(nbrOfResults / searchCurrencyBean.getResultsPerPage()); } else { searchCurrencyBean.setNbrOfPages(nbrOfResults / searchCurrencyBean.getResultsPerPage() + 1); } // after a currency is deleted, the same page has to be displayed; //only when all the client from last page are deleted, the previous page will be shown if (isDeleteAction && (searchCurrencyBean.getCurrentPage() > searchCurrencyBean.getNbrOfPages())) { searchCurrencyBean.setCurrentPage(searchCurrencyBean.getNbrOfPages()); } else if (isSearch) { searchCurrencyBean.setCurrentPage(1); } } List<Currency> res = (List<Currency>) getHibernateTemplate().findByCriteria(dc, (searchCurrencyBean.getCurrentPage() - 1) * searchCurrencyBean.getResultsPerPage(), searchCurrencyBean.getResultsPerPage()); logger.debug("getCurrencyBeanFromSearch - END results size : ".concat(String.valueOf(res.size()))); return res; }
From source file:ro.cs.ts.model.dao.impl.DaoNotificationImpl.java
License:Open Source License
public List<Notification> getNotificationsFromSearch(SearchNotificationBean searchNotificationBean, boolean isDeleteAction) { logger.debug("getNotificationsFromSearch - START "); /*Once a Projection is being set to a Detached Criteria object, it cannot be removed anymore, so two identical DetachedCriteria objects must be created: //from w w w . j a v a 2 s . c o m -dcCount ( on which the projection is being set )used to retrieve the number of distinct results which is set when the request didn't come from the pagination area and needed further more to set the current page after a delete action; -dc used to retrieve the result set after the current page has been set in case of a delete action */ // set search criterion DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.notificationEntity); DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.notificationEntity); dc.add(Restrictions.eq("receiverId", searchNotificationBean.getReceiverId())); dcCount.add(Restrictions.eq("receiverId", searchNotificationBean.getReceiverId())); if (searchNotificationBean.getStartDate() != null) { dc.add(Expression.ge("issuedDate", searchNotificationBean.getStartDate())); dcCount.add(Expression.ge("issuedDate", searchNotificationBean.getStartDate())); } if (searchNotificationBean.getEndDate() != null) { dc.add(Expression.le("issuedDate", searchNotificationBean.getEndDate())); dcCount.add(Expression.le("issuedDate", searchNotificationBean.getEndDate())); } if (searchNotificationBean.getMessage() != null && !"".equals(searchNotificationBean.getMessage())) { dc.add(Restrictions.ilike("message", "%".concat(searchNotificationBean.getMessage()).concat("%"))); dcCount.add(Restrictions.ilike("message", "%".concat(searchNotificationBean.getMessage()).concat("%"))); } // check if I have to order the results if (searchNotificationBean.getSortParam() != null && !"".equals(searchNotificationBean.getSortParam())) { // if I have to, check if I have to order them ascending or descending if (searchNotificationBean.getSortDirection() == -1) { // ascending dc.addOrder(Order.asc(searchNotificationBean.getSortParam())); } else { // descending dc.addOrder(Order.desc(searchNotificationBean.getSortParam())); } } // if the request didn't come from the pagination area, // it means that I have to set the number of results and pages if (isDeleteAction || searchNotificationBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchNotificationBean.getNbrOfResults() == -1) { isSearch = true; } // set the countDistinct restriction dcCount.setProjection(Projections.distinct(Projections.countDistinct(IModelConstant.notificationId))); int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue(); searchNotificationBean.setNbrOfResults(nbrOfResults); logger.debug("NbrOfResults " + searchNotificationBean.getNbrOfResults()); logger.debug("----> searchOrganisationBean.getResults " + searchNotificationBean.getResultsPerPage()); // get the number of pages if (nbrOfResults % searchNotificationBean.getResultsPerPage() == 0) { searchNotificationBean.setNbrOfPages(nbrOfResults / searchNotificationBean.getResultsPerPage()); } else { searchNotificationBean.setNbrOfPages(nbrOfResults / searchNotificationBean.getResultsPerPage() + 1); } // after a notification is deleted, the same page has to be displayed; // only when all the notifications from last page are deleted, the previous page will be shown if (isDeleteAction && (searchNotificationBean.getCurrentPage() > searchNotificationBean.getNbrOfPages())) { searchNotificationBean.setCurrentPage(searchNotificationBean.getNbrOfPages()); } else if (isSearch) { searchNotificationBean.setCurrentPage(1); } } List<Notification> res = getHibernateTemplate().findByCriteria(dc, Long.valueOf( (searchNotificationBean.getCurrentPage() - 1) * searchNotificationBean.getResultsPerPage()) .intValue(), Long.valueOf(searchNotificationBean.getResultsPerPage()).intValue()); if (res != null) { logger.debug("results size : ".concat(String.valueOf(res.size()))); } else { logger.debug("results size: 0"); } logger.debug("getNotificationsFromSearch - END"); return res; }
From source file:ro.cs.ts.model.dao.impl.DaoNotificationSettingImpl.java
License:Open Source License
/** * Checks if there are saved settings in the database for the specific parameters * @author alexandru.dobre//w w w .j a v a2s . co m */ public boolean hasSettings(Integer projectDetailId, Integer userId, Integer organizationId) { logger.debug("hasSettings - START"); DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.notificationSettingEntity); if (projectDetailId != null) { dcCount.add(Restrictions.eq("projectDetailId", projectDetailId)); } else { dcCount.add(Restrictions.isNull("projectDetailId")); } if (userId != null) { dcCount.add(Restrictions.eq("userId", userId)); } if (organizationId != null) { dcCount.add(Restrictions.eq("organizationId", organizationId)); } dcCount.setProjection(Projections.countDistinct("notificationSettingsId")); int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)).intValue(); logger.debug("hasSettings - END results: " + nbrOfResults); if (nbrOfResults > 0) return true; return false; }
From source file:ro.cs.ts.model.dao.impl.DaoProjectDetailsImpl.java
License:Open Source License
/** * Returns the budgets currency id for projectDetailsId * * @author alu//from w w w . j a va 2s. c om * @param projectDetailsId * @return */ public Integer getBudgetCurrencyId(Integer projectDetailsId) { logger.debug("getBudgetCurrencyId - START"); Integer budgetCurrencyId = null; List<Integer> result = null; DetachedCriteria dc = DetachedCriteria .forEntityName(IModelConstant.projectDetailsSimpleWithBudgetCurrencyId); dc.add(Restrictions.eq("projectDetailId", projectDetailsId)); dc.setProjection(Projections.property("budgetCurrencyId")); result = getHibernateTemplate().findByCriteria(dc); if ((result != null) && (result.size() > 0)) { budgetCurrencyId = result.get(0); } logger.debug("getBudgetCurrencyId - END"); return budgetCurrencyId; }
From source file:ro.cs.ts.model.dao.impl.DaoRecordImpl.java
License:Open Source License
/** * Searches for records using the criterion defined in searchRecordBean * @author Coni/* w w w . ja v a2s . com*/ * @param searchClientBean * @param isDeleteAction * @return * @throws WSClientException * @throws IOException * @throws XmlMappingException * @throws BusinessException */ public List<Record> getResultsForSearch(SearchRecordBean searchRecordBean, boolean isDeleteAction) throws XmlMappingException, IOException, WSClientException, BusinessException { logger.debug("getResultsForSearch - START"); UserAuth userAuth = (UserAuth) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.recordForListingEntity); DetachedCriteria dcCount = DetachedCriteria.forEntityName(IModelConstant.recordForListingEntity); //RECORD ID if (searchRecordBean.getId() != null) { dc.add(Restrictions.eq("recordId", searchRecordBean.getId())); dcCount.add(Restrictions.eq("recordId", searchRecordBean.getId())); } //ACTIVITY if (searchRecordBean.getActivityId() != -1) { dc.createCriteria("activity").add(Restrictions.eq("activityId", searchRecordBean.getActivityId())); dcCount.createCriteria("activity").add(Restrictions.eq("activityId", searchRecordBean.getActivityId())); } //START DATE if (searchRecordBean.getStartDate() != null) { //the search must retrieve: all the records for activities that started and haven't ended before the selected startDate //and records for activities that will begin after the selected startDate; the conditions are applied for work hours and over time dc.add(Restrictions.or( Restrictions.or(Restrictions.ge("startTime", searchRecordBean.getStartDate()), Restrictions.and(Restrictions.le("startTime", searchRecordBean.getStartDate()), Restrictions.ge("endTime", searchRecordBean.getStartDate()))), Restrictions.or(Restrictions.ge("overTimeStartTime", searchRecordBean.getStartDate()), Restrictions.and(Restrictions.le("overTimeStartTime", searchRecordBean.getStartDate()), Restrictions.ge("overTimeEndTime", searchRecordBean.getStartDate()))))); dcCount.add( Restrictions.or( Restrictions.or(Restrictions.ge("startTime", searchRecordBean.getStartDate()), Restrictions.and( Restrictions.le("startTime", searchRecordBean.getStartDate()), Restrictions.ge("endTime", searchRecordBean.getStartDate()))), Restrictions.or(Restrictions.ge("overTimeStartTime", searchRecordBean.getStartDate()), Restrictions.and( Restrictions.le("overTimeStartTime", searchRecordBean.getStartDate()), Restrictions.ge("overTimeEndTime", searchRecordBean.getStartDate()))))); } //END DATE if (searchRecordBean.getEndDate() != null) { //the search must retrieve: all the records for activities that started before the selected endDate, no matter they are ended or not; //; the conditions are applied for work hours and over time dc.add(Restrictions.or(Restrictions.le("startTime", searchRecordBean.getEndDate()), Restrictions.le("overTimeStartTime", searchRecordBean.getEndDate()))); dcCount.add(Restrictions.or(Restrictions.le("startTime", searchRecordBean.getEndDate()), Restrictions.le("overTimeStartTime", searchRecordBean.getEndDate()))); } //BILLABLE if (searchRecordBean.getBillable() != null) { if (searchRecordBean.getBillable().equals(IConstant.NOM_BILLABLE_YES) || searchRecordBean.getBillable().equals(IConstant.NOM_BILLABLE_NO)) { dc.add(Restrictions.or(Restrictions.eq("billable", searchRecordBean.getBillable()), Restrictions.eq("overTimeBillable", searchRecordBean.getBillable()))); dcCount.add(Restrictions.or(Restrictions.eq("billable", searchRecordBean.getBillable()), Restrictions.eq("overTimeBillable", searchRecordBean.getBillable()))); } } //ORGANIZATION ID if (searchRecordBean.getOrganizationId() != null) { dc.add(Restrictions.eq("organizationId", searchRecordBean.getOrganizationId())); dcCount.add(Restrictions.eq("organizationId", searchRecordBean.getOrganizationId())); } //STATUS dc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); dcCount.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); List<TeamMember> members = null; List<UserSimple> users = null; //FIRST NAME AND LAST NAME if ((searchRecordBean.getFirstName() != null && !"".equals(searchRecordBean.getFirstName())) || (searchRecordBean.getLastName() != null && !"".equals(searchRecordBean.getLastName()))) { List<Integer> memberIds = new ArrayList<Integer>(); if (searchRecordBean.getProjectId() != IConstant.NOM_RECORD_SEARCH_FOR_ORG) { List<TeamMember> teamMembers = BLTeamMember.getInstance().getTeamMemberFromSearch( searchRecordBean.getOrganizationId(), searchRecordBean.getFirstName(), searchRecordBean.getLastName(), false); if (teamMembers != null && !teamMembers.isEmpty()) { members = teamMembers; for (TeamMember teamMember : teamMembers) { memberIds.add(new Integer(teamMember.getMemberId())); } } } //search for persons only if the selected option is to search in all or per organization, //otherwise only search for team members List<Integer> personIds = new ArrayList<Integer>(); if (searchRecordBean.getProjectId() == IConstant.NOM_RECORD_SEARCH_ALL || searchRecordBean.getProjectId() == IConstant.NOM_RECORD_SEARCH_FOR_ORG) { List<UserSimple> persons = BLUser.getInstance().getUserSimpleFromSearch( searchRecordBean.getOrganizationId(), searchRecordBean.getFirstName(), searchRecordBean.getLastName(), true); if (persons != null && !persons.isEmpty()) { users = persons; for (UserSimple person : persons) { personIds.add(person.getUserId()); } } } if (!memberIds.isEmpty() && !personIds.isEmpty()) { List<Integer> recordIds = new ArrayList<Integer>(); DetachedCriteria teamMemberDc = DetachedCriteria .forEntityName(IModelConstant.recordWithTeamMemberDetailEntity); teamMemberDc.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds)); teamMemberDc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); List<Record> resForTeamMembers = (List<Record>) getHibernateTemplate().findByCriteria(teamMemberDc); if (resForTeamMembers != null && !resForTeamMembers.isEmpty()) { for (Record rec : resForTeamMembers) { recordIds.add(rec.getRecordId()); } } DetachedCriteria personDc = DetachedCriteria .forEntityName(IModelConstant.recordWithPersonDetailEntity); personDc.createCriteria("personDetail").add(Restrictions.in("personId", personIds)); personDc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); List<Record> resForPersons = (List<Record>) getHibernateTemplate().findByCriteria(personDc); if (resForPersons != null && !resForPersons.isEmpty()) { for (Record rec : resForPersons) { recordIds.add(rec.getRecordId()); } } if (!recordIds.isEmpty()) { dc.add(Restrictions.in("recordId", recordIds)); dcCount.add(Restrictions.in("recordId", recordIds)); } } else if (!memberIds.isEmpty()) { dc.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds)); dcCount.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", memberIds)); } else if (!personIds.isEmpty()) { dc.createCriteria("personDetail").add(Restrictions.in("personId", personIds)); dcCount.createCriteria("personDetail").add(Restrictions.in("personId", personIds)); } else { return new ArrayList<Record>(); } } List<Project> projects = null; //PROJECT AND TEAM MEMBER //if no project is selected, we use a subquery to retrieve a list of record ids from which we will search for records //using the other search criteria (including first name and last name) //if a project is selected, firstName or lastName won't exist as search criteria, only teamMemberId must be taken into account if (searchRecordBean.getTeamMemberId() == -1 && searchRecordBean.getProjectId() == IConstant.NOM_RECORD_SEARCH_ALL) { //search in all the records //if the user doesn't have the permission to search in all the records, the projectId must be //included in the list of ids for the projects in which the user is a team member if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_RecordSearchAll())) { HashMap<Project, TeamMember> projectsAndTeamMembers = BLProject.getInstance() .getProjectsAndTeamMembersByPerson(userAuth.getPersonId(), true, true); if (projectsAndTeamMembers != null && !projectsAndTeamMembers.isEmpty()) { projects = new ArrayList<Project>(projectsAndTeamMembers.keySet()); List<Integer> recordIds = new ArrayList<Integer>(); Iterator it = projectsAndTeamMembers.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Project, TeamMember> entry = (Map.Entry<Project, TeamMember>) it.next(); //the subquery is used to retrieve the list of records ids retrieved for the teamMemberId and projectId search criteria; DetachedCriteria subquery = null; if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) { subquery = DetachedCriteria .forEntityName(IModelConstant.recordWithProjectAndTeamMemberDetailsEntity); } else { subquery = DetachedCriteria .forEntityName(IModelConstant.recordWithProjectDetailsEntity); } subquery.createCriteria("projectDetails") .add(Restrictions.eq("projectId", entry.getKey().getProjectId())); subquery.setProjection(Projections.id()); //if the user is the PM for this project, we set a restriction only on projectId, //otherwise the restriction is on teamMemberId if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) { subquery.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", entry.getValue().getMemberId())); } subquery.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); List<Integer> recordIdsTemp = (List<Integer>) getHibernateTemplate() .findByCriteria(subquery); if (recordIdsTemp != null) { for (Integer id : recordIdsTemp) { recordIds.add(id); } } } //search for records entered by the user for the organization (no project selected) DetachedCriteria subquery = DetachedCriteria .forEntityName(IModelConstant.recordWithPersonDetailEntity); subquery.createCriteria("personDetail") .add(Restrictions.eq("personId", userAuth.getPersonId())); subquery.setProjection(Projections.id()); subquery.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); List<Integer> recordIdsTemp = (List<Integer>) getHibernateTemplate().findByCriteria(subquery); if (recordIdsTemp != null) { for (Integer id : recordIdsTemp) { recordIds.add(id); } } if (!recordIds.isEmpty()) { dc.add(Restrictions.in("recordId", recordIds)); dcCount.add(Restrictions.in("recordId", recordIds)); } else { return new ArrayList<Record>(); } } } } else if (searchRecordBean.getTeamMemberId() == -1 && searchRecordBean.getProjectId() == IConstant.NOM_RECORD_SEARCH_FOR_ORG) { //if the user doesn't have the permission to search in all the records per organization, i must set the personId property //to the user correspondent personId if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_RecordSearchAll())) { dc.createCriteria("personDetail").add(Restrictions.eq("personId", userAuth.getPersonId())); dcCount.createCriteria("personDetail").add(Restrictions.eq("personId", userAuth.getPersonId())); } else { //if the user has the permission to search in all the records for organization, i must set the condition that the personDetail property //mustn't be null dc.add(Restrictions.isNotNull("personDetail")); dcCount.add(Restrictions.isNotNull("personDetail")); } } else if (searchRecordBean.getTeamMemberId() == -1 && searchRecordBean.getProjectId() == IConstant.NOM_RECORD_SEARCH_IN_ALL_PROJECTS) { //search in the records for all the projects //if the user doesn't have the permission to search in all the records, the projectId must be //included in the list of ids for the projects in which the user is a team member if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_RecordSearchAll())) { HashMap<Project, TeamMember> projectsAndTeamMembers = BLProject.getInstance() .getProjectsAndTeamMembersByPerson(userAuth.getPersonId(), true, true); if (projectsAndTeamMembers != null && !projectsAndTeamMembers.isEmpty()) { projects = new ArrayList<Project>(projectsAndTeamMembers.keySet()); List<Integer> recordIds = new ArrayList<Integer>(); Iterator it = projectsAndTeamMembers.entrySet().iterator(); while (it.hasNext()) { Map.Entry<Project, TeamMember> entry = (Map.Entry<Project, TeamMember>) it.next(); //the subquery is used to retrieve the list of records ids retrieved for the teamMemberId and projectId search criteria; DetachedCriteria subquery = null; if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) { subquery = DetachedCriteria .forEntityName(IModelConstant.recordWithProjectAndTeamMemberDetailsEntity); } else { subquery = DetachedCriteria .forEntityName(IModelConstant.recordWithProjectDetailsEntity); } subquery.createCriteria("projectDetails") .add(Restrictions.eq("projectId", entry.getKey().getProjectId())); subquery.setProjection(Projections.id()); //if the user is the PM for this project, we set a restriction only on projectId, //otherwise the restriction is on teamMemberId if (!entry.getKey().getManagerId().equals(userAuth.getPersonId())) { subquery.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", entry.getValue().getMemberId())); } subquery.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); List<Integer> recordIdsTemp = (List<Integer>) getHibernateTemplate() .findByCriteria(subquery); if (recordIdsTemp != null) { for (Integer id : recordIdsTemp) { recordIds.add(id); } } } if (!recordIds.isEmpty()) { dc.add(Restrictions.in("recordId", recordIds)); dcCount.add(Restrictions.in("recordId", recordIds)); } else { return new ArrayList<Record>(); } } } else { //the record must be entered for a specific project; records per organisation are excluded dc.add(Restrictions.isNotNull("projectDetails")); dcCount.add(Restrictions.isNotNull("projectDetails")); } } else if (searchRecordBean.getTeamMemberId() == -1 && searchRecordBean.getProjectId() > 0) { //search in a project Project project = BLProject.getInstance().get(searchRecordBean.getProjectId(), false); if (project != null) { projects = new ArrayList<Project>(); projects.add(project); //if the user is not PM for the selected project nor USER_ALL, it will see only its records if (!project.getManagerId().equals(userAuth.getPersonId()) && !userAuth.hasAuthority(PermissionConstant.getInstance().getTS_RecordSearchAll())) { Iterator<TeamMember> it = project.getProjectTeam().getTeamMembers().iterator(); while (it.hasNext()) { TeamMember member = it.next(); if (member.getPersonId() == userAuth.getPersonId()) { dc.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", member.getMemberId())); dcCount.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", member.getMemberId())); } } } } //set the selected projectId as search criteria dc.createCriteria("projectDetails").add(Restrictions.eq("projectId", searchRecordBean.getProjectId())); dcCount.createCriteria("projectDetails") .add(Restrictions.eq("projectId", searchRecordBean.getProjectId())); } else if (searchRecordBean.getTeamMemberId() != -1 && searchRecordBean.getProjectId() > 0) { //search in a project and for a specific teamMemberDetail //set the selected projectId and teamMemberId as search criteria dc.createCriteria("projectDetails").add(Restrictions.eq("projectId", searchRecordBean.getProjectId())); dc.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", searchRecordBean.getTeamMemberId())); dcCount.createCriteria("projectDetails") .add(Restrictions.eq("projectId", searchRecordBean.getProjectId())); dcCount.createCriteria("teamMemberDetail") .add(Restrictions.eq("teamMemberId", searchRecordBean.getTeamMemberId())); } //the results list List<Record> res = null; //the order can be done while retrieving the data from the database only if the sort parameter is the activity name or the recordId; //this cannot be done if the results must be ordered by record owner name, project name or isBillable if (searchRecordBean.getSortParam() != null && ("activityName".equals(searchRecordBean.getSortParam()) || "recordId".equals(searchRecordBean.getSortParam()))) { // check if I have to order the results if ("activityName".equals(searchRecordBean.getSortParam())) { // if I have to, check if I have to order them ascending or descending if (searchRecordBean.getSortDirection() == -1) { // ascending dc.createCriteria("activity").addOrder(Order.asc("name")); } else { // descending dc.createCriteria("activity").addOrder(Order.desc("name")); } } else if ("recordId".equals(searchRecordBean.getSortParam())) { if (searchRecordBean.getSortDirection() == -1) { // ascending dc.addOrder(Order.asc("recordId")); } else { // descending dc.addOrder(Order.desc("recordId")); } } // if the request didn't come from the pagination area, // it means that I have to set the number of results and pages if (isDeleteAction || searchRecordBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchRecordBean.getNbrOfResults() == -1) { isSearch = true; } // set the count(*) restriction dcCount.setProjection(Projections.countDistinct("recordId")); //findByCriteria must be called with firstResult and maxResults parameters; the default findByCriteria(DetachedCriteria criteria) implementation //sets firstResult and maxResults to -1, which kills the countDistinct Projection int nbrOfResults = ((Integer) getHibernateTemplate().findByCriteria(dcCount, 0, 0).get(0)) .intValue(); logger.debug("search results: ".concat(String.valueOf(nbrOfResults))); searchRecordBean.setNbrOfResults(nbrOfResults); // get the number of pages if (nbrOfResults % searchRecordBean.getResultsPerPage() == 0) { searchRecordBean.setNbrOfPages(nbrOfResults / searchRecordBean.getResultsPerPage()); } else { searchRecordBean.setNbrOfPages(nbrOfResults / searchRecordBean.getResultsPerPage() + 1); } // after a record is deleted, the same page has to be displayed; //only when all the client from last page are deleted, the previous page will be shown if (isDeleteAction && (searchRecordBean.getCurrentPage() > searchRecordBean.getNbrOfPages())) { searchRecordBean.setCurrentPage(searchRecordBean.getNbrOfPages()); } else if (isSearch) { searchRecordBean.setCurrentPage(1); } } res = (List<Record>) getHibernateTemplate().findByCriteria(dc, (searchRecordBean.getCurrentPage() - 1) * searchRecordBean.getResultsPerPage(), searchRecordBean.getResultsPerPage()); } //setting the record owner name if (res != null && res.size() > 0) { if (members == null) { HashSet<Integer> teamMemberIds = new HashSet<Integer>(); for (Record record : res) { if (record.getTeamMemberDetail() != null) { teamMemberIds.add(new Integer(record.getTeamMemberDetail().getTeamMemberId())); } } if (teamMemberIds.size() > 0) { members = BLTeamMember.getInstance().getTeamMembersByMemberIds(teamMemberIds, false); } } if (users == null) { HashSet<Integer> personIds = new HashSet<Integer>(); for (Record record : res) { if (record.getPersonDetail() != null) { personIds.add(new Integer(record.getPersonDetail().getPersonId())); } } if (personIds.size() > 0) { String[] ids = new String[personIds.size()]; int i = 0; for (Integer personId : personIds) { ids[i++] = personId.toString(); } users = BLUser.getInstance().getUsersByPersonId(ids); } } if (projects == null) { HashSet<Integer> projectIds = new HashSet<Integer>(); for (Record record : res) { if (record.getProjectDetails() != null) { projectIds.add(new Integer(record.getProjectDetails().getProjectId())); } } if (projectIds.size() > 0) { projects = BLProject.getInstance().getProjectsSimpleByProjectIds(projectIds); } } for (Record record : res) { if (record.getTeamMemberDetail() != null && members != null) { for (TeamMember member : members) { if (record.getTeamMemberDetail().getTeamMemberId().equals(member.getMemberId())) { record.setRecordOwnerName( member.getFirstName().concat(" ").concat(member.getLastName())); break; } } } else if (record.getPersonDetail() != null && users != null) { for (UserSimple user : users) { if (record.getPersonDetail().getPersonId() == user.getUserId()) { record.setRecordOwnerName(user.getFirstName().concat(" ").concat(user.getLastName())); break; } } } //setting the project name if (record.getProjectDetails() != null && record.getProjectDetails().getProjectId() != null) { if (projects != null) { for (Project project : projects) { if (record.getProjectDetails().getProjectId().equals(project.getProjectId())) { record.setProjectName(project.getName()); record.setProjectManagerId(project.getManagerId()); break; } } } } record.setIsBillable(); } } logger.debug("getResultsForSearch - END"); return res; }
From source file:ro.cs.ts.model.dao.impl.DaoRecordImpl.java
License:Open Source License
/** * Gets the Time Sheet Report records//from w w w. j a v a 2 s . co m * @author Coni * @param getDataCriteria * @return * @throws WSClientException * @throws IOException * @throws XmlMappingException * @throws BusinessException */ public List<Record> getTimeSheetReportRecords(TSReportGetDataCriteria getDataCriteria) throws XmlMappingException, IOException, WSClientException { logger.debug("getTimeSheetReportRecords - START"); DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.recordForReportsEntity); //the prices can be computed per activity or per resource Integer priceComputeType = (Integer) getDataCriteria.getProperties() .get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_RECORD_PRICE_COMPUTE_TYPE); //TEAM MEMBER ID AND PERSON ID List<Integer> teamMemberIds = null; String teamMemberIdsAsString = (String) getDataCriteria.getProperties() .get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_TEAM_MEMBER_IDS); if (teamMemberIdsAsString != null) { teamMemberIds = (List<Integer>) Arrays .asList(Tools.getInstance().castStringToIntegerArray(teamMemberIdsAsString.split(","))); } List<Integer> personIds = null; String personIdsAsString = (String) getDataCriteria.getProperties() .get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_PERSON_IDS); if (personIdsAsString != null) { personIds = (List<Integer>) Arrays .asList(Tools.getInstance().castStringToIntegerArray(personIdsAsString.split(","))); } if (teamMemberIds != null && !teamMemberIds.isEmpty() && personIds != null && !personIds.isEmpty()) { List<Integer> recordIds = new ArrayList<Integer>(); DetachedCriteria teamMemberDc = DetachedCriteria .forEntityName(IModelConstant.recordWithTeamMemberDetailEntity); teamMemberDc.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", teamMemberIds)); teamMemberDc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); teamMemberDc.setProjection(Projections.id()); List<Integer> resForTeamMembers = (List<Integer>) getHibernateTemplate().findByCriteria(teamMemberDc); recordIds.addAll(resForTeamMembers); DetachedCriteria personDc = DetachedCriteria.forEntityName(IModelConstant.recordWithPersonDetailEntity); personDc.createCriteria("personDetail").add(Restrictions.in("personId", personIds)); personDc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); personDc.setProjection(Projections.id()); List<Integer> resForPersons = (List<Integer>) getHibernateTemplate().findByCriteria(personDc); recordIds.addAll(resForPersons); if (!recordIds.isEmpty()) { dc.add(Restrictions.in("recordId", recordIds)); } } else if (teamMemberIds != null && !teamMemberIds.isEmpty()) { dc.createCriteria("teamMemberDetail").add(Restrictions.in("teamMemberId", teamMemberIds)); } else if (personIds != null && !personIds.isEmpty()) { dc.createCriteria("personDetail").add(Restrictions.in("personId", personIds)); } //START DATE if (getDataCriteria.getProperties() .get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_START_DATE) != null) { Date startDate = (Date) ((XMLGregorianCalendar) getDataCriteria.getProperties() .get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_START_DATE)).toGregorianCalendar() .getTime(); if (startDate != null) { //the search must retrieve: all the records for activities that started and haven't ended before the selected startDate //and records for activities that will begin after the selected startDate; the conditions are applied for work hours and over time dc.add(Restrictions.or( Restrictions.or(Restrictions.ge("startTime", startDate), Restrictions.and(Restrictions.le("startTime", startDate), Restrictions.ge("endTime", startDate))), Restrictions.or(Restrictions.ge("overTimeStartTime", startDate), Restrictions.and(Restrictions.le("overTimeStartTime", startDate), Restrictions.ge("overTimeEndTime", startDate))))); } } //END DATE if (getDataCriteria.getProperties().get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_END_DATE) != null) { Date endDate = (Date) ((XMLGregorianCalendar) getDataCriteria.getProperties() .get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_END_DATE)).toGregorianCalendar().getTime(); if (endDate != null) { //the search must retrieve: all the records for activities that started before the selected endDate, no matter they are ended or not; //; the conditions are applied for work hours and over time dc.add(Restrictions.or(Restrictions.le("startTime", endDate), Restrictions.le("overTimeStartTime", endDate))); } } //BILLABLE //if the prices must be computed per activities, the billable search criteria it is applied to the record activity billable property String billable = (String) getDataCriteria.getProperties() .get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_BILLABLE); if (billable != null) { if (billable.equals(IConstant.NOM_BILLABLE_YES.toString()) || billable.equals(IConstant.NOM_BILLABLE_NO.toString())) { if (priceComputeType.equals(IConstant.NOM_RECORD_PRICES_COMPUTE_TYPE_FOR_RESOURCE)) { dc.add(Restrictions.or(Restrictions.eq("billable", billable), Restrictions.eq("overTimeBillable", billable))); } else if (priceComputeType.equals(IConstant.NOM_RECORD_PRICES_COMPUTE_TYPE_FOR_ACTIVITY)) { dc.createCriteria("activity").add(Restrictions.eq("billable", billable)); } } } //ORGANIZATION ID Integer organizationId = (Integer) getDataCriteria.getProperties() .get(IConstant.TS_TIME_SHEET_REPORT_SEARCH_CRITERIA_ORGANIZATION_ID); if (organizationId != null) { dc.add(Restrictions.eq("organizationId", organizationId)); } //STATUS dc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); List<Record> res = getHibernateTemplate().findByCriteria(dc); if (res != null) { List<WSTeamMember> members = null; List<UserSimple> users = null; List<WSProject> projects = null; HashSet<Integer> memberIds = new HashSet<Integer>(); for (Record record : res) { if (record.getTeamMemberDetail() != null) { memberIds.add(new Integer(record.getTeamMemberDetail().getTeamMemberId())); } } if (memberIds.size() > 0) { members = CMWebServiceClient.getInstance().getTeamMembersByMemberIds(memberIds, false); } HashSet<Integer> userIds = new HashSet<Integer>(); for (Record record : res) { if (record.getPersonDetail() != null) { userIds.add(new Integer(record.getPersonDetail().getPersonId())); } } if (userIds.size() > 0) { String[] ids = new String[userIds.size()]; int i = 0; for (Integer userId : userIds) { ids[i++] = userId.toString(); } users = OMWebServiceClient.getInstance().getUsersSimpleByPersonId(ids).getUsers(); } HashSet<Integer> projectIds = new HashSet<Integer>(); for (Record record : res) { if (record.getProjectDetails() != null) { projectIds.add(new Integer(record.getProjectDetails().getProjectId())); } } if (projectIds.size() > 0) { projects = CMWebServiceClient.getInstance().getProjectsSimpleByProjectIds(projectIds); } for (Record record : res) { if (record.getTeamMemberDetail() != null && members != null) { for (WSTeamMember member : members) { if (record.getTeamMemberDetail().getTeamMemberId().equals(member.getMemberId())) { record.setRecordOwnerName( member.getFirstName().concat(" ").concat(member.getLastName())); break; } } } else if (record.getPersonDetail() != null && users != null) { for (UserSimple user : users) { if (record.getPersonDetail().getPersonId() == user.getUserId()) { record.setRecordOwnerName(user.getFirstName().concat(" ").concat(user.getLastName())); break; } } } //setting the project name if (record.getProjectDetails() != null && record.getProjectDetails().getProjectId() != null) { if (projects != null) { for (WSProject project : projects) { if (record.getProjectDetails().getProjectId().equals(project.getProjectId())) { record.setProjectName(project.getName()); break; } } } } //if the prices must be computed per activities, i must set the records billable and overTimeBillable properties depending on their corresponding activity //billable property value if (priceComputeType.equals(IConstant.NOM_RECORD_PRICES_COMPUTE_TYPE_FOR_ACTIVITY)) { if (record.getTime() != null && !record.getTime().equals("")) { record.setBillable(record.getActivity().getBillable()); } else { record.setBillable(null); } if (record.getOverTimeTime() != null && !record.getOverTimeTime().equals("")) { record.setOverTimeBillable(record.getActivity().getBillable()); } else { record.setOverTimeBillable(null); } } } } logger.debug("getTimeSheetReportRecords - END"); return res; }