Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1366 → Rev 1417

/branches/v3/impl/local-exampleNotInUse.properties
2,6 → 2,8
## Properties file to be used with ant build.xml
##
 
env.JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
 
##database configuration
database.host=localhost
database.port=3306
/branches/v3/impl/conf/language/MessageResources.properties
586,6 → 586,10
targetService.pt.estgp.estgweb.services.sigesimports.SincronizeLastYearCourseUnitProgramsService=Clonagem de Fichas Curriculares
targetService.pt.estgp.estgweb.services.sigesimports.GenerateCourseUnitProgramsService=Gerar PDF's Fichas Curriculares
targetService.pt.estgp.estgweb.services.questionarios.pedagogico.UpdateCoursesAndUnitsJobService=Selecção de Cursos Questionários
targetService.pt.estgp.estgweb.services.questionarios.pedagogico.AssignAnswersJobService=Atribuição de Respostas a Questionários
targetService.pt.estgp.estgweb.services.questionarios.pedagogico.TeachersAnswersProcessor=Atribuição de Respostas a Questionários de Docentes
targetService.pt.estgp.estgweb.services.questionarios.pedagogico.AnswersAlunosProcessor=Atribuição de Respostas a Questionários de Alunos
targetService.pt.estgp.estgweb.services.courses.CourseUnitsStatisticsJobService=Gerar Estatisticas Unidades Curriculares
 
 
weekday.Mon=Segundas
1783,6 → 1787,7
#
################################################################################
 
error.questionario.com.respostas.nao.pode.efetuar.op=Operação não permitida, Existem Respostas
error.questionario.p.without.group=Verifique a pergunta {0} nao tem grupo
error.questionario.group.without.p=Verifique o grupo {0} nao tem pergunta
warn.questionario.repeated.in.time=Aviso: Já existe um questionário ({0}) nesse ano e semestre na categoria histórica escolhida
1791,10 → 1796,16
questionario.year.semestre.ok=Ano e Semestre alterados com sucesso
questionarios.choose.courses=Selecção de Cursos para o Periodo {0} de {1}
questionarios.check.courses=Verificação de Questionarios/Tipologias de Cursos para o Periodo {0} de {1}
questionarios.assign.answers=Atribuição de Respostas para o Periodo {0} de {1}
questionarios.courses.start=Atribuição de Cursos Iniciada
questionarios.answers.start=Atribuição de Respostas Iniciada
questionario.tipologias.update.success=Tipologias atualizadas com sucesso
questionario.resposta=Resposta a Questionário
questionario.resposta.com.sucesso=A sua resposta foi submetida com sucesso ao nosso sistema de avaliação. Obrigado
 
questionario.respostas.grupos.1.2.3=Os grupos 1 2 e 3 são obrigatórios por favor responda às questões. Obrigado.
 
 
################################################################################
#
# REMINDERS MESSAGE RESOURCES
1892,10 → 1903,19
questionario.state.PROCESSING_OLAP=Gerando Cubos OLAP
questionario.state.OLAP=Cubos OLAP Terminados
 
questionario.state.START=Afetações Inicio
questionario.state.YEAR_SEMESTRE_ASSIGNED=Ano e Semestre Atribuido
questionario.state.ASSIGNING_COURSES=Atribuindo Cursos
questionario.state.COURSES_ASSIGNED=Cursos Atribuidos
questionario.state.ASSIGNING_ANSWERS=Atribuindo Respostas Candidatas
questionario.state.ANSWERS_ASSIGNED=Respostas Candidatas Atribuidas
questionario.state.FINNISHED_ANSWERS_GENERATING=Terminadas as Afetações
 
questionario.historydrive=Categoria Histórica
questionario.answerprocessor=Processador de Respostas
# SERVICE ZONE
survey.admin=Administração do Questionário {0}
survey.see=Acompanhar Questionário {0}
surveys=Questionários
survey.newEdit.survey=Formulário do Questionário
survey.create.survey=Criar Questionário
/branches/v3/impl/conf/WEB-INF/struts/tiles-pae-questionarios.xml
13,6 → 13,12
<put name="body" value="/user/questionarios/questionariosList.jsp"/>
</definition>
 
<definition name="page.pae.see.questionarios" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/topnavQuestionarioList.jsp"/>
<put name="body" value="/user/questionarios/questionariosSee.jsp"/>
</definition>
 
<definition name="page.pae.questionario.newEdit" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/topnavQuestionarioNewEdit.jsp"/>
26,6 → 32,13
</definition>
 
 
<definition name="page.pae.questionario.see" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/topnavQuestionarioSee.jsp"/>
<put name="body" value="/user/questionarios/pedagogicoEstudante/questionarioDashBoard.jsp"/>
</definition>
 
 
<!-- Modulo do Pedagogico Estudantes -->
<definition name="page.pae.questionario.courses.selection" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
37,5 → 50,18
<put name="topnav" value="/user/questionarios/pedagogicoEstudante/topnavQuestionarioPedagogicoCoursesCheck.jsp"/>
<put name="body" value="/user/questionarios/pedagogicoEstudante/pedagogicoEstudanteCoursesCheck.jsp"/>
</definition>
<definition name="page.pae.questionario.assign.answers" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/pedagogicoEstudante/topnavQuestionarioPedagogicoAssignAnswers.jsp"/>
<put name="body" value="/user/questionarios/pedagogicoEstudante/pedagogicoEstudanteAssignAnswers.jsp"/>
</definition>
 
 
<definition name="page.pae.questionario.resposta.questionario" extends="page.pae.separators.home">
<put name="separator" value="1" type="string"/>
<put name="topnav" value="/user/questionarios/topnavQuestionarioResposta.jsp"/>
<put name="body" value="/user/questionarios/respostaQuestionario.jsp"/>
</definition>
 
 
</tiles-definitions>
/branches/v3/impl/conf/WEB-INF/struts/struts-pagecontent.xml
24,10 → 24,12
 
<action path="/user/loapPageSeparatorDocuments" forward="page.separators.pagecontents"/>
 
<action path="/user/loadPage" forward="page.separators.pagecontents"/>
 
 
 
 
 
</action-mappings>
 
</struts-config>
/branches/v3/impl/conf/WEB-INF/struts/struts-pae-questionarios.xml
9,6 → 9,7
 
<form-beans>
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioForm" name="QuestionarioForm"/>
<form-bean type="pt.estgp.estgweb.web.form.questionarios.QuestionarioRespostaForm" name="QuestionarioRespostaForm"/>
</form-beans>
 
<global-exceptions>
32,10 → 33,14
 
<action path="/user/startNewQuestionario" forward="/user/questionariosPaeNoValidation.do?dispatch=startNew"/>
<action path="/user/listQuestionarios" forward="page.pae.questionario.list"/>
<action path="/user/seeQuestionarios" forward="page.pae.see.questionarios"/>
<action path="/user/adminQuestionario" forward="page.pae.questionario.admin"/>
<action path="/user/seeQuestionario" forward="page.pae.questionario.see"/>
<action path="/user/formQuestionariosPae" forward="/user/questionariosPaeNoValidation.do?dispatch=form"/>
<action path="/user/deleteQuestionario" forward="/user/questionariosPaeNoValidation.do?dispatch=deleteQuestionario"/>
<action path="/user/startRespostaQuestionario" forward="page.pae.questionario.resposta.questionario"/>
 
 
<action path="/user/questionariosPaeStartAfectacoes" forward="/user/questionariosPaeNoValidation.do?dispatch=startAfetacoes"/>
 
<action path="/user/questionariosPaeNoValidation"
74,10 → 79,22
<forward name="admin" path="page.pae.questionario.admin"/>
</action>
 
<action path="/user/questionariosPaeResposta"
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioYearSemestreController"
name="QuestionarioRespostaForm"
scope="request"
parameter="dispatch"
validate="true"
input="page.pae.questionario.resposta.questionario">
<forward name="success" path="page.pae.separators.home"/>
</action>
 
<!--%%%%%%%%%%%%%%%% Pedagogico Alunos Modulo %%%%%%%%%%%%%%%%%%%-->
<action path="/user/questionarioPedagogicoStartChooseCourses" forward="page.pae.questionario.courses.selection"/>
<action path="/user/questionarioPedagogicoStartCheckCourses" forward="page.pae.questionario.courses.check"/>
<action path="/user/questionarioPedagogicoStartAssignAnswers" forward="page.pae.questionario.assign.answers"/>
 
 
<action path="/user/questionariosPaeSelectCourses"
type="pt.estgp.estgweb.web.controllers.questionarios.QuestionarioCourseSelectionController"
name="QuestionarioForm"
87,9 → 104,11
input="page.pae.questionario.courses.selection">
<forward name="coursesSelection" path="page.pae.questionario.courses.selection"/>
<forward name="coursesCheck" path="page.pae.questionario.courses.check"/>
<forward name="assignAnswers" path="page.pae.questionario.assign.answers"/>
<forward name="admin" path="page.pae.questionario.admin"/>
</action>
 
 
<!--%%%%%%%%%%%%%%%% Pedagogico Alunos Modulo %%%%%%%%%%%%%%%%%%%-->
 
 
/branches/v3/impl/conf/WEB-INF/tlds/jomm.tld
4,7 → 4,7
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>jomm</shortname>
<uri>http://www.estgp.pt/</uri>
<uri>http://jomm.pt/</uri>
<tag>
<name>equalBeans</name>
<tagclass>jomm.web.tags.EqualBeansTag</tagclass>
/branches/v3/impl/conf/WEB-INF/tlds/baco.tld
3,8 → 3,8
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>estgweb</shortname>
<uri>http://www.estgp.pt/</uri>
<shortname>baco</shortname>
<uri>http://www.estgp.pt/baco/</uri>
<tag>
<name>isModuleOff</name>
<tagclass>pt.estgp.estgweb.web.tags.IsModuleOffTag</tagclass>
295,6 → 295,25
</attribute>
</tag>
<tag>
<name>instanceOf</name>
<tagclass>pt.estgp.estgweb.web.tags.InstanceOfTag</tagclass>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>clearPageContent</name>
<tagclass>pt.estgp.estgweb.web.tags.ClearPageContentTag</tagclass>
<attribute>
412,7 → 431,7
</tag>
 
<!--Name and property of UnitId-->
<!--<tag>
<tag>
<name>initCourseUnitEvaluationClearances</name>
<tagclass>pt.estgp.estgweb.web.tags.InitCourseUnitEvaluationClearancesTag</tagclass>
<attribute>
425,7 → 444,7
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>-->
</tag>
 
<tag>
<name>initClearances</name>
/branches/v3/impl/conf/WEB-INF/web.xml
4,13 → 4,17
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
 
<listener>
<!--<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
 
