Git Product home page Git Product logo

esup-emargement's Introduction

Esup-emargement

Esup-emargement est une application multi-contexte permettant l'émargement et le contrôle de présence en lien avec le système d'information.

============================

https://www.esup-portail.org/wiki/display/EMARGEMENT

Éléments requis

Pré-requis

  • Java Open JDK 8 : https://openjdk.java.net/install : le mieux est de l'installer via le système de paquets de votre linux.

  • Maven (dernière version 3.0.x) : http://maven.apache.org/download.cgi : le mieux est de l'installer via le système de paquets de votre linux.

  • Postgresql 9 : le mieux est de l'installer via le système de paquets de votre linux.

  • Tomcat 8/9

  • un serveur CAS pour l'authentification / identification

  • un annuaire Ldap permettant :

    • de donner les droits "Super-admin"
    • d'effectuer des recherches de groupes pour la constitution de listes d'émargement
    • d'effectuer des recherches d'un simple utilisateur pour insertion de celui-ci Esup-nfc-tag serveur et client afin de valider les badgeages effectués. Page dédiée : Esup-nfc-tag

PostgreSQL

pg_hba.conf : ajout de

host    all             all             127.0.0.1/32            password

redémarrage de postgresql

psql
create database esupemargement;
create USER esupemargement with password 'esup';
grant ALL ON DATABASE esupemargement to esupemargement; 

JDBC

Copier le jar JDBC dans le répertoire /src/main/resources puis déployer le dans le .m2

mvn install:install-file  -Dfile=/opt/esup-emargement/src/main/resources/lib/ojdbc7.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=4.0 -Dpackaging=jar

Paramétrage mémoire JVM :

Pensez à paramétrer les espaces mémoire JVM :

export JAVA_OPTS="-Xms256m -Xmx256m"

Création des tables :

modification de la configuration spring.jpa.hibernate.ddl-auto dans esup-emargement.properties :

passage de update à create

démarrage de l'application esup-emargement (via spring-boot, tomcat, ou autre, cf ci-dessous) pour création effective des tables

puis on repositionne spring.jpa.hibernate.ddl-auto à update pour que les prochains redémarrages n'écrasent pas les tables et donc les données

Lancement d'esup-emargement via spring-boot :

mvn spring-boot:run

Obtention du war pour déploiement sur tomcat ou autre :

mvn clean package

esup-nfc-tag-server config

-urls ws

<bean id="emargementJavaExtApi" class="org.esupportail.nfctag.service.api.impl.AppliExtRestWs">
    <property name="isTagableUrl" value="https://esup-emargement.univ-ville.fr/wsrest/nfc/isTagable"/>
    <property name="validateTagUrl" value="https://esup-emargement.univ-ville.fr/wsrest/nfc/validateTag"/>
    <property name="getLocationsUrl" value="https://esup-emargement.univ-ville.fr/wsrest/nfc/locations"/>
    <property name="description" value="Web Service Emargement-java test"/>
    <!--property name="backgroundColor" value="rgb(121, 119, 0)"/-->
    <property name="header" value="https://esup-emargement.univ-ville.fr/resources/images/logo.png"/>      
</bean>

-tagIdcheck

<bean id="tagIdCheckApiEsupSgc" class="org.esupportail.nfctag.service.api.impl.TagIdCheckRestWs">
    <property name="tagIdCheckUrl" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/tagIdCheck"/>
    <property name="idFromEppnInitUrl" value="https://esup-sgc.univ-ville.fr/wsrest/nfc/idFromEppnInit"/>
    <property name="description" value="via Esup SGC"/>
</bean>

Téléchargement

Vous pourrez trouver la dernière version d'esup-emargementr sur Github :

https://github.com/EsupPortail/esup-emargement

Contacts

Merci de vous abonner et d'utiliser la liste mail "esup-utilisateurs" pour nous contacter (problèmes techniques notamment) :

https://listes.esup-portail.org/sympa/info/esup-utilisateurs

Crédits & Licence

Copyright (C) 2020 Esup Portail http://www.esup-portail.org @Author (C) 2020 Jean-Pierre Tran [email protected] @Contributor (C) 2020 Vincent Bonamy [email protected] @Contributor (C) 2020 Fabrice Sebbe [email protected] @Contributor (C) 2020 Dominique Wormser [email protected] @Contributor (C) 2020 Olivier Lefebvre [email protected] @Contributor (C) 2020 Hugo Sadaune @Contributor (C) 2020 Gauthier Girot

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

esup-emargement's People

Contributors

jptran avatar vbonamy avatar vinriviere avatar dependabot[bot] avatar

Stargazers

 avatar Franck Bordinat avatar David Lemaignent avatar Clementpr avatar  avatar DUVAL Olivier avatar

