2020-09-26 16:19:37 +02:00
# -*- mode: python -*-
# -*- coding: utf-8 -*-
##############################################################################
#
# Gestion scolarite IUT
#
2023-01-02 13:16:27 +01:00
# Copyright (c) 1999 - 2023 Emmanuel Viennet. All rights reserved.
2020-09-26 16:19:37 +02:00
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Emmanuel Viennet emmanuel.viennet@viennet.net
#
##############################################################################
"""
Génération de la " sidebar " ( marge gauche des pages HTML )
"""
2021-09-16 10:09:17 +02:00
from flask import render_template , url_for
from flask import g , request
2021-07-29 16:31:15 +02:00
from flask_login import current_user
2020-09-26 16:19:37 +02:00
2021-06-19 23:21:37 +02:00
import app . scodoc . sco_utils as scu
from app . scodoc import sco_preferences
from app . scodoc . sco_permissions import Permission
2022-01-11 22:44:03 +01:00
from sco_version import SCOVERSION
2021-06-19 23:21:37 +02:00
2020-09-26 16:19:37 +02:00
2021-07-29 16:31:15 +02:00
def sidebar_common ( ) :
2021-07-03 23:35:32 +02:00
" partie commune à toutes les sidebar "
2021-12-22 13:13:01 +01:00
home_link = url_for ( " scodoc.index " , scodoc_dept = g . scodoc_dept )
2020-09-26 16:19:37 +02:00
H = [
2022-01-11 22:44:03 +01:00
f """ <a class= " scodoc_title " href= " { home_link } " >ScoDoc { SCOVERSION } </a><br>
2021-12-22 13:13:01 +01:00
< a href = " {home_link} " class = " sidebar " > Accueil < / a > < br >
2021-07-29 16:48:27 +02:00
< div id = " authuser " > < a id = " authuserlink " href = " {
2021-09-27 10:20:10 +02:00
url_for ( " users.user_info_page " ,
scodoc_dept = g . scodoc_dept , user_name = current_user . user_name )
2021-07-29 16:48:27 +02:00
} " > {current_user.user_name} </a>
2022-10-02 23:43:29 +02:00
< br > < a id = " deconnectlink " href = " { url_for( " auth . logout " )} " > déconnexion < / a >
2021-07-29 16:48:27 +02:00
< / div >
{ sidebar_dept ( ) }
< h2 class = " insidebar " > Scolarité < / h2 >
2022-10-02 23:43:29 +02:00
< a href = " { scu.ScoURL()} " class = " sidebar " > Semestres < / a > < br >
< a href = " { scu.NotesURL()} " class = " sidebar " > Programmes < / a > < br >
2021-07-29 16:48:27 +02:00
"""
2020-09-26 16:19:37 +02:00
]
2023-07-25 19:59:47 +02:00
if current_user . has_permission ( Permission . ScoAbsChange ) :
H . append (
f """ <a href= " { scu . AssiduitesURL ( ) } " class= " sidebar " >Assiduités</a> <br> """
)
2021-07-29 16:31:15 +02:00
if current_user . has_permission (
Permission . ScoUsersAdmin
) or current_user . has_permission ( Permission . ScoUsersView ) :
2020-09-26 16:19:37 +02:00
H . append (
2022-10-02 23:43:29 +02:00
f """ <a href= " { scu . UsersURL ( ) } " class= " sidebar " >Utilisateurs</a> <br> """
2020-09-26 16:19:37 +02:00
)
2021-07-29 16:31:15 +02:00
if current_user . has_permission ( Permission . ScoChangePreferences ) :
2020-09-26 16:19:37 +02:00
H . append (
2021-09-27 10:20:10 +02:00
f """ <a href= " { url_for ( " scolar.edit_preferences " , scodoc_dept = g . scodoc_dept ) } "
2022-10-02 23:43:29 +02:00
class = " sidebar " > Paramétrage < / a > < br > """
2020-09-26 16:19:37 +02:00
)
return " " . join ( H )
2022-06-09 07:39:58 +02:00
def sidebar ( etudid : int = None ) :
2020-09-26 16:19:37 +02:00
" Main HTML page sidebar "
# rewritten from legacy DTML code
2023-06-30 15:34:50 +02:00
from app . scodoc import sco_assiduites
2021-06-19 23:21:37 +02:00
from app . scodoc import sco_etud
2021-09-10 21:12:59 +02:00
params = { }
2020-09-26 16:19:37 +02:00
2021-09-10 21:12:59 +02:00
H = [
f """ <div class= " sidebar " >
{ sidebar_common ( ) }
2022-10-02 23:43:29 +02:00
< div class = " box-chercheetud " > Chercher étudiant : < br >
2022-04-08 16:36:56 +02:00
< form method = " get " id = " form-chercheetud "
action = " { url_for( ' scolar.search_etud_in_dept ' , scodoc_dept=g.scodoc_dept) } " >
< div > < input type = " text " size = " 12 " class = " in-expnom " name = " expnom " spellcheck = " false " > < / input > < / div >
2021-09-10 21:12:59 +02:00
< / form > < / div >
< div class = " etud-insidebar " >
"""
]
2021-07-29 16:31:15 +02:00
# ---- Il y-a-t-il un etudiant selectionné ?
2022-06-09 07:39:58 +02:00
etudid = etudid if etudid is not None else g . get ( " etudid " , None )
if etudid is None :
2021-09-27 10:20:10 +02:00
if request . method == " GET " :
etudid = request . args . get ( " etudid " , None )
elif request . method == " POST " :
etudid = request . form . get ( " etudid " , None )
2021-07-29 16:31:15 +02:00
2022-06-09 07:39:58 +02:00
if etudid is not None :
2021-08-22 13:24:36 +02:00
etud = sco_etud . get_etud_info ( filled = True , etudid = etudid ) [ 0 ]
2020-09-26 16:19:37 +02:00
params . update ( etud )
2021-07-11 17:37:12 +02:00
params [ " fiche_url " ] = url_for (
" scolar.ficheEtud " , scodoc_dept = g . scodoc_dept , etudid = etudid
)
2020-09-26 16:19:37 +02:00
# compte les absences du semestre en cours
H . append (
2021-07-11 17:37:12 +02:00
""" <h2 id= " insidebar-etud " ><a href= " %(fiche_url)s " class= " sidebar " >
2021-02-13 17:28:55 +01:00
< font color = " #FF0000 " > % ( civilite_str ) s % ( nom_disp ) s < / font > < / a >
2020-09-26 16:19:37 +02:00
< / h2 >
< b > Absences < / b > """
% params
)
if etud [ " cursem " ] :
2021-09-10 21:12:59 +02:00
cur_sem = etud [ " cursem " ]
2023-06-30 15:34:50 +02:00
nbabs , nbabsjust = sco_assiduites . get_assiduites_count ( etudid , cur_sem )
2021-09-10 21:12:59 +02:00
nbabsnj = nbabs - nbabsjust
2020-09-26 16:19:37 +02:00
H . append (
2023-08-14 10:04:08 +02:00
f """ <span title= " absences du { cur_sem [ " date_debut " ] } au { cur_sem [ " date_fin " ] } " >( { sco_preferences . ASSIDUITES_METRIC_LABEL_SHORT . get ( sco_preferences . get_preference ( " assi_metrique " , " demi " ) ) } )
2022-10-02 23:43:29 +02:00
< br > { nbabsjust } J . , { nbabsnj } N . J . < / span > """
2020-09-26 16:19:37 +02:00
)
H . append ( " <ul> " )
2021-07-29 16:31:15 +02:00
if current_user . has_permission ( Permission . ScoAbsChange ) :
2020-09-26 16:19:37 +02:00
H . append (
2021-09-10 21:12:59 +02:00
f """
2023-04-17 15:44:55 +02:00
< li > < a href = " { url_for( ' assiduites.signal_assiduites_etud ' , scodoc_dept=g.scodoc_dept, etudid=etudid) } " > Ajouter < / a > < / li >
2023-06-20 15:50:56 +02:00
< li > < a href = " { url_for( ' assiduites.ajout_justificatif_etud ' , scodoc_dept=g.scodoc_dept, etudid=etudid) } " > Justifier < / a > < / li >
2020-09-26 16:19:37 +02:00
"""
)
2021-07-28 17:03:54 +02:00
if sco_preferences . get_preference ( " handle_billets_abs " ) :
2020-09-26 16:19:37 +02:00
H . append (
2022-08-01 21:42:19 +02:00
f """ <li><a href= " { url_for ( ' absences.billets_etud ' , scodoc_dept = g . scodoc_dept , etudid = etudid ) } " >Billets</a></li> """
2020-09-26 16:19:37 +02:00
)
H . append (
2021-09-10 21:12:59 +02:00
f """
2023-06-22 16:25:13 +02:00
< li > < a href = " { url_for( ' assiduites.calendrier_etud ' , scodoc_dept=g.scodoc_dept, etudid=etudid) } " > Calendrier < / a > < / li >
2023-04-20 18:04:21 +02:00
< li > < a href = " { url_for( ' assiduites.liste_assiduites_etud ' , scodoc_dept=g.scodoc_dept, etudid=etudid) } " > Liste < / a > < / li >
2023-06-28 17:15:24 +02:00
< li > < a href = " { url_for( ' assiduites.bilan_etud ' , scodoc_dept=g.scodoc_dept, etudid=etudid) } " > Bilan < / a > < / li >
2021-09-10 21:12:59 +02:00
< / ul >
2020-09-26 16:19:37 +02:00
"""
)
else :
pass # H.append("(pas d'étudiant en cours)")
# ---------
2021-08-22 19:30:58 +02:00
H . append ( " </div> " ) # /etud-insidebar
2020-09-26 16:19:37 +02:00
# Logo
H . append (
2021-09-10 21:12:59 +02:00
f """ <div class= " logo-insidebar " >
2022-10-02 23:43:29 +02:00
< div class = " sidebar-bottom " > < a href = " { url_for( ' scodoc.about ' , scodoc_dept=g.scodoc_dept ) } " class = " sidebar " > À propos < / a > < br >
2021-09-10 21:12:59 +02:00
< a href = " { scu.SCO_USER_MANUAL } " target = " _blank " class = " sidebar " > Aide < / a >
< / div > < / div >
2021-09-15 22:13:04 +02:00
< div class = " logo-logo " >
< a href = " { url_for( ' scodoc.about ' , scodoc_dept=g.scodoc_dept ) } " >
{ scu . icontag ( " scologo_img " , no_size = True ) } < / a >
2021-09-10 21:12:59 +02:00
< / div >
< / div >
< ! - - end of sidebar - - >
"""
2021-08-22 19:30:58 +02:00
)
2020-09-26 16:19:37 +02:00
return " " . join ( H )
2021-07-29 16:31:15 +02:00
def sidebar_dept ( ) :
2021-01-01 18:40:47 +01:00
""" Partie supérieure de la marge de gauche """
2021-09-16 10:09:17 +02:00
return render_template (
2023-01-30 22:25:17 +01:00
" sidebar_dept.j2 " ,
2021-09-16 10:09:17 +02:00
prefs = sco_preferences . SemPreferences ( ) ,
)