List of usage examples for org.hibernate.criterion DetachedCriteria createCriteria
public DetachedCriteria createCriteria(String associationPath)
From source file:ro.cs.ts.model.dao.impl.DaoActivityImpl.java
License:Open Source License
/** * Search for activities/*from w w w . j a va 2s .c om*/ * * @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/* ww w. j a v a2s . c om*/ * @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.DaoCostSheetImpl.java
License:Open Source License
/** * Gets the Project Report cost sheets/*from w ww .j a v a 2 s . co m*/ * @author Coni * @param getDataCriteria * @return * @throws WSClientException * @throws IOException * @throws XmlMappingException * @throws BusinessException */ public List<CostSheet> getProjectReportCostSheets(TSReportGetDataCriteria getDataCriteria) throws XmlMappingException, IOException, WSClientException { logger.debug("getProjectReportCostSheets - START"); DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.costSheetForReportsEntity); //PROJECT Integer projectId = (Integer) getDataCriteria.getProperties() .get(IConstant.TS_PROJECT_REPORT_SEARCH_CRITERIA_PROJECT_ID); if (projectId != null && projectId > 0) { dc.createCriteria("projectDetails").add(Restrictions.eq("projectId", projectId)); } //START DATE if (getDataCriteria.getProperties().get(IConstant.TS_PROJECT_REPORT_SEARCH_CRITERIA_START_DATE) != null) { Date startDate = (Date) ((XMLGregorianCalendar) getDataCriteria.getProperties() .get(IConstant.TS_PROJECT_REPORT_SEARCH_CRITERIA_START_DATE)).toGregorianCalendar().getTime(); if (startDate != null) { dc.add(Restrictions.ge("date", startDate)); } } //END DATE if (getDataCriteria.getProperties().get(IConstant.TS_PROJECT_REPORT_SEARCH_CRITERIA_END_DATE) != null) { Date endDate = (Date) ((XMLGregorianCalendar) getDataCriteria.getProperties() .get(IConstant.TS_PROJECT_REPORT_SEARCH_CRITERIA_END_DATE)).toGregorianCalendar().getTime(); if (endDate != null) { dc.add(Restrictions.le("date", endDate)); } } //BILLABLE String billable = (String) getDataCriteria.getProperties() .get(IConstant.TS_PROJECT_REPORT_SEARCH_CRITERIA_BILLABLE); if (billable != null) { if (billable.equals(IConstant.NOM_BILLABLE_YES.toString()) || billable.equals(IConstant.NOM_BILLABLE_NO.toString())) { dc.add(Restrictions.eq("billable", billable)); } } //STATUS dc.add(Restrictions.ne("status", IConstant.NOM_COST_SHEET_STATUS_DELETED)); List<CostSheet> result = getHibernateTemplate().findByCriteria(dc); if (result != null) { List<WSTeamMember> members = null; HashSet<Integer> teamMemberIds = new HashSet<Integer>(); for (CostSheet cost : result) { if (cost.getTeamMemberDetail() != null) { teamMemberIds.add(new Integer(cost.getTeamMemberDetail().getTeamMemberId())); } } if (teamMemberIds.size() > 0) { members = CMWebServiceClient.getInstance().getTeamMembersByMemberIds(teamMemberIds, false); } for (CostSheet cost : result) { if (members != null && !members.isEmpty()) { for (WSTeamMember member : members) { if (cost.getTeamMemberDetail().getTeamMemberId().equals(member.getMemberId())) { cost.setCostSheetReporterName( member.getFirstName().concat(" ").concat(member.getLastName())); } } } } } logger.debug("getProjectReportCostSheets - END"); return result; }
From source file:ro.cs.ts.model.dao.impl.DaoExchangeImpl.java
License:Open Source License
/** * Searches for exchanges using the criterion defined in searchExchangeBean * @author Coni/* w w w.j av a 2 s. co m*/ * @param searchCostSheetBean * @param isDeleteAction * @return * @throws BusinessException * */ public List<Exchange> getExchangeBeanFromSearch(SearchExchangeBean searchExchangeBean, boolean isDeleteAction) throws BusinessException { logger.debug("getExchangeBeanFromSearch - START"); DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.exchangeForListingEntity); UserAuth userAuth = (UserAuth) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); //PROJECT List<Project> projects = null; if (searchExchangeBean.getProjectId() != null && searchExchangeBean.getProjectId().equals(new Integer(IConstant.NOM_EXCHANGE_SEARCH_ALL))) { //search in all //get the user available projects if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_ExchangeSearchAll())) { //if the user is USER_ALL, i will search for exchanges registered for its organization or for its organization's projects; hence //only the organizationId restriction it is required; otherwise i will search only for exchanges registered only for the projects //to whom the user is PM projects = BLProject.getInstance().getProjectsByManager(userAuth.getPersonId(), true, true); if (projects != null && !projects.isEmpty()) { List<Integer> projectIds = new ArrayList<Integer>(); for (Project project : projects) { projectIds.add(project.getProjectId()); } dc.createCriteria("projectDetail").add(Restrictions.in("projectId", projectIds)); } else { // if the user it is not PM for at least one project, no results must be displayed return new ArrayList<Exchange>(); } } } if (searchExchangeBean.getProjectId() != null && searchExchangeBean.getProjectId().equals(new Integer(IConstant.NOM_EXCHANGE_SEARCH_FOR_ORG))) { //exchanges from organization //if the user isn't USER_ALL, i won't show any exchanges; otherwise the projectId must be null if (!userAuth.hasAuthority(PermissionConstant.getInstance().getTS_ExchangeSearchAll())) { return new ArrayList<Exchange>(); } else { dc.add(Restrictions.isNull("projectDetail")); } } else if (searchExchangeBean.getProjectId() != null && searchExchangeBean.getProjectId() > 0) { dc.createCriteria("projectDetail").add(Restrictions.eq("projectId", searchExchangeBean.getProjectId())); } //FIRST CURRENCY if (searchExchangeBean.getFirstCurrencyId() != null && !searchExchangeBean.getFirstCurrencyId().equals(-1)) { dc.createCriteria("firstCurrency") .add(Restrictions.eq("currencyId", searchExchangeBean.getFirstCurrencyId())); } //SECOND CURRENCY if (searchExchangeBean.getSecondCurrencyId() != null && !searchExchangeBean.getSecondCurrencyId().equals(-1)) { dc.createCriteria("secondCurrency") .add(Restrictions.eq("currencyId", searchExchangeBean.getSecondCurrencyId())); } //STATUS dc.add(Restrictions.ne("status", IConstant.NOM_EXCHANGE_STATUS_DELETED)); //ORGANIZATIONID if (searchExchangeBean.getOrganizationId() != null) { dc.add(Restrictions.eq("organizationId", searchExchangeBean.getOrganizationId())); } List<Exchange> res = (List<Exchange>) 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 || searchExchangeBean.getNbrOfResults() == -1) { boolean isSearch = false; if (searchExchangeBean.getNbrOfResults() == -1) { isSearch = true; } int nbrOfResults = res.size(); logger.debug("search results: ".concat(String.valueOf(nbrOfResults))); searchExchangeBean.setNbrOfResults(nbrOfResults); // get the number of pages if (nbrOfResults % searchExchangeBean.getResultsPerPage() == 0) { searchExchangeBean.setNbrOfPages(nbrOfResults / searchExchangeBean.getResultsPerPage()); } else { searchExchangeBean.setNbrOfPages(nbrOfResults / searchExchangeBean.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 && (searchExchangeBean.getCurrentPage() > searchExchangeBean.getNbrOfPages())) { searchExchangeBean.setCurrentPage(searchExchangeBean.getNbrOfPages()); } else if (isSearch) { searchExchangeBean.setCurrentPage(1); } } //the returned list of exchanges List<Exchange> exchanges = new ArrayList<Exchange>(); if (res != null && !res.isEmpty()) { if (projects == null) { HashSet<Integer> projectIds = new HashSet<Integer>(); for (Exchange exchange : res) { if (exchange.getProjectDetail() != null) { projectIds.add(new Integer(exchange.getProjectDetail().getProjectId())); } } if (projectIds.size() > 0) { projects = BLProject.getInstance().getProjectsSimpleByProjectIds(projectIds); } } for (Exchange exchange : res) { //setting the project name if (exchange.getProjectDetail() != null && exchange.getProjectDetail().getProjectId() != null && projects != null) { for (Project project : projects) { if (exchange.getProjectDetail().getProjectId().equals(project.getProjectId())) { exchange.setProjectName(project.getName()); break; } } } } //sorting the exchanges list //------sort the list if (searchExchangeBean.getSortParam().equals("projectName")) { List<Exchange> exchangesForProject = new ArrayList<Exchange>(); List<Exchange> exchangesForOrg = new ArrayList<Exchange>(); for (Exchange exchange : res) { if (exchange.getProjectDetail() != null && exchange.getProjectDetail().getProjectId() != null) { exchangesForProject.add(exchange); } else { exchangesForOrg.add(exchange); } } Collections.sort(exchangesForProject, ExchangeComparator.getInstance().exchangeProjectNameComparator()); exchangesForOrg.addAll(exchangesForProject); res = exchangesForOrg; } //ascending or descending if (searchExchangeBean.getSortDirection() == IConstant.DESCENDING) { Collections.reverse(res); } long start = (searchExchangeBean.getCurrentPage() - 1) * searchExchangeBean.getResultsPerPage(); long end = searchExchangeBean.getCurrentPage() * searchExchangeBean.getResultsPerPage(); // go over the entries for (int i = (int) start; i < end; i++) { if (i >= res.size()) { continue; } exchanges.add(res.get(i)); } } logger.debug("getExchangeBeanFromSearch - END"); return exchanges; }
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/* ww w. j a v a 2s . co m*/ * @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 Project Report records//from w w w . j av a 2 s. com * @author Coni * @param getDataCriteria * @return * @throws WSClientException * @throws IOException * @throws XmlMappingException * @throws BusinessException */ public List<Record> getProjectReportRecords(TSReportGetDataCriteria getDataCriteria) throws XmlMappingException, IOException, WSClientException { logger.debug("getProjectReportRecords - 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_PROJECT_REPORT_SEARCH_CRITERIA_RECORD_PRICE_COMPUTE_TYPE); //PROJECT Integer projectId = (Integer) getDataCriteria.getProperties() .get(IConstant.TS_PROJECT_REPORT_SEARCH_CRITERIA_PROJECT_ID); if (projectId != null && projectId > 0) { dc.createCriteria("projectDetails").add(Restrictions.eq("projectId", projectId)); } //START DATE if (getDataCriteria.getProperties().get(IConstant.TS_PROJECT_REPORT_SEARCH_CRITERIA_START_DATE) != null) { Date startDate = (Date) ((XMLGregorianCalendar) getDataCriteria.getProperties() .get(IConstant.TS_PROJECT_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_PROJECT_REPORT_SEARCH_CRITERIA_END_DATE) != null) { Date endDate = (Date) ((XMLGregorianCalendar) getDataCriteria.getProperties() .get(IConstant.TS_PROJECT_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_PROJECT_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)); } } } //STATUS dc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED)); List<Record> result = getHibernateTemplate().findByCriteria(dc); if (result != null) { List<WSTeamMember> members = null; HashSet<Integer> teamMemberIds = new HashSet<Integer>(); for (Record record : result) { if (record.getTeamMemberDetail() != null) { teamMemberIds.add(new Integer(record.getTeamMemberDetail().getTeamMemberId())); } } if (teamMemberIds.size() > 0) { members = CMWebServiceClient.getInstance().getTeamMembersByMemberIds(teamMemberIds, false); } for (Record record : result) { if (members != null && !members.isEmpty()) { for (WSTeamMember member : members) { if (record.getTeamMemberDetail().getTeamMemberId().equals(member.getMemberId())) { record.setRecordOwnerName( member.getFirstName().concat(" ").concat(member.getLastName())); } } } //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("getProjectReportRecords - END"); return result; }
From source file:ro.cs.ts.model.dao.impl.DaoRecordImpl.java
License:Open Source License
/** * Gets the Time Sheet Report records// w ww. jav a2 s .c o 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; }
From source file:sernet.verinice.bpm.gsm.GsmProcessParameterCreater.java
License:Open Source License
private List<ExecutionImpl> searchProcessByVariable(String key, String value) { DetachedCriteria executionCrit = DetachedCriteria.forClass(ExecutionImpl.class); DetachedCriteria variableCrit = executionCrit.createCriteria("variables"); variableCrit.add(Restrictions.eq("key", key)); variableCrit.add(Restrictions.eq("string", value)); return getJbpmExecutionDao().findByCriteria(executionCrit); }
From source file:sernet.verinice.bpm.ProcessServiceGeneric.java
License:Open Source License
public List<ExecutionImpl> findExecutionForElement(String key, String uuid) { String processDefinitionId = findProcessDefinitionId(key); if (LOG.isDebugEnabled()) { LOG.debug("Latest processDefinitionId: " + processDefinitionId); }/*from w w w . ja va 2s . co m*/ DetachedCriteria executionCrit = DetachedCriteria.forClass(ExecutionImpl.class); executionCrit.add(Restrictions.eq("processDefinitionId", processDefinitionId)); DetachedCriteria variableCrit = executionCrit.createCriteria("variables"); variableCrit.add(Restrictions.eq("key", IGenericProcess.VAR_UUID)); variableCrit.add(Restrictions.eq("string", uuid)); return getJbpmExecutionDao().findByCriteria(executionCrit); }
From source file:sernet.verinice.bpm.ProcessServiceIsa.java
License:Open Source License
@Override public List<ExecutionImpl> findControlExecution(final String uuidControl) { DetachedCriteria executionCrit = DetachedCriteria.forClass(ExecutionImpl.class); String processDefinitionId = findProcessDefinitionId(IControlExecutionProcess.KEY); if (LOG.isDebugEnabled()) { LOG.debug("Latest processDefinitionId: " + processDefinitionId); }/* w ww . jav a 2s. co m*/ executionCrit.add(Restrictions.eq("processDefinitionId", processDefinitionId)); DetachedCriteria variableCrit = executionCrit.createCriteria("variables"); variableCrit.add(Restrictions.eq("key", IGenericProcess.VAR_UUID)); variableCrit.add(Restrictions.eq("string", uuidControl)); return getJbpmExecutionDao().findByCriteria(executionCrit); }