-->
<filter>
<filter-name>CacheControlFilter</filter-name>
<filter-class>pt.estgp.estgweb.web.filters.CacheControlFilter</filter-class>
</filter>
<filter>
<filter-name>UserRoleProxy</filter-name>
<filter-class>pt.estgp.estgweb.web.filters.UserRoleProxy</filter-class>
</filter>
63,6 → 67,10
<filter-class>pt.estgp.estgweb.web.filters.CertificateAuthenticationFilter</filter-class>
</filter>
 
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- THIS MUST BE THE FIRST FILTER IN CHAIN-->
<filter-mapping>
<filter-name>Set-Character-Encoding</filter-name>
99,6 → 107,10
</filter-mapping>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/proxy/*/ionline/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/dir/utilsIntranet/*</url-pattern>
</filter-mapping>
<filter-mapping>
/branches/v3/impl/conf/app.properties
147,7 → 147,7
ionline.use.default.credentials.to.updates.and.deletes=false
ionline.use.default.credentials.to.read=false
ionline.use.default.credentials.to.read.if.user.fail.when.authenticated=true
ionline.use.default.credentials.to.read.if.user.fail.when.not.authenticated=true
ionline.use.default.credentials.to.read.if.user.fail.when.not.authenticated=false
##ESTA CONFIGURACAO ESTA FUNCIONAL
## Ver nos Ficheiros FtpService metodo run
## Ver LayoutController
165,7 → 165,7
server.grupos.start.path=/grupos
grupos.pass=ftppublic
grupos.user=ftppublic
grupos.use.default.credentials.to.read=true
grupos.use.default.credentials.to.read=false
#Irrelevantes vai usar sempre as defaults
grupos.use.default.credentials.to.read.if.user.fail.when.authenticated=true
grupos.use.default.credentials.to.read.if.user.fail.when.not.authenticated=true
674,6 → 674,8
 
 
 
#if set url in baco separators will allays be enabled
#mode.pae.enabled=false
#system.theme=estg
#system.redirections.policy.index.welcome=welcome
#system.redirections.policy.authentication.action=/authenticate.do
682,18 → 684,21
#authentication.policy.password.msg.key=password
 
#system.theme=ipp
#mode.pae.enabled=true
#system.redirections.policy.index.welcome=welcomePedagogicSurvey
#system.redirections.policy.authentication.action=/authenticatePae.do
#authentication.policy.service=AuthenticatePae
#authentication.policy.username.msg.key=username.pae
#authentication.policy.password.msg.key=password.pae
 
mode.pae.enabled=@mode.pae.enabled@
system.theme=@system.theme@
authentication.policy.service=@authentication.policy.service@
authentication.policy.username.msg.key=@authentication.policy.username.msg.key@
authentication.policy.password.msg.key=@authentication.policy.password.msg.key@
system.redirections.policy.index.welcome=@system.redirections.policy.index.welcome@
system.redirections.policy.authentication.action=@system.redirections.policy.authentication.action@
system.redirections.policy.authentication.logout.action=@system.redirections.policy.authentication.logout.action@
 
 
###AQUI PODEMOS USAR OU TRA INTRANET OU OUTRO PORTAL PUBLICO
/branches/v3/impl/conf/directories/style1.xsl
428,9 → 428,10
<xsl:when test="./@ftpDirectory='true'">
<tr class="dir">
<td colspan="3" >
<img>
<!--<img>
<xsl:attribute name="src"><xsl:value-of select="$contextPath"/>/imgs/folder.gif</xsl:attribute>
</img>
</img>-->
<span class="glyphicon glyphicon-folder-open"> </span>
<xsl:text> </xsl:text>
<xsl:apply-templates select="." mode="link"/>
</td>
/branches/v3/impl/conf/directories/styleSlideMenu.xsl
410,9 → 410,10
<xsl:when test="./@ftpDirectory='true'">
<tr class="dir">
<td colspan="3" >
<img>
<!--<img>
<xsl:attribute name="src"><xsl:value-of select="$contextPath"/>/imgs/folder.gif</xsl:attribute>
</img>
</img>-->
<span class="glyphicon glyphicon-folder-open"> </span>
<xsl:text> </xsl:text>
<xsl:apply-templates select="." mode="link"/>
</td>
/branches/v3/impl/conf/berserk/sd.xml
2642,6 → 2642,61
 
 
<service>
<name>QuestionarioPutAssignedAnswers</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>putAssignedAnswers</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
<service>
<name>QuestionarioRevertAssignationDetails</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>revertAssignationDetails</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
<service>
<name>QuestionarioStartProcessement</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>startProcessement</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
<service>
<name>QuestionarioStopProcessement</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>stopProcessement</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
 
 
 
<service>
<name>RunJobSelectCourses</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.pedagogico.UpdateCoursesAndUnitsJobService</implementationClass>
<description></description>
2655,7 → 2710,22
</filterChains>
</service>
 
 
<service>
<name>RunJobAssignAnswers</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.pedagogico.AssignAnswersJobService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>runJobAssignAnswers</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
 
<service>
<name>QuestionarioRevertAllAssignmentsPedagogico</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.pedagogico.UpdateCoursesAndUnitsJobService</implementationClass>
<description></description>
2696,12 → 2766,34
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
<chain name="AdminsOrQuestionarioUsers"/>
<!--<chain name="AdminsOrQuestionarioUsers"/> E verificado no servico-->
<chain name="QuestionarioClearancesPre"/>
</filterChains>
</service>
<service>
<name>QuestionarioSalvarResposta</name>
<implementationClass>pt.estgp.estgweb.services.questionarios.QuestionariosService</implementationClass>
<description></description>
<isTransactional>true</isTransactional>
<defaultMethod>salvarResposta</defaultMethod>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
<chain name="AuthenticatedUsers"/>
</filterChains>
</service>
 
 
<service>
<name>SalvarFicheiro</name>
<implementationClass>pt.estgp.estgweb.services.paginasseccoes.SalvarFicheiro</implementationClass>
<description>Salvar Ficheiro</description>
<isTransactional>true</isTransactional>
<filterChains>
<chain name="Logger"/>
<chain name="Session"/>
</filterChains>
</service>
 
 
 
/branches/v3/impl/conf/berserk/fcd.xml
495,7 → 495,7
</filterChain>
<filterChain>
<name>AdminsOrQuestionarioUsers</name>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("admin") || RoleUsers("questionarios.admin") || RoleUsers("questionarios.tipologias.admin") || RoleUsers("questionarios.atribuicoes.admin"))</expression>
<expression>AuthenticatedUsers &amp;&amp; (RoleUsers("admin") || RoleUsers("questionarios.admin") || RoleUsers("questionarios.tipologias.admin") || RoleUsers("questionarios.atribuicoes.admin") || RoleUsers("user.role.questionarios.atribuicoes.check_teachers"))</expression>
<description>Admins Control Chain</description>
<invocationTiming>1</invocationTiming>
<filterClass>pt.estgp.estgweb.filters.chains.AdminControlFilter</filterClass>
/branches/v3/impl/src/java/pt/estgp/estgweb/Globals.java
425,11 → 425,19
public static final String AUTHENTICATE_SERVICE_PASSWORD_KEY = ConfigProperties.getProperty("authentication.policy.password.msg.key");
public static final String SYSTEM_REDIRECTIONS_POLICY_INDEX_WELCOME = ConfigProperties.getProperty("system.redirections.policy.index.welcome");
public static final String SYSTEM_REDIRECTIONS_POLICY_AUTHENTICATION_ACTION = ConfigProperties.getProperty("system.redirections.policy.authentication.action");
public static final String SYSTEM_REDIRECTIONS_POLICY_AUTHENTICATION_LOGOUT_ACTION = ConfigProperties.getProperty("system.redirections.policy.authentication.logout.action");
 
 
 
public static final boolean MODO_PAE_ENABLED = ConfigProperties.getBooleanProperty("mode.pae.enabled");
public static final String QUESTIONARIOS_GERAIS = "questionarios.gerais";
public static final String QUESTIONARIOS_ADMIN = "questionarios.admin";
public static final String QUESTIONARIOS_ASSIGNEMENTS_ADMIN = "questionarios.atribuicoes.admin";
public static final String QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN = "questionarios.atribuicoes.admin";
public static final String QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN = "questionarios.atribuicoes.check_teachers";
public static final String QUESTIONARIOS_TIPOLOGIAS_ADMIN = "questionarios.tipologias.admin";
 
public static final String ROLE_PRESIDENTE_CONCELHO_PEDAGOGICO = "pedagogicCouncil.president";
 
public static final boolean USE_XSL_CACHE =ConfigProperties.getBooleanProperty("xsl.use.cache");
 
 
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courseunits/CreateCourseUnitAdminService.java
48,7 → 48,7
}
cUV.persistViewAdminInObject(courseUnit);
 
courseUnit.setInstitutionCode("" + DaoFactory.getConfigurationDaoImpl().getSigesInstitutionCode());
 
//por o curso
//por os profs
//por alunos
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportStudentsService.java
59,6 → 59,7
int studentsChangeBI = 0;
int unitsAddedToStudents = 0;
int alunosErasmusCadeirasEcontradas = 0;
int alunosSemTurmaParaAUnidades = 0;
int turmaMoreThanOneRegularCourse = 0;
int unidadesProcuradasNumCursoAleatorio = 0;
List<String> turmasMoreThanOneCourse = new ArrayList<String>();
67,6 → 68,8
int estudantesComCadeirasSemTurma = 0;
int turmasComCodigoNullRemovidas = 0;
int unidadesSoComAlunosExtra = 0;
int turmasVindasANullDoSIGES = 0;
int turmasVindasANullDoSIGESEncontradasNoutroCampo = 0;
 
 
 
102,6 → 105,8
turmasComCodigoNullRemovidas = 0;
unidadesSoComAlunosExtra = 0;
unidadesProcuradasNumCursoAleatorio = 0;
alunosSemTurmaParaAUnidades = 0;
turmasVindasANullDoSIGES = 0;
ImportCourseService.resetCourseYearTurmaPolicy();
 
 
162,6 → 167,9
newUser = true;
}
 
if(alunoSiges.getCodigo() == 11211)
System.out.println("Aqui");
 
persist(alunoSiges, s, newUser,year,institutionCode,activeImportYearParaVerificacaoDePropinasEmDia,logMessages,service);
 
if(studentComUnidadesRepetidas)
263,7 → 271,19
serviceLogInfo("#Units not Removed because localy added: " + unitsLocalAddedNotRemoved);
serviceLogInfo("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded);
serviceLogInfo("#Alunos com Unidades repetidas: " + unitsRepeated);
serviceLogInfo("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas);
serviceLogWarn("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas);
if(turmasVindasANullDoSIGES > 0)
{
serviceLogError("######!!!!!Turmas a NULL NO SIGES " + turmasVindasANullDoSIGES + " - POSSIVEL CAMPO DE TURMA diferente de TURMA_T na tabela T_INSCR, procure no LOG pela frase: (turmasVindasANullDoSIGES) ");
}
if(turmasVindasANullDoSIGESEncontradasNoutroCampo > 0)
{
serviceLogInfo("######!!!!!Foram no entanto encontradas noutro campo P L TP O C S E: " + turmasVindasANullDoSIGESEncontradasNoutroCampo + " turmas ver mais info no LOG");
}
if(alunosSemTurmaParaAUnidades > 0)
{
serviceLogError("######!!!!!Alunos com Unidade mas sem Turma: " + alunosSemTurmaParaAUnidades + " -> verificar situação junto da administração de software do PAE - procure no LOG pela frase:(alunosSemTurmaParaAUnidades)");
}
if(unidadesProcuradasNumCursoAleatorio > 0)
serviceLogInfo("######!!!!!Unidades atribuidas com curso aleatoriamente escolhido derivado a duvidas: " + unidadesProcuradasNumCursoAleatorio + " (procurar por \"tem mais de um curso vamos procurar num qualquer\")");
if(turmaMoreThanOneRegularCourse > 0)
325,6 → 345,18
logger.info("#Units not Added because localy removed: " + unitsLocallyRemovedNotAdded);
logger.info("#Alunos com Unidades repetidas: " + unitsRepeated);
logger.info("#ERASMUS Sum Subscriptions Replaced: " + alunosErasmusCadeirasEcontradas);
if(turmasVindasANullDoSIGES > 0)
{
logger.error("######!!!!!Turmas a NULL NO SIGES " + turmasVindasANullDoSIGES + " - POSSIVEL CAMPO DE TURMA diferente de TURMA_T na tabela T_INSCR procure no LOG pela frase: (turmasVindasANullDoSIGES) ");
}
if(turmasVindasANullDoSIGESEncontradasNoutroCampo > 0)
{
logger.info("######!!!!!Foram no entanto encontradas noutro campo P L TP O C S E: " + turmasVindasANullDoSIGESEncontradasNoutroCampo + " turmas ver mais info no LOG");
}
if(alunosSemTurmaParaAUnidades > 0)
{
logger.error("######!!!!!Alunos com Unidade mas sem Turma: " + alunosSemTurmaParaAUnidades + " -> verificar situação junto da administração de software do PAE - procure no LOG pela frase:(alunosSemTurmaParaAUnidades)");
}
if(unidadesProcuradasNumCursoAleatorio > 0)
logger.warn("######!!!!!Unidades atribuidas com curso aleatoriamente escolhido derivado a duvidas: " + unidadesProcuradasNumCursoAleatorio + " (procurar por \"tem mais de um curso vamos procurar num qualquer\")");
 
510,16 → 542,18
"where courseunit.importYear=\"" + year + "\" and courseunit.institutionCode = \"" + institutionCode + "\" and turmas.studentId is null ");
ResultSet rs = ps.executeQuery();
List<Integer> longs = new ArrayList<Integer>();
//alunosSemTurmaParaAUnidades = longs.size();
while(rs.next())
{
longs.add(rs.getInt("sigesCode"));
}
alunosSemTurmaParaAUnidades = longs.size();
rs.close();
ps.close();
 
if(longs.size() > 0)
{
String msgS = "Existem estudantes no BACO com unidades sem turma respectiva ano: " + year + " institution:" + institutionCode + " possiveis adicionados manualmente, confirmar";
String msgS = "(alunosSemTurmaParaAUnidades) ATENÇÃO_ Existem estudantes no BACO com unidades sem turma respectiva ano: " + year + " institution:" + institutionCode + " possiveis adicionados manualmente, confirmar";
serviceLogWarn(msgS);
logger.warn(msgS);
msgS = "";
568,8 → 602,8
estudantesDesaparecidosDoSigesNesteAno++;
Student s = DaoFactory.getStudentDaoImpl().loadBySigesCode(c);
StudentImpl studentImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(s);
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl);
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>());
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl,institutionCode);
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>(),institutionCode);
}
}
else
835,8 → 869,8
serviceLogWarn("ATENTION STUDENT WITH ZERO UNITS: codigo " + alunoSiges.getCodigo());
logger.warn("ATENTION STUDENT WITH ZERO UNITS: codigo " + alunoSiges.getCodigo());
StudentImpl studentImpl = (StudentImpl) DaoFactory.getStudentDaoImpl().narrow(student);
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl);
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>());
removerUnidadesQueDesapareceramNoSiges(year, new HashSet<CourseUnit>(), studentImpl,institutionCode);
consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>(),institutionCode);
}
else
{
866,7 → 900,7
 
//PASSO 4 - Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente
//turmas separadas : Seguro a verificação de existencia é feita pelo id da unidade curricular no baco nas verificacoes para remocoes
removerUnidadesQueDesapareceramNoSiges(year, unitsFromSigesPersistentInBaco, studentImpl);
removerUnidadesQueDesapareceramNoSiges(year, unitsFromSigesPersistentInBaco, studentImpl,institutionCode);
 
//PASSO 5 - Consistir Turmas do Aluno com novas cadeiras - Turmas do aluno sem cadeira correspondente sao apagadas, novas sao adicionadas
//Este metodo vai necessitar de obter as turmas das unidades que vieram do SIGES atraves do mapa map_CourseUnit_x_Turma
874,11 → 908,11
//em termos de relacoes com turmas na classe CourseUnitTurma
//deste modo se alguma unidade foi adicionada localmente poderá nao ser removida no PASSO 4 e nao havera correspondente
//para a turma nesta tabela map_CourseUnit_x_Turma logo essas turmas nessas unidades nao serao mechidas, um aviso e emitido
consistirTurmasAluno(studentImpl, year, map_CourseUnit_x_Turma);
consistirTurmasAluno(studentImpl, year, map_CourseUnit_x_Turma,institutionCode);
}
}
 
private void consistirTurmasAluno(StudentImpl student, String year, Map<CourseUnit, String> map_CourseUnit_x_Turma) {
private void consistirTurmasAluno(StudentImpl student, String year, Map<CourseUnit, String> map_CourseUnit_x_Turma, int institutionCode) {
//PASSO 1 Para cada cadeira onde o aluno se encontra inscrito
// obter a turma onde o aluno esta' colocado, se nao existir criar e afectar a turma
//PASSO 2 Colocar o aluno nessa turma se ele ainda lá nao estiver
890,15 → 924,13
Map<CourseUnitTurma,Boolean> turmasAfectadas = new HashMap<CourseUnitTurma,Boolean>();
for(CourseUnit cu: student.getSubscribedUnits())
{
if(cu.getImportYear().equals(year))
if(cu.getImportYear().equals(year) && cu.getInstitutionCode().equals(""+institutionCode))
{
if(cu.getTurmas() == null)
{
cu.setTurmas(new HashSet<CourseUnitTurma>());
}
 
// TODO O CODIGO DA TURMA AQUI VEM ANUL NUM CASO QUALQUER ESQUISITO VER O QUE E NO RUN
 
String codigoTurma = map_CourseUnit_x_Turma.get(cu);
if(student.isLocalUnit(cu) && codigoTurma == null)
{
906,14 → 938,14
//mas foi mantida porque foi adicionada manualmente
//deste modo usaremos a turma antiga
//e nao afetaremos uma turma nao afetada, esta nao sera verificada
String msg = "Atenção turma com código null nao sera verificada e' local unit:" + cu.getCode() + " aluno:" + student.getSigesCode();
String msg = "Atenção turma não encontrada para uma unidade do aluno, A unidade não foi importada do SIGES logo não há turma mas nao sera verificada porque e' uma local unit:" + cu.getCode() + " aluno:" + student.getSigesCode();
serviceLogInfo(msg);
logger.info(msg);
}
else if(codigoTurma == null)
{
//Este caso nao deverá acontecer porque no PASSO 4 da persistencia apenas nao se removem as adicionadas localmente
String msg = "Atenção turma com código null e nao e' local unit:" + cu.getCode() + " aluno:" + student.getSigesCode();
String msg = "Atenção turma não encontrada para uma unidade do aluno. A Unidade não foi importada do SIGES ou vinha com turma NULL, logo nao se sabe a turma do aluno para escolher, e não e' uma unidade LOCALMENTE ADICIONADA logo devia vir do SIGES ou ter sido removida - unit:" + cu.getCode() + " aluno:" + student.getSigesCode();
serviceLogError(msg);
logger.error(msg);
}
943,7 → 975,7
while(iter.hasNext())
{
CourseUnitTurmaImpl turma = iter.next();
if(turma.getCourseUnit().getImportYear().equals(year))
if(turma.getCourseUnit().getImportYear().equals(year) && turma.getCourseUnit().getInstitutionCode().equals(institutionCode+""))
{
if(student.isLocalUnit(turma.getCourseUnit()) && turmasAfectadas.get(turma) == null)
{
1006,12 → 1038,12
* @param unitsFromSigesPersistentInBaco
* @param student
*/
private void removerUnidadesQueDesapareceramNoSiges(String year, Set<CourseUnit> unitsFromSigesPersistentInBaco, StudentImpl student) {
private void removerUnidadesQueDesapareceramNoSiges(String year, Set<CourseUnit> unitsFromSigesPersistentInBaco, StudentImpl student,int institutionCode) {
Iterator<CourseUnit> iterNowUnits = student.getSubscribedUnits().iterator();
while(iterNowUnits.hasNext())
{
CourseUnit cUNow = iterNowUnits.next();
if(cUNow.getImportYear().equals(year))
if(cUNow.getImportYear().equals(year) && cUNow.getInstitutionCode().equals(""+institutionCode))
//Apenas tentamos apagar as unidades do ano corrente.
//Este servico trabalha com unidades importadas do ano que e passado como argumento
//Se importamos unidades desse ano, as dos outros anos nao vem na lista, logo
1104,6 → 1136,22
Set<CourseUnit> unitsFromSigesPersistentInBaco = new HashSet<CourseUnit>();
for (Disciplina disciplina : alunoSiges.getDisciplinasInscrito())
{
if(disciplina.getCdTurma() == null)
{
turmasVindasANullDoSIGES++;
String msg = "(turmasVindasANullDoSIGES) ATENÇÃO ERRO: Existe uma turma a null numa inscrição vinda do SIGES, procurar razão: unidade:" + disciplina.getCodigo() + " estudante:" + student.getSigesCode() + " possivelmente campo de turma em uso é errado, Vamos tentar usar o campo de outra TURMA P, L, TP, P, O, C, E, S";
serviceLogWarn(msg);
logger.warn(msg);
if(disciplina.getOutraTurma() != null)
{
turmasVindasANullDoSIGESEncontradasNoutroCampo++;
disciplina.setCdTurma(disciplina.getOutraTurma());
msg = "Encontrada Outra Turma: Atenção vai ser usada a turma " + disciplina.getOutraTurmaCode();
serviceLogWarn(msg);
logger.warn(msg);
}
}
 
boolean cursoFicticio = isCursoFicticio(disciplina.getCodigoCurso().intValue());
Integer codigoDoCurso = disciplina.getCodigoCurso().intValue();
 
1214,7 → 1262,8
{
for(CourseUnit found: courseUnits)
{
map_CourseUnit_x_Turma.put(found,disciplina.getCdTurma());
String turma = disciplina.getCdTurma();
map_CourseUnit_x_Turma.put(found, turma);
}
 
unitsFromSigesPersistentInBaco.addAll(courseUnits);
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/AlunoDao.java
133,8 → 133,13
" CSE.T_INSCRI.CD_TURMA_T AS CD_TURMA, " +
" CSE.T_INSCRI.CD_TURMA_P, " +
" CSE.T_INSCRI.CD_TURMA_L, " +
" CSE.T_INSCRI.CD_TURMA_TP " +
" CSE.T_INSCRI.CD_TURMA_TP, " +
" CSE.T_INSCRI.CD_TURMA_S, " +
" CSE.T_INSCRI.CD_TURMA_C, " +
" CSE.T_INSCRI.CD_TURMA_O, " +
" CSE.T_INSCRI.CD_TURMA_E " +
" FROM CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP = CSE.T_TBDISCIP.CD_DISCIP" +
//" INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO " +
" WHERE CSE.T_INSCRI.CD_ALUNO = " + codigo + " " +
" AND" +
" CSE.T_TBDISCIP.CD_INSTITUIC= " + codigoInstituicao + " AND " +
160,6 → 165,41
d.cdTipoDisciplina = getDecimal("CD_TIPDIS", aReader);
d.cdDuracao = getString("CD_DURACAO", aReader);
d.cdTurma = getString("CD_TURMA", aReader);
if(getString("CD_TURMA_P", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_P", aReader);
d.outraTurmaCode = "P";
}
else if(getString("CD_TURMA_L", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_L", aReader);
d.outraTurmaCode = "L";
}
else if(getString("CD_TURMA_TP", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_TP", aReader);
d.outraTurmaCode = "TP";
}
else if(getString("CD_TURMA_S", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_S", aReader);
d.outraTurmaCode = "S";
}
else if(getString("CD_TURMA_C", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_C", aReader);
d.outraTurmaCode = "C";
}
else if(getString("CD_TURMA_O", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_O", aReader);
d.outraTurmaCode = "O";
}
else if(getString("CD_TURMA_E", aReader) != null)
{
d.outraTurma = getString("CD_TURMA_E", aReader);
d.outraTurmaCode = "E";
}
disciplinas.add(d);
}
//close the reader
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/dao/DisciplinaDao.java
87,7 → 87,7
"CSE.T_INSCRI INNER JOIN CSE.T_TBDISCIP ON CSE.T_INSCRI.CD_DISCIP=CSE.T_TBDISCIP.CD_DISCIP " +
"INNER JOIN CSE.T_CURSOS ON CSE.T_CURSOS.CD_CURSO = CSE.T_INSCRI.CD_CURSO " +
"WHERE "+
" (((((CSE.T_TBDISCIP.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "')) AND CSE.T_INSCRI.CD_DURACAO = '" + semestre + "') AND ((CSE.T_INSCRI.CD_STATUS)<>5) AND (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1))";
" (((((CSE.T_CURSOS.CD_INSTITUIC)=" + codigoInstituicao + ") AND ((CSE.T_INSCRI.CD_LECTIVO)='" + ano + "')) AND CSE.T_INSCRI.CD_DURACAO = '" + semestre + "') AND ((CSE.T_INSCRI.CD_STATUS)<>5) AND (CSE.T_INSCRI.CD_TIPDIS = 2 OR CSE.T_INSCRI.CD_TIPDIS = 1))";
/**\//SO QUEREMOS 1 e 2
* eliminamos tb inscricoes nao regulares STATUS <> 5</>
* As restantes 5 e 6 so servem para depois procurar a Real para atribuir ao aluno
270,6 → 270,12
 
/**
* So muda do de cima porque usa a entrada TipoDeOcupação do Horario de Trabalho
* Os códigos que vêm desta query são Tipos de Ocupação necessitam de mapeamento
* ver no app.properties
*
* por vezes vem o código 1 não deve ser confundido com as teóricas que são aulas esse código não é usado no mapeamento
* é descartado por ser pouco descriminatório e não estar na lista dos possiveis
* de sumariar
* @param ano
* @param semestre
* @param codigoCurso
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/oracle/domain/Disciplina.java
13,6 → 13,8
public String cdDuracao;
public Integer codigoInstituicao;
public String cdTurma;
public String outraTurma;
public String outraTurmaCode;
 
 
public String nome;
183,6 → 185,22
this.grauCurso = grauCurso;
}
 
public String getOutraTurma() {
return outraTurma;
}
 
public void setOutraTurma(String outraTurma) {
this.outraTurma = outraTurma;
}
 
public String getOutraTurmaCode() {
return outraTurmaCode;
}
 
public void setOutraTurmaCode(String outraTurmaCode) {
this.outraTurmaCode = outraTurmaCode;
}
 
@Override
public String toString() {
return "Disciplina{" +
192,6 → 210,7
", cdDuracao='" + cdDuracao + '\'' +
", codigoInstituicao=" + codigoInstituicao +
", cdTurma='" + cdTurma + '\'' +
", cdOutraTurma='" + outraTurma + '\'' +
", nome='" + nome + '\'' +
", nomeCurso='" + nomeCurso + '\'' +
", grauCurso='" + grauCurso + '\'' +
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportTeachersService.java
152,7 → 152,7
 
try
{
persist(d, t, newUser,year,logMessages);
persist(d, t, newUser,year,logMessages,institutionCode);
}
catch (Exception e)
{
283,7 → 283,7
* @param institutionCode
* @param codigos
*/
private void removerUnidadesDosDesaparecidosDoSiges(String year, int institutionCode, List<Integer> codigos) {
private void removerUnidadesDosDesaparecidosDoSiges(String year, int institutionCode, List<Integer> codigos) {
String msgS;
List<Integer> codesInBaco = DaoFactory.getTeacherDaoImpl().findAllSigesCodesYear(year,institutionCode);
codesInBaco.removeAll(codigos);
305,7 → 305,7
professoresDesaparecidosDoSigesNesteAno++;
Teacher t = DaoFactory.getTeacherDaoImpl().loadBySigesCode(c);
TeacherImpl teacherImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(t);
removerUnidadesQueDesapareceramNoSiges(year, teacherImpl, new HashSet<CourseUnit>());
removerUnidadesQueDesapareceramNoSiges(year, teacherImpl, new HashSet<CourseUnit>(),institutionCode);
//consistirTurmasAluno(studentImpl, year, new HashMap<CourseUnit, String>());
}
}
435,7 → 435,7
* @param teacher teacher
* @throws Exception .
*/
private void persist(Docente teacherSiges, Teacher teacher, boolean newUser, String year,DefaultLogMessages logmessages) throws Exception
private void persist(Docente teacherSiges, Teacher teacher, boolean newUser, String year,DefaultLogMessages logmessages,int institutionCode) throws Exception
{
String msgS;
try
451,7 → 451,7
/******Logging****/
 
TeacherImpl tImpl = (TeacherImpl) DaoFactory.getTeacherDaoImpl().narrow(teacher);
removerUnidadesQueDesapareceramNoSiges(year, tImpl, new HashSet<CourseUnit>());
removerUnidadesQueDesapareceramNoSiges(year, tImpl, new HashSet<CourseUnit>(),institutionCode);
}
else
{
471,7 → 471,7
//PASSO 3
adicionarCadeirasNovasAoDocente(tImpl, unitsFromSigesPersistentInBaco);
//PASSO 4
removerUnidadesQueDesapareceramNoSiges(year, tImpl, unitsFromSigesPersistentInBaco);
removerUnidadesQueDesapareceramNoSiges(year, tImpl, unitsFromSigesPersistentInBaco,institutionCode);
 
}
 
485,14 → 485,14
List<String> arguments = new ArrayList<String>();
String cause = e.getCause() == null ? "" : e.getCause().toString();
arguments.add((e.toString() + "\n" + cause).replace("\n","<br/>"));
Email email = new Email("Erro de importa��o de professores",emails,"baco@estgp.pt","messageToAdmin_pt.txt",arguments);
Email email = new Email("Erro de importacao de professores",emails,"baco@estgp.pt","messageToAdmin_pt.txt",arguments);
new SendEmailService().sendEmail(email);
throw e;
}
 
}
 
private void removerUnidadesQueDesapareceramNoSiges(String year, Teacher teacher, Set<CourseUnit> units)
private void removerUnidadesQueDesapareceramNoSiges(String year, Teacher teacher, Set<CourseUnit> units,int institutionCode)
{
//Remover unidades deste ano que nao vem do SIGES e que nao foram adicionadas localmente
Iterator<CourseUnit> iterNowUnits = teacher.getTeachedUnits().iterator();
500,7 → 500,7
while(iterNowUnits.hasNext())
{
CourseUnit cUNow = iterNowUnits.next();
if(cUNow.getImportYear().equals(year))
if(cUNow.getImportYear().equals(year) && cUNow.getInstitutionCode().equals(institutionCode+""))
{
//Apenas tentamos apagar as unidades do ano corrente.
//Este servico trabalha com unidades importadas do ano que e passado como argumento
672,13 → 672,20
//na criacao de questionarios é natural que falhe alguma coisa por haver aqui unidades a mais
//por isso devera ser ai feita a verificacao destes casos
boolean separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(disciplina.getCodigoCurso(), year, logmessages, this);
/*
este procedimento requer que a turma venha do siges, neste momento nao vem
if(separateTurmas)
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo(),disciplina.getCdTurma());
else
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
*/
 
//este procedimento requer que a turma venha do siges, neste momento nao vem
//Este procedimento foi colocado por mim a 6 de Junho para que os questionarios tenham os profs certos nas disciplinas
//e não em duplicado, daqui para baixo o código nunca compara com separateTurmas, o mapa apenas é acedido aqui
//porque daqui para baixo uma vez carregadas as turmas persistentes do SIGES apenas o id é comparado para ver se fica ou se é removida
//Vamos apenas ter de verificar que o código de turma vem na associação do docente à turma.
//NAO DA A TURMA NUNCA VEM DO SIGENS PARA NAO DUPLICAR TURMAS NO JOIN
//RESOVE-SE NA ATRIBUICAO DE RESPOSTAS DOS QUESTINARIOS SO SE METE O QUE TEM SUMARIO SE O CURSO FOR DE TURMAS
//SEPARADAS
//if(separateTurmas)
// loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUniqueWithTurma("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo(),disciplina.getCdTurma());
//else
// loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
 
loadedunits = DaoFactory.getCourseUnitDaoImpl().loadBySigesCodeUnique("" + disciplina.getCodigo(), "" + disciplina.getCodigoCurso(), "" + disciplina.getCdDuracao(), "" + disciplina.getCdLectivo());
/*******Logging************************/
if(loadedunits.size() > 1 && !separateTurmas)
/branches/v3/impl/src/java/pt/estgp/estgweb/services/sigesimports/ImportCourseService.java
257,7 → 257,7
* @param logMessages
* @return
*/
protected static boolean loadCourseYearTurmasPolicy(int codigoDoCurso,String year,DefaultLogMessages logMessages,ServiceJob service) {
public static boolean loadCourseYearTurmasPolicy(int codigoDoCurso,String year,DefaultLogMessages logMessages,ServiceJob service) {
 
Boolean turmasSeparated = courseYearTurmasPolicy.get(codigoDoCurso + "-" + year);
if(turmasSeparated != null)
432,7 → 432,7
else
c.setCdTurma("");
c.setName(d.getNome());
c.setInstitutionCode("" + institutionCode);
c.setInstitutionCode("" + d.getCodigoInstituicao());//MUDADO AQUI
c.setCode("" + d.getCodigo().intValue());
c.setCourseCode("" + d.getCodigoCurso());
c.setCourseName("" + d.getNomeCurso());
/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java
154,6 → 154,7
private static final String INIT_ROLES = "user.role.all=Todos\n" +
"user.role.admin=Administrador\n" +
"user.role.student=Estudante\n" +
"user.role.comissao.avaliacao.desempenho.docente=Comissão de Avaliação de Desempenho Docente\n" +
"user.role.erasmusStudent=Estudante de Erasmus\n" +
"user.role.teacher=Professor\n" +
"user.role.teacher.eg=Professor da Área de Engenharia\n" +
172,9 → 173,11
"user.role.worker=Funcionário\n" +
"user.role.invited=Convidado\n" +
"user.role.services=Serviços\n" +
"user.role.questionarios.tipologias.admin=Questionarios Tipologias\n" +
"user.role.questionarios.atribuicoes.admin=Questionarios Atribuições\n" +
"user.role.questionarios.admin=Administração de Questionários\n" +
"user.role.questionarios.tipologias.admin=Questionarios - Verificação de Tipologias\n" +
"user.role.questionarios.atribuicoes.admin=Questionarios - Atribuições de Cursos\n" +
"user.role.questionarios.atribuicoes.check_teachers=Questionarios - Verificação de Professores\n" +
"user.role.questionarios.admin=Questionários - Super Administrador\n" +
"user.role.questionarios.gerais=Questionários - Permissões Básicas (necessário)\n" +
"user.role.servicesPrograms=Gestão de Programas Curriculares\n" +
"user.role.administrativeCouncil=Membro da Direcção\n" +
"user.role.administrativeCouncil.director=Director\n" +
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/TeachersAnswersProcessor.java
New file
0,0 → 1,91
package pt.estgp.estgweb.services.questionarios.pedagogico;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.QuestionarioImpl;
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;
 
/**
* Created by jorgemachado on 28/05/16.
*/
public class TeachersAnswersProcessor extends ServiceJob {
 
private static Logger logger = Logger.getLogger(TeachersAnswersProcessor.class);
/**
*
* @return
* @throws Throwable
*/
@Override
protected ILogMessages runJobServiceTask() throws Throwable
{
 
DefaultLogMessages logMessages = new DefaultLogMessages();
long questionarioId = 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**/
String msg = "Starting running service answers generation for questionario: " + q.getId() + " - " + q.getiAnswersProcessorClass().getTitle();
serviceLogInfo(msg);
logger.info(msg);
/**logging**/
 
/*List<String> newCourseCodesList = new ArrayList<String>();
int count = 0;
int totalCourses = coursesList.length;
for(String courseStrId: coursesList)
{
count++;*/
try{
/*Long courseLong = Long.parseLong(courseStrId);
/** logging **/
//msg = "Loading Course BACO ID: " + courseStrId;
//serviceLogInfo(msg);
//logger.info(msg);
/** logging **/
 
 
 
/** COMMIT OPERATION **/
//setProgress((int)((((float)count)/((float)totalCourses))*100.0f));
//commitPartially();
//DaoFactory.getQuestionarioDaoImpl().update(q);
/** COMMIT OPERATION **/
}
catch(Throwable t)
{
logger.error(t,t);
serviceLogError(t.toString(),t);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.ERROR,t.toString()));
}
 
//}
 
 
//removeUnselectedCourses(q, newCourseCodesList);
 
/** COMMIT OPERATION **/
setProgress(100);
commitPartially();
DaoFactory.getQuestionarioDaoImpl().update(q);
/** COMMIT OPERATION **/
 
//TODO FALTA VERIFICAR SE HA COISAS DEPENDENTES DO COURSES_ASSIGNED TEM DE MUDAR PARA OU ANSWERS ASSIGNED
//OIU ENTAO SO DEPOIS DO REVERT E QUE PODEM VOLTAR A ATRIBUIR RESPOSTAS E ALTERAR SELECAO DE CURSOS
 
msg = "Set courses state as " + QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.name();
serviceLogInfo(msg);
logger.info(msg);
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED);
commitPartially();
 
return logMessages;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/AssignAnswersJobService.java
New file
0,0 → 1,74
package pt.estgp.estgweb.services.questionarios.pedagogico;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.jobs.JobDeamon;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.util.HashSet;
import java.util.Set;
 
 
/**
* Created by jorgemachado on 22/03/16.
*/
public class AssignAnswersJobService implements IService
{
 
public static final Logger logger = Logger.getLogger(AssignAnswersJobService.class);
 
 
/**
* CRIAR O JOB PARA O RUNNER
*
* @param questionarioId
* @param session
* @param questionarioCleared
* @return
* @throws NotAuthorizedException
*/
public QuestionarioImpl runJobAssignAnswers(long questionarioId, UserSession session, QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
 
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name()) )
{
throw new NotAuthorizedException("Nao tem autorização para atribuir respostas ao questionario " + questionarioId);
}
 
/*******VERIFICACAO DE RESPOSTAS*********/
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logger.warn("Vai falhar tem respostas, deixar correr para avisar o user no log");
}
else
{
//Nao muda de estado porque pode sempre gerar as respostas quando está em estado COURSES_ASSIGNED
( questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_ANSWERS);
}
//CRIAR ATIVIDADE DE ATRIBUICAO DE RESPOSTAS
 
 
 
Set<JobServiceTaskParameter> paramsJob = new HashSet<JobServiceTaskParameter>();
 
JobServiceTaskParameterImpl paramJob = DomainObjectFactory.createJobServiceTaskParameterImpl();
paramJob.setName(ServiceJob.JOB_questionario_id_KEY);
paramJob.setDescription("ID do questionário");
paramJob.setObject("" + questionarioId);
paramsJob.add(paramJob);
 
JobServiceTask job = JobDeamon.createServiceJob(questionarioCleared.getiAnswersProcessorClass().getJobServiceTaskAnswersProcessor(), session.getUser(), paramsJob,
"Service: Atribuição de Respostas a um questionário Pedagógico");
questionarioCleared.setAnswerGenerationTaskId(job.getId());
 
return questionarioCleared;
}
 
 
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/AnswersAlunosProcessor.java
New file
0,0 → 1,372
package pt.estgp.estgweb.services.questionarios.pedagogico;
 
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.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 pt.estgp.estgweb.services.sigesimports.ImportCourseService;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
 
/**
* 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;
int respostasRequisitadas = 0;
 
private static Logger logger = Logger.getLogger(AnswersAlunosProcessor.class);
 
 
/**
* ############# JOB TASK ############
* ############# JOB TASK ############
* @return
* @throws Throwable
*/
@Override
protected ILogMessages runJobServiceTask() throws Throwable
{
 
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject());
DefaultLogMessages logMessages = new DefaultLogMessages();
 
 
/*****VERIFICACAO DE RESPOSTAS********/
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
"Operação não permitida, Existem Respostas"));
logger.warn(logMessages.getLastMessage());
serviceLogError(logMessages.getLastMessage());
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos num questioário com respostas");
}
 
 
unidadesNaoUtilizadas = 0;
unidadesUtilizadas = 0;
unidadesMarcadas = 0;
unidadesNaoVistasProf = 0;
unidadesNaoVistasAlunos = 0;
cursosUtilizados = 0;
respostasRequisitadas = 0;
 
 
 
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId);
 
 
//Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre
 
/**logging**/
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;
 
 
UpdateCoursesAndUnitsJobService.revertAllRespostasCandidatas(questionarioId, this);
 
for(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 countUnidades = 0;
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
{
countUnidades++;
msg = unidadeCurricularAfeta.isUsar() ? "(+)" : "(----IGNORADA-----)";
msg += "(" + countUnidades + "/" + unidades + ") Iniciando atribuição de Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome();
logger.info(msg);
serviceLogInfo(msg);
 
 
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.answers.assigning", LogMessageTypeEnum.WARNING,msg));
}
else
{
CourseUnitImpl cuImpl = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().narrow(unidadeCurricularAfeta.getCourseUnit());
CourseImpl courseImpl = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(unidadeCurricularAfeta.getCourseUnit().getCourse());
 
boolean separateTurmas = false;
try{
separateTurmas = ImportCourseService.loadCourseYearTurmasPolicy(Integer.parseInt(unidadeCurricularAfeta.getCursoAfeto().getCodigoCurso()), q.getYear(), logMessages, this);
}catch(Throwable e)
{
msg = "!!! Código de Curso inválido a tentar verificar politica de turmas separadas, vai assumir falso";
serviceLogError(msg);
logger.error(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.ERROR,msg));
}
unidadesUtilizadas++;
verificaAlertasUnidade(logMessages, unidadeCurricularAfeta);
List<CourseUnitImpl.Tipologia> tipologias;
if(unidadeCurricularAfeta.getCursoAfeto().isUsarTipologias())
{
tipologias = cuImpl.getTipologiasClass().obtainMergeTipologias();
//TODO ALTERAR QUANDO GERIRMOS USADAS PARA JA SO SE USAM SUMARIOS
for(CourseUnitImpl.Tipologia tMerge: tipologias)
{
//if(tMerge.isSumario())
//{
tMerge.setUse(true);
// break;
//}
}
}
else
{
tipologias = cuImpl.getTipologiasClass().obtainTipologiasSimples(unidadeCurricularAfeta.getCourseUnit());
//TODO ALTERAR QUANDO GERIRMOS USADAS PARA JA SO SE USAM SUMARIOS
for(CourseUnitImpl.Tipologia tMerge: tipologias)
{
tMerge.setUse(true);
}
}
 
Map<String,Teacher> professoresEsperados = new HashMap<String, Teacher>();
for(Teacher t: cuImpl.getTeachers()) { professoresEsperados.put(t.getSigesCode() + "", t); }
for(CourseUnitImpl.Tipologia tMerge: tipologias) { professoresEsperados.remove(tMerge.getCdDocente()); }
 
if(separateTurmas)
{
if(professoresEsperados.size() > 0)
{
msg = "!!! Unidade de um curso de turmas separadas, vamos usar apenas as tipologias para atribuir respostas, não vamos adicionar professores que não sumariaram";
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg));
}
}
else
{
//Lista de Professores para ir removendo à medida que sao usados para no final confirmar se algum
//não tinha tipologia vamos coloca-lo manualmente
List<CourseUnitImpl.Tipologia> tipologiasEmFalta = criarTipologiasRequisitadasSimplesParaProfsForaDasTurmasPorFaltaDeSumarios(logMessages, q, unidadeCurricularAfeta, cuImpl, professoresEsperados);
tipologias.addAll(tipologiasEmFalta);
}
 
for(CourseUnitImpl.Tipologia tMerge: tipologias)
{
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).incStatTipologiasRequisitadas();
((QuestionarioPedagogicoCursoAfetoImpl)cu).incStatTipologiasRequisitadas();
criarTipologiasRequisitadas(logMessages, q, (QuestionarioPedagogicoUnidadeCurricularAfetaImpl) unidadeCurricularAfeta, (QuestionarioPedagogicoCursoAfetoImpl)cu, cuImpl, tMerge);
}
 
}
}
}
}
 
