es.logongas.fpempresa.dao.empresa.impl.OfertaDAOImplHibernate.java Source code

Java tutorial

Introduction

Here is the source code for es.logongas.fpempresa.dao.empresa.impl.OfertaDAOImplHibernate.java

Source

/**
 * FPempresa Copyright (C) 2015 Lorenzo Gonzlez
 *
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License as published by the Free
 * Software Foundation, either version 3 of the License, or (at your option) any
 * later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package es.logongas.fpempresa.dao.empresa.impl;

import es.logongas.fpempresa.dao.empresa.OfertaDAO;
import es.logongas.fpempresa.modelo.centro.Centro;
import es.logongas.fpempresa.modelo.comun.geo.Provincia;
import es.logongas.fpempresa.modelo.comun.usuario.Usuario;
import es.logongas.fpempresa.modelo.empresa.Empresa;
import es.logongas.fpempresa.modelo.empresa.Oferta;
import es.logongas.ix3.dao.DataSession;
import es.logongas.ix3.dao.impl.GenericDAOImplHibernate;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

/**
 *
 * @author logongas
 */
public class OfertaDAOImplHibernate extends GenericDAOImplHibernate<Oferta, Integer> implements OfertaDAO {

    @Override
    public List<Oferta> getOfertasUsuarioTitulado(DataSession dataSession, Usuario usuario, Provincia provincia,
            Date fechaInicio, Date fechaFin) {
        Session session = (Session) dataSession.getDataBaseSessionImpl();

        StringBuilder sb = new StringBuilder();

        sb.append("SELECT oferta.*\n" + "FROM\n" + "   oferta   \n"
                + "      INNER JOIN  ofertaciclo   ON oferta.idOferta=ofertaciclo.idOferta \n"
                + "      INNER JOIN  municipio as municipiooferta ON oferta.idMunicipio=municipiooferta.idMunicipio\n"
                + "      INNER JOIN  empresa           ON oferta.idEmpresa=empresa.idEmpresa,\n" + "   usuario \n"
                + "      INNER JOIN  formacionacademica ON usuario.idTitulado=formacionacademica.idTitulado \n"
                + "      INNER JOIN  titulado                     ON usuario.idTitulado=titulado.idTitulado  \n"
                + "      INNER JOIN  municipio as municipiotitulado           ON titulado.idMunicipio=municipiotitulado.idMunicipio\n"
                + "WHERE\n" + "   oferta.cerrada <> 1 AND\n" + "   usuario.idIdentity=? AND\n"
                + "   empresa.idCentro IS NULL AND\n" + "   ofertaciclo.idCiclo=formacionacademica.idCiclo AND\n");

        if (provincia != null) {
            sb.append("   municipiooferta.idProvincia=? AND\n");
        }
        if (fechaInicio != null) {
            sb.append("   oferta.fecha>=? AND\n");
        }
        if (fechaFin != null) {
            sb.append("   oferta.fecha<=? AND\n");
        }

        sb.append(
                "   not exists (SELECT * FROM  candidato WHERE candidato.idIdentity=usuario.idIdentity AND candidato.idOferta=oferta.idOferta)\n");

        sb.append(" UNION DISTINCT \n");

        sb.append("SELECT oferta.*\n" + "FROM\n" + "   oferta   \n"
                + "      INNER JOIN  ofertaciclo   ON oferta.idOferta=ofertaciclo.idOferta \n"
                + "      INNER JOIN  municipio as municipiooferta ON oferta.idMunicipio=municipiooferta.idMunicipio\n"
                + "      INNER JOIN  empresa           ON oferta.idEmpresa=empresa.idEmpresa,\n" + "   usuario \n"
                + "      INNER JOIN  formacionacademica ON usuario.idTitulado=formacionacademica.idTitulado   \n"
                + "WHERE\n" + "   oferta.cerrada <> 1 AND\n" + "   usuario.idIdentity=? AND\n"
                + "   empresa.idCentro = formacionacademica.idCentro AND\n"
                + "   ofertaciclo.idCiclo=formacionacademica.idCiclo AND\n");
        if (provincia != null) {
            sb.append("   municipiooferta.idProvincia=? AND\n");
        }
        if (fechaInicio != null) {
            sb.append("   oferta.fecha>=? AND\n");
        }
        if (fechaFin != null) {
            sb.append("   oferta.fecha<=? AND\n");
        }

        sb.append(
                "   not exists (SELECT * FROM candidato WHERE candidato.idIdentity=usuario.idIdentity AND candidato.idOferta=oferta.idOferta)");
        sb.append(" ORDER BY fecha DESC");

        SQLQuery sqlQuery = session.createSQLQuery(sb.toString());
        sqlQuery.addEntity(Oferta.class);

        int paramNumber = 0;

        sqlQuery.setInteger(paramNumber++, usuario.getIdIdentity());
        if (provincia != null) {
            sqlQuery.setInteger(paramNumber++, provincia.getIdProvincia());
        }
        if (fechaInicio != null) {
            sqlQuery.setDate(paramNumber++, fechaInicio);
        }
        if (fechaFin != null) {
            sqlQuery.setDate(paramNumber++, fechaFin);
        }
        sqlQuery.setInteger(paramNumber++, usuario.getIdIdentity());
        if (provincia != null) {
            sqlQuery.setInteger(paramNumber++, provincia.getIdProvincia());
        }
        if (fechaInicio != null) {
            sqlQuery.setDate(paramNumber++, fechaInicio);
        }
        if (fechaFin != null) {
            sqlQuery.setDate(paramNumber++, fechaFin);
        }

        return (List<Oferta>) sqlQuery.list();
    }

