Subversion Repositories bacoAlunos

Rev

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

package pt.estgp.estgweb.services.questionarios;

import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.impl.AnnouncementDaoImpl;
import pt.estgp.estgweb.domain.views.QuestionarioView;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.EMAILJobPersonalizedCertificated;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Email;
import pt.estgp.estgweb.utils.EmailPersonalizedCertificated;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import java.util.*;

/**
 * Created by jorgemachado on 21/03/16.
 */

public class QuestionariosService implements IService
{

    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(QuestionariosService.class);

    //NEW QUESTIONARIOS COME BY THIS SERVICE
    public QuestionarioImpl newQuestionarioForm(QuestionarioImpl qform, UserSession userSession) throws NotAuthorizedException
    {
        if(qform.getQuestionarioHistoryDrive().getId() > 0)
        {
            QuestionarioHistoryDrive hist = DaoFactory.getQuestionarioHistoryDriveDaoImpl().load(qform.getQuestionarioHistoryDrive().getId());
            qform.setQuestionarioHistoryDrive(hist);
        }
        else
        {
            qform.setQuestionarioHistoryDrive(null);
        }
        DaoFactory.getQuestionarioDaoImpl().save(qform);
        return qform;
    }
    public QuestionarioImpl saveQuestionarioForm(QuestionarioImpl qform, UserSession userSession, QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
        if(qform.getQuestionarioHistoryDrive().getId() > 0)
        {
            QuestionarioHistoryDrive hist = DaoFactory.getQuestionarioHistoryDriveDaoImpl().load(qform.getQuestionarioHistoryDrive().getId());
            qform.setQuestionarioHistoryDrive(hist);
        }
        else
        {
            qform.setQuestionarioHistoryDrive(null);
        }
        Questionario qPersistent = questionarioCleared;
        if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_FORM.name()))
        {
            QuestionarioView qv = new QuestionarioView(qform);
            if(questionarioCleared.isClear((UserSessionImpl) userSession, QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_ANSWER_PROCESSOR.name()))
            {
                qv.persistAnswersProcessor(qPersistent);
            }
            qv.persistViewInObjectForm(qPersistent);
            qPersistent.setQuestionarioHistoryDrive(qform.getQuestionarioHistoryDrive());
        }
        else
            throw new NotAuthorizedException("Não pode alterar o formulário porque o questionário está num estado avançado");

        return loadInit(questionarioCleared);
    }

    public QuestionarioImpl setAssignDetailsState(long id, UserSession userSession, QuestionarioImpl questionarioCleared) throws NotAuthorizedException {

        if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_STATE_ASSIGNATION_DETAILS.name()))
        {
            questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNATION_DETAILS);
            questionarioCleared.getiAnswersProcessorClass().startAfetacoes(questionarioCleared);
        }
        else
            throw new NotAuthorizedException("Não alterar o questionário para este estado neste momento");

        return loadInit(questionarioCleared);
    }
    /**
     * Questionario comes already cleared from Filter
     * @param questionarioId
     * @param questionarioCleared
     * @param userSession
     * @return
     */

    public QuestionarioImpl loadQuestionario(long questionarioId,UserSession userSession,QuestionarioImpl questionarioCleared)
    {
        return loadInit(questionarioCleared);
    }

    /**
     * just to load proxys
     * @param questionarioCleared
     * @return
     */

    private QuestionarioImpl loadInit(QuestionarioImpl questionarioCleared)
    {
        questionarioCleared.getDescription();//to load proxy just in case
        if(questionarioCleared.getQuestionarioHistoryDrive() != null)
            questionarioCleared.getQuestionarioHistoryDrive().getCodeName();
        IAnswersProcessor processor = questionarioCleared.getiAnswersProcessorClass();
        processor.initQuestionarioAfetacoesVariables(questionarioCleared);
        return questionarioCleared;
    }

    public void loadInit(List<QuestionarioImpl> questionarioCleared)
    {
        for(QuestionarioImpl q: questionarioCleared)
        {
            loadInit(q);
        }
    }



    public void deleteQuestionario(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
    {
        if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_DELETE.name()))
        {
            DaoFactory.getQuestionarioDaoImpl().delete(questionarioCleared);
        }
    }

    /**
     * Passa para o estado ASSIGNED_ANSWERS
     * @param questionarioId
     * @param userSession
     * @param questionarioCleared
     * @return
     */

    public QuestionarioImpl putAssignedAnswers(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
    {
        if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_PUT_ANSWERS_ASSIGNED.toString()))
        {
            questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNED_ANSWERS);
        }
        return questionarioCleared;
    }

    public QuestionarioImpl revertAssignationDetails(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
    {
        if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS.toString()))
        {
            questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNATION_DETAILS);
        }
        return questionarioCleared;
    }

    public QuestionarioImpl startProcessement(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
    {

        if(questionarioCleared.isClear((UserSessionImpl) userSession, QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.toString()))
        {
            if(questionarioCleared.getStateEnum() == QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNED_ANSWERS)
                questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING);
            else if(questionarioCleared.getStateEnum() == QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.STOPED_WITH_ANSWERS)
                questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING_WITH_ANSWERS);
        }
        return questionarioCleared;
    }

    public QuestionarioImpl stopProcessement(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared)
    {

        if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.toString()))
        {
            if(questionarioCleared.getStateEnum() == QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING)
                questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.ASSIGNED_ANSWERS);
            else if(questionarioCleared.getStateEnum() == QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING_WITH_ANSWERS)
                questionarioCleared.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.STOPED_WITH_ANSWERS);
        }
        return questionarioCleared;
    }

    public void salvarResposta(QuestionarioResposta resposta,1.5.0/docs/api/java/lang/Long.html">Long alunoRequisitadoId,UserSession userSession) throws NotAuthorizedException {
        Questionario q = DaoFactory.getQuestionarioDaoImpl().load(resposta.getQuestionario().getId());
        QuestionarioImpl questionario = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().narrow(q);
        QuestionarioPedagogicoAlunoRequisitado alunoRequisitado = DaoFactory.getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().load(alunoRequisitadoId);
        if(questionario.getStateEnum() != QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING && questionario.getStateEnum() != QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING_WITH_ANSWERS )
        {
            throw new NotAuthorizedException("O questionário interrompido por razões administrativas, por favor tente mais tarde");
        }
        if(!((alunoRequisitado.getRespostaRequisitada().getQuestionario().getId() == questionario.getId())
                &&
                alunoRequisitado.getRespostaRequisitada().getResposta() == null
                &&
                alunoRequisitado.getAluno().getId() == userSession.getUser().getId()))
        {
            throw new NotAuthorizedException("Não está autorizado a submeter esta resposta.");
        }

        resposta.setId(0);
        resposta.setQuestionario(questionario);
        resposta.setUser(alunoRequisitado.getAluno());
        alunoRequisitado.getRespostaRequisitada().setResposta(resposta);
        DaoFactory.getQuestionarioRespostaDaoImpl().save(resposta);
        questionario.setStateClass(QuestionarioImpl.1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.PROCESSING_WITH_ANSWERS);
    }


    SendEmailService sendEmailService = new SendEmailService();
    public int sendMessage(boolean onlyNotAnswered,1.5.0/docs/api/java/lang/Long.html">Long id,1.5.0/docs/api/java/lang/String.html">String msg,1.5.0/docs/api/java/lang/String.html">String emailFrom,1.5.0/docs/api/java/lang/String.html">String personFrom, 1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession)
    {
        1.5.0/docs/api/java/lang/String.html">String source = "questionario message";
        AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIds(id, onlyNotAnswered);

        return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result);
    }

    public int sendMessageCursoAfeto(boolean onlyNotAnswered,1.5.0/docs/api/java/lang/Long.html">Long id,1.5.0/docs/api/java/lang/String.html">String msg,1.5.0/docs/api/java/lang/String.html">String emailFrom,1.5.0/docs/api/java/lang/String.html">String personFrom, 1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession)
    {
        1.5.0/docs/api/java/lang/String.html">String source = "questionario curso message";
        AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogico(onlyNotAnswered, id, 0);
        return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result);
    }
    public int sendMessageUnidadeAfeta(boolean onlyNotAnswered,1.5.0/docs/api/java/lang/Long.html">Long id,1.5.0/docs/api/java/lang/String.html">String msg,1.5.0/docs/api/java/lang/String.html">String emailFrom,1.5.0/docs/api/java/lang/String.html">String personFrom, 1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession)
    {
        1.5.0/docs/api/java/lang/String.html">String source = "questionario unidade message";
        AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogico(onlyNotAnswered, 0, id);
        return sendEmails(id, msg, emailFrom, personFrom, subject, userSession, source, result);
    }


    public int sendMessageAllProcessing(boolean onlyNotAnswered,1.5.0/docs/api/java/lang/String.html">String msg,1.5.0/docs/api/java/lang/String.html">String emailFrom,1.5.0/docs/api/java/lang/String.html">String personFrom, 1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession)
    {
        1.5.0/docs/api/java/lang/String.html">String source = "questionarios em processamento message";
        AnnouncementDaoImpl.FindUsersIdResult result = DaoFactory.getQuestionarioDaoImpl().findUsersIdsPedagogicoAllProcessing(onlyNotAnswered);
        return sendEmails(null, msg, emailFrom, personFrom, subject, userSession, source, result);
    }

    private int sendEmails(1.5.0/docs/api/java/lang/Long.html">Long id, 1.5.0/docs/api/java/lang/String.html">String msg, 1.5.0/docs/api/java/lang/String.html">String emailFrom, 1.5.0/docs/api/java/lang/String.html">String personFrom, 1.5.0/docs/api/java/lang/String.html">String subject, UserSession userSession, 1.5.0/docs/api/java/lang/String.html">String source, AnnouncementDaoImpl.FindUsersIdResult result) {
        List<Long> usersToConsume = result.userIds;


        logger.info("Scheduling mail jobs to " + result.users + " users: " + usersToConsume.size() + " recipients");
        logger.info("Sender User logged in BACO: " + userSession.getUser().getName() + "(" + userSession.getUser().getUsername() + ")" + " - " + userSession.getUser().getEmail());
        //while(usersToConsume.size() > 0)
        //{
        //    Iterator<String> iter = usersToConsume.iterator();
        //    List<String> usersToJob = new ArrayList<String>();
        //    int contador = 0;
        //    while(iter.hasNext() && contador < 20)
        //    {
        //        usersToJob.add(iter.next());
        //        iter.remove();
        //        contador++;
        //    }

        1.5.0/docs/api/java/lang/String.html">String suffix = Globals.SYSTEM_EMAIL_CERTIFICATED_HOME_PAGE;
        if(suffix.startsWith("/"))
            suffix = suffix.substring(1);
        1.5.0/docs/api/java/lang/String.html">String url = Globals.SITE_URL.endsWith("/") ? Globals.SITE_URL + suffix : Globals.SITE_URL + "/" + suffix;

        EmailPersonalizedCertificated e =  sendEmailService.getMessageEmailAdulteredFromEmailIppCertificated(emailFrom,
                personFrom,
                subject,
                msg,
                userSession.getUser(),
                usersToConsume,
                url);

        e.setHtml(true);
        EMAILJobPersonalizedCertificated emailJob = new EMAILJobPersonalizedCertificated(e);
        JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id +  ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject  ,userSession);
        //}
        enviarComprovativoAoRemetente(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size());
        enviarComprovativoAAdministracao(id, msg, emailFrom, personFrom, subject, userSession, source,usersToConsume.size());
        return result.users;
    }

    private void enviarComprovativoAAdministracao(1.5.0/docs/api/java/lang/Long.html">Long id, 1.5.0/docs/api/java/lang/String.html">String msg, 1.5.0/docs/api/java/lang/String.html">String emailFrom, 1.5.0/docs/api/java/lang/String.html">String personFrom, 1.5.0/docs/api/java/lang/String.html">String subject, UserSession userSession, 1.5.0/docs/api/java/lang/String.html">String source,int sentTo)
    {


       Email e =  sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom,
                personFrom,
                subject + " (COMPROVATIVO PAE) ",
                "<u>Caros membros da administração este é um comprovativo de um email enviado pelo PAE pelo user: " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg,
               ConfigProperties.getListValuesByPrefix("admin.email"),
                userSession.getUser());

        e.setHtml(true);
        EMAILJob emailJob = new EMAILJob(e);
        JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id +  ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject  ,userSession);
    }

    private void enviarComprovativoAoRemetente(1.5.0/docs/api/java/lang/Long.html">Long id, 1.5.0/docs/api/java/lang/String.html">String msg, 1.5.0/docs/api/java/lang/String.html">String emailFrom, 1.5.0/docs/api/java/lang/String.html">String personFrom, 1.5.0/docs/api/java/lang/String.html">String subject, UserSession userSession, 1.5.0/docs/api/java/lang/String.html">String source,int sentTo)
    {
        Map<String,String> emailsComprovativos = new HashMap<String, String>();
        if(Email.validEmail(userSession.getUser().getEmail()))
            emailsComprovativos.put(userSession.getUser().getEmail(),"");
        if(Email.validEmail(userSession.getUser().getOutEmail()))
            emailsComprovativos.put(userSession.getUser().getOutEmail(),"");
        if(Email.validEmail(userSession.getUser().getPreferrefEmail()))
            emailsComprovativos.put(userSession.getUser().getPreferrefEmail(),"");
        List<String> comprovativos = new ArrayList<String>();
        comprovativos.addAll(emailsComprovativos.keySet());
        if(comprovativos.size() > 0)
        {
            Email e =  sendEmailService.getMessageEmailAdulteredFromEmailIpp(emailFrom,
                    personFrom,
                    subject + " (COMPROVATIVO PAE) ",
                    "<u>Olá " + userSession.getUser().getName() + " - Este é um comprovativo do seu envio de mensagem a " + sentTo + " Alunos</u><br/><br/>" + msg,
                    comprovativos,
                    userSession.getUser());

            e.setHtml(true);
            EMAILJob emailJob = new EMAILJob(e);
            JobScheduleService.getInstance().scheduleNow(emailJob,"Message Email (" + source + ":id " + id +  ") from " + userSession.getUsername() + " as " + personFrom + " - subject:" + subject  ,userSession);
        }
    }


}