/** 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();
 
 
serviceLogInfo("######################################");
serviceLogInfo("######################################");
serviceLogInfo("#unidadesNaoUtilizadas:" + unidadesNaoUtilizadas);
serviceLogInfo("#unidadesUtilizadas:" + unidadesUtilizadas);
serviceLogInfo("#unidadesMarcadas:" + unidadesMarcadas);
serviceLogInfo("#unidadesNaoVistasProf:" + unidadesNaoVistasProf);
serviceLogInfo("#unidadesNaoVistasAlunos:" + unidadesNaoVistasAlunos);
serviceLogInfo("#cursosUtilizados:" + cursosUtilizados);
serviceLogInfo("#respostasRequisitadas:" + respostasRequisitadas);
 
logger.info("######################################");
logger.info("######################################");
logger.info("#unidadesNaoUtilizadas:" + unidadesNaoUtilizadas);
logger.info("#unidadesUtilizadas:" + unidadesUtilizadas);
logger.info("#unidadesMarcadas:" + unidadesMarcadas);
logger.info("#unidadesNaoVistasProf:" + unidadesNaoVistasProf);
logger.info("#unidadesNaoVistasAlunos:" + unidadesNaoVistasAlunos);
logger.info("#cursosUtilizados:" + cursosUtilizados);
logger.info("#respostasRequisitadas:" + respostasRequisitadas);
return logMessages;
}
 
 
 
private List<CourseUnitImpl.Tipologia> criarTipologiasRequisitadasSimplesParaProfsForaDasTurmasPorFaltaDeSumarios(DefaultLogMessages logMessages, QuestionarioImpl q, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta, CourseUnitImpl cuImpl, Map<String, Teacher> teachersAffected) {
String msg;
List<CourseUnitImpl.Tipologia> tipologias = new ArrayList<CourseUnitImpl.Tipologia>();
if(teachersAffected.size() > 0)
{
msg = "!!! Existem " + teachersAffected.size() + "professores que não tinham tipologias de sumário associadas na unidade " + cuImpl.getCode() + "(" + cuImpl.getName() + ")" + ", associando uma tipologia simples por turma para este docente";
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg));
for(Teacher t: teachersAffected.values())
{
if(cuImpl.getTurmas() != null)
{
for(CourseUnitTurma turma: cuImpl.getTurmas())
{
msg = "!!! Criando tipologia Simples para (Prof: " + t.getSigesCode() + " " + t.getName() + " turma: " + turma.getTurma() + " ) " ;
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.WARNING,msg));
 
CourseUnitImpl.Tipologia tipo = new CourseUnitImpl.Tipologia();
tipo.setCdDocente(t.getSigesCode() + "");
tipo.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
tipo.setCdTurma(turma.getTurma());
tipo.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS);
tipo.setUse(true);
tipologias.add(tipo);
}
}
}
}
return tipologias;
}
 
private void criarTipologiasRequisitadas(DefaultLogMessages logMessages,
QuestionarioImpl q,
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeCurricularAfeta,
QuestionarioPedagogicoCursoAfetoImpl cursoAfeto,
CourseUnitImpl cuImpl,
CourseUnitImpl.Tipologia tMerge) {
String msg;
if(tMerge.isUse())
{
//todo Criar Tipologia Requisitada
String cdDocente = tMerge.getCdDocente();
String cdTipologia = tMerge.getCdTipologia();
String dsTipologia = tMerge.getDsTipologia();
String cdTurma = tMerge.getCdTurma();
 
QuestionarioPedagogicoTipologiaRequisitadaImpl tipo = DomainObjectFactory.createQuestionarioPedagogicoTipologiaRequisitadaImpl();
tipo.setCdDocente(cdDocente);
tipo.setCdTipologia(cdTipologia);
tipo.setCdTurma(cdTurma);
tipo.setDsTipologia(dsTipologia);
tipo.setUnidadeAfeta(unidadeCurricularAfeta);
try{
CourseUnitImpl.TipologiaPersistent tMergePersistente = cuImpl.loadPersistent(tMerge);
tipo.setNomeDocente(tMergePersistente.getTeacher().getName());
tipo.setDocenteAfeto(tMergePersistente.getTeacher());
tipo.setTurmaAfeta(tMergePersistente.getCourseUnitTurma());
DaoFactory.getQuestionarioPedagogicoTipologiaRequisitadaDaoImpl().save(tipo);
criarAlunosRequisitados(q, tipo, tMergePersistente.getCourseUnitTurma(),unidadeCurricularAfeta,cursoAfeto);
}
catch(CourseUnitImpl.TipologiaLoadExeption exp)
{
msg = "Tipologia não devolve persistente " + exp.getMessage() + " (docente:" + tMerge.getCdDocente() + ", turma: " + tMerge.getCdTurma() + ") para a unidade: " + unidadeCurricularAfeta.getCodigoUnidade() + " " + unidadeCurricularAfeta.getNome() + " do curso de " + cursoAfeto.getNome() + "(" + cursoAfeto.getCodigoCurso() +")";
serviceLogError(msg);
logger.error(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.answers.assigning", LogMessageTypeEnum.ERROR,msg));
}
 
 
//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
 
}
}
 
private void criarAlunosRequisitados(QuestionarioImpl q,
QuestionarioPedagogicoTipologiaRequisitadaImpl tipo,
CourseUnitTurma turma,
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta,
QuestionarioPedagogicoCursoAfetoImpl cursoAfeto)
{
if(turma.getStudents() != null)
{
for(Student s: turma.getStudents())
{
unidadeAfeta.incStatRespostasRequisitadas();
cursoAfeto.incStatRespostasRequisitadas();
QuestionarioRespostaRequisitadaImpl respostaRequisitada = DomainObjectFactory.createQuestionarioRespostaRequisitadaImpl();
respostaRequisitada.setQuestionario(q);
respostaRequisitada.setUser(s);
DaoFactory.getQuestionarioRespostaRequisitadaDaoImplImpl().save(respostaRequisitada);
 
QuestionarioPedagogicoAlunoRequisitadoImpl alunoRequisitado = DomainObjectFactory.createQuestionarioPedagogicoAlunoRequisitadoImpl();
alunoRequisitado.setTipologiaRequisitada(tipo);
alunoRequisitado.setAluno(s);
alunoRequisitado.setRespostaRequisitada(respostaRequisitada);
DaoFactory.getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().save(alunoRequisitado);
respostasRequisitadas++;
}
}
}
 
private void verificaAlertasUnidade(DefaultLogMessages logMessages, QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta) {
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.answers.assigning", LogMessageTypeEnum.WARNING,msg));
}
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/pedagogico/UpdateCoursesAndUnitsJobService.java
95,13 → 95,33
return new String[0];
}
 
/*************
* CRIAR O JOB PARA O RUNNER
* @param questionarioId
* @param coursesList
* @param session
* @param questionarioCleared
* @return
* @throws NotAuthorizedException
*/
public QuestionarioImpl runJobSelectCourses(long questionarioId,String[] coursesList,UserSession session,QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
 
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name()))
{
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos");
}
( questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_COURSES);
 
