Example usage for org.hibernate.criterion DetachedCriteria forEntityName

List of usage examples for org.hibernate.criterion DetachedCriteria forEntityName

Introduction

In this page you can find the example usage for org.hibernate.criterion DetachedCriteria forEntityName.

Prototype

@SuppressWarnings("UnusedDeclaration")
public static DetachedCriteria forEntityName(String entityName) 

Source Link

Document

Static builder to create a DetachedCriteria for the given entity.

Usage

From source file:ro.cs.ts.model.dao.impl.DaoProjectDetailsImpl.java

License:Open Source License

/**
 * Returns a ProjectDetails entity for the corresponding projectId
 * @author Coni//w w  w .j  a  v  a  2s  . c  o m
 * @param projectId
 * @return
 */
public ProjectDetails getByProjectId(int projectId) {
    logger.debug("getByProjectId - START");

    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.projectDetailsEntity);
    List<ProjectDetails> result = null;

    dc.add(Restrictions.eq("projectId", projectId));
    dc.add(Restrictions.ne("status", IConstant.NOM_PROJECT_DETAILS_STATUS_DELETED));

    result = getHibernateTemplate().findByCriteria(dc);
    logger.debug("getByProjectId - END");
    if (result.size() > 0) {
        return result.get(0);
    } else {
        return null;
    }
}

From source file:ro.cs.ts.model.dao.impl.DaoProjectDetailsImpl.java

License:Open Source License

/**
 * Checks if the project has project details associated
 * //from   w  w  w  . j av  a  2  s.c  o m
 * @author Adelina
 * 
 * @param projectId
 * @return
 */
public boolean hasProjectDetails(Integer projectId) {
    logger.debug("hasProjectDetails - START");

    List<ProjectDetails> projectDetails = new ArrayList<ProjectDetails>();

    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.projectDetailsSimpleEntity);
    dc.add(Restrictions.eq("projectId", projectId));
    dc.add(Restrictions.ne("status", IConstant.NOM_PROJECT_DETAILS_STATUS_DELETED));

    projectDetails = getHibernateTemplate().findByCriteria(dc);
    logger.debug("hasProjectDetails - END");
    if (projectDetails.size() > 0) {
        return true;
    } else {
        return false;
    }
}

From source file:ro.cs.ts.model.dao.impl.DaoProjectDetailsImpl.java

License:Open Source License

/**
 * Returns a ProjectDetails entity for the corresponding projectId
 * //from ww  w .jav  a 2s .  c  o  m
 * @author Adelina
 * 
 * @param projectId
 * @return
 */
public ProjectDetails getForChangeStatus(Integer projectId) {
    logger.debug("getForChangeStatus - START");

    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.projectDetailsSimpleEntity);
    List<ProjectDetails> result = null;

    dc.add(Restrictions.eq("projectId", projectId));
    dc.add(Restrictions.ne("status", IConstant.NOM_PROJECT_DETAILS_STATUS_DELETED));

    result = getHibernateTemplate().findByCriteria(dc);
    logger.debug("getForChangeStatus - END");
    if (result.size() > 0) {
        return result.get(0);
    } else {
        return null;
    }
}

From source file:ro.cs.ts.model.dao.impl.DaoProjectDetailsImpl.java

License:Open Source License

/**
 * Returns the budgets currency id for projectDetailsId
 *
 * @author alu/*w  ww  .ja  v  a  2  s.  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/* ww  w .  j a va2  s  .c  o  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 records identified by projectDetailId
  * /*ww  w . j ava 2  s .co  m*/
  * @author Adelina
  * 
  * @param projectDetailId
  * @return
  */
public List<Record> getSimpleByProjectDetailId(Integer projectDetailId) {
    logger.debug("getByProjectDetailId - START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.recordSimpleEntity);

    dc.add(Restrictions.eq("projectDetailId", projectDetailId));
    dc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED));

    List<Record> res = getHibernateTemplate().findByCriteria(dc);

    logger.debug("results = " + res);

    logger.debug("getByProjectDetailId - END, res size = " + res.size());
    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  a  va2s  . co m*/
 * @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//from ww w  .j  a  va  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;
}

From source file:ro.cs.ts.model.dao.impl.DaoRecordImpl.java

License:Open Source License

/**
 * Checks if exists a record for a person, for a specific project, activity, with the same work hours or overtime hours range
 * //from  w  ww  .j ava 2  s  .c o  m
 * @author Adelina
 * 
 * @param recordId
 * @param teamMemberDetailId
 * @param activityId
 * @param startTime
 * @param endTime
 * @param time
 * @param overTimeStartTime
 * @param overTimeEndTime
 * @param overtimeTime
 * @param personDetailId
 * @return
 */
