com.ipn.escom.ageinnn.usuario.service.AspiranteServceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.ipn.escom.ageinnn.usuario.service.AspiranteServceImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipn.escom.ageinnn.usuario.service;

import com.ipn.escom.ageinnn.aspirante.model.Aspirante;
import com.ipn.escom.ageinnn.aspirante.model.AspiranteId;
import com.ipn.escom.ageinnn.aspirante.model.Comentario;
import com.ipn.escom.ageinnn.aspirante.model.DocumentoEntregado;
import com.ipn.escom.ageinnn.aspirante.model.DocumentoEntregadoId;
import com.ipn.escom.ageinnn.aspirante.model.ProcesoAdmision;
import com.ipn.escom.ageinnn.configuracion.model.PeriodoAdmision;
import com.ipn.escom.ageinnn.curso.model.Curso;
import com.ipn.escom.ageinnn.curso.model.Grupo;
import com.ipn.escom.ageinnn.evento.model.TipoEvento;
import com.ipn.escom.ageinnn.gestion.service.GrupoService;
import com.ipn.escom.ageinnn.gestion.service.InscripcionService;
import com.ipn.escom.ageinnn.service.Service;
import com.ipn.escom.ageinnn.usuario.model.MedicoResidente;
import com.ipn.escom.ageinnn.utils.AspiranteCommand;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.transaction.Transactional;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Erick
 */
public class AspiranteServceImpl implements AspiranteService {

    private Session session;
    private CatalogoServiceImpl catalogoService = new CatalogoServiceImpl();

    @Override
    public List<DocumentoEntregado> findAllDocuments(Integer id) {
        List<DocumentoEntregado> documentos = null;
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            documentos = session.createCriteria(DocumentoEntregado.class).add(Restrictions.eq("aspiranteId", id))
                    .list();
            if (documentos.size() > 0) {
                System.out.println("este wey si tiene documentos");
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }
        return documentos;
    }