/*******VERIFICACAO DE RESPOSTAS*********/
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas == 0)
{
(questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_COURSES);
}
else
{
logger.warn("Vai falhar no serviço, deixar falhar para visar o user");
}
 
JSONArray jsonArray = new JSONArray();
for(String sele: coursesList)
{
145,6 → 165,15
{
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos");
}
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
"Operação não permitida, Existem Respostas"));
logger.warn(logMessages.getLastMessage());
serviceLogError(logMessages.getLastMessage());
return logMessages;
}
for(QuestionarioPedagogicoCursoAfeto cu : DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionarioId))
{
int unidades = 0;
153,16 → 182,18
unidades = cu.getUnidadesAfetas().size();
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
{
logger.info("Reverting Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome());
unidadeCurricularAfeta.setCursoAfeto(null);
DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadeCurricularAfeta);
String msg = "Reverting Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome();
logger.info(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0)
{
String msg = "A unidade tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas associadas";
msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas";
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
removeTipologiasERespostasCascade(unidadeCurricularAfeta);
}
unidadeCurricularAfeta.setCursoAfeto(null);
DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().delete(unidadeCurricularAfeta);
}
}
String msg = "Removendo curso afeto:" + cu.getNome() + " e " + unidades + " uniades afetas";
176,10 → 207,59
return logMessages;
}
 
 
public static ILogMessages revertAllRespostasCandidatas(long questionarioId, ServiceJob serviceJob) throws NotAuthorizedException {
 
DefaultLogMessages logMessages = new DefaultLogMessages();
 
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
"Operação não permitida, Existem Respostas"));
logger.warn(logMessages.getLastMessage());
serviceJob.serviceLogError(logMessages.getLastMessage());
throw new NotAuthorizedException(logMessages.getLastMessage());
}
 
