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
));
}
}
}