package com.thingtrack.konekti.dao.impl.internal; import java.util.List; import javax.persistence.Query; import org.springframework.stereotype.Repository; import com.thingtrack.konekti.dao.api.EmployeeAgentDao; import com.thingtrack.konekti.dao.template.JpaDao; import com.thingtrack.konekti.domain.Area; import com.thingtrack.konekti.domain.EmployeeAgent; import com.thingtrack.konekti.domain.EmployeeAgentType; import com.thingtrack.konekti.domain.Location; import com.thingtrack.konekti.domain.Organization; import com.thingtrack.konekti.domain.User; /** * @author Thingtrack S.L. * */ @Repository public class EmployeeAgentDaoImpl extends JpaDao<EmployeeAgent, Integer> implements EmployeeAgentDao { @SuppressWarnings("unchecked") @Override public List<EmployeeAgent> getAll(User user) throws Exception { String queryString = "SELECT p FROM " + getEntityName() + " p"; if (user.getActiveOrganization() != null) queryString += " WHERE p.organization = :organization"; Query query = (Query) getEntityManager().createQuery(queryString); if (user.getActiveOrganization() != null) query.setParameter("organization", user.getActiveOrganization()); return query.getResultList(); } @Override public EmployeeAgent getByName(Organization organization, String name) throws Exception { String queryString = "SELECT em"; queryString += " FROM " + getEntityName() + " em"; queryString += " JOIN em.organizations org"; queryString += " WHERE em.name = :name"; queryString += " AND em.organization = :organization"; Query query = (Query) getEntityManager().createQuery(queryString) .setParameter("name", name) .setParameter("organization", organization); return (EmployeeAgent) query.getSingleResult(); } @Override public EmployeeAgent getByUser(User user) throws Exception { String queryString = "SELECT em"; queryString += " FROM " + getEntityName() + " em"; queryString += " WHERE em.user = :user"; Query query = (Query) getEntityManager().createQuery(queryString) .setParameter("user", user); return (EmployeeAgent) query.getSingleResult(); } @SuppressWarnings("unchecked") @Override public List<EmployeeAgent> getByType(Organization organization, EmployeeAgentType employeeAgentType) throws Exception { String queryString = "SELECT em"; queryString += " FROM " + getEntityName() + " em"; queryString += " WHERE em.employeeAgentType = :type"; queryString += " AND em.organization = :organization"; Query query = (Query) getEntityManager().createQuery(queryString) .setParameter("type", employeeAgentType) .setParameter("organization", organization); return query.getResultList(); } @Override public EmployeeAgent getByWorkNumber(Organization organization, String workNumber) throws Exception { String queryString = "SELECT em"; queryString += " FROM " + getEntityName() + " em"; queryString += " WHERE em.workNumber = :workNumber"; Query query = (Query) getEntityManager().createQuery(queryString) .setParameter("workNumber", workNumber); return (EmployeeAgent) query.getSingleResult(); } @SuppressWarnings("unchecked") @Override public List<Location> getAllLocationByOrganization(Organization organization, int agentId) throws Exception { String queryString = "SELECT lc"; queryString += " FROM " + getEntityName() + " em"; queryString += " JOIN em.locations lc"; queryString += " JOIN lc.organizations org"; queryString += " WHERE org.organizationId = :organizationId"; queryString += " AND em.agentId = :agentId"; Query query = (Query) getEntityManager().createQuery(queryString) .setParameter("organizationId", organization.getOrganizationId()) .setParameter("agentId", agentId); return query.getResultList(); } @SuppressWarnings("unchecked") @Override public List<Area> getAllAreaByLocation(Location location, int agentId) throws Exception { String queryString = "SELECT ar"; queryString += " FROM " + getEntityName() + " em"; queryString += " JOIN em.areas ar"; queryString += " JOIN ar.location lc"; queryString += " WHERE lc.locationId = :locationId"; queryString += " AND em.agentId = :agentId"; Query query = (Query) getEntityManager().createQuery(queryString) .setParameter("locationId", location.getLocationId()) .setParameter("agentId", agentId); return query.getResultList(); } }