Subversion Repositories bacoAlunos

Rev

Rev 1387 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.questionarios.pedagogico;

import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.CourseUnitImpl;
import pt.estgp.estgweb.domain.QuestionarioImpl;
import pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto;
import pt.estgp.estgweb.domain.QuestionarioPedagogicoUnidadeCurricularAfeta;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;

import java.util.List;


/**
 * Created by jorgemachado on 28/05/16.
 */

public class AnswersAlunosProcessor extends ServiceJob {

    int unidadesNaoUtilizadas = 0;
    int unidadesUtilizadas = 0;
    int unidadesMarcadas = 0;
    int unidadesNaoVistasProf = 0;
    int unidadesNaoVistasAlunos = 0;
    int cursosUtilizados = 0;

    private static 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(AnswersAlunosProcessor.class);
    /**
     *
     * @return
     * @throws Throwable
     */

    @1.5.0/docs/api/java/lang/Override.html">Override
    protected ILogMessages runJobServiceTask() throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable
    {

        DefaultLogMessages logMessages = new DefaultLogMessages();
        long questionarioId = 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject());
        QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId);


        //Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre

        /**logging**/
        1.5.0/docs/api/java/lang/String.html">String msg = "Starting running service answers generation for questionario: " + q.getId() + " - " + q.getiAnswersProcessorClass().getTitle();
        serviceLogInfo(msg);
        logger.info(msg);

        List<Long> cursosAfetosIds = DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().findCursosAfetosIds(questionarioId);
        int count = 0;
        for(1.5.0/docs/api/java/lang/Long.html">Long cursoAfetoId : cursosAfetosIds)
        {
            /** COMMIT OPERATION **/
            count++;
            cursosUtilizados++;
            setProgress((int)((((float)count)/((float)cursosAfetosIds.size()))*100.0f));
            commitPartially();
            /** COMMIT OPERATION **/


            QuestionarioPedagogicoCursoAfeto cu = DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().get(cursoAfetoId);
            msg = "(+) Iniciando atribuição de respostas de alunos para o curso " + cu.getNome() + " (" + cu.getCodigoCurso() + ") escola " + cu.getNomeInstituicao() + "(" + cu.getCodigoInstituicao() + ")";
            logger.info(msg);
            serviceLogInfo(msg);
            int unidades;
            if(cu.getUnidadesAfetas() != null)
            {
                unidades = cu.getUnidadesAfetas().size();
                int countUnidadades = 0;
                for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
                {
                    countUnidadades++;
                    msg = unidadeCurricularAfeta.isUsar() ? "(+)" : "(----IGNORADA-----)";
                    msg += "(" + countUnidadades + "/" + unidades + ") Iniciando atribuição de Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome();
                    logger.info(msg);
                    serviceLogInfo(msg);

                    VerificarAssgnementsParaRemover(logMessages, unidadeCurricularAfeta);

                    if(!unidadeCurricularAfeta.isUsar())
                    {
                        unidadesNaoUtilizadas++;
                        msg = "!!! A unidade está marcada para NÃO SER UTILIZADA, passando à próxima";
                        serviceLogWarn(msg);
                        logger.warn(msg);
                        logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
                    }
                    else
                    {
                        unidadesUtilizadas++;
                        verificaAlertasUnidade(logMessages, unidadeCurricularAfeta);
                        List<CourseUnitImpl.Tipologia> tipologias;
                        if(unidadeCurricularAfeta.getCursoAfeto().isUsarTipologias())
                        {
                            tipologias = ((CourseUnitImpl)unidadeCurricularAfeta.getCourseUnit()).getTipologiasClass().obtainMergeTipologias();
                        }
                        else
                        {
                            tipologias = ((CourseUnitImpl)unidadeCurricularAfeta.getCourseUnit()).getTipologiasClass().obtainTipologiasSimples(unidadeCurricularAfeta.getCourseUnit());
                        }
                        if(tipologias.get(0).isUse())
                        {
                            //todo Criar Tipologia Requisitada
                            1.5.0/docs/api/java/lang/String.html">String cdDocente = tipologias.get(0).getCdDocente();
                            1.5.0/docs/api/java/lang/String.html">String cdTipologia = tipologias.get(0).getCdTipologia();
                            1.5.0/docs/api/java/lang/String.html">String dsTipologia = tipologias.get(0).getDsTipologia();
                            1.5.0/docs/api/java/lang/String.html">String cdTurma = tipologias.get(0).getCdTurma();
                            //todo percorrer as turmas da unidade à procura desta
                            //todo quando a encontrar criar um AlunoRequisitado para essa tipologia Requisitada
                            //todo Criar uma resposta requisitada para esse aluno Requisitado nessa tipologia

                            //Depois o home tem de procurar respostas requisitadas sem resposta
                            //para cada uma vai pelo aluno requisitado buscar a turma o docente e pela
                            //unidade afeta a unidade e o curso
                            //apresenta o questionario com o id da resposta requisitada

                        }
                    }
                }
            }
        }

        /** COMMIT OPERATION **/
        setProgress(100);
        commitPartially();
        DaoFactory.getQuestionarioDaoImpl().update(q);
        /** COMMIT OPERATION **/

        msg = "Set courses state as " + QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.name();
        serviceLogInfo(msg);
        logger.info(msg);
        q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED);
        commitPartially();

        return logMessages;
    }

    private void VerificarAssgnementsParaRemover(DefaultLogMessages logMessages, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta) {
        1.5.0/docs/api/java/lang/String.html">String msg;
        if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0)
        {
            msg = "A unidade tem tipologias requisitadas afetas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas associadas";
            logger.warn(msg);
            serviceLogWarn(msg);
            logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
            new UpdateCoursesAndUnitsJobService().removeTipologiasERespostasCascade(unidadeCurricularAfeta);
        }
    }

    private void verificaAlertasUnidade(DefaultLogMessages logMessages, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta) {
        1.5.0/docs/api/java/lang/String.html">String msg;
        if(unidadeCurricularAfeta.isMarked() || !unidadeCurricularAfeta.isVista() || !unidadeCurricularAfeta.isVistaProfs())
        {
            msg = " !!!! ALERTA :--> ";
            if(unidadeCurricularAfeta.isMarked())
            {
                unidadesMarcadas++;
                msg+= " MARCADA ; ";
            }
            if(!unidadeCurricularAfeta.isVista())
            {
                unidadesNaoVistasAlunos++;
                msg+= " NÃO VISTA ALUNOS ; ";
            }
            if(!unidadeCurricularAfeta.isVistaProfs())
            {
                unidadesNaoVistasProf++;
                msg+= " NÃO VISTA PROFS ; ";
            }
            serviceLogWarn(msg);
            logger.warn(msg);
            logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
        }
    }
}