public Record hasIdenticalRecordForPerson(Integer recordId, Integer teamMemberDetailId, Integer activityId,
        Date startTime, Date endTime, String time, Date overTimeStartTime, Date overTimeEndTime,
        String overtimeTime, Integer personDetailId) {
    logger.debug("hasIdenticalRecordForPerson - START");

    // if we have a startTime and an endTime
    if (startTime != null && endTime != null) {

        logger.debug("startTime = " + startTime);
        logger.debug("endTime = " + endTime);

        boolean existRecord = false;

        // else, find if there is another record with the same conditions
        DetachedCriteria dc1 = DetachedCriteria.forEntityName(IModelConstant.recordEntity);
        if (teamMemberDetailId != null) {
            dc1.add(Restrictions.eq("teamMemberDetailId", teamMemberDetailId));
        } else if (personDetailId != null) {
            dc1.add(Restrictions.eq("personDetailId", personDetailId));
        }

        dc1.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED));
        dc1.add(Restrictions.eq("activityId", activityId));

        if (recordId != null && recordId > 0) {
            dc1.add(Restrictions.ne("recordId", recordId));
        }

        dc1.add(Restrictions.or(
                Restrictions.or(
                        Restrictions.or(
                                Restrictions.and(Restrictions.ge("startTime", startTime),
                                        Restrictions.le("endTime", endTime)),
                                Restrictions.and(Restrictions.lt("startTime", startTime),
                                        Restrictions.gt("endTime", startTime))),
                        Restrictions.or(
                                Restrictions.and(Restrictions.lt("startTime", endTime),
                                        Restrictions.gt("endTime", endTime)),
                                Restrictions.and(Restrictions.le("startTime", startTime),
                                        Restrictions.gt("endTime", endTime)))),
                Restrictions.or(
                        Restrictions.or(
                                Restrictions.and(Restrictions.ge("overTimeStartTime", startTime),
                                        Restrictions.le("overTimeEndTime", endTime)),
                                Restrictions.and(Restrictions.lt("overTimeStartTime", startTime),
                                        Restrictions.gt("overTimeEndTime", startTime))),
                        Restrictions.or(
                                Restrictions.and(Restrictions.lt("overTimeStartTime", endTime),
                                        Restrictions.gt("overTimeEndTime", endTime)),
                                Restrictions.and(Restrictions.le("overTimeStartTime", startTime),
                                        Restrictions.gt("overTimeEndTime", endTime))))));

        List<Record> tempRecords = (List<Record>) getHibernateTemplate().findByCriteria(dc1);
        Record record = null;
        if (tempRecords != null && tempRecords.size() > 0) {
            logger.debug("tempRecords size = " + tempRecords.size() + ", " + tempRecords);
            for (Record rec : tempRecords) {
                logger.debug("record = " + rec);
                if (rec.getStartTime() != null && rec.getEndTime() != null) {
                    boolean hasOverlap = ControllerUtils.getInstance().hasOverlap(startTime, endTime, time,
                            rec.getStartTime(), rec.getEndTime(), rec.getTime());
                    logger.debug("hasOverlap = " + hasOverlap);
                    if (hasOverlap) {
                        existRecord = true;
                        record = rec;
                        break;
                    }
                }
                if (rec.getOverTimeStartTime() != null && rec.getOverTimeEndTime() != null) {
                    if (ControllerUtils.getInstance().hasOverlap(startTime, endTime, time,
                            rec.getOverTimeStartTime(), rec.getOverTimeEndTime(), rec.getOverTimeTime())) {
                        existRecord = true;
                        record = rec;
                        break;
                    }
                }
            }
        }

        // if we have also an overtimeStartTime and an overtimeEndTime
        if (overTimeStartTime != null && overTimeEndTime != null) {

            logger.debug("overTimeStartTime = " + overTimeStartTime);
            logger.debug("overTimeEndTime = " + overTimeEndTime);

            // if the range for the work hours is the same or is an interval from the overtime hours
            // we can't add or update the record
            if (((startTime.after(overTimeStartTime) || startTime.equals(overTimeStartTime))
                    && (endTime.before(overTimeEndTime) || endTime.equals(overTimeEndTime)))
                    || (startTime.before(overTimeStartTime) && endTime.after(overTimeStartTime))
                    || (startTime.before(overTimeEndTime) && endTime.after(overTimeEndTime))
                    || ((startTime.before(overTimeStartTime) || startTime.equals(overTimeStartTime))
                            && (endTime.after(overTimeEndTime) || endTime.equals(overTimeEndTime)))) {
                logger.debug("hasIdenticalRecordForPerson - END");
                if (ControllerUtils.getInstance().hasOverlap(startTime, endTime, time, overTimeStartTime,
                        overTimeEndTime, overtimeTime)) {
                    return new Record();
                } else {
                    return null;
                }
            } else {
                if (existRecord == true) {
                    logger.debug("hasIdenticalRecordForPerson - END, tempRecords = " + tempRecords + ", size = "
                            + tempRecords.size());
                    return record;
                }
            }
        } else {
            if (existRecord == true) {
                logger.debug("hasIdenticalRecordForPerson - END, tempRecords = " + tempRecords + ", size = "
                        + tempRecords.size());
                return record;
            }
        }
    }

    // also, for the overtime
    if (overTimeStartTime != null && overTimeEndTime != null) {

        logger.debug("overTimeStartTime = " + overTimeStartTime);
        logger.debug("overTimeEndTime = " + overTimeEndTime);

        DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.recordEntity);

        if (teamMemberDetailId != null) {
            dc.add(Restrictions.eq("teamMemberDetailId", teamMemberDetailId));
        } else if (personDetailId != null) {
            dc.add(Restrictions.eq("personDetailId", personDetailId));
        }
        dc.add(Restrictions.ne("status", IConstant.NOM_RECORD_STATUS_DELETED));
        dc.add(Restrictions.eq("activityId", activityId));
        if (recordId != null && recordId > 0) {
            dc.add(Restrictions.ne("recordId", recordId));
        }

        dc.add(Restrictions.or(
                Restrictions.or(
                        Restrictions.or(
                                Restrictions.and(Restrictions.ge("startTime", overTimeStartTime),
                                        Restrictions.le("endTime", overTimeEndTime)),
                                Restrictions.and(Restrictions.lt("startTime", overTimeStartTime),
                                        Restrictions.gt("endTime", overTimeStartTime))),
                        Restrictions.or(
                                Restrictions.and(Restrictions.lt("startTime", overTimeEndTime),
                                        Restrictions.gt("endTime", overTimeEndTime)),
                                Restrictions.and(Restrictions.le("startTime", overTimeStartTime),
                                        Restrictions.gt("endTime", overTimeEndTime)))),
                Restrictions.or(
                        Restrictions.or(
                                Restrictions.and(Restrictions.ge("overTimeStartTime", overTimeStartTime),
                                        Restrictions.le("overTimeEndTime", overTimeEndTime)),
                                Restrictions.and(Restrictions.lt("overTimeStartTime", overTimeStartTime),
                                        Restrictions.gt("overTimeEndTime", overTimeStartTime))),
                        Restrictions.or(
                                Restrictions.and(Restrictions.lt("overTimeStartTime", overTimeEndTime),
                                        Restrictions.gt("overTimeEndTime", overTimeEndTime)),
                                Restrictions.and(Restrictions.le("overTimeStartTime", overTimeStartTime),
                                        Restrictions.gt("overTimeEndTime", overTimeEndTime))))));

        List<Record> records = (List<Record>) getHibernateTemplate().findByCriteria(dc);

        logger.debug("hasIdenticalRecordForPerson - END, records = " + records + ", size = " + records.size());

        if (records != null && records.size() > 0) {
            for (Record rec : records) {
                logger.debug("rec = " + rec);
                if (rec.getStartTime() != null && rec.getEndTime() != null) {
                    if (ControllerUtils.getInstance().hasOverlap(overTimeStartTime, overTimeEndTime,
                            overtimeTime, rec.getStartTime(), rec.getEndTime(), rec.getTime())) {
                        return rec;
                    }
                } else if (rec.getOverTimeStartTime() != null && rec.getOverTimeEndTime() != null) {
                    if (ControllerUtils.getInstance().hasOverlap(overTimeStartTime, overTimeEndTime,
                            overtimeTime, rec.getOverTimeStartTime(), rec.getOverTimeEndTime(),
                            rec.getOverTimeTime())) {
                        return rec;
                    }
                }

            }
            return null;
        }
    }
    return null;
}

From source file:ro.cs.ts.model.dao.impl.DaoRecordSessionImpl.java

License:Open Source License

/**
 * Returns a recordSession identified by sessionId
 * //ww w  .j a  va  2 s .  c o m
 * @author Andreea
 * 
 * @param sessionId
 * @return
 */
public RecordSession getBySessionId(String sessionId) {
    logger.debug("getBySessionId - START");
    DetachedCriteria dc = DetachedCriteria.forEntityName(IModelConstant.recordSessionSimpleEntity);
    dc.add(Restrictions.eq("sessionId", sessionId));
    //dc.add(Restrictions.ne("status", IConstant.NOM_ACTIVITY_STATUS_DELETED));
    //dc.add(Restrictions.isNull("projectDetailId"));
    List<RecordSession> result = getHibernateTemplate().findByCriteria(dc);
    logger.debug("getBySessionId - END");
    return result.get(0);
}