String msg = "Revertendo respostas candidatas do questionario " + questionarioId;
logger.info(msg);
serviceJob.serviceLogInfo(msg);
 
for(QuestionarioPedagogicoCursoAfeto cu : DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().find(questionarioId))
{
msg = "Revertendo respostas do curso " + cu.getCodigoCurso() + " , iremos remover todas as tipologias e respostas candidatas associadas";
logger.info(msg);
serviceJob.serviceLogInfo(msg);
((QuestionarioPedagogicoCursoAfetoImpl)cu).resetAnswerStats();
 
int unidades = 0;
if(cu.getUnidadesAfetas() != null)
{
unidades = cu.getUnidadesAfetas().size();
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.getUnidadesAfetas())
{
((QuestionarioPedagogicoUnidadeCurricularAfetaImpl)unidadeCurricularAfeta).resetAnswerStats();
logger.info("Reverting Respostas Unidade Curricular Afeta " + unidadeCurricularAfeta.getCodigoUnidade() + " - " + unidadeCurricularAfeta.getNome());
if(unidadeCurricularAfeta.getTipologiasRequisitadas() != null && unidadeCurricularAfeta.getTipologiasRequisitadas().size() > 0)
{
msg = "A unidade " + unidadeCurricularAfeta.getCodigoUnidade() + " tem tipologias requisitadas que tem de ser removidas primeiro, iremos remover todas as tipologias e respostas candidatas associadas";
logger.info(msg);
serviceJob.serviceLogWarn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
removeTipologiasERespostasCascade(unidadeCurricularAfeta);
}
}
}
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.INFO,msg));
}
return logMessages;
}
 
/**
*
*/
private void removeTipologiasERespostasCascade(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta)
protected static void removeTipologiasERespostasCascade(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta)
{
for(QuestionarioPedagogicoTipologiaRequisitada tr: unidadeAfeta.getTipologiasRequisitadas())
{
212,6 → 292,8
 
/**
*
* ############# JOB TASK ############
* ############# JOB TASK ############
* @return
* @throws Throwable
*/
223,6 → 305,17
long questionarioId = Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject());
QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId);
 
/********VERIFICACAO DE RESPOSTAS***********/
long respostas = DaoFactory.getQuestionarioDaoImpl().getNumeroRespostas(questionarioId);
if(respostas > 0)
{
logMessages.addMessage(new DefaultLogMessage("error.questionario.com.respostas.nao.pode.efetuar.op", LogMessageTypeEnum.WARNING,
"Operação não permitida, Existem Respostas"));
logger.warn(logMessages.getLastMessage());
serviceLogError(logMessages.getLastMessage());
throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos num questioário com respostas");
}
 
String[] coursesList = deserializeCoursesList(q);
//Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre
 
232,6 → 325,8
logger.info(msg);
/**logging**/
 
revertAllRespostasCandidatas(questionarioId,this);
 
List<String> newCourseCodesList = new ArrayList<String>();
int count = 0;
int totalCourses = coursesList.length;
329,7 → 424,7
DaoFactory.getQuestionarioPedagogicoCursoAfetoDaoImpl().delete(cursoAfeto);
}
 
private void removeUnselectedUnits(QuestionarioPedagogicoCursoAfeto cursoAfetado, List<String> newUnidadesCodesList) {
private void removeUnselectedUnits(QuestionarioPedagogicoCursoAfeto cursoAfetado, List<Long> newUnidadesCodesList) {
/** logging **/
String msg = "Removing unselected units from course: " + cursoAfetado.getCodigoCurso();
serviceLogInfo(msg);
338,7 → 433,7
Set<QuestionarioPedagogicoUnidadeCurricularAfeta> allUnidades = cursoAfetado.getUnidadesAfetas();
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeAfeta: allUnidades)
{
if(!newUnidadesCodesList.contains(unidadeAfeta.getCodigoUnidade()))
if(!newUnidadesCodesList.contains(unidadeAfeta.getCourseUnit().getId()))
{
/** logging **/
msg = "--->Deleting unidade: " + unidadeAfeta.getCodigoUnidade();
407,7 → 502,7
 
 
 
List<String> newUnitCodesList = new ArrayList<String>();
List<Long> newUnitCodesList = new ArrayList<Long>();
int countUnits = 0;
List<CourseUnitDaoImpl.CourseUnitResult> results = DaoFactory.getCourseUnitDaoImpl().loadCourseUnits(c.getId(), q.getSemestre(), q.getYear());
int totalUnits = results.size();
415,7 → 510,7
{
countUnits++;
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(cur.id);
newUnitCodesList.add(cu.getCode());
newUnitCodesList.add(cu.getId());
/** logging **/
msg = "---->(" + countUnits + " of " + totalUnits +") CourseUnit loaded: " + cu.getName() + "(" + cu.getCode() + ")";
serviceLogInfo(msg);
439,10 → 534,10
 
String msg;
QuestionarioPedagogicoUnidadeCurricularAfetaImpl unidadeAfeta = null;
List<QuestionarioPedagogicoUnidadeCurricularAfeta> unidadesFound = DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().find(cursoAfeto.getQuestionario().getId(), cursoAfeto.getCodigoCurso(), cu.getCode());
List<QuestionarioPedagogicoUnidadeCurricularAfeta> unidadesFound = DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().find(cursoAfeto.getQuestionario().getId(), cursoAfeto.getCodigoCurso(), cu.getId());
if(unidadesFound != null && unidadesFound.size() > 1)
{
msg = "Encontradas mais que uma unidade nos mesmos códigos: curso:" +cursoAfeto.getCodigoCurso() + ", unidade " + cu.getCode() + " apagando um";
msg = "Encontradas mais que uma unidade nos mesmos códigos: curso:" +cursoAfeto.getCodigoCurso() + ", unidade " + cu.getCode() + " com id sistema(" + cu.getId() + ") apagando um";
serviceLogWarn(msg);
logger.warn(msg);
logMessages.addMessage(new DefaultLogMessage("questionario.courses.selection", LogMessageTypeEnum.WARNING,msg));
472,7 → 567,7
unidadeAfeta.setCursoAfeto(cursoAfeto);//so metemos de um dos lados
unidadeAfeta.setCourseUnit(cu);
unidadeAfeta.setCodigoUnidade(cu.getCode());
unidadeAfeta.setObs("");
unidadeAfeta.addObs("");
unidadeAfeta.setNome(cu.getName());
 
unidadeAfeta.setMarked(false);
639,7 → 734,10
 
public void updateCheckVarPedagogico(long questionarioId,long unidadeAfetaId, String op,String val,UserSession session, QuestionarioImpl questionarioCleared) throws NotAuthorizedException {
 
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name()) && !questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name()))
if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name()) &&
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name()) &&
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name()) &&
!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name()))
{
throw new NotAuthorizedException("Nao tem autorização para alterar as tipologias");
}
652,9 → 750,14
{
unidade.setVista(Boolean.parseBoolean(val));
}
else if(op.equals("vistaProfs"))
{
unidade.setVistaProfs(Boolean.parseBoolean(val));
}
else if(op.equals("observacoes"))
{
unidade.setObs(val);
}
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/PedagogicoAlunosProcessor.java
7,6 → 7,7
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.utils.SimpleClearanceRuledSupport;
import pt.estgp.estgweb.services.questionarios.pedagogico.AnswersAlunosProcessor;
import pt.estgp.estgweb.services.questionarios.pedagogico.UpdateCoursesAndUnitsJobService;
import pt.estgp.estgweb.utils.ConfigProperties;
 
46,66 → 47,135
questionario.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.START);
}
 
 
 
public void initClearances(QuestionarioImpl q, UserSessionImpl usession, SimpleClearanceRuledSupport s)
{
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
if(q.getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS)
assignationDetailsClearances(q, usession, s);
 
if(q.getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS || q.getStateEnum() == QuestionarioImpl.State.PROCESSING || q.getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS)
{
if(q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.START ||
q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED)
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_ANO_SEMESTRE.name(),usession);
if(usession.getUser().hasRole(Globals.ROLE_PRESIDENTE_CONCELHO_PEDAGOGICO))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_DASHBOARD.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession);
}
}
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED.getPosition() &&
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition())
 
}
 
private void assignationDetailsClearances(QuestionarioImpl q, UserSessionImpl usession, SimpleClearanceRuledSupport s) {
if(q.getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS)
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SEE_SELECT_COURSES.name(),usession);
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
if(q.getCourseSelectionTaskId() <= 0)
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession);
else
if(q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.START ||
q.getSubStatePedagodigoEnum() == QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED)
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_ANO_SEMESTRE.name(),usession);
}
 
 
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED.getPosition() &&
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition())
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SEE_SELECT_COURSES.name(),usession);
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getCourseSelectionTaskId());
if(task.isExecuted() || (task.getSaveDate() != null &&
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked
if(q.getCourseSelectionTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition())
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession);
else
{
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getCourseSelectionTaskId());
if(task.isExecuted() || (task.getSaveDate() != null &&
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos
{
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);//rolling back to year semestre assigned
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)
{
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);//rolling back to year semestre assigned
}
task.setExecuted(true);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession);
}
task.setExecuted(true);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name(),usession);
}
}
}
}
 
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition() &&
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition())
{
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN))
 
if(q.getSubStatePedagodigoEnum().getPosition() >= QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.getPosition() &&
q.getSubStatePedagodigoEnum().getPosition() < QuestionarioImpl.SubStatePedagogico.FINNISHED_ANSWERS_GENERATING.getPosition())
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name(),usession);
}
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name(),usession);
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_TIPOLOGIES.name(),usession);
}
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS.name(),usession);
//s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name(),usession);
}
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT.name(),usession);
}
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
 
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_START_ASSIGN_ANSWERS.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS.name(),usession);
 
//ATRIBUIR RESPOSTAS MAS SO DEPOIS DE CURSOS ATRIBUIDOS
if(q.getAnswerGenerationTaskId() <= 0 || q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition())
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession);
else
{
JobServiceTask task = DaoFactory.getJobServiceTaskDaoImpl().load(q.getAnswerGenerationTaskId());
if(task.isExecuted() || (task.getSaveDate() != null &&
System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)) //half hour blocked, 30 minutos
{
if(!task.isExecuted() && System.currentTimeMillis()-task.getSaveDate().getTime()>1800000)
{
q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED);//rolling back to courses assigned
}
task.setExecuted(true);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession);
}
}
}
}
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
if(q.getSubStatePedagodigoEnum().getPosition() == QuestionarioImpl.SubStatePedagogico.ANSWERS_ASSIGNED.getPosition())
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_START_ASSIGN_ANSWERS.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS.name(),usession);
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_PUT_ANSWERS_ASSIGNED.name(),usession);
}
}
}
}
 