Watchers

Neustradamus avatar James Cloos avatar Ludovic Auxepaules avatar Dooremont Frédéric avatar  avatar Julien Marchal avatar Mathilde Guérin avatar Aymar Anli avatar Pascal Rigaux avatar  avatar  avatar Franck Bordinat avatar Ptitloup avatar  avatar  avatar  avatar

esup-emargement's Issues

Case "Présent" pas automatiquement cochée après confirmation

Cas d'utilisation :

  • J'ouvre une fenêtre surveillant sur une session (.../supervisor/presence...)
  • Je scanne une carte avec esup-nfc-tag-droid. Rien ne se passe côté Esup-emargement. C'est normal, car je n'ai pas encore confirmé.
  • Je confirme sur esup-nfc-tag-droid. Une popup s'affiche côté Esup-emargement, avec le nom et la photo. C'est ce qu'il faut.
  • Mais dans la liste des participants à la session, la case à cocher "Présent" ne se coche pas. C'est une régression : avant, ça fonctionnait.

Dès qu'Esup-emargement détecte une confirmation de badgeage, il faut qu'il actualise la ligne correspondant au porteur de la carte : case à cocher "Présent", heure de badgeage, etc.

Rafraîchir la page Surveillant après le badgeage d'un inconnu

Page Surveillant, session non libre :
Il serait utile de rafraîchir la page après avoir scanné la carte d'une personne inconnue de la session.
Autrement dit, il faudrait toujours rafraîchir la page après un badgeage : que la personne soit connue ou non.

Ainsi, tout surveillant pourra suivre l'évolution des badgeages sans jamais avoir à rafraîchir la page avec F5.

Emargement : Tri par personne ne marche pas

Page Surveillant > Emargement.
Le tri sur "Personne" ne marche pas. Quand on clique sur l'en-tête de colonne, il semble que le tri s'effectue sur eppn. Alors qu'il devrait s'effectuer sur le nom affiché.

Ce problème est similaire à l'Issue #4 concernant les Lieux.

Statistiques : la colonne « is_session_epreuve_closed » n'existe pas

Menu Gestionnaire > Statistiques
Tout se passe bien du côté de l'affichage.
En revanche, cela provoque une exception dans le log applicatif :

PSQLException: ERREUR: la colonne « is_session_epreuve_closed » n'existe pas

13/11/2023 15:53:30 WARN  org.esupportail.emargement.web.manager.StatsController : Impossible de récupérer les statistiques tagCheckersByContext
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
        at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:259)
        at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:233)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551)
        at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)
        at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:243)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:241)
        at com.sun.proxy.$Proxy183.countTagCheckersByContext(Unknown Source)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:58)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:241)
        at com.sun.proxy.$Proxy183.countTagCheckersByContext(Unknown Source)
        at org.esupportail.emargement.services.StatsService$2.<init>(StatsService.java:156)
        at org.esupportail.emargement.services.StatsService.getStats(StatsService.java:146)
        at org.esupportail.emargement.web.manager.StatsController.getStats(StatsController.java:66)
        at org.esupportail.emargement.web.manager.StatsController$$FastClassBySpringCGLIB$$ebdbfc05.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:792)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)
        at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:707)
        at org.esupportail.emargement.web.manager.StatsController$$EnhancerBySpringCGLIB$$56cb9511.getStats(<generated>)
        at jdk.internal.reflect.GeneratedMethodAccessor211.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:529)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.security.web.authentication.switchuser.SwitchUserFilter.doFilter(SwitchUserFilter.java:212)
        at org.springframework.security.web.authentication.switchuser.SwitchUserFilter.doFilter(SwitchUserFilter.java:172)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:94)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.esupportail.emargement.security.ContextFilter.doFilter(ContextFilter.java:42)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:67)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:94)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
        at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:126)
        at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:64)
        at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:101)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:424)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
        at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:103)
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:37)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:67)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:2322)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2075)
        at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2037)
        at org.hibernate.loader.Loader.doQuery(Loader.java:956)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:357)
        at org.hibernate.loader.Loader.doList(Loader.java:2868)
        at org.hibernate.loader.Loader.doList(Loader.java:2850)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2682)
        at org.hibernate.loader.Loader.list(Loader.java:2677)
        at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)
        at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2186)
        at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1204)
        at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:177)
        at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1617)
        at org.hibernate.query.Query.getResultList(Query.java:165)
        at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:128)
        at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:90)
        at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:156)
        at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:144)
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:160)
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:139)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:76)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
        ... 160 common frames omitted
Caused by: org.postgresql.util.PSQLException: ERREUR: la colonne « is_session_epreuve_closed » n'existe pas
  Position : 233
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2675)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2365)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:355)
        at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:490)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:408)
        at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:167)
        at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:119)
        at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
        at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)
        ... 191 common frames omitted