    @Override
    public List<Oferta> getOfertasInscritoUsuarioTitulado(DataSession dataSession, Usuario usuario,
            Provincia provincia, Date fechaInicio, Date fechaFin) {
        Session session = (Session) dataSession.getDataBaseSessionImpl();

        StringBuilder sb = new StringBuilder();

        sb.append("SELECT candidato.oferta FROM  Candidato  as candidato WHERE candidato.usuario.idIdentity=?");

        if (provincia != null) {
            sb.append(" AND candidato.oferta.municipio.provincia.idProvincia=? ");
        }
        if (fechaInicio != null) {
            sb.append(" AND candidato.oferta.fecha>=? ");
        }
        if (fechaFin != null) {
            sb.append(" AND candidato.oferta.fecha<=? ");
        }

        sb.append(" ORDER BY candidato.oferta.fecha DESC");

        Query query = session.createQuery(sb.toString());
        int paramNumber = 0;
        query.setInteger(paramNumber++, usuario.getIdIdentity());
        if (provincia != null) {
            query.setInteger(paramNumber++, provincia.getIdProvincia());
        }
        if (fechaInicio != null) {
            query.setDate(paramNumber++, fechaInicio);
        }
        if (fechaFin != null) {
            query.setDate(paramNumber++, fechaFin);
        }

        return (List<Oferta>) query.list();
    }

    @Override
    public List<Oferta> getOfertasEmpresasCentro(DataSession dataSession, Centro centro) {
        Session session = (Session) dataSession.getDataBaseSessionImpl();

        String hql = "SELECT oferta FROM oferta WHERE oferta.empresa.centro.idCentro=? ORDER BY fecha";

        Query query = session.createQuery(hql);
        query.setInteger(0, centro.getIdCentro());

        return (List<Oferta>) query.list();
    }

    @Override
    public List<Oferta> getOfertasEmpresa(DataSession dataSession, Empresa empresa) {
        Session session = (Session) dataSession.getDataBaseSessionImpl();

        String hql = "SELECT oferta FROM oferta WHERE oferta.empresa.idEmpresa=? ORDER BY fecha DESC";

        Query query = session.createQuery(hql);
        query.setInteger(0, empresa.getIdEmpresa());

        return (List<Oferta>) query.list();
    }

}