@Override
public Class getJobServiceTaskAnswersProcessor() {
return AnswersAlunosProcessor.class;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/questionarios/QuestionariosService.java
1,5 → 1,6
package pt.estgp.estgweb.services.questionarios;
 
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.QuestionarioView;
14,6 → 15,8
public class QuestionariosService implements IService
{
 
private static final Logger logger = Logger.getLogger(QuestionariosService.class);
 
//NEW QUESTIONARIOS COME BY THIS SERVICE
public QuestionarioImpl newQuestionarioForm(QuestionarioImpl qform, UserSession userSession) throws NotAuthorizedException
{
113,4 → 116,82
}
}
 
/**
* 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.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.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.State.ASSIGNED_ANSWERS)
questionarioCleared.setStateClass(QuestionarioImpl.State.PROCESSING);
else if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS)
questionarioCleared.setStateClass(QuestionarioImpl.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.State.PROCESSING)
questionarioCleared.setStateClass(QuestionarioImpl.State.ASSIGNED_ANSWERS);
else if(questionarioCleared.getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS)
questionarioCleared.setStateClass(QuestionarioImpl.State.STOPED_WITH_ANSWERS);
}
return questionarioCleared;
}
 
public void salvarResposta(QuestionarioResposta resposta,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.State.PROCESSING && questionario.getStateEnum() != QuestionarioImpl.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.State.PROCESSING_WITH_ANSWERS);
}
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/paginasseccoes/SalvarFicheiro.java
New file
0,0 → 1,30
package pt.estgp.estgweb.services.paginasseccoes;
 
import jomm.utils.FilesUtils;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.estgp.estgweb.web.controllers.paginaseseccoes.PaginasSeccoesForm;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.IOException;
 
/**
* Created by jorgemachado on 17/05/16.
*/
public class SalvarFicheiro implements IService
{
public String run(PaginasSeccoesForm frm, UserSession usession) throws IOException {
RepositoryService service = new RepositoryService();
String id = service.storeRepositoryFile(frm.getFicheiro().getInputStream(),
frm.getFicheiro().getContentType(),
FilesUtils.getExtension(frm.getFicheiro().getFileName()),
frm.getFicheiro().getFileSize(),
frm.getFicheiro().getFileName(),
"",
ResourceAccessControlEnum.authenticatedDomain,
usession);
 
return id;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/services/jobs/JobScheduleService.java
4,6 → 4,7
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.courses.CourseUnitsStatisticsJobService;
import pt.estgp.estgweb.services.sigesimports.*;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
191,7 → 192,8
if(persistent.getTargetService().equals(ImportCourseService.class.getName()) ||
persistent.getTargetService().equals(ImportGradesService.class.getName()) ||
persistent.getTargetService().equals(ImportStudentsService.class.getName()) ||
persistent.getTargetService().equals(ImportTeachersService.class.getName()))
persistent.getTargetService().equals(ImportTeachersService.class.getName()) ||
persistent.getTargetService().equals(CourseUnitsStatisticsJobService.class.getName()))
{
//if(params == null || params.size() == 0)
//{
/branches/v3/impl/src/java/pt/estgp/estgweb/services/jobs/JobDeamon.java
153,8 → 153,11
}
}
 
public static int dayNumber = 0;
 
public static JobServiceTaskImpl createServiceJob(Class targetService, User owner, Set<JobServiceTaskParameter> paramsJob, String description)
{
dayNumber++;
if(description==null || description.trim().length()==0)
description = targetService.getSimpleName();
logger.info("Schedulling one job " + targetService + " to run");
173,7 → 176,7
jobServiceTask.setProgress(0);
DaoFactory.getJobServiceTaskDaoImpl().save(jobServiceTask);
 
String filePath = targetService.getSimpleName() + "-" + DatesUtils.getFormatedFileSystem(new Date());
String filePath = targetService.getSimpleName() + "-" + jobServiceTask.getId() + "-" + DatesUtils.getFormatedFileSystem(new Date());
jobServiceTask.setLogFilePath( filePath + ".log");
 
for(JobServiceTaskParameter param: paramsJob)
/branches/v3/impl/src/java/pt/estgp/estgweb/services/entity/EntityServiceJson.java
2,12 → 2,13
 
import com.owlike.genson.Genson;
import com.owlike.genson.TransformationException;
import pt.estgp.estgweb.domain.CourseUnit;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.utl.ist.berserk.logic.serviceManager.IService;
 
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
 
/**
* Created by jorgemachado on 22/03/16.
27,8 → 28,37
 
.create();
 
static Genson userGenson = new Genson.Builder()
.exclude(Object.class)
.exclude(User.class)
.exclude(GenericUser.class)
.exclude(Student.class)
.exclude(Teacher.class)
.include("id", User.class)
.include("name", User.class)
.include("sigesCode", User.class)
.include("email", User.class)
.include("roles", User.class)
 
.create();
 
public String courseUnit(CourseUnit cu) throws IOException, TransformationException {
return courseUnitGenson.serialize(cu);
}
public String courseUnit(Serializable s) throws IOException, TransformationException {
CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().get(s);
return courseUnitGenson.serialize(cu);
}
 
public String user(Serializable s) throws IOException, TransformationException {
User u = DaoFactory.getUserDaoImpl().get(s);
return userGenson.serialize(u);
}
public String user(User u) throws IOException, TransformationException {
return userGenson.serialize(u);
}
 
public String user(ArrayList<User> users) throws IOException, TransformationException {
return userGenson.serialize(users);
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/StudentImpl.java
3,6 → 3,7
import jomm.utils.StringsUtils;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.utils.RoleManager;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
 
50,8 → 51,11
return subscribedCoursesOldYearsView;
}
 
public String getManagedRole() {
return STUDENT_ROLE;
public String getManagedRole()
{
List<String> roles = new ArrayList<String>();
roles.add(STUDENT_ROLE);
return RoleManager.getSerialRoles(roles);
}
 
public List<CourseUnit> getSubscribedUnitsViewS1()
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/IAnswersProcessor.java
20,4 → 20,6
/** to be used on clearances initialization**/
public void initClearances(QuestionarioImpl questionario, UserSessionImpl session, SimpleClearanceRuledSupport s);
 
public Class getJobServiceTaskAnswersProcessor();
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java
34,6 → 34,7
private String courseName;
private String semestre;
private String importYear;
private String institutionCode;
private String contentsGrants;
private BlogView blog;
private String pathIntranet;
142,6 → 143,7
this.sumariosPathFileIntranet = ((CourseUnitImpl)courseUnit).getSummariosPathFileIntranet();
this.evaluationOpenByAdmin = courseUnit.isEvaluationOpenByAdmin(); //nao tem persistencia propria tem de ser feito num serviço
this.cdTurma = courseUnit.getCdTurma();
this.institutionCode = courseUnit.getInstitutionCode();
 
// this.objectives = courseUnit.getObjectives(); DEPRECATED
if(courseUnit.getCourseUnitProgram() !=null && courseUnit.getCourseUnitProgram().getCourseUnitProgramPart2() != null)
470,6 → 472,7
c.setCode(code);
c.setCdTurma(cdTurma);
c.setSemestre(semestre);
c.setInstitutionCode(institutionCode);
if(courseId > 0)
{
c.setCourse(DaoFactory.getCourseDaoImpl().load(courseId));
729,7 → 732,14
return true;
}
 
public String getInstitutionCode() {
return institutionCode;
}
 
public void setInstitutionCode(String institutionCode) {
this.institutionCode = institutionCode;
}
 
public boolean isValidProgram()
{
return validProgram;
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioPedagogicoUnidadeCurricularAfetaImpl.java
9,8 → 9,10
{
if(getObs() == null)
setObs("");
else if(obs.trim().length() > 0)
setObs(getObs() + " ; ");
 
setObs(getObs() + " ; " + obs);
setObs(getObs() + obs);
}
 
public void resetStats() {
19,9 → 21,19
setStudents(0);
setProfs(0);
setMarked(false);
setObs("");
//setObs("");
setProfsWithoutTurma(0);
setTurmas(0);
setTurmaWithoutProf(0);
 
}
 
public void resetAnswerStats() {
 
setStatTipologiasRequisitadas(0);
setStatRespostasRequisitadas(0);
}
 
public void incStatTipologiasRequisitadas(){ setStatTipologiasRequisitadas(getStatTipologiasRequisitadas()+1);}
public void incStatRespostasRequisitadas(){ setStatRespostasRequisitadas(getStatRespostasRequisitadas() + 1);}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/DomainObjectFactory.java
415,4 → 415,12
public static ConfigurationImpl createConfigurationImpl() {
return new ConfigurationImpl();
}
 
public static QuestionarioRespostaRequisitadaImpl createQuestionarioRespostaRequisitadaImpl(){
return new QuestionarioRespostaRequisitadaImpl();
}
 
public static QuestionarioRespostaImpl createQuestionarioRespostaImpl() {
return new QuestionarioRespostaImpl();
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/UserImpl.java
112,4 → 112,11
{
return DesUtils.getInstance().decrypt(getPop3password());
}*/
 
public String getShortName()
{
if(getName() != null)
return getName().split(" ")[0];
return getName();
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioImpl.java
30,7 → 30,7
 
CREATED(1),
ASSIGNATION_DETAILS(2),
ASSIGNING_ANSWERS_PROCESSEMENT(3),
ASSIGNING_ANSWERS_PROCESSEMENT(3), //NAO USADO NO PEDAGOGIGO OS ESTADOS INTERNOS RESOLVEM O PROBLEMA
ASSIGNED_ANSWERS(4),
PROCESSING(5),
PROCESSING_WITH_ANSWERS(6),
70,9 → 70,13
START(1),
YEAR_SEMESTRE_ASSIGNED(2),
ASSIGNING_COURSES(3),
COURSES_ASSIGNED(4),
FINNISHED_ANSWERS_GENERATING(5);
COURSES_ASSIGNED(4), //ESCOLHA DE CURSOS TERMINADA pode escolher tipologias e gerar respostas
ASSIGNING_ANSWERS(5), //ESCOLHA DE CURSOS TERMINADA pode escolher tipologias e gerar respostas
ANSWERS_ASSIGNED(6), //ESCOLHA DE CURSOS TERMINADA pode escolher tipologias e gerar respostas
FINNISHED_ANSWERS_GENERATING(7); //PODE SEMPRE VOLTAR A GERAR ANTES DE TERMINAR TEM DE SER INCREMENTAL
 
//Mas depois de clicar em Terminar muda para este estado terminado e já nao pode voltar a gerar respostas
 
private int pos = 1;
 
SubStatePedagogico(int pos)
209,6 → 213,11
public void initClearances(QuestionarioImpl questionario, UserSessionImpl session, SimpleClearanceRuledSupport s) {
 
}
 
@Override
public Class getJobServiceTaskAnswersProcessor() {
return null;
}
};
}
 
280,8 → 289,10
 
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN ))
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_STUDENTS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_TIPOLOGIAS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ASSIGNEMENTS_CHECK_TEACHERS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_GERAIS))
{
 
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession);
299,24 → 310,49
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_DELETE.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_ANSWER_PROCESSOR.name(),usession);
}
if(getStateEnum() == State.ASSIGNED_ANSWERS)
{
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS.name(),usession);
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.name(),usession);
}
if(getStateEnum() == State.PROCESSING)
{
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.name(),usession);
}
if(getStateEnum() == State.PROCESSING_WITH_ANSWERS)
{
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_STOP_PROCESSEMENT.name(),usession);
}
if(getStateEnum() == State.STOPED_WITH_ANSWERS)
{
s.addClearance(QuestionarioClearancesOperation.QUESTIONARIO_START_PROCESSEMENT.name(),usession);
}
if(getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS)
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_FORM.name(),usession);
}
}
 
 
//ANO SEMESTRE ESPECIFICO apenas neste estado, em atribuição de respostas e respostas atribuidas já não permite
if(getStateEnum() == QuestionarioImpl.State.ASSIGNATION_DETAILS)
{
if((usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SAVE_FORM.name(),usession);
}
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_ASSIGNATION_OPERATIONS.name(),usession);
}
 
getiAnswersProcessorClass().initClearances(this,usession,s);
}
if(getStateEnum() == State.ASSIGNING_ANSWERS_PROCESSEMENT)
if(getStateEnum() == QuestionarioImpl.State.STOPED_WITH_ANSWERS || getStateEnum() == QuestionarioImpl.State.PROCESSING || getStateEnum() == QuestionarioImpl.State.PROCESSING_WITH_ANSWERS)
{
 
if(usession.getUser().isSuperuserOrAdmin()
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_ADMIN)
|| usession.getUser().hasRole(Globals.QUESTIONARIOS_GERAIS))
{
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_DASHBOARD.name(),usession);
s.addClearance(QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SEE_FORM.name(),usession);
}
}
}
//AS CLEARANCES SAO VERIFICADAS LA DENTRO PARA TODOS OS ESTADOS
getiAnswersProcessorClass().initClearances(this,usession,s);
setClearanceRuledSupport(s);
}
 
333,13 → 369,26
QUESTIONARIO_DELETE,
QUESTIONARIO_REVERT_ALL_ASSIGNEMENTS,
 
 
QUESTIONARIO_PUT_ANSWERS_ASSIGNED,
QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS,
 
QUESTIONARIO_START_PROCESSEMENT,
QUESTIONARIO_STOP_PROCESSEMENT,
 
/*Pedagogico Cursos*/
QUESTIONARIO_SET_ANO_SEMESTRE,
QUESTIONARIO_SCHEDULLE_SELECT_COURSES,
QUESTIONARIO_SCHEDULLE_SEE_SELECT_COURSES,
QUESTIONARIO_CHANGE_TIPOLOGIES,
QUESTIONARIO_START_ASSIGN_ANSWERS,
QUESTIONARIO_SEE_START_ASSIGN_ANSWERS,
QUESTIONARIO_CHANGE_ASSIGNEMENTS,
QUESTIONARIO_CHANGE_ASSIGNEMENTS_CHECK_TEACHERS,
QUESTIONARIO_CHANGE_ASSIGNEMENTS_USE_UNIT,
 
QUESTIONARIO_SEE_DASHBOARD
 
;
 
public static QuestionarioClearancesOperation parse(String clearance)
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java
511,8 → 511,36
setTipologias(tipologias.serialize());
}
 
public TipologiaPersistent loadPersistent(Tipologia myTipo)
public static class TipologiaLoadExeption extends Exception
{
boolean teacherFail = false;
boolean turmaFail = false;
 
public TipologiaLoadExeption(boolean teacherFail, boolean turmaFail) {
this.teacherFail = teacherFail;
this.turmaFail = turmaFail;
}
 
public boolean isTeacherFail() {
return teacherFail;
}
 
public boolean isTurmaFail() {
return turmaFail;
}
 
@Override
public String getMessage() {
return "Professor: " + (teacherFail? "Falhou" : "OK") + " Turma: " + (turmaFail? "Falhou" : "OK");
}
}
/**
*
* @param myTipo
* @return
*/
public TipologiaPersistent loadPersistent(Tipologia myTipo) throws TipologiaLoadExeption
{
TipologiaPersistent tipologiaPersistent = new TipologiaPersistent();
tipologiaPersistent.setHorRef(myTipo.isHorRef());
tipologiaPersistent.setExtra(myTipo.isExtra());
526,7 → 554,7
if(tipologiaPersistent.getCourseUnitTurma() == null || tipologiaPersistent.getTeacher() == null)
{
logger.error("Turma ou professor nao encontrados enquanto fazia uma tipologia persistente: turma:" + myTipo.getCdTurma() + " teacher code: " + myTipo.getCdDocente());
return null;
throw new TipologiaLoadExeption(tipologiaPersistent.getTeacher() == null,tipologiaPersistent.getCourseUnitTurma() == null);
}
return tipologiaPersistent;
}
914,6 → 942,14
return serializeMergedList(obtainMergeTipologias());
}
 
 
/**
* Junta todas as tipologias obtidas dos sumarios, horario(ref+trab) + extra
* e coloca todas numa lista de unicas
* Marca-as com isHorario, isSumario, isExtra
* @return
*/
 