Session Libre, ou pas, ou les deux

Actuellement, dans les paramètres de session, on peut cocher "Session Libre" ou pas. Mais on ne peut pas cocher ce paramètre si la session est déjà associée à des inscrits. Je comprends qu'il y a 2 types de session bien différents : les session libres ou "pas libres".

Je souhaiterais qu'on puisse combiner les deux modes. Commencer une session avec une liste d'inscrits prédéfinie, mais également autoriser des personnes supplémentaires à émarger sur la session, au lieu de les traiter comme des intrus. On pourrait alors les afficher différemment sur l'écran d'Emargement, par exemple d'une autre couleur, avec la mention "non invité".

Concrètement, si on pouvait cocher "session libre" alors que la session contient déjà des inscrits, ce serait parfait.

Session libre : badgé 2 fois

Session libre :

  • Je badge 1 seule fois
  • Mais sur l'écran du surveillant, j'obtiens immédiatement une alerte : "... a badgé(e) 2 fois"
  • Et sur l'écran Gestionnaire > Sessions > Inscrits, je vois également que le champ "Nb badgeage" est à 2.

Ce n'est pas normal : chaque badgeage ne doit être comptabilisé qu'une fois.
A cause de ce bug, l'alerte badgeage max n'est plus utilisable sur les sessions libres, étant donné que l'alerte se déclenche à tous les coups.

Le tri sur colonne ne marche pas après un badgeage

Je vais sur l'écran Surveillant > Emargement.
Je sélectionne une session.
On peut cliquer sur les en-têtes de colonnes pour trier la liste : c'est ce qu'il faut.

Ensuite :

  • Je scanne une carte, et je confirme.
  • L'écran se rafraîchit automatiquement.
  • Mais si maintenant je clique sur un en-tête de colonne pour trier, cela provoque un bug. La page s'affiche mal : seule la liste apparaît sur fond blanc. Si je regarde le source HTML, on voit que les données commencent par un <div>. On a perdu une partie de la page.

Il faut que le clic sur les colonnes soit toujours possible pour trier, même après un rafraîchissement automatique.

"Alerte badgeage max" ne marche plus

Paramètres de session : "Alerte badgeage max" n'est pas pris en compte.
Je me souviens que dans une version précédente, si je réglais ce paramètre à 1, il était pris en compte. Je le réglais à 1, et si je badgeais 2 fois ou plus un warning apparaissait sur l'écran du surveillant.
A présent ce n'est plus le cas. Je peux badger autant que je veux, il n'y a pas de warning.
Cela semble être un bug introduit récemment.

Lieux : Tri par Site ne marche pas

Sur la page de liste des Lieux :
.../admin/location?sort=campus

Le tri par Site ne marche pas. Quand on clique sur l'en-tête Site, le petit triangle vers le haut apparaît bien à droite de la colonne. Mais le tri ne se fait pas sur le nom du site, comme on s'y attendrait. Au lieu de cela, j'ai l'impression que le tri se fait par erreur sur le champ campus_id.

Longueur du champs "key" de la table type_session

Bonjour,
Lors de l'ajout de session via la récupération de cours sur la partie ADECampus, nous avons constaté que le type de l'activité servait pour la correspondance du type de session.
Le problème est que nos types ne sont pas de code mais du texte et dépasse donc la limite de 5 caractères du champs "key".
Nous avons donc l'erreur suivante :
ERROR o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions - Batch entry 0 insert into type_session (add_by_admin, comment, context_id, date_modification, key, libelle, id) values ('TRUE', 'Ajouté d''Ade Campus', 1, '2023-10-17 11:11:05.565+02', 'Cours de langue', 'Cours de langue', 195) was aborted: ERREUR: valeur trop longue pour le type character varying(5) Call getNextException to see other errors in the batch.
Merci d'agrandir la taille de ce champs.

Personnaliser le mail d'envoi du QR code par session

Je souhaiterais qu'on puisse personnaliser le mail d'envoi du QR code du par session. Alors qu'actuellement, cela n'est possible que par contexte, dans les variables de configuration.

Je souhaiterais également que cette personnalisation puisse se faire en HTML, avec des variables. J'ai déjà ouvert l'issue #9 à ce propos.

Problème de récupération des Composantes ADE Campus

Bonjour
Lors de la récupération des Composantes (branches "trainee" dans ADE), je constate que la constitution de la Map se fait sur le code et non l'id comme c'est fait pour les salles.
Le problème est qu'on n'a pas forcément de code sur nos dossiers et de fait, on ne remonte pas tous les éléments.
Merci de ne pas utiliser le champs Code pour cette Map

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.