Files
aem_moniteurs/aem_gestion/views/parametres.py
2023-06-22 10:34:18 +02:00

1773 lines
62 KiB
Python

# -*- coding: utf8 -*-
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
from datetime import datetime as dt, date
from dateutil.relativedelta import *
import time as tm
from docutils.core import publish_parts
from zeep import Client
from zeep.transports import Transport
from zeep.exceptions import Error
from requests import Session
from markdown2 import Markdown
import json
from ..models.parametres import *
from ..models.utils import *
from ..models.default import (
get_users_by_code,
get_agences,
get_moniteurs,
get_types_devis,
)
from ..models.parametres import get_formules as get_list_formules
from ..views.default import (
to_decimal,
to_euro,
to_date,
to_time,
to_int,
to_percent,
)
from ..views.utils import *
def ws_authentifier(client):
# authentifier au WS_AutoEcole
try:
idSession = client.service.authentifier(identifiant='mmonchanin',
motDePasse='M@rietton69670',
numeroAgrement='E0209008400')
except:
idSession = ''
return idSession
def ws_deconnecter(client, idSession):
# deconnecter du WS_AutoEcole
message = 'Déconnexion réussie'
try:
client.service.deconnecter(idSession)
except:
message = ''
return message
@view_config(route_name='parametres', renderer='../templates/parametres/parametres.pt', permission='manage')
def parametres(request):
logged_in = request.authenticated_userid.lower()
return {
'page_title': "Paramètres",
'logged_in': logged_in,
}
@view_config(route_name='faq_list', renderer='../templates/parametres/faq_list.pt', permission='manage')
def faq_list(request):
# lire toutes les faq
faqs = get_faqs(request, 0)
return {
'page_title': "Liste des FAQ",
'faqs': faqs,
}
@view_config(route_name='faq_edit', renderer='../templates/parametres/faq_edit.pt', permission='manage')
def faq_edit(request):
faq_id = request.matchdict['faq_id']
url = request.route_url('faq_edit',faq_id=faq_id)
message = ""
if faq_id == '0':
titre = "Nouvelle FAQ"
intitule = ""
texte = ""
theme = ""
else:
titre = "Modifier la FAQ : %s" % str(faq_id)
faq = get_faqs(request, faq_id)
intitule = faq.intitule
texte = faq.texte
theme = faq.theme
if 'form.submitted' in request.params:
intitule = request.params["intitule"]
texte = request.params["texte"]
theme = request.params["theme"]
if len(intitule) > 0 and len(texte) > 0:
update_faq(request, faq_id, intitule, texte, theme)
if faq_id == '0':
# si creation faq, retour à la liste des faqs
return HTTPFound(location=request.route_url('faq_list'))
else:
return HTTPFound(location=request.route_url('faq_view', faq_id=faq_id))
else:
message = "Veuillez saisir un intitule et un texte."
if 'form.deleted' in request.params:
if faq_id != '0':
delete_faq(request, faq_id)
request.session.flash("'%s' a été supprimée avec succès." % intitule, 'success')
return HTTPFound(location=request.route_url('faq_list'))
return {
'page_title': titre,
'url': url,
'message': message,
'faq_id': faq_id,
'intitule': intitule,
'texte': texte,
'theme': theme,
'themes': ["CONDUITE","EXAMEN","RESULTAT","INTERNE"],
}
@view_config(route_name='faq_view', renderer='../templates/parametres/faq_view.pt')
def faq_view(request):
faq_id = request.matchdict['faq_id']
current_route_path = request.current_route_path()
faq = get_faqs(request, faq_id)
intitule = faq.intitule
# insèrer le path de static/img
img_path = '%s/static/img/' % request.application_url
texte = faq.texte.replace('static/img/', img_path)
# convertir reST en HTML
texte = publish_parts(texte, writer_name='html')['html_body']
return {
'page_title': intitule,
'texte': texte,
'faq_id': faq_id,
}
@view_config(route_name='users', renderer='../templates/parametres/users.pt', permission='manage')
def users(request):
# lire les utilisateurs
items = get_users_by_code(request, '0')
# construire la liste
liste=[]
for item in items:
if item.dern_cnx_le:
der_cnx_le = item.dern_cnx_le.strftime('%d-%m-%Y %H:%M')
else:
der_cnx_le = ""
if item.actif == 0:
etat = 'Inactif'
else:
etat = 'Actif'
if item.tel :
tel = item.tel
else:
tel = ''
d = (item.cd_uti, item.nom, tel, item.email, item.cd_mon, item.access, der_cnx_le, etat)
liste.append(d)
return {
'page_title': 'Liste des utilisateurs',
'dt_data': json.dumps(liste),
}
@view_config(route_name='users_ua', renderer='../templates/parametres/users_ua.pt', permission='manage')
def users_ua(request):
# lire les utilisateurs
items = get_users_by_code(request, '0')
# construire la liste
liste=[]
for item in items:
if item.dern_cnx_le:
der_cnx_le = item.dern_cnx_le.strftime('%d-%m-%Y %H:%M')
d = (der_cnx_le, item.cd_uti, item.nom, item.access, item.ua_string)
liste.append(d)
return {
'page_title': 'Dernières connexions',
'dt_data': json.dumps(liste),
}
@view_config(route_name='user_edit', renderer='../templates/parametres/user_edit.pt', permission='manage')
def user_edit(request):
cd_uti = request.matchdict['cd_uti']
url = request.route_url('user_edit', cd_uti=cd_uti)
message = ''
access = ["0 | Moniteur", "6 | Gestionnaire", "7 | Examens", "9 | Administrateur"]
agences = get_agences(request, 0)
if cd_uti == '0':
# nouveau
individu = {}
individu['cd_uti'] = '0'
individu['nom'] = ''
individu['email'] = ''
individu['secu'] = 0
individu['actif'] = 1
individu['cd_mon'] = ''
individu['cd_mon_B78'] = ''
individu['tel'] = ''
individu['agence'] = 6
individu['mobile'] = 0
page_title= 'Nouveau compte utilisateur'
else:
# lire la fiche de l'individu
individu = get_users_by_code(request, cd_uti)
if not individu:
request.session.flash("Utilisateur non trouvé : %s" % cd_uti, 'warning')
return HTTPFound(location=request.route_url('users'))
page_title= "Utilisateur : %s" %(individu.nom)
# lire les moniteurs
moniteurs = get_moniteurs(request, 0)
if 'form.submitted' in request.params:
code = request.params["cd_uti"]
if code == '0':
message = "Veuillez saisir un code moniteur valide."
else:
# si CREATION, controler que la fiche n'est pas déjà créée
fiche = get_users_by_code(request, code)
if cd_uti == '0' and fiche:
message = "Ce code moniteur existe déjà : %s" % code
else:
new_values = {}
for param, db_value in individu.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
# actif coché ?
if 'actif' in request.params:
new_values['actif'] = 1
else:
new_values['actif'] = 0
# mobile coché ?
if 'mobile' in request.params:
new_values['mobile'] = 1
else:
new_values['mobile'] = 0
if new_values:
update_user(request, cd_uti, new_values)
request.session.flash("Le compte a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('users'))
if 'form.deleted' in request.params:
delete_user(request, cd_uti)
request.session.flash("Le compte a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('users'))
return {
'page_title': page_title,
'url': url,
'individu': individu,
'access': access,
'agences': agences,
'moniteurs': moniteurs,
'message': message,
}
@view_config(route_name='moniteurs', renderer='../templates/parametres/moniteurs.pt', permission='view')
def moniteurs(request):
# lire les utilisateurs
logged_in = request.authenticated_userid
items = get_all_moniteurs(request)
member = get_users_by_code(request, logged_in)
code = member.secu
# construire la liste
liste=[]
for item in items:
d = (item.CD_MON, item.NOM, item.PLANNING, item.obsolete)
liste.append(d)
return {
'page_title': 'Liste des moniteurs',
'dt_data': json.dumps(liste),
'code' : code
}
@view_config(route_name='moniteurs_agence', renderer='../templates/parametres/moniteurs_agence.pt', permission='view')
def moniteurs_agence(request):
# lire les utilisateurs
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
items = get_all_moniteur_aff(request)
agences = get_agences(request, 0)
code = member.secu
# construire la liste
liste=[]
agencefilter = member.agence
datefilter = datetime.now().strftime('%d/%m/%Y')
if len(items) > 0 :
agence = items[0].AGENCE
date = items[0].DATED.strftime('%d/%m/%Y') if items[0].DATED != None else datetime.now().strftime('%d/%m/%Y')
for item in items:
d = (
item.CD_MON,
item.INTITULE,
item.DATED.strftime('%d/%m/%Y') if item.DATED != None else None,
item.DATEF.strftime('%d/%m/%Y') if item.DATEF != None else None,
str(item.DMATIN)+'h - '+str(item.FMATIN)+'h',
str(item.DSOIR)+'h - '+str(item.FSOIR)+'h',
item.AGENCE,
item.no_ligne,
item.DATED.strftime('%Y%m%d') if item.DATED != None else None,
item.DATEF.strftime('%Y%m%d') if item.DATEF != None else None,
)
liste.append(d)
return {
'page_title': 'Liste des moniteurs',
'agences' : agences,
'datefilter': datefilter,
'agencefilter' : agencefilter,
'dt_data': json.dumps(liste),
'code': code
}
@view_config(route_name='moniteur_edit', renderer='../templates/parametres/moniteur_edit.pt', permission='view')
def moniteur_edit(request):
logged_in = request.authenticated_userid
code = request.matchdict['cd_mon']
url = request.route_url('moniteur_edit', cd_mon=code)
message = ''
show_aff = False
affectations = []
plannings = ['2R', '2R+GL', 'B',' B+2R', 'B+GL', 'B78', 'GL']
member = get_users_by_code(request, logged_in)
codeu = member.secu
if code == '0':
# nouveau
individu = {}
individu['NOM'] = ''
individu['obsolete'] = 0
individu['CD_MON'] = ''
individu['PLANNING'] = ''
individu['no_autorisation'] = None
individu['cd_uti'] = 'X'
page_title= 'Nouveau compte moniteur'
cree_le = ""
modif_le = ""
else:
# lire la fiche de l'individu
individu = get_moniteur_by_code(request, code)
if not individu:
request.session.flash("Moniteur non trouvé : %s" % code, 'warning')
return HTTPFound(location=request.route_url('moniteurs'))
show_aff = True
items = get_moniteur_aff(request,code)
for item in items :
element = (item.no_ligne,item.AGENCE, item.DATED.strftime('%d/%m/%Y') if item.DATED != None else None ,item.DATEF.strftime('%d/%m/%Y') if item.DATEF != None else None,str(item.DMATIN)+'h - '+str(item.FMATIN)+'h',str(item.DSOIR)+'h - '+str(item.FSOIR)+'h',code)
affectations.append(element)
page_title= "Moniteur : %s" %(individu.NOM)
cree_le = individu.cree_le.strftime('%d/%m/%Y - %H:%M')
modif_le = individu.modif_le.strftime('%d/%m/%Y - %H:%M')
if 'form.submitted' in request.params:
# si CREATION, controler que la fiche n'est pas déjà créée
cd_mon = request.params['CD_MON']
fiche = get_moniteurs(request,cd_mon)
if code == '0' and fiche:
message = "Ce code moniteur existe déjà : %s" % cd_mon
else:
new_values = {}
for param, db_value in individu.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
# actif coché ?
if 'obsolete' in request.params:
new_values['obsolete'] = -1
else:
new_values['obsolete'] = 0
new_values['cd_uti'] = member.cd_uti
# mobile coché ?
if new_values:
update_moniteur(request, code, new_values)
request.session.flash("Le moniteur a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('moniteurs'))
if 'form.deleted' in request.params:
delete_moniteur(request, code)
request.session.flash("Le moniteur a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('moniteurs'))
return {
'page_title': page_title,
'url': url,
'code' : code,
'individu': individu,
'message': message,
'show_aff' : show_aff,
'plannings' : plannings,
'cree_le' : cree_le,
'modif_le':modif_le,
'dt_data' : json.dumps(affectations),
'codeu' : codeu
}
@view_config(route_name='moniteur_aff_edit', renderer='../templates/parametres/moniteur_aff_edit.pt', permission='view')
def moniteur_aff_edit(request):
logged_in = request.authenticated_userid
origin = int(request.GET['origin']) if 'origin' in request.GET else 0
member = get_users_by_code(request, logged_in)
code = member.secu
no_ligne = request.matchdict['no_ligne']
CD_MON = request.matchdict['cd_mon']
if origin == 1 :
redirect = 'moniteurs_agence'
else:
redirect = 'moniteur_edit/'+str(CD_MON)
url = request.route_url('moniteur_aff_edit',cd_mon=CD_MON, no_ligne=no_ligne)
message = ''
agences = get_agences(request, 0)
moniteur = get_moniteurs(request, CD_MON)
if not moniteur:
request.session.flash("Moniteur non trouvé : %s" % CD_MON, 'warning')
return HTTPFound(location=request.route_url('moniteurs'))
INTITULE = moniteur.NOM
if no_ligne == '0':
# nouveau
individu = {}
individu['CD_MON'] = CD_MON
individu['no_ligne'] = '0'
individu['AGENCE'] = '1'
individu['DATED'] = ''
individu['DATEF'] = ''
individu['DMATIN'] = 9
individu['FMATIN'] = 12
individu['DSOIR'] = 14
individu['FSOIR'] = 18
individu['REPOS1'] = 0
individu['REPOS2'] = 0
individu['REPOS3'] = 0
individu['REPOS4'] = 0
individu['REPOS5'] = 0
individu['REPOS6'] = 0
individu['cd_uti'] = 'X'
DATED = ''
DATEF = ''
cree_le = ''
modif_le = ''
page_title= 'Nouveau affectation du moniteur'
else:
# lire la fiche de l'individu
individu = get_moniteur_aff_by_no_ligne(request, no_ligne)
if not individu:
request.session.flash("Moniteur affectation non trouvé : %s" % no_ligne, 'warning')
return HTTPFound(location=request.route_url('moniteur_edit',cd_mon=CD_MON))
page_title= "Affectation du moniteur : %s" %(individu.CD_MON)
DATED = individu.DATED.strftime('%d/%m/%Y') if individu.DATED != None else None
DATEF = individu.DATEF.strftime('%d/%m/%Y') if individu.DATEF != None else None
cree_le = individu.cree_le.strftime('%d/%m/%Y - %H:%M')
modif_le = individu.modif_le.strftime('%d/%m/%Y - %H:%M')
if 'form.submitted' in request.params:
new_values = {}
if no_ligne != '0':
for param, db_value in individu.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
else:
for param, db_value in individu.items():
if param in request.params:
new_values[param] = request.params[param]
new_values['INTITULE'] = INTITULE
new_values['CD_MON'] = CD_MON
new_values['cd_uti'] = member.cd_uti
if 'DATED' in request.params:
new_values['DATED'] = datetime.strptime(request.params['DATED'], '%d/%m/%Y')
if 'DATEF' in request.params:
new_values['DATEF'] = datetime.strptime(request.params['DATEF'], '%d/%m/%Y')
if 'REPOS1' in request.params:
new_values['REPOS1'] = 1
else:
new_values['REPOS1'] = 0
if 'REPOS2' in request.params:
new_values['REPOS2'] = 1
else:
new_values['REPOS2'] = 0
if 'REPOS3' in request.params:
new_values['REPOS3'] = 1
else:
new_values['REPOS3'] = 0
if 'REPOS4' in request.params:
new_values['REPOS4'] = 1
else:
new_values['REPOS4'] = 0
if 'REPOS5' in request.params:
new_values['REPOS5'] = 1
else:
new_values['REPOS5'] = 0
if 'REPOS6' in request.params:
new_values['REPOS6'] = 1
else:
new_values['REPOS6'] = 0
if new_values:
new_values['no_ligne'] = no_ligne
update_moniteur_aff(request, no_ligne, new_values)
request.session.flash("L'affectation a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('moniteur_edit',cd_mon=CD_MON))
if 'form.deleted' in request.params:
delete_moniteur_aff(request, no_ligne)
request.session.flash("L'affectation a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('moniteur_edit',cd_mon=CD_MON))
return {
'page_title': page_title,
'url': url,
'individu': individu,
'agences': agences,
'message': message,
'DATED':DATED,
'DATEF' : DATEF,
'code' : code,
'CD_MON' : CD_MON,
'redirect' : redirect,
'modif_le' : modif_le,
'cree_le' : cree_le
}
@view_config(route_name='semaine_types', renderer='../templates/parametres/semaine_types.pt', permission='manage')
def semaine_types(request):
if not request.has_permission('manage'):
request.session.flash("Vous n'avez pas l'accés sur semaine-type.", 'warning')
return HTTPFound(location=request.route_url('parametres'))
logged_in = request.authenticated_userid
planning = ['B', 'B78', '2R','GL']
planning_default = 'B'
url = request.route_url('semaine_types')
semaines_type = []
if 'form.submitted' in request.params:
params = dict(request.params)
del params['form.submitted']
code = '0'
if params['CODE_SEM'] != '':
code = params['CODE_SEM']
del params['CODE_SEM']
update_semaine_type(request,code,params)
return HTTPFound(location=url)
items = get_all_semaines_type(request)
for item in items:
d = (item.LIBELLE,item.CODE_SEM,item.type_planning)
semaines_type.append(d)
return {
'page_title': 'Liste semaine-types',
'planning' : planning,
'dt_data' : json.dumps(semaines_type),
'planning_default' : planning_default
}
@view_config(route_name='semaine_type_view', renderer='../templates/parametres/semaine_type_view.pt', permission='manage')
def semaine_type_view(request):
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
code = member.secu
code_sem = request.matchdict['code_sem']
url = request.route_url('semaine_type_view',code_sem=code_sem)
if 'form.submitted' in request.params:
new_values = {
'LIBELLE' : request.params["LIBELLE"]
}
update_semaine_type(request,code_sem,new_values)
request.session.flash("La semaine type a été mis à jour avec succès.", 'success')
return HTTPFound(location=url)
if 'form.activity.deleted' in request.params:
no_ligne = int(request.params['no_ligne'])
delete_semaine_type_activity(request, no_ligne)
request.session.flash("Une activité a été supprimé avec succès.", 'warning')
return HTTPFound(location=url)
if 'form.duplicated' in request.params:
duplicate_semaine_type(request,code_sem,logged_in)
request.session.flash("La semaine type a été dupliqué avec succès.", 'success')
return HTTPFound(location=url)
if 'form.deleted' in request.params:
delete_semaine_type(request,code_sem)
request.session.flash("La semaine type a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('semaine_types'))
if 'form.activity.submitted' in request.params :
params = dict(request.params)
del params['form.activity.submitted']
del params['qte_j']
params['dh_debut'] = datetime.strptime(params['dh_debut'],'%d-%m-%Y %H:%M')
params['code_sem'] = code_sem
params['cd_uti'] = logged_in
update_semaine_type_activity(request,params)
request.session.flash("Une activité a été ajouté avec succès.", 'success')
return HTTPFound(location=url)
if 'form.activity.duplicated' in request.params :
params = dict(request.params)
del params['form.activity.duplicated']
params['dh_debut'] = datetime.strptime(params['dh_debut'],'%d-%m-%Y %H:%M')
weekday = params['dh_debut'].weekday()
params['cd_uti'] = logged_in
if params['no_ligne'] == '':
params['code_sem'] = int(code_sem)
qte_j = int (params['qte_j'])
del params['qte_j']
max_ = update_semaine_type_activity(request,params)
no_ligne = max_['no_ligne']
request.session.flash("Une activité a été creé et dupliqué avec succès..", 'success')
else :
no_ligne = params['no_ligne']
qte_j = int(params['qte_j'])
del params['qte_j']
update_semaine_type_activity(request,params)
request.session.flash("Une activité a été dupliqué avec succès..", 'success')
qte_j = min(5 - weekday,qte_j)
duplicate_semaine_type_activity(request,int(no_ligne),qte_j,logged_in)
return HTTPFound(location=url)
semaine_type,activities = get_semaine_type_activity(request,code_sem)
events = []
for row in activities:
json_event = {
'title': row.INTITULE,
'start': '%s %02d:00:00' % (row.dh_debut.strftime('%Y-%m-%d'), row.dh_debut.hour),
'end': '%s %02d:00:00' % (row.dh_debut.strftime('%Y-%m-%d'), row.dh_debut.hour + row.qte),
'description': '',
'allDay': 0,
'color': "LightBlue",
'textColor': '#000000',
'data' : json.dumps({
'no_ligne' : row.no_ligne,
'qte' : row.qte,
'ACTIVITE' : row.ACTIVITE,
'INTITULE' : row.INTITULE,
'code_sem': row.code_sem,
'dh_debut' : row.dh_debut.strftime('%d-%m-%Y %H:%M')
})
}
events.append(json_event)
return {
'page_title': 'Semaine-types %s' % (semaine_type.LIBELLE),
'semaine_type' : semaine_type,
'url' : url,
'calendar_events' : json.dumps(events),
'code': code
}
@view_config(route_name='activites', renderer='../templates/parametres/activites.pt', permission='view')
def activites(request):
# lire les utilisateurs
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
items = get_all_activites(request)
code = member.secu
# construire la liste
liste=[]
for item in items:
d = (
item.PERMIS_DEMANDE,
item.CD_CLI,
item.NOMPREN,
item.SOCIETE,
item.modif_le.strftime('%Y%m%d')
)
liste.append(d)
return {
'page_title': 'Liste des éleves provisoires/activités',
'dt_data': json.dumps(liste),
'code' : code
}
@view_config(route_name='activite_edit', renderer='../templates/parametres/activite_edit.pt', permission='view')
def activite_edit(request):
# lire les utilisateurs
logged_in = request.authenticated_userid
cd_cli = request.matchdict['cd_cli']
member = get_users_by_code(request, logged_in)
code = member.secu
url = request.route_url('activite_edit',cd_cli=cd_cli)
permis = get_permis(request,'0')
message = ''
if cd_cli == '0':
individu = {}
individu['PERMIS_DEMANDE']=''
individu['CD_CLI']=''
individu['NOM']=''
individu['PRENOM']=''
individu['TR_P_OK'] = None
individu['NePasRelancer'] = None
else :
individu = get_activite_by_code(request,cd_cli)
if 'form.submitted' in request.params:
params = dict(request.params)
params['AGENCE'] = 0
del params['form.submitted']
if 'TR_P_OK' in params:
params['TR_P_OK'] = datetime.today()
else :
params['TR_P_OK'] = None
if 'NePasRelancer' in params:
params['NePasRelancer'] = 1
else :
params['NePasRelancer'] = 0
fiche = get_activite_by_code(request,params['CD_CLI'])
if fiche and int(cd_cli) == 0:
request.session.flash("Code déjà utilisé.", 'warning')
return HTTPFound(location=request.route_url('activites'))
else :
params['CD_UTI'] = member.cd_uti
update_activite(request,cd_cli,params)
request.session.flash("Une activité / éleve provisoire a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('activites'))
if 'form.deleted' in request.params:
fiche = get_activite_by_code(request,cd_cli)
if not fiche or int(cd_cli) == 0:
request.session.flash("Code non trouvé.", 'warning')
return HTTPFound(location=request.route_url('activites'))
delete_activite(request,cd_cli)
request.session.flash("Une activité / éleve provisoire a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('activites'))
# construire la liste
return {
'page_title': 'Ajout éleve provisoire/activité',
'individu': individu,
'url' : url,
'permis' : permis,
'message' : '',
'code' : code
}
@view_config(route_name='ants_tables', renderer='../templates/parametres/ants_tables.pt', permission='manage')
def ants_tables(request):
logged_in = request.authenticated_userid
url = request.route_url('ants_tables')
message = ''
tables = ['DEPARTEMENTS','PAYS','AUTORITES']
table = 'DEPARTEMENTS'
# si table a changé
if 'table' in request.params:
table = request.params["table"]
if 'import.pays' in request.params:
table = 'PAYS'
if 'import.dept' in request.params:
table = 'DEPARTEMENTS'
idSession = ''
items = []
session = Session()
session.verify = False
transport = Transport(session=session)
client = Client('https://ws-autoecole-qlf.ants.gouv.fr/ws-auto-ecole-spd/services/AutoEcoleDemande?wsdl',
transport = transport)
ws_deconnecter(client, 'e89b03fd0fe0b656d04617886eaa779e120d4e189293178c61b9214d9da2d842')
# authentifier
idSession = ws_authentifier(client)
if len(idSession) == 0 :
message = 'ws_AutoEcole -> Authentification échouée'
else:
if table == 'PAYS' :
# Lister les pays
items = client.service.listerPays(idSession)
elif table == 'DEPARTEMENTS' :
# Lister les départements
items = client.service.listerDepartements(idSession)
else:
# Lister les autorités
items = client.service.listerAutorites(idSession, '69')
# se deconnecter
message = ws_deconnecter(client, idSession)
if 'import.pays' in request.params:
import_tables(request, 'PAYS', items, '')
message ="La table 'PAYS' est importée avec succès."
if 'import.dept' in request.params:
import_tables(request, 'DEPARTEMENTS', items, '')
message ="La table DEPARTEMENTS est importée avec succès."
if 'import.communes' in request.params:
# authentifier
idSession = ws_authentifier(client)
if len(idSession) == 0 :
message = 'ws_AutoEcole -> Authentification échouée'
else:
for dept in items:
communes = client.service.listerCommunes(idSession, dept.code)
import_tables(request, 'COMMUNES', communes, dept.code)
# se deconnecter
message = ws_deconnecter(client, idSession)
message ="La table COMMUNES est importée avec succès."
return {
'page_title': 'Tables ANTS',
'url': url,
'logged_in': logged_in,
'message': message,
'tables': tables,
'table': table,
'items': items,
}
@view_config(route_name='ants_demandes', renderer='../templates/parametres/ants_demandes.pt', permission='manage')
def ants_demandes(request):
url = request.route_url('ants_demandes')
message = ''
today = datetime.today()
dateDebut = today - relativedelta(days=90)
dateFin = today
liste=[]
idSession = ''
session = Session()
session.verify = False
transport = Transport(session=session)
client = Client('https://ws-autoecole-qlf.ants.gouv.fr/ws-auto-ecole-spd/services/AutoEcoleDemande?wsdl',
transport = transport)
ws_deconnecter(client, '8b990678760c607875c4245c8b41ec767bf9119c69b93d669838c4b08d1380fd')
# authentifier
idSession = ws_authentifier(client)
if len(idSession) == 0 :
message = 'ws_AutoEcole -> Authentification échouée'
else:
factory = client.type_factory('ns0')
periodeCreation = factory.periodeType(
dateDebut = dateDebut,
dateFin = dateFin
)
periodeMaj = factory.periodeType(
dateDebut = dateDebut,
dateFin = dateFin
)
filtres = factory.filtresType(
dateCreation = periodeCreation,
dateMaj = periodeMaj
)
# Lister demandes
try:
demandeDataOut = client.service.listerDemandes(
idSession = idSession,
filtres = filtres,
)
except Error as error:
message = 'ws_AutoEcole -> Lister demandes échoué'
else:
# construire la liste
liste=[]
for item in demandeDataOut:
date = datetime.strptime(item.dateCreation, '%Y%m%d')
cree_le = date.strftime('%d-%m-%Y')
date = datetime.strptime(item.dateMaJ, '%Y%m%d')
maj_le = date.strftime('%d-%m-%Y')
d = (item.idDemande, item.numDemande, item.nom + ' ' + item.prenoms, item.sousTypeDemande.code,
item.statut.code, cree_le, maj_le)
liste.append(d)
# se deconnecter
ws_deconnecter(client, idSession)
return {
'page_title': 'Demandes créées depuis %s' % dateDebut.strftime('%d-%m-%Y'),
'url': url,
'message': message,
'dt_data': json.dumps(liste),
}
@view_config(route_name='last_emailing', renderer='../templates/parametres/last_emailing.pt', permission='view')
def last_emailing(request):
tables = ['RESERVATIONS','RAPPELS RDV']
table = 'RESERVATIONS'
# si table a changé
if 'table' in request.params:
table = request.params["table"]
# extractions des rdv pour rappels
if 'form.generate' in request.params:
update_rappels(request)
request.session.flash(u"Les rappels ont été générés avec succès.", 'success')
# notifier les rappels par email
if 'form.email_rappels' in request.params:
notifier_rappels(request)
request.session.flash(u"Les rappels ont été envoyés par email avec succès.", 'success')
# extractions des réservations pour confirmation
if 'form.confirm' in request.params:
confirm_reservations(request)
request.session.flash(u"Les réservations ont été confirmées avec succès.", 'success')
# notifier le réservations
if 'form.email_resa' in request.params:
nbLus, nbConfirmes, nbAnnules = notifier_reservations(request, 'HEURES')
request.session.flash("Fin ENVOI emails : %s résa lus, %s confirmées, %s annulées." % (str(nbLus), str(nbConfirmes), str(nbAnnules)), 'success')
# lire les emailing résa
items = get_last_emailing(request, table)
# construire la liste
nbRappels = 0
liste=[]
for item in items:
if table == 'RESERVATIONS':
if item.resa_date:
resa_date = item.resa_date.strftime('%d-%m-%Y')
else:
resa_date = ""
else:
if item.rdv_date:
resa_date = item.rdv_date.strftime('%d-%m-%Y %H:%M')
else:
resa_date = ""
if item.envoye_le:
envoye_le = item.envoye_le.strftime('%d-%m-%Y %H:%M')
else:
envoye_le = ""
nbRappels += 1
if table == 'RESERVATIONS':
statut = item.resa_statut
else:
statut = ""
d = (item.ref, resa_date, '%s - %s' % (item.cd_cli, item.nompren), item.email, statut, envoye_le, item.cree_le.strftime('%d-%m-%Y %H:%M'))
liste.append(d)
return {
'page_title': 'Liste des derniers emailing',
'dt_data': json.dumps(liste),
'tables': tables,
'table': table,
'nbRappels': nbRappels,
}
@view_config(route_name='pdfviewer', renderer='../templates/parametres/pdfviewer.pt', permission='view')
def pdfviewer(request):
# nom du fichier pdf
pdf_name = request.matchdict['pdf_name']
cd_cli = pdf_name[:6]
# calculer l'url absolu du fichier pdf
pdf_url = '%s%s/%s' % (request.static_url(request.registry.settings['aem_gestion.justifs_url']),cd_cli, pdf_name)
return {
'page_title': '',
'pdf_url': pdf_url,
}
@view_config(route_name='dashboard', renderer='../templates/parametres/dashboard.pt', permission='manage')
def dashboard(request):
# lire derniers paiements
connexions = get_last_7days_paymnt(request)
courbe_paiements=[]
courbe_paiements.append(('Date', 'Nbre'))
for item in connexions:
# construire la courbe connexions
d = (item.date.strftime('%d-%m'), item.nb)
courbe_paiements.append(d)
payments = get_last_payments(request)
# lire dernières connexions
connexions = get_last_7days_cnx(request)
courbe_connections=[]
courbe_connections.append(('Date', 'Nbre'))
for item in connexions:
# construire la courbe connexions
d = (item.date.strftime('%d-%m'), item.nb)
courbe_connections.append(d)
connections = get_eleves_by_last_connection(request, )
# lire le log de nuit
log_nuit = get_log_nuit(request)
return {
'page_title': "Tableau de bord",
'courbe_connections': json.dumps(courbe_connections),
'courbe_paiements': json.dumps(courbe_paiements),
'connections': connections,
'payments': payments,
'log_nuit': log_nuit,
}
@view_config(route_name='stats_pay', renderer='../templates/parametres/stats_pay.pt', permission='manage')
def stats_pay(request):
# lire les réglements année N-1
items = get_charts_data(request, 'modeRegl01', date.today().year - 1)
# construire la liste pour donut
donut_annee_1=[]
donut_annee_1.append(('Mode', 'Pourcent'))
title_1 = ''
for item in items:
title_1 = item.group1_lib
# construire la liste pour donut cible
d = (item.group2_lib, round(item.valeur))
donut_annee_1.append(d)
# lire les réglements année N
items = get_charts_data(request, 'modeRegl01',date.today().year)
donut_annee=[]
donut_annee.append(('Mode', 'Pourcent'))
title = ''
for item in items:
# construire la liste pour donut cible
title = item.group1_lib
d = (item.group2_lib, round(item.valeur))
donut_annee.append(d)
return {
'page_title': "Stats : Paiements",
'donut_annee_1': json.dumps(donut_annee_1),
'donut_annee': json.dumps(donut_annee),
'title': title,
'title_1': title_1,
}
@view_config(route_name='stats_exam1', renderer='../templates/parametres/stats_exam1.pt', permission='view')
def stats_exam1(request):
url = request.route_url('stats_exam1')
agence = '1'
# si agence a changé
if 'form.ag1' in request.params:
agence = '1'
elif 'form.ag2' in request.params:
agence = '2'
elif 'form.ag3' in request.params:
agence = '3'
elif 'form.ag4' in request.params:
agence = '4'
elif 'form.ag5' in request.params:
agence = '5'
elif 'form.ag6' in request.params:
agence = '6'
elif 'form.ag7' in request.params:
agence = '7'
elif 'form.ag8' in request.params:
agence = '8'
# lire les résultats examens sur un an
items = get_charts_exam1(request, agence)
barChart_annee=[]
barChart_annee.append(('Mois', 'Agence', {'role': 'annotation'}, { 'type':'string','role': 'tooltip'}, 'Marietton', {'type': 'string','role': 'tooltip'}))
title = ''
for item in items:
# construire la liste pour donut cible
title = 'AGENCE %s' % item.group2_lib
tooltip = 'Agence: '+item.group2_lib+'\nReussite: '+str(item.reussite)+'\nTotale: '+str(item.totale)+'\nTaux: '+str(round(item.valeur)) + ' %'
mar_tooltip = 'Marietton\nReussite: '+str(item.mar_reussite)+'\nTotale: '+str(item.mar_totale)+'\nTaux: '+str(round(item.moyenne)) + ' %'
d = (item.group1_lib[:4], round(item.valeur), '('+str(item.reussite)+'/'+str(item.totale)+')\xa0\xa0\xa0'+str(round(item.valeur)) + ' %',tooltip, round(item.moyenne),mar_tooltip)
barChart_annee.append(d)
return {
'page_title': "Historique par agence",
'url': url,
'barChart_annee': json.dumps(barChart_annee),
'title': title,
}
@view_config(route_name='stats_exam2', renderer='../templates/parametres/stats_exam2.pt', permission='view')
def stats_exam2(request):
url = request.route_url('stats_exam2')
datefin = date.today()
# debut = aujourd'hui - 12 mois
datedeb = datefin + relativedelta(months=-12)
# lire les moniteurs
moniteurs = get_charts_exam2_mon(request, datedeb, datefin)
# mémoriser le 1er de la liste
cd_mon = moniteurs[0].group2
# si cd_mon a été changé par le user
if 'cd_mon' in request.params:
cd_mon = request.params["cd_mon"]
# lire les résultats examens du moniteur
items = get_charts_exam2(request, datedeb, datefin, cd_mon)
barChart_annee=[]
barChart_annee.append(('Mois', 'Moniteur', {'role': 'annotation'}, { 'type':'string','role': 'tooltip'} ,'Marietton',{'type': 'string','role': 'tooltip'}))
title = ''
for item in items:
# construire la liste pour donut cible
title = '%s - %s' % (item.group2_lib, item.group2)
if item.valeur2 == 0:
pourcent = 0
else:
pourcent = round(item.valeur * 100 / item.valeur2)
tooltip = 'Agence: '+item.group2_lib+'\nReussite: '+str(round(item.valeur))+'\nTotale: '+str(round(item.valeur2))+'\nTaux: '+str(pourcent) + ' %'
mar_tooltip = 'Marietton\nReussite: '+str(item.mar_reussite)+'\nTotale: '+str(item.mar_totale)+'\nTaux: '+str(round(item.moyenne)) + ' %'
d = (item.group1_lib[:4], pourcent, '('+str(round(item.valeur))+'/'+str(round(item.valeur2))+')\xa0\xa0\xa0'+str(round(pourcent)) + ' %', tooltip,round(item.moyenne),mar_tooltip)
barChart_annee.append(d)
return {
'page_title': "Historique par moniteur",
'url': url,
'barChart_annee': json.dumps(barChart_annee),
'title': title,
'moniteurs': moniteurs,
'cd_mon': cd_mon,
}
@view_config(route_name='inscriptions', renderer='../templates/parametres/inscriptions.pt', permission='manage')
def inscriptions(request):
tables = ['B96','code','PAP','PASA2','PEM125']
table = 'PAP'
# si table a changé
if 'table' in request.params:
table = request.params["table"]
items = get_inscriptions(request, table)
# construire la liste
liste=[]
for item in items:
if item.fin_reservation:
fin_reservation = item.fin_reservation.strftime('%d-%m-%Y')
else:
fin_reservation = ""
d = ('%s' % item.debut.strftime("%d-%m-%Y %H:%M"),
'%s - %s' % (item.cd_cli, item.nom), to_euro(item.solde),
item.cree_le.strftime("%d-%m-%Y %H:%M"), item.cd_uti, fin_reservation)
liste.append(d)
return {
'page_title': "Inscriptions web en cours",
'dt_data': json.dumps(liste),
'tables': tables,
'table': table,
}
@view_config(route_name='pass_rousseau', renderer='../templates/parametres/pass_rousseau.pt', permission='view')
def pass_rousseau(request):
# lire les pass rousseau
items = get_pass_rousseau(request)
# construire la liste
liste=[]
for item in items:
if item.vendu_le:
vendu_le = item.vendu_le.strftime('%d-%m-%Y')
else:
vendu_le = ""
if item.cd_cli:
cd_cli = '%s - %s' % (item.cd_cli, item.nom)
else:
cd_cli = ""
d = (item.cree_le.strftime("%d-%m-%Y"), item.identifiant, item.mdp, item.expire_le.strftime("%d-%m-%Y"),
vendu_le, cd_cli, item.code_postal)
liste.append(d)
return {
'page_title': 'Liste des PASS Rousseau',
'dt_data': json.dumps(liste),
}
@view_config(route_name='types_devis', renderer='../templates/parametres/types_devis.pt', permission='manage')
def types_devis(request):
# lire toutes les p_types_devis
types = get_types_devis(request, '0')
return {
'page_title': "Liste des types de devis",
'types': types,
}
@view_config(route_name='types_devis_frm', renderer='../templates/parametres/types_devis_frm.pt', permission='manage')
def types_devis_frm(request):
type_devis = request.matchdict['type_devis']
url = request.route_url('types_devis_frm',type_devis=type_devis)
message = ""
if type_devis == '0':
# nouveau
titre = "Nouveau TYPE de DEVIS"
types = {}
types['type_devis'] = 'nouveau'
types['libelle'] = ''
types['montantTTC'] = 0.00
types['montantHT'] = 0.00
types['nb_heures'] = 0
types['dispo']= 1
else:
titre = "Modifier le TYPE : %s" % type_devis
types = get_types_devis(request, type_devis)
if 'form.submitted' in request.params:
typed = request.params["type_devis"]
if typed == '0':
message = "Veuillez saisir un type de devis valide."
else:
new_values = {}
for param, db_value in types.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
# dispo coché ?
if 'dispo' in request.params:
new_values['dispo'] = 1
else:
new_values['dispo'] = 0
if new_values:
update_type_devis(request, type_devis, new_values)
request.session.flash("Le type de devis a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('types_devis'))
if 'form.deleted' in request.params:
if type_devis != '0':
delete_type_devis(request, type_devis)
request.session.flash("'%s' a été supprimé avec succès." % type_devis, 'success')
return HTTPFound(location=request.route_url('types_devis'))
return {
'page_title': titre,
'url': url,
'message': message,
'types': types,
'type_devis': type_devis,
}
@view_config(route_name='tarifs', renderer='../templates/parametres/tarifs.pt', permission='manage')
def tarifs(request):
familles = ["Autre", "Forfait", "Heure", "Présentation", "Stage"]
famille = 'Heure'
# si table a changé
if 'famille' in request.params:
famille = request.params["famille"]
# lire les tarifs
items = get_tarifs_byFam(request, famille[0])
# construire la liste
liste=[]
for item in items:
if item.obsolete != 0:
etat = 'Inactif'
else:
etat = 'Actif'
if item.rappel_md :
rappel = 'OUI'
else:
rappel = ''
if item.delai_rappel :
rappel += ': %s j' % str(item.delai_rappel)
d = (item.REF, item.LIB, to_euro(item.PUTTC), rappel, item.type_examen, etat)
liste.append(d)
return {
'page_title': 'Liste des tarifs',
'dt_data': json.dumps(liste),
'familles': familles,
'famille': famille,
}
@view_config(route_name='tarif_edit', renderer='../templates/parametres/tarif_edit.pt', permission='manage')
def tarif_edit(request):
ref = request.matchdict['ref']
url = request.route_url('tarif_edit', ref=ref)
logged_in = request.authenticated_userid
message = ''
markdowner = Markdown()
types_exa = ["2R", "B", "B78", "GL", "PAP", "X"]
familles = ["Autre", "Forfait", "Heure", "Présentation", "Stage"]
tvas = get_p_tables(request, 'P_TVA')
comptes = get_p_tables(request, 'P_COMPTES')
confirmation_html = ''
if ref == '0':
# nouveau
item = {}
item['REF'] = '0'
item['LIB'] = ''
item['CTVA'] = 0
item['PUTTC'] = 0
item['COMPTE'] = 0
item['FAM'] = ''
item['type_examen'] = ''
item['obsolete'] = 0
item['delai_rappel'] = 0
item['delai_reservation'] = 0
item['rappel_md']= ''
item['rappel_html']= ''
item['confirmation_md'] = ''
page_title= 'Nouveau tarif'
else:
# lire la fiche du tarif
item = get_tarifs(request, ref)
if not item:
request.session.flash("Tarif non trouvé : %s" % ref, 'warning')
return HTTPFound(location=request.route_url('tarifs'))
page_title= "Tarif : %s - %s" %(item.REF, item.LIB)
# convertir confirmation de mardown en HTML
if item.confirmation_md:
confirmation_html = markdowner.convert(item.confirmation_md)
if 'form.submitted' in request.params:
new_ref = request.params["REF"]
if new_ref == '0':
message = "Veuillez saisir un code tarif valide."
else:
new_values = {}
for param, db_value in item.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
# obsolete coché ?
if 'obsolete' in request.params:
new_values['obsolete'] = 1
else:
new_values['obsolete'] = 0
if new_values:
# convertir rappel de mardown en HTML
new_values['rappel_html'] = markdowner.convert(request.params["rappel_md"])
new_values['cd_uti'] = logged_in
update_tarif(request, ref, new_values)
request.session.flash("Le tarif a été mis à jour avec succès.", 'success')
return HTTPFound(url)
if 'form.deleted' in request.params:
delete_tarif(request, ref)
request.session.flash("Le tarif a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('tarifs'))
return {
'page_title': page_title,
'url': url,
'message': message,
'item': item,
'types_exa': types_exa,
'familles': familles,
'tvas': tvas,
'comptes': comptes,
'confirmation_html': confirmation_html,
}
@view_config(route_name='permis', renderer='../templates/parametres/permis.pt', permission='manage')
def permis(request):
# lire les permis
items = get_permis(request, '0')
# construire la liste
liste=[]
for item in items:
d = (item.CAT, item.LIB, item.type_examen, to_euro(item.EnCours), to_euro(item.plafond_resa))
liste.append(d)
return {
'page_title': 'Liste des permis',
'dt_data': json.dumps(liste),
}
@view_config(route_name='permis_edit', renderer='../templates/parametres/permis_edit.pt', permission='manage')
def permis_edit(request):
cat = request.matchdict['cat']
url = request.route_url('permis_edit', cat=cat)
logged_in = request.authenticated_userid
message = ''
types_exa = ["2R", "B", "B78", "GL", "PAP", "X"]
justifs = []
justifs_add = []
if cat == '0':
# nouveau
item = {}
item['CAT'] = '0'
item['LIB'] = ''
item['EnCours'] = 0
item['plafond_resa'] = 0
item['type_examen'] = ''
item['HCODE'] = 0
item['AgeCode'] = 0
item['AgeCond'] = 0
item['AgeCondAAC'] = 0
item['VCODE'] = 0
item['HEVAL'] = 0
item['HCOND']= 0
item['NECHECP']= 0
page_title= 'Nouveau Permis'
else:
# lire la fiche du permis
item = get_permis(request, cat)
if not item:
request.session.flash("Permis non trouvé : %s" % cat, 'warning')
return HTTPFound(location=request.route_url('tarifs'))
page_title= "Tarif : %s - %s" %(item.CAT, item.LIB)
# lire ses justifs
justifs = get_permis_justifs(request, cat, '0')
# lire ses justifs à ajouter
justifs_add = get_permis_justifs_manquant(request, cat)
if 'form.submitted' in request.params:
new_cat = request.params["CAT"]
if new_cat == '0':
message = "Veuillez saisir une catégorie valide."
else:
new_values = {}
for param, db_value in item.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
if new_values:
update_permis(request, cat, new_values)
request.session.flash("Le permis a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('permis'))
if 'form.deleted' in request.params:
delete_permis(request, cat)
request.session.flash("Le permis a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('permis'))
if 'form.justif_added' in request.params:
code_add = request.params["code_add"]
insert_permis_justif(request, cat, code_add)
request.session.flash("'%s' a été ajouté avec succès." % code_add, 'success')
return HTTPFound(location=url)
return {
'page_title': page_title,
'url': url,
'message': message,
'item': item,
'types_exa': types_exa,
'justifs': justifs,
'justifs_add': justifs_add,
'code_add': '',
}
@view_config(route_name='permis_justif', renderer='../templates/parametres/permis_justif.pt', permission='manage')
def permis_justif(request):
cat = request.matchdict['cat']
code = request.matchdict['code']
url = request.route_url('permis_justif', cat = cat, code = code)
# lire le le justif du permis
item = get_permis_justifs(request, cat, code)
if 'form.submitted' in request.params:
no_tri = request.params["no_tri"]
update_permis_justif(request, cat, code, no_tri)
request.session.flash("Le justif '%s' a été supprimé avec succès." % code, 'success')
return HTTPFound(location=request.route_url('permis_edit', cat=cat)+'#justifs')
if 'form.deleted' in request.params:
delete_permis_justif(request, cat, code)
request.session.flash("Le justif '%s' a été supprimé avec succès." % code, 'success')
return HTTPFound(location=request.route_url('permis_edit', cat=cat)+'#justifs')
return {
'page_title': 'Justificatif : %s' % item.CODE,
'url': url,
'item': item,
}
@view_config(route_name='justifs_list', renderer='../templates/parametres/justifs_list.pt', permission='manage')
def justifs_list(request):
types = ["JUST", "DOC"]
type = 'JUST'
# si table a changé
if 'type' in request.params:
type = request.params["type"]
# lire toutes les p_justifs
justifs = get_justifsByType(request, type)
return {
'page_title': "Liste des documents types",
'justifs': justifs,
'types': types,
'type': type,
}
@view_config(route_name='justif_edit', renderer='../templates/parametres/justif_edit.pt', permission='manage')
def justif_edit(request):
code = request.matchdict['code']
url = request.route_url('justif_edit',type = type, code = code)
types = ["JUST", "DOC"]
message = ""
if code == '0':
# nouveau
titre = "Nouveau document"
justif = {}
justif['CODE'] = '0'
justif['LIBELLE'] = ''
justif['TYPE'] = ''
justif['conditions'] = ''
else:
titre = "Modifier le document : %s" % code
justif = get_justifs(request, code)
if 'form.submitted' in request.params:
coded = request.params["CODE"]
if coded == '0':
message = "Veuillez saisir un code valide."
else:
new_values = {}
for param, db_value in justif.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
if new_values:
update_justif(request, code, new_values)
request.session.flash("Le document a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('justifs_list'))
if 'form.deleted' in request.params:
if code != '0':
delete_justif(request, code)
request.session.flash("'%s' a été supprimé avec succès." % code, 'success')
return HTTPFound(location=request.route_url('justifs_list'))
return {
'page_title': titre,
'url': url,
'message': message,
'types': types,
'justif': justif,
}
@view_config(route_name='formules', renderer='../templates/parametres/formules.pt', permission='manage')
def formules(request):
validites = ['EN-COURS','TOUTES']
validite = 'EN-COURS'
# si validite a changé
if 'validite' in request.params:
validite = request.params["validite"]
# lire les formules
items = get_list_formules(request, '0', validite)
# construire la liste
liste=[]
for item in items:
if item.STAGE == 0:
stage = ''
else:
stage = 'oui'
d = (item.FORMULE, item.LIBELLE, stage, item.DateFin.strftime('%d-%m-%Y'), item.FILIERE)
liste.append(d)
return {
'page_title': 'Liste des formules',
'validites': validites,
'validite': validite,
'dt_data': json.dumps(liste),
}
@view_config(route_name='formule_edit', renderer='../templates/parametres/formule_edit.pt', permission='manage')
def formule_edit(request):
formule = request.matchdict['formule']
url = request.route_url('formule_edit', formule=formule)
logged_in = request.authenticated_userid
message = ''
types_exa = ["2R", "B", "B78", "GL", "PAP", "X"]
filieres = get_p_tables(request, 'P_FILIERES')
today = date.today()
if formule == '0':
# nouveau
item = {}
item['FORMULE'] = '0'
item['LIBELLE'] = ''
item['STAGE'] = 0
item['forfait_code'] = 0
item['DateDeb'] = today
item['DateFin'] = today
item['INS1'] = ''
item['INS2'] = ''
item['INS3'] = ''
item['INS4'] = ''
item['INS5'] = ''
item['MTVAL1'] = 0
item['MTVAL2'] = 0
item['MTVAL3'] = 0
item['MTVAL4'] = 0
item['MTVAL5'] = 0
item['NBPTGRATUIT'] = 0
item['NBPPGRATUIT'] = 0
item['NBHCGRATUIT'] = 0
item['NBCCGRATUIT'] = 0
item['NBHRGRATUIT'] = 0
item['NBTAGRATUIT'] = 0
item['NBRPGRATUIT'] = 0
item['VAL_TAG'] = 0
item['VAL_HCG'] = 0
item['VAL_CCG'] = 0
item['VAL_HRG'] = 0
item['VAL_RPG'] = 0
item['HSeance'] = 0
item['TFISC']= ''
item['P_THEOS']= ''
item['P_PRATS1']= ''
item['P_PRATS']= ''
item['HCONDUIT']= ''
item['DUREE_CODE'] = 0
item['DUREE_COND'] = 0
item['CONTRAT1']= ''
item['CONTRAT2']= ''
item['type_examen']= ''
item['FILIERE']= ''
page_title= 'Nouvelle Formule'
else:
# lire la fiche du permis
item = get_list_formules(request, formule, '')
if not item:
request.session.flash("Formule non trouvée : %s" % formule, 'warning')
return HTTPFound(location=request.route_url('formules'))
page_title= "Formule : %s" % (item.FORMULE)
if 'form.submitted' in request.params:
new_code = request.params["FORMULE"]
if new_code == '0':
message = "Veuillez saisir une formule valide."
else:
new_values = {}
for param, db_value in item.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
# STAGE coché ?
if 'STAGE' in request.params:
new_values['STAGE'] = 1
else:
new_values['STAGE'] = 0
# STAGE coché ?
if 'forfait_code' in request.params:
new_values['forfait_code'] = 1
else:
new_values['forfait_code'] = 0
# formater date
DateDeb = dt.strptime(request.params['DateDeb'], '%d-%m-%Y')
new_values['DateDeb'] = DateDeb.strftime("%Y-%m-%d")
DateFin = dt.strptime(request.params['DateFin'] , '%d-%m-%Y')
new_values['DateFin'] = DateFin.strftime("%Y-%m-%d")
new_values['cd_uti'] = logged_in
update_formule(request, formule, new_values)
request.session.flash("La formule a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('formules'))
if 'form.deleted' in request.params:
delete_permis(request, formule)
request.session.flash("La formule a été supprimée avec succès.", 'success')
return HTTPFound(location=request.route_url('formules'))
return {
'page_title': page_title,
'url': url,
'message': message,
'item': item,
'types_exa': types_exa,
'filieres': filieres,
}
@view_config(route_name='agences', renderer='../templates/parametres/agences.pt', permission='manage')
def agences(request):
# lire les agences
items = get_agences(request, 0)
return {
'page_title': 'Liste des agences',
'items': items,
}
@view_config(route_name='agence_edit', renderer='../templates/parametres/agence_edit.pt', permission='manage')
def agence_edit(request):
code = request.matchdict['code']
url = request.route_url('agence_edit', code=code)
message = ''
agences = get_agences(request, 0)
# lire la fiche de l'agence
item = get_agences(request, code)
if not item:
request.session.flash("Agence non trouvé : %s" % code, 'warning')
return HTTPFound(location=request.route_url('agences'))
if 'form.submitted' in request.params:
new_values = {}
for param, db_value in item.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
if new_values:
update_agence(request, code, new_values)
request.session.flash("L'agence a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('agences'))
return {
'page_title': item.LIBELLE,
'url': url,
'item': item,
'message': message,
}