public ArrayList<Tipologia> obtainMergeTipologias()
{
ArrayList<Tipologia> merge = new ArrayList<Tipologia>();
978,7 → 1014,12
return merge;
}
 
 
/**
*
*
* @param courseUnit
* @return
*/
public ArrayList<Tipologia> obtainTipologiasSimples(CourseUnit courseUnit)
{
ArrayList<Tipologia> merge = new ArrayList<Tipologia>();
1003,6 → 1044,7
{
Tipologia simples = new Tipologia();
simples.setMarkWarning(true);
//simples.setUse(true);
simples.setCdDocente(""+t.getSigesCode());
simples.setCdTurma(turma.getTurma());
simples.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
1025,6 → 1067,14
return merge;
}
 
/**
* Cria uma tipologia Simples para cada par Docente-Turma nesta cadeira olhando para
* todas as tipologias existentes, uma vez que o Baco não guarda associações entre
* Docentes e Turmas isso será retirado das tipologias importadas
*
* @param tipologias
* @param docenteTurmas
*/
private void fullfillTipologiasSimples(ArrayList<Tipologia> tipologias, Map<String, Map<String, Tipologia>> docenteTurmas) {
if(tipologias != null)
for(Tipologia tipo: tipologias)
1041,13 → 1091,14
simples.setCdTurma(tipo.getCdTurma());
simples.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
simples.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS);
//simples.setUse(true);//TODAS USADAS
if(tipo.hasOcorrencias())
{
simples.setOcorrencias(tipo.getOcorrencias());
}
turmasDocente.put(tipo.getCdTurma(),simples);
}
if(tipo.hasOcorrencias())
else if(tipo.hasOcorrencias())
{
if(simples.getOcorrencias() == null)
simples.setOcorrencias(0);
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/UserDaoImpl.java
10,6 → 10,7
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.utils.RoleManager;
 
import java.io.Serializable;
import java.util.ArrayList;
133,6 → 134,16
}
}
 
public List<User> loadRoleUsers(String role, int maxResults, int firstResult)
{
Criteria c = createCriteria()
.add(like("roles","%" + role + RoleManager.ROLE_SEPARATOR +"%"))
.addOrder(Order.asc("name"))
.setMaxResults(maxResults)
.setFirstResult(firstResult);
return c.list();
}
 