    public List<DocumentoEntregado> findAllDocumentosFaltantes(List<DocumentoEntregado> documentoEntregados,
            Integer id) {
        List<DocumentoEntregado> documentos = null;
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            documentos = session.createCriteria(DocumentoEntregado.class)
                    .createAlias("documentoRequerido", "documentoRequerido").list();

            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }
        return documentos;
    }

    public List<Aspirante> findAllByAspiranteCommand(AspiranteCommand aspiranteCommand) {
        List<Aspirante> aspiranteList = new ArrayList();
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            Criteria criteria = session.createCriteria(Aspirante.class);
            System.out.println(aspiranteCommand);
            if (aspiranteCommand != null) {
                criteria.createAlias("medico", "m");
                if (aspiranteCommand.getNombre() != null && !"".equals(aspiranteCommand.getNombre())) {
                    System.out.println("Entra nombre");

                    criteria.add(Restrictions.eq("m.nombre", aspiranteCommand.getNombre()));
                }
                if (aspiranteCommand.getEmail() != null && !"".equals(aspiranteCommand.getEmail())) {
                    System.out.println("Entra mail");

                    criteria.add(Restrictions.eq("m.email", aspiranteCommand.getEmail()));
                }
                if (aspiranteCommand.getFolio() != null && !"".equals(aspiranteCommand.getFolio())) {
                    System.out.println("Entra folio");

                    criteria.add(Restrictions.eq("m.folio", aspiranteCommand.getFolio()));
                }
                if (aspiranteCommand.getPaisId() != null && aspiranteCommand.getPaisId() > 0) {
                    System.out.println("Entra pais");

                    criteria.add(Restrictions.eq("m.paisId", aspiranteCommand.getPaisId()));
                }
                criteria.add(Restrictions.eq("m.nacional", aspiranteCommand.isNacional()));

                if (aspiranteCommand.getSexoId() != null && aspiranteCommand.getSexoId() > 0) {
                    System.out.println("Entra sexo");
                    criteria.add(Restrictions.eq("m.idSexo", aspiranteCommand.getSexoId()));
                }
                if (aspiranteCommand.getCursoId() != null && aspiranteCommand.getCursoId() > 0) {
                    System.out.println("Entra curso");
                    criteria.add(Restrictions.eq("cursoId", aspiranteCommand.getCursoId()));
                }
                if (aspiranteCommand.getProcesoAdmisionId() != null
                        && aspiranteCommand.getProcesoAdmisionId() > 0) {
                    System.out.println("Entra proceso admision id");
                    criteria.add(Restrictions.eq("procesoAdmisionId", aspiranteCommand.getProcesoAdmisionId()));
                }

                if (aspiranteCommand.getPeriodoAdmisionId() != null
                        && aspiranteCommand.getPeriodoAdmisionId() > 0) {

                    criteria.add(Restrictions.eq("periodoAdmisionId", aspiranteCommand.getPeriodoAdmisionId()));
                }
            }
            aspiranteList = criteria.list();
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }
        return aspiranteList;
    }

    @Transactional
    @Override
    public Serializable guardarDocumento(DocumentoEntregado documento) {
        DocumentoEntregadoId id = null;
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            System.out.println("Tipo de documento: " + documento.getRuta());
            id = (DocumentoEntregadoId) session.save(documento);
            session.getTransaction().commit();
            System.out.println("Documento guardado");
        } catch (Exception e) {
            System.out.println("No se ha podido realizar la transaccin");
            session.getTransaction().rollback();
            throw e;
        }
        return id;
    }

    @Override
    @Transactional
    public void actualizarDocumento(DocumentoEntregado documento) {
        try {
            System.out.println(documento.toString());
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            session.saveOrUpdate(documento);
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }
    }

    public void actualizarDocumento(List<DocumentoEntregado> documentos) {
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            for (DocumentoEntregado documento : documentos) {
                session.saveOrUpdate(documento);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }

    }

    public Serializable saveComentario(Comentario comentario) {
        Integer id = null;
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            id = (Integer) session.save(comentario);
            session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("No se ha podido realizar la transaccin");
            session.getTransaction().rollback();
            throw e;
        }
        return id;
    }

    public List<Serializable> saveComentario(List<Comentario> comentarios) {
        List<Serializable> ids = new ArrayList<>();
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            for (Comentario comentario : comentarios) {
                ids.add((Integer) session.save(comentario));
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("No se ha podido realizar la transaccin");
            session.getTransaction().rollback();
            throw e;
        }
        return ids;
    }

    @Transactional
    public DocumentoEntregado obtenerDocumento(DocumentoEntregadoId id) {
        DocumentoEntregado documento = null;
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            documento = (DocumentoEntregado) session.get(DocumentoEntregado.class, id);
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }

        return documento;
    }

    public void setProcesoAdmisionEntrevista(Aspirante aspirante, TipoEvento tipoEvento) {
        String nombreProcesoAdmision = null;
        switch (tipoEvento.getNombre()) {
        case "Entrevista 1":
            nombreProcesoAdmision = "entrevista 1";
            break;
        case "Entrevista 2":
            nombreProcesoAdmision = "entrevista 2";
            break;
        case "Entrevista 3":
            nombreProcesoAdmision = "entrevista 3";
            break;
        default:
            nombreProcesoAdmision = "";

        }
        ProcesoAdmision procesoAdmision = catalogoService.findByNombre(ProcesoAdmision.class,
                nombreProcesoAdmision);
        if (procesoAdmision != null) {
            aspirante.setProcesoAdmisionId(procesoAdmision.getId());
            aspirante.setProcesoAdmision(procesoAdmision);
        }

    }

    public void setProcesoAdmisionAceptado(Aspirante aspirante) {

        ProcesoAdmision procesoAdmision = catalogoService.findByNombre(ProcesoAdmision.class, "aceptado");
        if (procesoAdmision != null) {
            aspirante.setProcesoAdmisionId(procesoAdmision.getId());
            aspirante.setProcesoAdmision(procesoAdmision);
            Curso curso = aspirante.getCurso();
            GrupoService grupoService = new GrupoService();
            InscripcionService inscripcionService = new InscripcionService();
            Grupo grupo = grupoService.findByCurso(curso);
            this.update(aspirante);
            inscripcionService.inscribirAlumno(grupo, aspirante.getMedico());
        }

    }

    public void setProcesoAdmisionRechazado(Aspirante aspirante) {

        ProcesoAdmision procesoAdmision = catalogoService.findByNombre(ProcesoAdmision.class, "rechazado");
        if (procesoAdmision != null) {
            aspirante.setProcesoAdmisionId(procesoAdmision.getId());
            aspirante.setProcesoAdmision(procesoAdmision);
        }

    }

    public void setProcesoAdmisionDocumentos(Aspirante aspirante) {

        ProcesoAdmision procesoAdmision = catalogoService.findByNombre(ProcesoAdmision.class, "documentos");
        if (procesoAdmision != null) {
            aspirante.setProcesoAdmision(procesoAdmision);
        }

    }

    public Session getSession() {
        return session;
    }

    public void setSession(Session session) {
        this.session = session;
    }

    @Override
    public void actualizarDocumento(Integer estadoRevisionId, DocumentoEntregadoId id) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void eliminarDocumentos(Serializable id) {
        //        session = Service.getSessionFactory().getCurrentSession();
        //        session.beginTransaction();
        //        session.de
    }

    public CatalogoServiceImpl getCatalogoService() {
        return catalogoService;
    }

    public void setCatalogoService(CatalogoServiceImpl catalogoService) {
        this.catalogoService = catalogoService;
    }

    public List<String> findAllFolios(PeriodoAdmision periodo) {
        List<String> folios = new ArrayList<>();
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            folios = session.createCriteria(MedicoResidente.class).add(Restrictions.isNotNull("folio"))
                    .setProjection(Projections.property("folio")).list();
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }
        return folios;
    }

    public void generarFolio(Aspirante aspirante) {

        String folio = "";
        String numeroAspirante;

        PeriodoAdmision periodoAdmision = this.catalogoService.findPeriodoActual();
        Curso curso = aspirante.getCurso();

        List<Aspirante> aspirantesConFolio = this.findAllAspirantesWithFolio(curso, periodoAdmision);

        if (aspirantesConFolio.isEmpty()) {
            numeroAspirante = "1";
        } else {
            numeroAspirante = Integer.toString(aspirantesConFolio.size() + 1);
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(periodoAdmision.getPeriodoEntregaDocumentos().getFechaInicio());
        Integer year = calendar.get(Calendar.YEAR);
        String periodo = year.toString();
        folio = numeroAspirante + "-" + aspirante.getCurso().getClave() + "-" + periodo;
        System.out.println("Folio generado: " + folio);

        aspirante.getMedico().setFolio(folio);

        //return folio;

    }

    public Aspirante findByEmail(String aspiranteEmail) {
        Aspirante aspirante = null;
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            List<Aspirante> aspirantes = session.createCriteria(Aspirante.class)
                    .add(Restrictions.eq("email", aspiranteEmail)).list();
            if (!aspirantes.isEmpty()) {
                aspirante = aspirantes.get(0);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }
        return aspirante;
    }

    public Aspirante find(AspiranteId aspiranteId) {
        Aspirante aspirante = null;
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            aspirante = (Aspirante) session.get(Aspirante.class, aspiranteId);
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
        }
        return aspirante;
    }

    public Serializable registerAspirante(MedicoResidente usuario, Curso curso) {
        Serializable id = null;
        try {
            UsuarioServiceImpl usuarioServiceImpl = new UsuarioServiceImpl();
            CatalogoServiceImpl catalogoServiceImpl = new CatalogoServiceImpl();
            usuario.setMailToken(usuarioServiceImpl.generateToken());
            usuario.setEnabled(false);
            PeriodoAdmision periodoAdmision = catalogoServiceImpl.findPeriodoActual();
            ProcesoAdmision procesoAdmision = catalogoServiceImpl.findByNombre(ProcesoAdmision.class, "documentos");

            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();

            Serializable medicoId = session.save(usuario);
            AspiranteId aspiranteId = new AspiranteId((Integer) medicoId, periodoAdmision.getId());
            Aspirante aspirante = new Aspirante();
            aspirante.setAspiranteId(aspiranteId);
            aspirante.setProcesoAdmisionId(procesoAdmision.getId());
            aspirante.setCursoId(curso.getId());
            id = session.save(aspirante);

            session.getTransaction().commit();

        } catch (Exception e) {
            System.out.println("Ha ocurrido un error");
            session.getTransaction().rollback();
            //            throw e;
        }
        return id;
    }

    public void update(Aspirante aspirante) {
        try {
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            session.saveOrUpdate(aspirante);
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
        }
    }

    public TipoEvento determineTipoEvento(Aspirante aspirante) {
        TipoEvento tipoEvento;
        String nombreTipoEvento;
        switch (aspirante.getProcesoAdmision().getNombre()) {
        case "entrevista 1":
            nombreTipoEvento = "Entrevista 1";
            break;
        case "entrevista 2":
            nombreTipoEvento = "Entrevista 2";
            break;
        case "entrevista 3":
            nombreTipoEvento = "Entrevista 3";
            break;
        default:
            nombreTipoEvento = "";
            break;
        }
        tipoEvento = catalogoService.findByNombre(TipoEvento.class, nombreTipoEvento);
        return tipoEvento;
    }

    public TipoEvento determineNextTipoEvento(Aspirante aspirante) {
        String nombreTipoEvento = "";

        switch (aspirante.getProcesoAdmision().getNombre()) {
        case "entrevista 1":
            nombreTipoEvento = "Entrevista 2";
            break;
        case "entrevista 2":
            nombreTipoEvento = "Entrevista 3";
            break;
        }
        TipoEvento tipoEvento = catalogoService.findByNombre(TipoEvento.class, nombreTipoEvento);
        return tipoEvento;
    }

    private List<Aspirante> findAllAspirantesWithFolio(Curso curso, PeriodoAdmision periodoAdmision) {

        List<Aspirante> aspirantes = new ArrayList<>();
        try {

            Map<String, Object> properties = new HashMap<String, Object>();
            properties.put("cursoId", curso.getId());
            properties.put("periodoAdmisionId", periodoAdmision.getId());
            session = Service.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            aspirantes = session.createCriteria(Aspirante.class).add(Restrictions.allEq(properties)).list();
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
        }

        return aspirantes;

    }

}