public List<User> loadRoleUsers(String role)
{
if(role == null || role.trim().length() == 0)
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioDaoImpl.java
1,15 → 1,20
package pt.estgp.estgweb.domain.dao.impl;
 
import jomm.dao.DaoException;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import pt.estgp.estgweb.domain.QuestionarioImpl;
import pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto;
import pt.estgp.estgweb.domain.QuestionarioResposta;
import pt.estgp.estgweb.domain.QuestionarioRespostaRequisitada;
 
import java.util.List;
 
import static org.hibernate.criterion.Restrictions.eq;
import static org.hibernate.criterion.Restrictions.*;
 
/**
* @author Jorge Machado
63,5 → 68,128
}
}
 
public List<QuestionarioImpl> findProcessing()
{
try
{
Criteria criteria = createCriteria();
criteria.add(or(eq("state",QuestionarioImpl.State.PROCESSING.name()),eq("state",QuestionarioImpl.State.PROCESSING_WITH_ANSWERS.name())));
return criteria.list();
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
public List<QuestionarioImpl> findNotClosed()
{
try
{
Criteria criteria = createCriteria();
criteria.add(not(or(or(eq("state",QuestionarioImpl.State.CLOSED.name()),eq("state",QuestionarioImpl.State.PROCESSING_OLAP.name())),
eq("state",QuestionarioImpl.State.OLAP.name()))))
.addOrder(Order.desc("id"));
return criteria.list();
}
catch (HibernateException e)
{
throw new DaoException(e);
}
}
 
 
public long getNumeroRespostas(long questionarioId)
{
Query q = getCurrentSession().createQuery
("select count(r.id) from r in class " + QuestionarioResposta.class.getName() + " " +
" JOIN r.questionario q " +
" where q.id = " + questionarioId);
Object result = q.uniqueResult();
if(result != null && ((Long)result) > 0)
{
return (Long)result;
}
else
return 0;
}
 
public long getNumeroRespostasRequisitadas(long questionarioId)
{
Query q = getCurrentSession().createQuery
("select count(r.id) from r in class " + QuestionarioRespostaRequisitada.class.getName() + " " +
" JOIN r.questionario q " +
" where q.id = " + questionarioId);
Object result = q.uniqueResult();
if(result != null && ((Long)result) > 0)
{
return (Long)result;
}
else
return 0;
}
 
 
public static class QuestionarioStatsVars
{
public long cursos;
public long unidades;
public long profs;
public long alunos;
public long turmas;
public long alunosDeUsadas;
public long profsDeUsadas;
public long unidadesUsadas;
public long profsTimeStudents;
public long respostasRequisitadas;
public long respostasObtidas;
}
 
 
 
 
public QuestionarioStatsVars loadQuestionarioStatsPedagogico(long questionarioId)
{
QuestionarioStatsVars questionarioStatsVars = new QuestionarioStatsVars();
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" count(distinct c.id) AS cursos " +
",count(distinct u.id) AS unidades " +
",sum (u.profs) AS profs " +
",sum (u.turmas) AS turmas " +
",sum (u.students) AS students " +
",sum (case when u.usar = true then u.students else 0 end) AS alunosDeUsadas " +
",sum (case when u.usar = true then u.profs else 0 end) AS profsDeUsadas " +
",sum (case when u.usar = true then 1 else 0 end) AS unidadesUsadas " +
",sum (case when u.usar = true then 1 else 1 end) AS unidadesTodasCheck " +
",sum (case when u.usar = true then (u.profs * u.students) else 0 end) AS respostasEsperadas " +
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " +
"JOIN c.questionario q " +
"JOIN c.unidadesAfetas u " +
 
"WHERE q.id = :id " +
"GROUP BY q.id");
 
q.setLong("id",questionarioId);
Object[] results = (Object[]) q.uniqueResult();
 
if(results != null && results[0] != null)
{
questionarioStatsVars.cursos = (Long) results[0];
questionarioStatsVars.unidades = (Long) results[1];
questionarioStatsVars.profs = (Long) results[2];
questionarioStatsVars.turmas = (Long) results[3];
questionarioStatsVars.alunos = (Long) results[4];
questionarioStatsVars.alunosDeUsadas = (Long) results[5];
questionarioStatsVars.profsDeUsadas = (Long) results[6];
questionarioStatsVars.unidadesUsadas = (Long) results[7];
 
if(((Long) results[8]) != questionarioStatsVars.unidades)
logger.error("TEM UM ERRO NA QUERY, a contagem de usadas com o distinct da diferente de com o SUM");
questionarioStatsVars.profsTimeStudents = (Long) results[9];
questionarioStatsVars.respostasRequisitadas = getNumeroRespostasRequisitadas(questionarioId);
questionarioStatsVars.respostasObtidas = getNumeroRespostas(questionarioId);
}
 
return questionarioStatsVars;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioPedagogicoCursoAfetoDaoImpl.java
1,7 → 1,9
package pt.estgp.estgweb.domain.dao.impl;
 
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.QuestionarioPedagogicoCursoAfeto;
 
import java.util.List;
13,6 → 15,8
*/
public class QuestionarioPedagogicoCursoAfetoDaoImpl extends QuestionarioPedagogicoCursoAfetoDao{
 
private static final Logger logger = Logger.getLogger(QuestionarioPedagogicoCursoAfetoDaoImpl.class);
 
public static QuestionarioPedagogicoCursoAfetoDaoImpl getInstance() {
if (myInstance == null)
myInstance = new QuestionarioPedagogicoCursoAfetoDaoImpl();
33,23 → 37,35
.list();
}
 
public List<Long> findCursosAfetosIds(long questionarioId)
{
return createCriteria()
.setProjection(Projections.distinct(Projections.property("id")))
.add(eq("questionario.id", questionarioId))
.list();
}
 
 
 
 
public static class CourseStatsVars
{
public long unidades;
public long marcadas;
public long observadas;
public long porVerProfs;
public long porVer;
public long naoUsadas;
}
 
 
 
public CourseStatsVars loadStats(long cursoAfetoId)
{
CourseStatsVars courseStatsVars = new CourseStatsVars();
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" sum (case when u.vista = false then 1 else 0 end) AS porVer " +
",sum (case when u.vistaProfs = false then 1 else 0 end) AS porVerProfs " +
",sum (case when u.usar = false then 1 else 0 end) AS naoUsadas " +
",sum (case when u.marked = true then 1 else 0 end) AS marked " +
",sum (case when u.obs is not NULL and u.obs != '' then 1 else 0 end) AS observadas " +
61,12 → 77,38
 
q.setLong("id",cursoAfetoId);
Object[] results = (Object[]) q.uniqueResult();
courseStatsVars.porVer = (Long) results[0];
courseStatsVars.naoUsadas = (Long) results[1];
courseStatsVars.marcadas = (Long) results[2];
courseStatsVars.observadas = (Long) results[3];
courseStatsVars.unidades = (Long) results[4];
 
if(results != null && results[0] != null)
{
courseStatsVars.porVer = (Long) results[0];
courseStatsVars.porVerProfs = (Long) results[1];
courseStatsVars.naoUsadas = (Long) results[2];
courseStatsVars.marcadas = (Long) results[3];
courseStatsVars.observadas = (Long) results[4];
courseStatsVars.unidades = (Long) results[5];
}
 
return courseStatsVars;
}
 
public long countRespostas(long cursoAfetoId)
{
Query q = AbstractDao.getCurrentSession().createQuery("SELECT " +
" count(distinct r.id) AS respostas " +
"from " + QuestionarioPedagogicoCursoAfeto.class.getName() + " c " +
"JOIN c.unidadesAfetas u " +
"JOIN u.tipologiasRequisitadas t " +
"JOIN t.alunosRequisitados a " +
"JOIN a.respostaRequisitada rR " +
"JOIN rR.resposta r " +
"WHERE c.id = :id ");
 
q.setLong("id",cursoAfetoId);
Object result = q.uniqueResult();
if(result != null)
return (Long) result;
return 0;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/CourseDaoImpl.java
67,7 → 67,24
.uniqueResult();
}
 
public int countCoursesUnits(String importYear,long courseId,String semestre)
{
/* return createCriteria()
.createAlias("courseUnits", "c")
.setProjection(Projections.property("c.id"))
.add(eq("c.importYear", importYear))
.add(eq("id", courseId))
.list().size();
*/
return (Integer) createCriteria(CourseUnit.class)
.setProjection(Projections.rowCount())
.add(eq("importYear",importYear))
.add(eq("semestre",semestre))
.add(eq("course.id",courseId))
.uniqueResult();
}
 
 
public int countCoursesUnitsTurmas(String importYear,long courseId)
{
return (Integer) createCriteria(CourseUnitTurma.class)
231,7 → 248,7
}
if (institutionCode != null && institutionCode.trim().length() > 0)
{
query += logic + "cu.institutionCode = :institutionCode ";
query += logic + "c.institutionalCode = :institutionCode ";
logic = " and ";
}
if (area != null && area.length() > 0)
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/dao/impl/QuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl.java
16,16 → 16,16
return (QuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl) myInstance;
}
 
public List<QuestionarioPedagogicoUnidadeCurricularAfeta> find(long questionarioId, String cursoCode,String codeUnidade)
public List<QuestionarioPedagogicoUnidadeCurricularAfeta> find(long questionarioId, String cursoCode,Long idUnidade)
{//pt.estgp.estgweb.domain.dao.DaoFactory.getQuestionarioPedagogicoUnidadeCurricularAfetaDaoImpl().getCurrentSession().createCriteria(QuestionarioPedagogicoUnidadeCurricularAfeta.class).add(eq("cursoAfeto.id","1")).list()
//add(eq("cuA.questionario.id", new Long(20))).add(eq("codigoUnidade","209535")).add(eq("cuA.codigoCurso","9119"))
Query q = getCurrentSession().createQuery("select c from c in class " + QuestionarioPedagogicoUnidadeCurricularAfeta.class.getName() + " " +
" join c.cursoAfeto as curso " +
"where curso.questionario.id = :questionarioId and curso.codigoCurso = :codigoCurso" +
" and c.codigoUnidade = :codigoUnidade");
" and c.courseUnit.id = :idUnidade");
q.setLong("questionarioId", questionarioId);
q.setString("codigoCurso", cursoCode);
q.setString("codigoUnidade",codeUnidade);
q.setLong("idUnidade",idUnidade);
return q.list();
 
/*DaoFactory.getCourseDaoImpl()
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/UserSessionImpl.java
308,4 → 308,11
return getUser() == null;
}
 
public String getShortName()
{
if(getName() != null)
return getName().split(" ")[0];
return getName();
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/QuestionarioPedagogicoCursoAfetoImpl.java
22,4 → 22,12
{
setMarcadas(getMarcadas()+1);
}
 
public void resetAnswerStats() {
setStatTipologiasRequisitadas(0);
setStatRespostasRequisitadas(0);
}
 
public void incStatTipologiasRequisitadas(){ setStatTipologiasRequisitadas(getStatTipologiasRequisitadas()+1);}
public void incStatRespostasRequisitadas(){ setStatRespostasRequisitadas(getStatRespostasRequisitadas() + 1);}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/filters/chains/ResourceAccessControlEnum.java
10,8 → 10,8
public enum ResourceAccessControlEnum
{
publicDomain("resource.access.publicDomain", new ResourceAccessControlPublicDomainFilter()),
privateDomain("resource.access.privateDomain", new ResourceAccessControlPublicDomainFilter()),
authenticatedDomain("resource.access.authenticatedDomain", new ResourceAccessControlPublicDomainFilter()),
privateDomain("resource.access.privateDomain", new ResourceAccessControlPrivateDomainFilter()),
authenticatedDomain("resource.access.authenticatedDomain", new ResourceAccessControlAuthenticatedDomainFilter()),
adminDomain("resource.access.adminDomain",new ResourceAccessControlAdminDomainFilter()),
superUserDomain("resource.access.superDomain",new ResourceAccessControlSuperDomainFilter()),
courseunitDeliverableDomain("resource.access.courseunitDeliverableDomain",new ResourceAccessControlCourseUnitDeliverableFilter()),
/branches/v3/impl/src/java/pt/estgp/estgweb/web/tags/InstanceOfTag.java
New file
0,0 → 1,96
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
import org.apache.struts.util.RequestUtils;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
public class InstanceOfTag extends BodyTagSupport
{
 
private static final Logger logger = Logger.getLogger(InstanceOfTag.class);
 
private String name;
 
private String property;
 
private String value;
 
public String getName()
{
return name;
}
 
public void setName(String name)
{
this.name = name;
}
 
public String getProperty()
{
return property;
}
 
public void setProperty(String property)
{
this.property = property;
}
 
public String getValue() {
return value;
}
 
public void setValue(String value) {
this.value = value;
}
 
public int doStartTag() throws JspException
{
if (go())
{
return EVAL_BODY_TAG;
}
else
return SKIP_BODY;
}
 
public boolean go() throws JspException
{
 
Object obj = RequestUtils.lookup(pageContext, name, property, null);
try
{
return Class.forName(value).isInstance(obj);
}
catch (ClassNotFoundException e)
{
return false;
}
 
}
 
public int doEndTag() throws JspException
{
if (go())
{
String toPage = bodyContent.getString().trim();
JspWriter writer = pageContext.getOut();
try
{
writer.write(toPage);
}
catch (Exception e)
{
logger.error(e, e);
throw new JspException(e);
}
}
// Continue processing this page
return EVAL_PAGE;
}
 
 
 
}
Property changes:
Added: svn:executable
+ *
/branches/v3/impl/src/java/pt/estgp/estgweb/web/tags/IsNotAuthenticatedTag.java
1,53 → 1,18
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
import org.apache.struts.taglib.logic.ConditionalTagBase;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.UserSessionImpl;
 
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
 
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.Globals;
 
public class IsNotAuthenticatedTag extends BodyTagSupport
public class IsNotAuthenticatedTag extends ConditionalTagBase
{
 
private static final Logger logger = Logger.getLogger(IsNotAuthenticatedTag.class);
 
public int doStartTag() throws JspException
{
if (go())
return EVAL_BODY_TAG;
else
return SKIP_BODY;
}
 
public boolean go()
{
protected boolean condition() throws JspException {
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
return userSession == null || userSession.getUser() == null;
return !(userSession != null && userSession.getUser() != null);
}
 
public int doEndTag() throws JspException
{
if (go())
{
String toPage = bodyContent.getString().trim();
JspWriter writer = pageContext.getOut();
try
{
writer.write(toPage);
}
catch (Exception e)
{
logger.error(e, e);
throw new JspException(e);
}
}
 
// Continue processing this page
return EVAL_PAGE;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/tags/IsAuthenticatedTag.java
1,53 → 1,22
package pt.estgp.estgweb.web.tags;
 
import org.apache.log4j.Logger;
import org.apache.struts.taglib.logic.ConditionalTagBase;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.UserSessionImpl;
 
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
 
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.UserImpl;
import pt.estgp.estgweb.Globals;
 
public class IsAuthenticatedTag extends BodyTagSupport
public class IsAuthenticatedTag extends ConditionalTagBase
{
 
private static final Logger logger = Logger.getLogger(IsAuthenticatedTag.class);
 
public int doStartTag() throws JspException
{
if (go())
return EVAL_BODY_TAG;
else
return SKIP_BODY;
}
 
public boolean go()
{
 
@Override
protected boolean condition() throws JspException {
UserSessionImpl userSession = (UserSessionImpl) pageContext.getRequest().getAttribute(Globals.USER_SESSION_KEY);
return userSession != null && userSession.getUser() != null;
}
 
public int doEndTag() throws JspException
{
if (go())
{
String toPage = bodyContent.getString().trim();
JspWriter writer = pageContext.getOut();
try
{
writer.write(toPage);
}
catch (Exception e)
{
logger.error(e, e);
throw new JspException(e);
}
}
// Continue processing this page
return EVAL_PAGE;
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/utils/TestHttpServletRequest.java
20,8 → 20,11
*/
public class TestHttpServletRequest implements HttpServletRequest
{
 
Cookie[] cookies = new Cookie[1];
 
 
 
public TestHttpServletRequest(String requester)
{
cookies[0] = new Cookie(pt.estgp.estgweb.web.Globals.BACO_SESSION_COOKIE,requester);
/branches/v3/impl/src/java/pt/estgp/estgweb/web/form/questionarios/QuestionarioRespostaForm.java
New file
0,0 → 1,71
package pt.estgp.estgweb.web.form.questionarios;
 
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.QuestionarioResposta;
import pt.estgp.estgweb.domain.QuestionarioRespostaImpl;
import pt.estgp.estgweb.web.form.ApplicationForm;
 
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
 
/**
* Created by jorgemachado on 05/06/16.
*/
public class QuestionarioRespostaForm extends ApplicationForm
{
QuestionarioRespostaImpl resposta = DomainObjectFactory.createQuestionarioRespostaImpl();
 
public QuestionarioRespostaForm() {
resposta.setQuestionario(DomainObjectFactory.createQuestionarioImpl());
}
 
long alunoRequesitadoId;
 
public long getAlunoRequesitadoId() {
return alunoRequesitadoId;
}
 
public void setAlunoRequesitadoId(long alunoRequesitadoId) {
this.alunoRequesitadoId = alunoRequesitadoId;
}
 
public QuestionarioRespostaImpl getResposta() {
return resposta;
}
 
public void setResposta(QuestionarioRespostaImpl resposta) {
this.resposta = resposta;
}
 
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
List<String> respostasVazias = new ArrayList<String>();
 
for(int i = 1; i <= 17; i++)
{
try {
String r = (String) QuestionarioResposta.class.getMethod("getR"+i).invoke(resposta);
if(r == null || r.trim().length() == 0)
{
if(respostasVazias.size() == 0)
addMessage(errors, request, "questionario.respostas.grupos.1.2.3");
respostasVazias.add("" + i);
}
 
}
catch (Throwable e)
{
System.err.println("Erro nao esperado metodo getR" + i + " nao existe na resposta");
e.printStackTrace();
}
}
if(respostasVazias.size() > 0)
request.setAttribute("respostasVazias",respostasVazias);
 
return errors;
}
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/paginaseseccoes/PaginasSeccoesController.java
2,40 → 2,21
 
import jomm.dao.utils.HibernateUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.*;
import org.apache.struts.upload.FormFile;
import org.hibernate.ObjectNotFoundException;
import pt.estgp.estgweb.domain.Image;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.domain.Pagina;
import pt.estgp.estgweb.domain.Seccao;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.impl.PaginaDao;
import pt.estgp.estgweb.domain.dao.impl.SeccaoDao;
import pt.estgp.estgweb.domain.views.BlogPostView;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.controllers.AddRolesController;
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.form.blogs.BlogForm;
import pt.estgp.estgweb.web.utils.DomainUtils;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterRetrieveException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterExpressionException;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ExecutedFilterException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
 
/**
* @author Jorge Machado
49,7 → 30,31
private static final Logger logger = Logger.getLogger(PaginasSeccoesController.class);
 
 
public ActionForward uploadFicheiro(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable, ServletException
{
 
PaginasSeccoesForm frm = (PaginasSeccoesForm) form;
 
String id = (String) ServiceManager.getInstance().execute(
RequestUtils.getRequester(request, response),
"SalvarFicheiro",
new Object[]{ frm }
 
);
 
System.out.println("O FICHEIRO TEM O ID " + id);
 
request.setAttribute("FICHEIRO_ID", id);
 
return mapping.getInputForward();
}
 
 
 
public ActionForward criarPagina(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/paginaseseccoes/PaginasSeccoesForm.java
1,26 → 1,13
package pt.estgp.estgweb.web.controllers.paginaseseccoes;
 
import jomm.utils.StringsUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.upload.FormFile;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.Pagina;
import pt.estgp.estgweb.domain.Seccao;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.views.BlogPostView;
import pt.estgp.estgweb.domain.views.BlogView;
import pt.estgp.estgweb.utils.DynamicArrayList;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.form.AddRolesForm;
import pt.estgp.estgweb.web.form.ApplicationForm;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
 
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
 
/**
* @author Jorge Machado
* @date 21/Abr/2008
34,7 → 21,16
Pagina pagina;
Seccao seccao;
 
FormFile ficheiro;
 
public FormFile getFicheiro() {
return ficheiro;
}
 
public void setFicheiro(FormFile ficheiro) {
this.ficheiro = ficheiro;
}
 
public Pagina getPagina()
{
if(pagina == null)
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioYearSemestreController.java
3,6 → 3,7
import org.apache.struts.action.*;
import pt.estgp.estgweb.domain.QuestionarioImpl;
import pt.estgp.estgweb.web.form.questionarios.QuestionarioForm;
import pt.estgp.estgweb.web.form.questionarios.QuestionarioRespostaForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
52,4 → 53,25
}
return mapping.findForward("admin");
}
 
public ActionForward submitResposta(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
QuestionarioRespostaForm frm = (QuestionarioRespostaForm) form;
 
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"resposta","alunoRequisitadoId"};
Object[] args = {frm.getResposta(),frm.getAlunoRequesitadoId()};
 
sm.execute(RequestUtils.getRequester(request, response),"QuestionarioSalvarResposta",args,names);
addMessage(request,"questionario.resposta.com.sucesso");
 
return mapping.findForward("success");
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioController.java
141,5 → 141,120
}
 
 
public ActionForward putInAssignedAnwsers(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
 
 
QuestionarioForm frm = (QuestionarioForm) form;
 
long questionarioId;
if(request.getParameter("questionarioId")!=null)
questionarioId = Long.parseLong(request.getParameter("questionarioId"));
else
questionarioId = frm.getQuestionario().getId();
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
 
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioPutAssignedAnswers",args,names);
 
frm.setQuestionario(affected);
 
return mapping.findForward("admin");
}
 
public ActionForward revertAssignationDetails(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
 
 
QuestionarioForm frm = (QuestionarioForm) form;
 
long questionarioId;
if(request.getParameter("questionarioId")!=null)
questionarioId = Long.parseLong(request.getParameter("questionarioId"));
else
questionarioId = frm.getQuestionario().getId();
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
 
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioRevertAssignationDetails",args,names);
 
frm.setQuestionario(affected);
 
return mapping.findForward("admin");
}
 
public ActionForward stopProcessement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
 
 
QuestionarioForm frm = (QuestionarioForm) form;
 
long questionarioId;
if(request.getParameter("questionarioId")!=null)
questionarioId = Long.parseLong(request.getParameter("questionarioId"));
else
questionarioId = frm.getQuestionario().getId();
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
 
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioStopProcessement",args,names);
 
frm.setQuestionario(affected);
 
return mapping.findForward("admin");
}
 
public ActionForward startProcessement(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
 
 
QuestionarioForm frm = (QuestionarioForm) form;
 
long questionarioId;
if(request.getParameter("questionarioId")!=null)
questionarioId = Long.parseLong(request.getParameter("questionarioId"));
else
questionarioId = frm.getQuestionario().getId();
 
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {questionarioId};
 
QuestionarioImpl affected = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"QuestionarioStartProcessement",args,names);
 
frm.setQuestionario(affected);
 
return mapping.findForward("admin");
}
 
 
 
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/questionarios/QuestionarioCourseSelectionController.java
24,6 → 24,28
 
private static final Logger logger = Logger.getLogger(QuestionarioCourseSelectionController.class);
 
 
 
public ActionForward assignAnswers(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Throwable
{
QuestionarioForm frm = (QuestionarioForm) form;
 
IServiceManager sm = ServiceManager.getInstance();
String[] names = {"questionarioId"};
Object[] args = {frm.getQuestionario().getId()};
 
QuestionarioImpl q = (QuestionarioImpl) sm.execute(RequestUtils.getRequester(request, response),"RunJobAssignAnswers",args,names);
 
frm.setQuestionario(q);
 
addMessage(request,"questionarios.answers.start");
return mapping.findForward("assignAnswers");
}
 
public ActionForward selectCourses(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/authenticate/AuthenticateController.java
139,7 → 139,7
 
UserSession userSession = UserSessionProxy.loadUserSessionFromRequest(request);
if(userSession.getUser() == null)
return mapping.findForward("welcome");
return mapping.findForward(Globals.SYSTEM_REDIRECTIONS_POLICY_INDEX_WELCOME);
IServiceManager sm = ServiceManager.getInstance();
Object[] args = new Object[]{};
//to send good by message
/branches/v3/impl/src/java/pt/estgp/estgweb/web/filters/UserSessionFilter.java
91,9 → 91,9
 
if(((HttpServletRequest)request).getServletPath().indexOf("errorNoCookies.do")>=0 || !hrequest.isRequestedSessionIdFromCookie())
{
chain.doFilter(request,response);
//chain.doFilter(request,response);
logger.info("COOKIE lost");
return;
 
}
try
{
/branches/v3/impl/src/java/pt/estgp/estgweb/web/filters/CacheControlFilter.java
New file
0,0 → 1,35
package pt.estgp.estgweb.web.filters;
 
/**
* Created by jorgemachado on 24/05/16.
*/
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
 
public class CacheControlFilter implements Filter {
 
@Override
public void init(FilterConfig filterConfig) throws ServletException {
 
}
 
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
 
HttpServletResponse resp = (HttpServletResponse) response;
resp.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
resp.setDateHeader("Last-Modified", new Date().getTime());
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0");
resp.setHeader("Pragma", "no-cache");
 
chain.doFilter(request, response);
}
 
@Override
public void destroy() {
 
}
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/FTPFileProxy.java
102,7 → 102,7
{
//FALHOU PODE A PASS DO USER NAO DAR POR NAO ESTAR NO FTP
//TEM DE VERIFICAR SE PODE USAR DEFAULTS QUANDO AUTENTICACAO FALHA
if(userSession.getUsername() != null &&
if(userSession != null && userSession.getUsername() != null &&
ConfigProperties
.getBooleanProperty(
server + ".use.default.credentials.to.read.if.user.fail.when.authenticated"))
121,7 → 121,7
 
return ftpServer.getClient();
}
else if(userSession.getUsername() != null &&
else if(userSession != null && userSession.getUsername() != null &&
!ConfigProperties
.getBooleanProperty(
server + ".use.default.credentials.to.read.if.user.fail.when.authenticated"))
169,6 → 169,7
if(path != null)
{
String serverUrl = pt.estgp.estgweb.utils.ConfigProperties.getProperty("server." + server);
String startPath = pt.estgp.estgweb.utils.ConfigProperties.getProperty("server." + server + ".start.path");
String remoteName = path.substring(path.lastIndexOf("/")+1);
String remoteDirectory = path.substring(0,path.lastIndexOf("/"));
FtpServer ftpServer = FtpServer.getNewServer(serverUrl,username,password);
182,6 → 183,15
return;
}
 
if(startPath.length() > 0)
{
if(remoteDirectory.startsWith("/"))
remoteDirectory = startPath + remoteDirectory;
else
remoteDirectory = startPath + "/" + remoteDirectory;
}
 
 
client.changeWorkingDirectory(remoteDirectory);
 
 
/branches/v3/impl/src/doc/estgweb.eap
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v3/impl/src/doc/siges/ModeloDeInformacaoPAE-EmVigor.docx
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream
/branches/v3/impl/src/doc/siges/ModeloDeInformacaoPAEv2.docx
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+ application/octet-stream