2980 lines
131 KiB
Python
2980 lines
131 KiB
Python
# -*- coding: utf8 -*-
|
||
from pyramid.view import (
|
||
view_config,
|
||
)
|
||
from pyramid.httpexceptions import (
|
||
HTTPFound,
|
||
)
|
||
|
||
from datetime import datetime, timedelta
|
||
import json
|
||
|
||
from ..models.planning import *
|
||
from ..models.default import (
|
||
get_users_by_code,
|
||
get_user_access,
|
||
get_user_cd_mon,
|
||
get_user_cd_mon_B78,
|
||
isDelaiOK,
|
||
get_formules,
|
||
get_formule,
|
||
get_moniteur_by_code,
|
||
delete_stage_lig_by_cd_cli,
|
||
delete_moto_lig_by_cd_cli,
|
||
update_panning_moto_dispo,
|
||
get_moniteur_aff,
|
||
get_moniteur_aff_by_agence
|
||
)
|
||
from ..models.eleves import (
|
||
get_eleves_by_code,
|
||
get_moniteurs_by_code,
|
||
update_eleve_delettrer,
|
||
)
|
||
|
||
|
||
from ..views.default import (
|
||
to_age,
|
||
to_date,
|
||
to_euro,
|
||
to_euroN,
|
||
to_euroz,
|
||
to_time,
|
||
to_int,
|
||
to_percent,
|
||
to_sha1,
|
||
to_str,
|
||
)
|
||
from datetime import timedelta, date as ddate
|
||
from jours_feries_france.compute import JoursFeries
|
||
|
||
def ctlEleve_PLB(request, cd_cli):
|
||
# Lire la fiche Elève
|
||
eleve = get_eleves_by_code(request, cd_cli)
|
||
if eleve is None or len(eleve) == 0:
|
||
message = "Elève %s non trouvé !" % cd_cli
|
||
return message
|
||
|
||
# est-ce une activité ? oui, fin des controles
|
||
if eleve.AGENCE == 0 :
|
||
return ''
|
||
|
||
if eleve.CLOTURE_LE :
|
||
message = "Le DOSSIER de cet élève est CLOTURE ou RETIRE ou en LITIGE !"
|
||
return message
|
||
|
||
if eleve.ELEVEGARDE02 :
|
||
message = "Le DOSSIER est gardé par l'élève !"
|
||
return message
|
||
|
||
# controler la date de validité de la visite medicale
|
||
if eleve.visite_med_fin_le :
|
||
today = date.today()
|
||
diff = eleve.visite_med_fin_le - today
|
||
nbJours = diff.days
|
||
if nbJours < 0 :
|
||
message = "Attention! La date de visite médicale de l'élève est exprirée."
|
||
return message
|
||
#elif nbJours < 90 :
|
||
# message = "Attention! La date de visite médicale de l'élève expirera dans %s jours." % nbJours
|
||
# return message
|
||
|
||
# controles spécifiques
|
||
if eleve.PERMIS_DEMANDE != "B" and eleve.PERMIS_DEMANDE != "B78" :
|
||
message = "La catégorie de permis demandée n'est pas compatible avec ce planning !"
|
||
return message
|
||
|
||
return ''
|
||
|
||
|
||
@view_config(route_name='monplanning', renderer='../templates/planning/monplanning.pt', permission='view')
|
||
def monplanning(request):
|
||
|
||
def generer_planning(agence, cd_mon, datedeb, datefin,edit='rdvb_edit'):
|
||
|
||
# construire la liste des rdv du moniteurs
|
||
rows = get_rendez_vous_moniteur(request, agence, cd_mon, datedeb, datefin)
|
||
events = []
|
||
for row in rows:
|
||
if row.comment == None:
|
||
comment = ''
|
||
else:
|
||
comment = row.comment
|
||
if row.NOM_ENTREPRISE :
|
||
etoile = ' (E)'
|
||
else:
|
||
etoile = ''
|
||
nom = row.nom + etoile
|
||
|
||
# déterminer la couleur de l'event
|
||
if row.date_valeur :
|
||
color = 'LightGreen' # rdv validé = vert pale
|
||
else:
|
||
if to_int(row.ref) != row.cd_cli :
|
||
if row.statut > 1 :
|
||
color = 'DeepPink' # rdv élève décommandé
|
||
if row.statut == 10 or row.statut == 15 :
|
||
color = 'LightGray' # moniteur absent
|
||
elif row.fin_reservation :
|
||
color = 'LightPink' # résa = LightPink
|
||
else:
|
||
color = 'LightYellow' # rdv élève = jaune pale
|
||
if row.circuit == 1:
|
||
color = 'Gold' # gold
|
||
elif row.circuit == 2:
|
||
color = 'Plum' # Plum
|
||
elif row.circuit == 3:
|
||
color = 'YellowGreen' # YellowGreen
|
||
elif row.circuit == 4:
|
||
color = 'DeepSkyBlue' # DeepSkyBlue
|
||
elif row.circuit == 5:
|
||
color = 'LimeGreen' # LimeGreen
|
||
elif row.circuit == 6:
|
||
color = 'GoldenRod' # Marron
|
||
else:
|
||
if row.cd_cli == 99995 :
|
||
color = 'White' # résa web = couleur blanc)
|
||
elif row.cd_cli == 1 :
|
||
color = 'Gainsboro' # ///////
|
||
else:
|
||
color = 'LightBlue' # activité
|
||
if row.statut == 10 or row.statut == 15 :
|
||
color = 'LightGray' # moniteur absent
|
||
|
||
json_event = {
|
||
'title': nom,
|
||
'start': '%s %02d:00:00' % (row.DATE.strftime('%Y-%m-%d'), row.noplan),
|
||
'end': '%s %02d:00:00' % (row.DATE.strftime('%Y-%m-%d'), row.noplan + row.qte),
|
||
'description': comment,
|
||
'allDay': False,
|
||
'color': color,
|
||
'textColor': '#000000',
|
||
'url': '/'+edit+'/%s' % (row.no_ligne),
|
||
}
|
||
events.append(json_event)
|
||
|
||
# construire la liste des rdv annulés du moniteurs
|
||
rows = get_rendez_vous_annules(request, agence, cd_mon, datedeb, datefin)
|
||
for row in rows:
|
||
if row.NOM_ENTREPRISE :
|
||
etoile += ' (E)'
|
||
else:
|
||
etoile = ''
|
||
nom = row.nom + etoile
|
||
|
||
json_event = {
|
||
'title': nom,
|
||
'start': row.DATE.strftime('%Y-%m-%d'),
|
||
'end': row.DATE.strftime('%Y-%m-%d'),
|
||
'description': '%s par %s' % (row.intitule.replace(' (0)', ''), row.cd_uti),
|
||
'allDay': True,
|
||
'color': 'White',
|
||
'textColor': 'Black',
|
||
'url': '/'+edit+'/%s' % (row.no_ligne),
|
||
}
|
||
events.append(json_event)
|
||
|
||
return json.dumps(events)
|
||
|
||
# récupérer les paramètres de l'appel de la view
|
||
datePlan = request.matchdict['date']
|
||
cd_mon = request.matchdict['cd_mon']
|
||
logged_in = request.authenticated_userid
|
||
isSeulB78 = False
|
||
url = request.current_route_path()
|
||
|
||
if cd_mon == 'codeMon':
|
||
cd_mon,cd_mon_B78 = get_user_cd_mon(request, logged_in)
|
||
else :
|
||
moni = get_moniteurs_by_code(request,cd_mon)
|
||
if moni and moni['PLANNING'] == "B78" :
|
||
cd_mon_B78 = moni['CD_MON']
|
||
isSeulB78 = True
|
||
else:
|
||
cd_mon_B78 = get_user_cd_mon_B78(request, logged_in)
|
||
isSeulB78 = False
|
||
url = request.route_url('monplanning', cd_mon='codeMon', date='today')
|
||
|
||
if datePlan == 'today':
|
||
datePlan = date.today().strftime('%Y-%m-%d')
|
||
# si cd_mon a été changé par le user
|
||
|
||
if 'cd_mon' in request.params:
|
||
cd_mon = request.params["cd_mon"]
|
||
moni = get_moniteurs_by_code(request,cd_mon)
|
||
if moni and moni['PLANNING'] == "B78" :
|
||
cd_mon_B78 = moni['CD_MON']
|
||
isSeulB78 = True
|
||
else:
|
||
isSeulB78 = False
|
||
|
||
url_select = request.route_url('eleve_select', cd_mon=cd_mon, date=datePlan)
|
||
|
||
member = get_users_by_code(request, logged_in)
|
||
if not member:
|
||
request.session.flash(u"Moniteur %s introuvable" % (logged_in), 'danger')
|
||
return HTTPFound(location=request.route_url("home"))
|
||
|
||
agence = member.agence
|
||
QTE = 1
|
||
message = ''
|
||
|
||
# -- CREER un rendez-vous
|
||
if 'form.submitted' in request.params:
|
||
name = request.params['name'].split(' | ')
|
||
cd_cli = int(name[1])
|
||
QTE = int(request.params['QTE'])
|
||
dateRDV = request.params['dateRDV']
|
||
heureRDV = request.params['heureRDV']
|
||
isB78 = 'cd_mon_B78' in request.params
|
||
# controle date exportation
|
||
isAffected, lastdate = controlAffectationEtAgece(request,cd_mon,dateRDV,heureRDV,agence)
|
||
if controleDateExport(request, dateRDV, agence) == False:
|
||
message = "Cette journée est déjà comptabilisée ! Création impossible."
|
||
elif not isAffected:
|
||
if lastdate :
|
||
message = "La dernier affectation de ce moniteur pour l'agence "+str(agence)+ " était le " + lastdate['DATEF'].strftime('%d/%m/%Y')+ " à "+str(lastdate['DMATIN'])+"h jusqu'à "+str(lastdate['FMATIN'])+"h le matin et " +str(lastdate['DSOIR'])+"h jusqu'à "+str(lastdate['FSOIR'])+"h l'apres midi.!!"
|
||
else :
|
||
message = "Ce moniteur n'a aucune affectation dans cet agence pour la date de {0} à {1}h!!".format(dateRDV,heureRDV)
|
||
else:
|
||
if cd_cli < 100000:
|
||
ref = str(cd_cli)
|
||
else:
|
||
if isB78 :
|
||
ref = "HCB78"
|
||
else:
|
||
ref = "HCB"
|
||
# controles sur l'élève
|
||
message = ctlEleve_PLB(request, cd_cli)
|
||
if len(message) == 0:
|
||
nDelai = controleSoldeResa(request, cd_cli, ref)
|
||
# plafond dépassé ?
|
||
if nDelai == -1:
|
||
request.session.flash(u"L'encours de l'élève a dépassé son plafond autorisé. Impossible de lui ajouter une heure.", 'danger')
|
||
return HTTPFound(location=request.route_url("monplanning", cd_mon=cd_mon, date=dateRDV))
|
||
else:
|
||
if isB78 :
|
||
update_rdvb(request, 0, 0, cd_cli, dateRDV, heureRDV, QTE, ref, cd_mon_B78, agence, '', 0, 0, nDelai, 0, logged_in)
|
||
else :
|
||
update_rdvb(request, 0, 0, cd_cli, dateRDV, heureRDV, QTE, ref, cd_mon, agence, '', 0, 0, nDelai, 0, logged_in)
|
||
if nDelai == 0:
|
||
request.session.flash(u"Le rendez-vous a été CREE avec succès.", 'success')
|
||
else:
|
||
request.session.flash(u"Le rendez-vous a été RESERVE avec succès.", 'warning')
|
||
return HTTPFound(location=request.route_url("monplanning", cd_mon=cd_mon, date=dateRDV))
|
||
|
||
TODAY = date.today()
|
||
# début = aujourd'hui - 3 semaines
|
||
d = TODAY + relativedelta(weeks=-3)
|
||
datedeb = d.strftime('%Y-%m-%d')
|
||
# fin = aujourd'hui + 6 mois
|
||
d = TODAY + relativedelta(months=+6)
|
||
datefin = d.strftime('%Y-%m-%d')
|
||
|
||
# lire les moniteurs
|
||
moniteurs = get_moniteurs_by_aff(request, agence, datedeb, datefin)
|
||
#sort moniteur , mettre B78 à la fin
|
||
moniteurs.sort(key=lambda m: str(m.PLANNING) == "B", reverse=True)
|
||
moniteursB = [moniteur for moniteur in moniteurs if moniteur.PLANNING == "B"]
|
||
moniteursB78 = [moniteur for moniteur in moniteurs if moniteur.PLANNING == "B78"]
|
||
moniteurs2R = [moniteur for moniteur in moniteurs if moniteur.PLANNING == "2R"]
|
||
moniteursGL = [moniteur for moniteur in moniteurs if moniteur.PLANNING == "GL"]
|
||
moniteurs = [moniteursB,moniteurs2R,moniteursGL,moniteursB78]
|
||
# generer le planning B
|
||
calendar_events = generer_planning(agence, cd_mon, datedeb, datefin)
|
||
|
||
# generer le planning B78
|
||
calendar_events_b78 = generer_planning(agence, cd_mon_B78, datedeb, datefin,'rdvb78_edit')
|
||
|
||
|
||
return {
|
||
'page_title': "Planning de %s (agence %s)" % (cd_mon, agence) if not isSeulB78 else "Planning B78 de %s (agence %s)" % (cd_mon, agence),
|
||
'url': url,
|
||
'url_select': url_select,
|
||
'datePlan': datePlan,
|
||
'message': message,
|
||
'calendar_events': calendar_events,
|
||
'calendar_events_b78': calendar_events_b78,
|
||
'moniteurs': moniteurs,
|
||
'cd_mon': cd_mon,
|
||
'cd_mon_B78':cd_mon_B78,
|
||
'isSeulB78': isSeulB78,
|
||
'agence' : agence,
|
||
'QTE': QTE,
|
||
}
|
||
|
||
|
||
@view_config(route_name='planningb', renderer='../templates/planning/planningb.pt', permission='view')
|
||
def planningb(request):
|
||
def generer_ressources(moniteurs):
|
||
# construire la liste des ressources
|
||
# {"id":"a","title":"Auditorium A"}
|
||
ressources = []
|
||
for row in moniteurs:
|
||
name = ' (B78)' if row.PLANNING == "B78" else ''
|
||
json_ressources = {
|
||
'id': row.CD_MON,
|
||
'planning': row.PLANNING,
|
||
'title': row.NOM + name,
|
||
}
|
||
ressources.append(json_ressources)
|
||
ressources.sort(key=lambda r: r['planning'] == 'B78')
|
||
|
||
return json.dumps(ressources, indent=4, sort_keys=True, default=str)
|
||
|
||
def generer_planning(agence, moniteurs, datedeb, datefin, current_date=date.today()):
|
||
# construire la liste des events
|
||
events = []
|
||
delta = timedelta(days=1)
|
||
first = current_date - timedelta(days=7)
|
||
last = current_date + timedelta(days=30)
|
||
for item in moniteurs:
|
||
cd_mon = item.CD_MON
|
||
rows = get_rendez_vous_moniteur(request, agence, cd_mon, datedeb, datefin)
|
||
affectations = get_moniteur_aff_by_agence(request, cd_mon, agence)
|
||
for affectation in affectations:
|
||
disabled_days = [i if affectation['REPOS' +
|
||
str(i)] != 0 else None for i in range(1, 7)]
|
||
start_date = affectation.DATED
|
||
end_date = affectation.DATEF
|
||
if end_date < first or start_date > last:
|
||
continue
|
||
count = 0
|
||
diffday = (current_date - start_date)
|
||
if diffday.days > 7 and diffday > timedelta(0):
|
||
start_date = first
|
||
while start_date <= end_date:
|
||
weekday = start_date.weekday() + 1
|
||
feries = JoursFeries.for_year(start_date.year).values()
|
||
if first <= start_date <= last and weekday != 7 and weekday not in disabled_days and start_date not in feries:
|
||
morning_event = {
|
||
'resourceId': cd_mon,
|
||
'title': '',
|
||
'start': '%s %02d:00:00' % (start_date.strftime('%Y-%m-%d'), affectation.DMATIN),
|
||
'end': '%s %02d:00:00' % (start_date.strftime('%Y-%m-%d'), affectation.FMATIN),
|
||
'color': '#ffffff',
|
||
'rendering': 'background',
|
||
}
|
||
events.append(morning_event)
|
||
afternoon_event = {
|
||
'resourceId': cd_mon,
|
||
'title': '',
|
||
'start': '%s %02d:00:00' % (start_date.strftime('%Y-%m-%d'), affectation.DSOIR),
|
||
'end': '%s %02d:00:00' % (start_date.strftime('%Y-%m-%d'), affectation.FSOIR),
|
||
'color': '#ffffff',
|
||
'display': 'background',
|
||
'rendering': 'background',
|
||
}
|
||
events.append(afternoon_event)
|
||
count += 1
|
||
start_date += delta
|
||
if count >= 38:
|
||
break
|
||
|
||
planning_edit = 'rdvb78_edit' if item.PLANNING == "B78" else 'rdvb_edit'
|
||
for row in rows:
|
||
nom = row.nom
|
||
etoile = ''
|
||
if row.NOM_ENTREPRISE:
|
||
etoile += 'E'
|
||
if row.comment:
|
||
etoile += 'C'
|
||
if len(etoile) > 0:
|
||
nom = '%s (%s)' % (nom, etoile)
|
||
|
||
# déterminer la couleur de l'event
|
||
if row.date_valeur:
|
||
color = 'LightGreen' # rdv validé = vert pale
|
||
else:
|
||
if to_int(row.ref) != row.cd_cli:
|
||
if row.statut > 1:
|
||
color = 'DeepPink' # rdv élève décommandé
|
||
if row.statut == 10 or 15:
|
||
color = 'LightGray' # moniteur absent
|
||
elif row.fin_reservation:
|
||
color = 'LightPink' # résa = LightPink
|
||
else:
|
||
color = 'LightYellow' # rdv élève = jaune pale
|
||
if row.circuit == 1:
|
||
color = 'Gold' # gold
|
||
elif row.circuit == 2:
|
||
color = 'Plum' # Plum
|
||
elif row.circuit == 3:
|
||
color = 'YellowGreen' # YellowGreen
|
||
elif row.circuit == 4:
|
||
color = 'DeepSkyBlue' # DeepSkyBlue
|
||
elif row.circuit == 5:
|
||
color = 'LimeGreen' # LimeGreen
|
||
elif row.circuit == 6:
|
||
color = 'GoldenRod' # Marron
|
||
else:
|
||
if row.cd_cli == 99995:
|
||
color = 'White' # résa web = couleur blanc)
|
||
elif row.cd_cli == 1:
|
||
color = 'Gainsboro' # ///////
|
||
else:
|
||
color = 'LightBlue' # activité
|
||
if row.statut == 10 or row.statut == 15:
|
||
color = 'LightGray' # moniteur absent
|
||
|
||
json_event = {
|
||
'resourceId': cd_mon,
|
||
'title': nom,
|
||
'start': '%s %02d:00:00' % (row.DATE.strftime('%Y-%m-%d'), row.noplan),
|
||
'end': '%s %02d:00:00' % (row.DATE.strftime('%Y-%m-%d'), row.noplan + row.qte),
|
||
'description': "%06d" % row.cd_cli,
|
||
'allDay': False,
|
||
'color': color,
|
||
'textColor': '#000000',
|
||
'url': '/%s/%s?from=planningb&agence=%s' % (planning_edit, row.no_ligne, str(agence))
|
||
}
|
||
events.append(json_event)
|
||
return json.dumps(events)
|
||
|
||
logged_in = request.authenticated_userid
|
||
# lire le user connecté
|
||
member = get_users_by_code(request, logged_in)
|
||
type_plannings = ['B', 'B78', '2R', 'GL']
|
||
current_planning = 'ALL'
|
||
if 'current_planning' in request.params:
|
||
current_planning = request.params['current_planning']
|
||
|
||
message = ''
|
||
if not member:
|
||
request.session.flash(u"Moniteur %s introuvable" % (logged_in), 'danger')
|
||
return HTTPFound(location=request.route_url("home"))
|
||
# lire son agence d'appartenance
|
||
url = request.route_url('planningb')
|
||
if 'agence' in request.GET:
|
||
agence = request.GET['agence']
|
||
elif 'agence' in request.params:
|
||
agence = request.params['agence']
|
||
else:
|
||
agence = member.agence
|
||
|
||
# start date
|
||
if 'next' in request.GET:
|
||
try:
|
||
current_date = datetime.strptime(request.GET['next'], '%Y-%m-%d')
|
||
current_date = current_date.date()
|
||
except:
|
||
current_date = date.today()
|
||
else:
|
||
current_date = date.today()
|
||
|
||
# -- CREER un rendez-vous
|
||
if 'form.submitted' in request.params:
|
||
name = request.params['name'].split(' | ')
|
||
cd_cli = int(name[1])
|
||
QTE = int(request.params['QTE'])
|
||
dateRDV = request.params['dateRDV']
|
||
heureRDV = request.params['heureRDV']
|
||
fromUrl = url + "?agence=" + agence + '&next=' + dateRDV
|
||
if 'cd_mon_B78' in request.params:
|
||
isB78 = True
|
||
cd_mon = request.params['cd_mon_B78']
|
||
else:
|
||
cd_mon = request.params['cd_mon']
|
||
isB78 = False
|
||
# controle date exportation
|
||
isAffected, lastdate = controlAffectationEtAgece(request, cd_mon, dateRDV, heureRDV, agence)
|
||
if controleDateExport(request, dateRDV, agence) == False:
|
||
message = "Cette journée est déjà comptabilisée ! Création impossible."
|
||
elif not isAffected:
|
||
if lastdate:
|
||
message = "La dernier affectation de ce moniteur pour l'agence " + str(agence) + " était le " + \
|
||
lastdate['DATEF'].strftime('%d/%m/%Y') + " à " + str(lastdate['DMATIN']) + "h jusqu'à " + str(
|
||
lastdate['FMATIN']) + "h le matin et " + str(lastdate['DSOIR']) + "h jusqu'à " + str(
|
||
lastdate['FSOIR']) + "h l'apres midi.!!"
|
||
else:
|
||
message = "Ce moniteur n'a aucune affectation dans cet agence pour la date de {0} à {1}h!!".format(
|
||
dateRDV, heureRDV)
|
||
else:
|
||
if cd_cli < 100000:
|
||
ref = str(cd_cli)
|
||
else:
|
||
if isB78:
|
||
ref = "HCB78"
|
||
else:
|
||
ref = "HCB"
|
||
# controles sur l'élève
|
||
message = ctlEleve_PLB(request, cd_cli)
|
||
if len(message) == 0:
|
||
nDelai = controleSoldeResa(request, cd_cli, ref)
|
||
# plafond dépassé ?
|
||
if nDelai == -1:
|
||
request.session.flash(
|
||
u"L'encours de l'élève a dépassé son plafond autorisé. Impossible de lui ajouter une heure.",
|
||
'danger')
|
||
return HTTPFound(location=fromUrl)
|
||
else:
|
||
update_rdvb(request, 0, 0, cd_cli, dateRDV, heureRDV, QTE, ref, cd_mon, agence, '', 0, 0, nDelai, 0,
|
||
logged_in)
|
||
if nDelai == 0:
|
||
request.session.flash(
|
||
u"Le rendez-vous a été CREE avec succès.", 'success')
|
||
else:
|
||
request.session.flash(
|
||
u"Le rendez-vous a été RESERVE avec succès.", 'warning')
|
||
return HTTPFound(location=fromUrl)
|
||
|
||
# -- CREER un rendez-vous
|
||
if 'form.validated' in request.params:
|
||
if member.secu < 4:
|
||
request.session.flash(
|
||
u"Vous n’avez pas les droits suffisants pour faire ce traitement.", 'error')
|
||
return HTTPFound(location=url)
|
||
else:
|
||
try:
|
||
current_date = datetime.strptime(
|
||
request.params['date'], '%d/%m/%Y').date()
|
||
fromUrl = url + "?agence=" + \
|
||
str(agence) + '&next=' + current_date.strftime('%Y-%m-%d')
|
||
if (current_date - date.today()) > timedelta(0):
|
||
request.session.flash(
|
||
u"Hmm, il est encore trop tôt pour valider ce planning, non ?.", 'error')
|
||
return HTTPFound(location=fromUrl)
|
||
else:
|
||
code = member.secu
|
||
if code < 9:
|
||
if str(agence) != str(member.agence) and int(member.mobile) == 0:
|
||
request.session.flash(
|
||
u"Vous n’avez pas les droits suffisants pour faire ce traitement.", 'error')
|
||
return HTTPFound(location=fromUrl)
|
||
else:
|
||
rows_start_after_now = get_rendez_vous_b_debut_apres_now(
|
||
request, agence, current_date)
|
||
if len(rows_start_after_now) > 0:
|
||
request.session.flash(
|
||
u"Vous ne pouvez pas encore valider ce planning. Il y a encore des leçons qui ne débutent pas.",
|
||
'error')
|
||
return HTTPFound(location=fromUrl)
|
||
ligne_cpts = get_eleve_cpt(
|
||
request, current_date, agence)
|
||
for ligne_cpt in ligne_cpts:
|
||
nStatut = ligne_cpt.STATUT
|
||
nQte = ligne_cpt.QTE
|
||
if ligne_cpt.STATUT == 0:
|
||
nStatut = 1
|
||
if ligne_cpt.CD_CLI == 99995:
|
||
nQte = 0
|
||
# valiriser l'heure
|
||
valoriser_heure(request, ligne_cpt.CD_CLI)
|
||
# Marque l’heure comme validée et RAZ la date de résa
|
||
validate_heure_rdvb(request, ligne_cpt.no_ligne, current_date,
|
||
nQte, nStatut, ligne_cpt.CD_CLI, ligne_cpt.CD_MON, agence)
|
||
request.session.flash(
|
||
u"Le planning a été validé avec succès.", 'success')
|
||
return HTTPFound(location=fromUrl)
|
||
except:
|
||
request.session.flash(u"Date non validé", 'error')
|
||
return HTTPFound(location=url + '?agence=' + str(agence))
|
||
|
||
TODAY = date.today()
|
||
# début = aujourd'hui - 3 semaines
|
||
d = TODAY + relativedelta(weeks=-1)
|
||
datedeb = d.strftime('%Y-%m-%d')
|
||
# fin = aujourd'hui + 6 mois
|
||
d = TODAY + relativedelta(months=+1)
|
||
datefin = d.strftime('%Y-%m-%d')
|
||
|
||
# generer le planning
|
||
# lire tous les moniteurs de l'agence
|
||
moniteurs = get_moniteurs_by_aff(request, agence, datedeb, datefin, current_planning)
|
||
# sort moniteur , mettre B78 à la fin
|
||
# moniteurs.sort(key=lambda m: str(m.PLANNING) == "B", reverse=True)
|
||
moniteursB = [
|
||
moniteur for moniteur in moniteurs if moniteur.PLANNING == "B"]
|
||
moniteursB78 = [
|
||
moniteur for moniteur in moniteurs if moniteur.PLANNING == "B78"]
|
||
moniteurs2R = [
|
||
moniteur for moniteur in moniteurs if moniteur.PLANNING == "2R"]
|
||
moniteursGL = [
|
||
moniteur for moniteur in moniteurs if moniteur.PLANNING == "GL"]
|
||
moniteurs = moniteursB + moniteursB78 + moniteurs2R + moniteursGL
|
||
calendar_ressources = generer_ressources(moniteurs)
|
||
calendar_events = generer_planning(
|
||
agence, moniteurs, datedeb, datefin, current_date)
|
||
|
||
return {
|
||
'page_title': "Planning de B - Agence %s" % (agence),
|
||
'url': url,
|
||
'current_url': request.current_route_path(),
|
||
'calendar_events': calendar_events,
|
||
'calendar_ressources': calendar_ressources,
|
||
'QTE': 1,
|
||
'agence': int(agence),
|
||
'message': message,
|
||
'type_plannings': type_plannings,
|
||
'current_planning': current_planning,
|
||
'current_date': current_date,
|
||
'code': member.secu,
|
||
'myagence': member.agence
|
||
}
|
||
|
||
@view_config(route_name='rdvb_edit', renderer='../templates/planning/rdvb_edit.pt')
|
||
def rdvb_edit(request):
|
||
logged_in = request.authenticated_userid
|
||
cd_mon, cd_mon_B78 = get_user_cd_mon(request, logged_in)
|
||
no_ligne = request.matchdict['no_ligne']
|
||
rdvb = get_rendezvous_by_noligne(request, no_ligne)
|
||
if ('from' and 'agence') in request.GET:
|
||
url = request.route_url('rdvb_edit', no_ligne=no_ligne) + "?from=%s&agence=%s" % (
|
||
request.GET['from'], request.GET['agence'])
|
||
location = request.route_url(request.GET['from']) + "?agence=%s" % (
|
||
request.GET['agence'] + '&next=' + rdvb.DATE.strftime('%Y-%m-%d'))
|
||
else:
|
||
url = request.route_url('rdvb_edit', no_ligne=no_ligne)
|
||
location = request.route_url("monplanning", cd_mon=rdvb.CD_MON, date=rdvb.DATE.strftime('%Y-%m-%d'))
|
||
message = ''
|
||
|
||
# rdv déjà validé ?
|
||
if rdvb.DATE_VALEUR:
|
||
rdv_valide = True
|
||
else:
|
||
rdv_valide = False
|
||
|
||
heuresSpe = [
|
||
'0 - HEURE CONDUITE B',
|
||
'1 - EXAMEN BLANC',
|
||
'2 - RDV PREALABLE',
|
||
'3 - RDV PEDAGOGIQUE 1',
|
||
'4 - 1ERES HEURES',
|
||
'5 - RDV PEDAGOGIQUE 2',
|
||
'6 - AVANT PERMIS',
|
||
]
|
||
statuts = get_statuts_lecon(request)
|
||
|
||
# déterminer l'url du bouton 'Fiche Elève' / 'Planning xxx'
|
||
btn_name = 'Planning %s' % rdvb.NOM
|
||
if rdvb.CD_CLI == 37:
|
||
# circuit
|
||
# btn_url = '/circuit_list/%s/%s' % (rdvb.DATE,'C')
|
||
btn_url = "/motos_schd/I"
|
||
elif rdvb.CD_CLI == 18:
|
||
# rdv Stage code
|
||
btn_url = '/motos_schd/D'
|
||
elif rdvb.CD_CLI == 20:
|
||
# rdv Planning 2R
|
||
btn_url = '/motos_schd/A'
|
||
elif rdvb.CD_CLI in [21, 56, 59, 69]:
|
||
# rdv Planning Stage 2R
|
||
btn_url = '/stages_schd/M'
|
||
elif rdvb.CD_CLI == 54:
|
||
# rdv Examen blanc
|
||
btn_url = 'motos_schd/E'
|
||
elif rdvb.CD_CLI == 52 or rdvb.CD_CLI == 55:
|
||
# rdv pedagoque 1 et 2
|
||
btn_url = '/motos_schd/R'
|
||
elif rdvb.CD_CLI == 10:
|
||
# circuit stage
|
||
btn_url = '/stageb_list/%s/A/%s/%s' % (rdvb.DATE, 'C', cd_mon)
|
||
elif rdvb.CD_CLI == 11:
|
||
# stage B
|
||
btn_url = '/stageb_list/%s/A/%s/%s' % (rdvb.DATE, 'S', cd_mon)
|
||
elif rdvb.CD_CLI == 16:
|
||
# passage permis 2R
|
||
btn_url = '/examens_schd/today/2R'
|
||
elif rdvb.CD_CLI > 100000:
|
||
btn_url = '/fiche_eleve/%s' % (rdvb.CD_CLI)
|
||
btn_name = 'Fiche élève'
|
||
else:
|
||
btn_url = ''
|
||
btn_name = ''
|
||
|
||
if 'form.submitted' in request.params or 'form.validated' in request.params:
|
||
name_cdcli = request.params['NOM'].split(' | ')
|
||
if len(name_cdcli) < 2:
|
||
message = "Elevé non validé !"
|
||
NEW_CDCLI = name_cdcli[1]
|
||
qte = int(request.params['QTE'])
|
||
if qte < 1 or qte > 12:
|
||
message = "Le nombre d'heures est incorrect"
|
||
else:
|
||
# controles sur l'élève
|
||
message = ctlEleve_PLB(request, NEW_CDCLI)
|
||
if len(message) == 0:
|
||
nDelai = 0
|
||
update_rdvb(request, no_ligne, rdvb.CD_CLI, NEW_CDCLI, rdvb.DATE.strftime('%Y-%m-%d'), rdvb.NoPlan, qte,
|
||
rdvb.REF, rdvb.CD_MON, rdvb.AGENCE, request.params['COMMENT'],
|
||
int(request.params['STATUT']),
|
||
int(request.params['typeHeure'][0]), nDelai, rdvb.cd_cli_old, logged_in)
|
||
if 'form.validated' in request.params:
|
||
validate_rdvb(request, no_ligne)
|
||
request.session.flash(u"Le rendez-vous a été mis à jour avec succès.", 'success')
|
||
return HTTPFound(location=location)
|
||
|
||
if 'form.deleted' in request.params:
|
||
p = request.GET
|
||
# user autorisé ?
|
||
userAcces = get_user_access(request, logged_in)
|
||
if userAcces < 6:
|
||
message = "Vous n'êtes pas autorisé à effectuer cette opération !"
|
||
else:
|
||
# journée déjà comptabilisée ?
|
||
if rdvb.DATE_VALEUR:
|
||
message = "Journée déjà validée"
|
||
else:
|
||
delaiOK = 'OK'
|
||
if userAcces < 9 and rdvb.CD_CLI > 1000000:
|
||
# controler le délai annulation ?
|
||
delaiOK = isDelaiOK(request, rdvb.DATE, rdvb.cree_le, rdvb.STATUT)
|
||
if delaiOK != 'OK':
|
||
message = "Délai de suppression est dépassé. Suppression impossible!"
|
||
else:
|
||
# delettrer la ligne de compte
|
||
update_eleve_delettrer(request, no_ligne)
|
||
# mise à jour de la ligne comme annulée
|
||
delete_eleve_cpt(request, no_ligne, rdvb.CD_CLI, rdvb.NoPlan, rdvb.STATUT, rdvb.CD_UTI)
|
||
request.session.flash(u"Le rendez-vous a été supprimer avec succès.", 'success')
|
||
return HTTPFound(location=location)
|
||
|
||
return {
|
||
'page_title': 'Rendez-vous du %s à %s h' % (rdvb.DATE.strftime('%d-%m-%Y'), rdvb.NoPlan),
|
||
'url': url,
|
||
'rdvb': rdvb,
|
||
'rdv_valide': rdv_valide,
|
||
'btn_url': btn_url,
|
||
'btn_name': btn_name,
|
||
'heuresSpe': heuresSpe,
|
||
'statuts': statuts,
|
||
'message': message,
|
||
'back': location
|
||
}
|
||
|
||
|
||
@view_config(route_name='rdvb78_edit', renderer='../templates/planning/rdvb78_edit.pt')
|
||
def rdvb78_edit(request):
|
||
logged_in = request.authenticated_userid
|
||
cd_mon, cd_mon_B78 = get_user_cd_mon(request, logged_in)
|
||
no_ligne = request.matchdict['no_ligne']
|
||
rdvb78 = get_rendezvous_by_noligne(request, no_ligne)
|
||
if ('from' and 'agence') in request.GET:
|
||
url = request.route_url('rdvb78_edit', no_ligne=no_ligne) + "?from=%s&agence=%s" % (
|
||
request.GET['from'], request.GET['agence'])
|
||
location = request.route_url(request.GET['from']) + "?agence=%s" % (
|
||
request.GET['agence'] + '&next=' + rdvb78.DATE.strftime('%Y-%m-%d'))
|
||
else:
|
||
url = request.route_url('rdvb78_edit', no_ligne=no_ligne)
|
||
location = request.route_url("monplanning", cd_mon=cd_mon, date=rdvb78.DATE.strftime('%Y-%m-%d'))
|
||
|
||
message = ''
|
||
|
||
# rdv déjà validé ?
|
||
if rdvb78.DATE_VALEUR:
|
||
rdv_valide = True
|
||
else:
|
||
rdv_valide = False
|
||
|
||
heuresSpe = [
|
||
'0 - HEURE CONDUITE B78',
|
||
'1 - EXAMEN BLANC',
|
||
'2 - RDV PREALABLE',
|
||
'3 - RDV PEDAGOGIQUE 1',
|
||
'4 - 1ERES HEURES',
|
||
'5 - RDV PEDAGOGIQUE 2',
|
||
'6 - AVANT PERMIS',
|
||
]
|
||
statuts = get_statuts_lecon(request)
|
||
|
||
# déterminer l'url du bouton 'Fiche Elève' / 'Planning xxx'
|
||
btn_name = 'Planning %s' % rdvb78.NOM
|
||
if rdvb78.CD_CLI == 37:
|
||
# circuit
|
||
btn_url = '/circuit_list/%s/%s' % (rdvb78.DATE, rdvb78.GROUPE)
|
||
elif rdvb78.CD_CLI == 18:
|
||
# rdv Stage code
|
||
btn_url = '/motos_schd/D'
|
||
elif rdvb78.CD_CLI == 20:
|
||
# rdv Planning 2R
|
||
btn_url = '/motos_schd/A'
|
||
elif rdvb78.CD_CLI in [21, 56, 59, 69]:
|
||
# rdv Planning Stage 2R
|
||
btn_url = '/stages_schd/M'
|
||
elif rdvb78.CD_CLI == 54:
|
||
# rdv Examen blanc
|
||
btn_url = 'motos_schd/E'
|
||
elif rdvb78.CD_CLI == 52 or rdvb78.CD_CLI == 55:
|
||
# rdv pedagoque 1 et 2
|
||
btn_url = '/motos_schd/R'
|
||
elif rdvb78.CD_CLI == 10:
|
||
# circuit stage
|
||
btn_url = '/stageb_list/%s/A/%s/%s' % (rdvb78.DATE, 'C', cd_mon)
|
||
elif rdvb78.CD_CLI == 11:
|
||
# stage B
|
||
btn_url = '/stageb_list/%s/A/%s/%s' % (rdvb78.DATE, 'S', cd_mon)
|
||
elif rdvb78.CD_CLI == 16:
|
||
# passage permis 2R
|
||
btn_url = '/examens_schd/today/2R'
|
||
elif rdvb78.CD_CLI > 100000:
|
||
btn_url = '/fiche_eleve/%s' % (rdvb78.CD_CLI)
|
||
btn_name = 'Fiche élève'
|
||
else:
|
||
btn_url = ''
|
||
btn_name = ''
|
||
|
||
if 'form.submitted' in request.params or 'form.validated' in request.params:
|
||
name_cdcli = request.params['NOM'].split(' | ')
|
||
if len(name_cdcli) < 2:
|
||
message = "Elevé non validé !"
|
||
NEW_CDCLI = name_cdcli[1]
|
||
qte = int(request.params['QTE'])
|
||
if qte < 1 or qte > 12:
|
||
message = "Le nombre d'heures est incorrect"
|
||
else:
|
||
# controles sur l'élève
|
||
message = ctlEleve_PLB(request, NEW_CDCLI)
|
||
if len(message) == 0:
|
||
nDelai = 0
|
||
typeheure = int(request.params['typeHeure'][0])
|
||
update_rdvb(request, no_ligne, rdvb78.CD_CLI, NEW_CDCLI, rdvb78.DATE.strftime('%Y-%m-%d'),
|
||
rdvb78.NoPlan, qte,
|
||
rdvb78.REF, rdvb78.CD_MON, rdvb78.AGENCE, request.params['COMMENT'],
|
||
int(request.params['STATUT']),
|
||
typeheure, nDelai, rdvb78.cd_cli_old, logged_in)
|
||
if 'form.validated' in request.params:
|
||
validate_rdvb(request, no_ligne)
|
||
request.session.flash(u"Le rendez-vous a été mis à jour avec succès.", 'success')
|
||
|
||
return HTTPFound(location=location)
|
||
|
||
if 'form.deleted' in request.params:
|
||
p = request.GET
|
||
# user autorisé ?
|
||
userAcces = get_user_access(request, logged_in)
|
||
if userAcces < 6:
|
||
message = "Vous n'êtes pas autorisé à effectuer cette opération !"
|
||
else:
|
||
# journée déjà comptabilisée ?
|
||
if rdvb78.DATE_VALEUR:
|
||
message = "Journée déjà validée"
|
||
else:
|
||
delaiOK = 'OK'
|
||
if userAcces < 9 and rdvb78.CD_CLI > 1000000:
|
||
# controler le délai annulation ?
|
||
delaiOK = isDelaiOK(request, rdvb78.DATE, rdvb78.cree_le, rdvb78.STATUT)
|
||
if delaiOK != 'OK':
|
||
message = "Délai de suppression est dépassé. Suppression impossible!"
|
||
else:
|
||
# delettrer la ligne de compte
|
||
update_eleve_delettrer(request, no_ligne)
|
||
# mise à jour de la ligne comme annulée
|
||
delete_eleve_cpt(request, no_ligne, rdvb78.CD_CLI, rdvb78.NoPlan, rdvb78.STATUT, rdvb78.CD_UTI)
|
||
request.session.flash(u"Le rendez-vous a été supprimer avec succès.", 'success')
|
||
return HTTPFound(location=location)
|
||
|
||
return {
|
||
'page_title': 'Rendez-vous du %s à %s h' % (rdvb78.DATE.strftime('%d-%m-%Y'), rdvb78.NoPlan),
|
||
'url': url,
|
||
'rdvb78': rdvb78,
|
||
'rdv_valide': rdv_valide,
|
||
'btn_url': btn_url,
|
||
'btn_name': btn_name,
|
||
'heuresSpe': heuresSpe,
|
||
'statuts': statuts,
|
||
'message': message,
|
||
'back': location
|
||
}
|
||
|
||
|
||
@view_config(route_name='motos_edit', renderer='../templates/planning/motos_edit.pt')
|
||
def motos_edit(request):
|
||
type_stage = request.matchdict['type']
|
||
groupe = request.matchdict['groupe']
|
||
date_stage = request.matchdict['date']
|
||
cd_cli = request.matchdict['cd_cli']
|
||
url = request.route_url('motos_edit', type=type_stage,groupe=groupe,date=date_stage,cd_cli=cd_cli)
|
||
logged_in = request.authenticated_userid
|
||
member = get_users_by_code(request, logged_in)
|
||
code = int(member.secu)
|
||
|
||
# initialise la variable de session
|
||
if 'url_retour' not in request.session:
|
||
request.session['url_retour'] = url
|
||
# save url appelant dans une variable de session
|
||
if request.referrer and request.referrer != url:
|
||
request.session['url_retour'] = request.referrer
|
||
message = ''
|
||
formated_date = datetime.strptime(date_stage,'%Y-%m-%d') if date_stage != None else None
|
||
if int(cd_cli) == 0 :
|
||
rdvb = {
|
||
'QTE' : 1,
|
||
'REF' : "HCA3",
|
||
'LIEU' : '',
|
||
'STATUT' : None,
|
||
'VALIDE' : 'N',
|
||
'CD_CLI' : 0,
|
||
'CD_UTI' : member.cd_uti,
|
||
'COMMENT' : None,
|
||
'ligne_cpt' : 0,
|
||
'cree_le' : datetime.now(),
|
||
'modif_le' : datetime.now(),
|
||
'DATE' : formated_date
|
||
}
|
||
else :
|
||
rdvb = get_pla_moto_ligne_by_date(request,type_stage,groupe,formated_date,int(cd_cli))
|
||
|
||
delete = True
|
||
if code <= 6 or rdvb['VALIDE'] == "O" or int(cd_cli) == 0:
|
||
delete = False
|
||
|
||
eleve = get_eleves_by_code(request,rdvb['CD_CLI'])
|
||
lieux = get_lieux_by_type(request,type_stage+groupe)
|
||
statuts = get_statuts_lecon(request)
|
||
reference = get_ref_by_motos_type(request,type_stage)
|
||
stage_edit = get_pla_moto_by_date(request,type_stage,groupe,formated_date)
|
||
fin_reservation = stage_edit['DATE'].strftime('%d-%m-%Y') if stage_edit and stage_edit['DATE'] != None and stage_edit['DATE'] != "" else None
|
||
cree_le = rdvb['cree_le'].strftime('%d-%m-%Y') if rdvb != None and rdvb['cree_le'] != None and rdvb['cree_le'] != "" else None
|
||
modif_le = rdvb['modif_le'].strftime('%d-%m-%Y') if rdvb != None and rdvb['modif_le'] != None and rdvb['modif_le']!= "" else None
|
||
|
||
if 'form.deleted' in request.params and int(cd_cli) != 0 :
|
||
if code < 9 and int(cd_cli) > 100000 :
|
||
isdelayok = isDelaiOK(request,stage_edit['DATE'],rdvb['cree_le'],8)
|
||
if not isdelayok:
|
||
request.session.flash(u"Interdiction de suppression de l'éleve %s dans le planning %s groupe %s." %(eleve['NOM']+" "+eleve['PRENOM'],type_stage,groupe), 'danger')
|
||
return HTTPFound(request.session['url'])
|
||
|
||
delete_moto_lig_by_cd_cli(request,rdvb.no_ligne,rdvb.ligne_cpt,cd_cli,member.cd_uti)
|
||
update_panning_moto_dispo(request,type_stage,formated_date,groupe)
|
||
request.session.flash(u"L'eleve %s est bien suprimé dans le planning %s groupe %s." %(eleve['NOM']+" "+eleve['PRENOM'],type_stage,groupe), 'success')
|
||
return HTTPFound(request.session['url_retour'])
|
||
|
||
if 'form.submitted' in request.params:
|
||
|
||
|
||
new_values = dict(rdvb)
|
||
params = dict(request.params)
|
||
del params['form.submitted']
|
||
data = params['NOM'].split(' | ')
|
||
if len(data) == 2 :
|
||
cd_cli2 = int(data[1])
|
||
if int(cd_cli) == 0 and stage_edit and stage_edit.DISPO <= 0 :
|
||
request.session.flash(u"Les eleves inscrits sont completes !", 'danger')
|
||
return HTTPFound(request.session['url_retour'])
|
||
if cd_cli2 != 0:
|
||
eleve_edit = get_eleves_by_code(request,cd_cli2)
|
||
if eleve_edit:
|
||
if int (eleve_edit['AGENCE']) != 0 :
|
||
if int(code) < 9 and eleve_edit['CLOTURE_LE'] != None :
|
||
request.session.flash(u"Le DOSSIER de cet élève est CLOTURE ou RETIRE ou en LITIGE !", 'danger')
|
||
return HTTPFound(url)
|
||
elif eleve_edit['ELEVEGARDE02'] != 0 :
|
||
request.session.flash(u"Le DOSSIER est gardé par l'élève !", 'danger')
|
||
return HTTPFound(url)
|
||
elif eleve_edit['FORMULE'] == None :
|
||
request.session.flash(u" Attention! La FORMULE de l'élève n'est pas renseignée !", 'danger')
|
||
return HTTPFound(url)
|
||
elif (type_stage == "I" or type_stage == "R" or type_stage == "E") and eleve_edit.PERMIS_DEMANDE != "B" :
|
||
request.session.flash(u"La catégorie de permis demandée n'est pas compatible avec ce planning !", 'danger')
|
||
return HTTPFound(url)
|
||
elif (type_stage == "A" or type_stage == "F") and not eleve_edit.PERMIS_DEMANDE.startswith('A'):
|
||
request.session.flash(u"La catégorie de permis demandée n'est pas compatible avec ce planning !", 'danger')
|
||
return HTTPFound(url)
|
||
elif eleve_edit['COMPLET_LE'] == None or eleve_edit['DOSSIER_DATE'] == None:
|
||
request.session.flash(u"Attention! Le dossier de l'élève est INCOMPLET ou NON ENREGISTRE!", 'warning')
|
||
if eleve_edit['visite_med_fin_le'] != None :
|
||
days = (eleve_edit['visite_med_fin_le'] - date.today()).days
|
||
if days < 0 :
|
||
request.session.flash(u"Attention! La date de visite médicale de l'élève est exprirée.", 'danger')
|
||
return HTTPFound(url)
|
||
elif days < 90 :
|
||
request.session.flash(u"Attention! La date de visite médicale de l'élève est exprirée.", 'warning')
|
||
formule = get_formule(request,eleve_edit['FORMULE'])
|
||
if formule:
|
||
if type_stage == "A":
|
||
params['REF'] = formule.HCONDUIT
|
||
params['QTE'] = formule.HSeance
|
||
else:
|
||
params['QTE'] = 1
|
||
if type_stage == "F":
|
||
params['REF'] = "TA"
|
||
if type_stage == "E":
|
||
params['REF'] = 'TB'
|
||
elif type_stage == "D":
|
||
params['REF'] = 'PREPACODE'
|
||
elif type_stage == "I":
|
||
params['REF'] = 'CIRCUIT'
|
||
elif type_stage == "R":
|
||
params['REF'] = 'RDVP'
|
||
# controle de solde
|
||
resultatSolde = controleSoldeResa(request,cd_cli2,params['REF'])
|
||
if int(cd_cli) != 0 :
|
||
new_values['SOLDE'] = resultatSolde
|
||
else :
|
||
params['SOLDE'] = resultatSolde
|
||
if resultatSolde == -1:
|
||
request.session.flash(u"Le solde REEL de l'élève a dépassé l'encours autorisé et son total de réservation a dépassé le plafond autorisé",'danger')
|
||
return HTTPFound(url)
|
||
else :
|
||
pass
|
||
else:
|
||
request.session.flash(u"Formule invalidé",'danger')
|
||
return HTTPFound(url)
|
||
#insert
|
||
params['CD_CLI'] = eleve_edit.CD_CLI
|
||
params['NOM'] = eleve_edit.NOMPREN
|
||
if int(cd_cli) == 0:
|
||
params['TYPE'] = type_stage
|
||
params['GROUPE'] = groupe
|
||
params['DATE'] = formated_date
|
||
params['Route'] = eleve_edit.TR_P_OK if eleve_edit.TR_P_OK != None else 0
|
||
params['CD_UTI'] = member.cd_uti
|
||
params['AGENCE'] = member.agence
|
||
params['STATUT'] = 0
|
||
params['VALIDE'] = 'N'
|
||
params['fin_reservation'] = datetime.strptime(fin_reservation,"%d-%m-%Y").date() if fin_reservation != None and fin_reservation != "" else None
|
||
# inserer l'eleve
|
||
exist = get_pla_moto_ligne_by_date(request,type_stage,groupe,formated_date,eleve_edit.CD_CLI)
|
||
if not exist :
|
||
# solde = params['SOLDE']
|
||
# del params['SOLDE']
|
||
# insert_motos_lig(request,params)
|
||
params['CD_UTI'] = member.cd_uti
|
||
params['OLD_CD_CLI'] = 0
|
||
params['AGENCE'] = member.agence
|
||
params['LIGNE_CPT'] = 0
|
||
# params['SOLDE'] = solde
|
||
update_motos_lig_avec_control(request,params)
|
||
update_panning_moto_dispo(request,type_stage,formated_date,groupe)
|
||
request.session.flash(u"L'eleve est inscrit dans le planning.", 'success')
|
||
return HTTPFound(request.session['url_retour'])
|
||
else:
|
||
request.session.flash(u"L'eleve est déjà inscrit dans le planning.", 'danger')
|
||
return HTTPFound(url)
|
||
else:
|
||
params['STATUT'] = int(params['STATUT'])
|
||
for param, value in params.items():
|
||
if param in new_values.keys():
|
||
new_values[param] = value
|
||
new_values['CD_UTI'] = member.cd_uti
|
||
new_values['OLD_CD_CLI'] = rdvb.CD_CLI
|
||
new_values['LIGNE_CPT'] = rdvb.ligne_cpt
|
||
new_values['AGENCE'] = member.agence
|
||
update_motos_lig_avec_control(request,new_values)
|
||
request.session.flash(u"Le rendez-vous a été mis à jour avec succès.", 'success')
|
||
return HTTPFound(request.session['url_retour'])
|
||
else:
|
||
request.session.flash(u"L'élève non validé pour le planning %s, groupe %s" %(str(rdvb.TYPE),str(rdvb.GROUPE)),'danger')
|
||
return HTTPFound(url)
|
||
else:
|
||
request.session.flash(u"L'élève non validé pour planning %s, groupe %s" %(str(type_stage),str(groupe)),'danger')
|
||
return HTTPFound(url)
|
||
else:
|
||
request.session.flash(u"Eleve non validé.", 'danger')
|
||
return HTTPFound(url)
|
||
|
||
return {
|
||
'page_title': 'Rendez-vous du %s' % (rdvb['DATE'].strftime('%d/%m/%Y')),
|
||
'url': url,
|
||
'url_retour': request.session['url_retour'],
|
||
'rdvb': rdvb,
|
||
'statuts': statuts,
|
||
'message': message,
|
||
'eleve' : eleve,
|
||
'lieux' : lieux,
|
||
'code' : code,
|
||
'delete' : delete,
|
||
'cree_le' : cree_le,
|
||
'modif_le' : modif_le,
|
||
'fin_reservation': fin_reservation,
|
||
'cd_uti' : rdvb['CD_UTI'],
|
||
}
|
||
|
||
|
||
|
||
@view_config(route_name='stages_edit', renderer='../templates/planning/stages_edit.pt')
|
||
def stages_edit(request):
|
||
no_ligne = request.matchdict['no_ligne']
|
||
url = request.route_url('stages_edit', no_ligne=no_ligne)
|
||
logged_in = request.authenticated_userid
|
||
member = get_users_by_code(request, logged_in)
|
||
|
||
# initialise la variable de session
|
||
if 'url_retour' not in request.session:
|
||
request.session['url_retour'] = url
|
||
# save url appelant dans une variable de session
|
||
if request.referrer and request.referrer != url:
|
||
request.session['url_retour'] = request.referrer
|
||
message = ''
|
||
code = int(member.secu)
|
||
delete = True
|
||
|
||
rdvb = get_stages_lig_by_noligne(request, no_ligne)
|
||
statuts = get_statuts_lecon(request)
|
||
type_stage = no_ligne[0:1]
|
||
semaine = no_ligne[1:7]
|
||
groupe = no_ligne[7:8]
|
||
cd_cli = no_ligne[8:14]
|
||
|
||
stage_edit = get_pla_stage_by_semaine(request,type_stage,semaine,groupe)
|
||
cree_le = rdvb['cree_le'].strftime('%d-%m-%Y') if rdvb != None and rdvb['cree_le'].strftime('%d-%m-%Y') != None and rdvb['cree_le'].strftime('%d-%m-%Y') != "" else None
|
||
modif_le = rdvb['modif_le'].strftime('%d-%m-%Y') if rdvb != None and rdvb['modif_le'].strftime('%d-%m-%Y') != None and rdvb['modif_le'].strftime('%d-%m-%Y') != "" else None
|
||
fin_reservation = stage_edit['fin'].strftime('%d-%m-%Y') if stage_edit['fin'].strftime('%d-%m-%Y') != None and stage_edit['fin'].strftime('%d-%m-%Y') != "" else None
|
||
|
||
eleve = get_eleves_by_code(request,cd_cli)
|
||
reference = get_ref_by_stage_type(request,type_stage)
|
||
if type_stage == 'B' and (groupe == "C" or groupe == "D"):
|
||
reference[0] = {'REF':'HCB78'}
|
||
|
||
if rdvb is None :
|
||
semaine = no_ligne[1:7]
|
||
rdvb = {
|
||
'QTE' : 1,
|
||
'REF' : "HCB",
|
||
'ligne_cpt' : 0,
|
||
'LIEU' : '',
|
||
'STATUT' : None,
|
||
'VALIDE' : 'N',
|
||
'CD_CLI' : 0
|
||
}
|
||
else:
|
||
semaine = rdvb.SEMAINE
|
||
if code <= 6 or rdvb['VALIDE'] == "O":
|
||
delete = False
|
||
|
||
if code < 9 and int(cd_cli) > 100000 :
|
||
isdelayok = isDelaiOK(request, stage_edit['fin'], rdvb['cree_le'].date(), 8)
|
||
if not isdelayok:
|
||
delete = False
|
||
|
||
if 'form.deleted' in request.params and rdvb != None :
|
||
if code < 9 and int(cd_cli) > 100000 :
|
||
isdelayok = isDelaiOK(request, stage_edit['fin'], rdvb['cree_le'].date(), 8)
|
||
if not isdelayok:
|
||
request.session.flash(u"Interdiction de suppression de l'éleve %s dans le stage %s groupe %s." %(eleve['NOM']+" "+eleve['PRENOM'],type_stage,groupe), 'danger')
|
||
return HTTPFound(request.session['url'])
|
||
|
||
delete_stage_lig_by_cd_cli(request,type_stage,semaine,groupe,cd_cli)
|
||
request.session.flash(u"L'eleve %s est bien suprimé dans le stage %s groupe %s." %(eleve['NOM']+" "+eleve['PRENOM'],type_stage,groupe), 'success')
|
||
return HTTPFound(request.session['url_retour'])
|
||
|
||
if 'form.submitted' in request.params:
|
||
|
||
params = dict(request.params)
|
||
del params['form.submitted']
|
||
data = params['NOM'].split(' | ')
|
||
eleve_edit = None
|
||
if len(data) == 2 :
|
||
cd_cli2 = data[1]
|
||
if stage_edit.DISPO <= 0 and int(cd_cli) == 0:
|
||
request.session.flash(u"Les eleves inscrits sont completes !", 'danger')
|
||
return HTTPFound(request.session['url_retour'])
|
||
if int(cd_cli2) != 0 :
|
||
eleve_edit = get_eleves_by_code(request,cd_cli2)
|
||
eleve_stage = stage_lig_by_eleve(request,cd_cli2,type_stage,semaine,groupe)
|
||
params['NOM'] = eleve_edit.NOMPREN
|
||
params['CD_CLI'] = cd_cli2
|
||
if int(cd_cli) != int(cd_cli2):
|
||
formule = get_formule(request,eleve_edit['FORMULE'])
|
||
if formule :
|
||
params['QTE'] = formule.HSeance
|
||
params['REF'] = formule.INS1
|
||
|
||
if int (eleve_edit['AGENCE']) != 0 :
|
||
eleve_formule = get_formule(request,eleve_edit['FORMULE'])
|
||
if not eleve_formule :
|
||
request.session.falsh(u'Attention! La FORMULE de l\'élève n\'est pas renseignée')
|
||
return HTTPFound(url)
|
||
if int(code) < 9 and eleve_edit['CLOTURE_LE'] != None :
|
||
request.session.flash(u"Le DOSSIER de cet élève est CLOTURE ou RETIRE ou en LITIGE !", 'danger')
|
||
return HTTPFound(url)
|
||
elif eleve_edit['ELEVEGARDE02'] != 0 :
|
||
request.session.flash(u"Le DOSSIER est gardé par l'élève !", 'danger')
|
||
return HTTPFound(url)
|
||
elif eleve_edit['FORMULE'] == None :
|
||
request.session.flash(u" Attention! La FORMULE de l'élève n'est pas renseignée !", 'danger')
|
||
return HTTPFound(url)
|
||
elif type_stage == "B" and groupe != "C" and groupe != "D" and eleve_edit['PERMIS_DEMANDE'] != "B" :
|
||
request.session.flash(u"La catégorie de permis demandée n'est pas compatible avec ce planning !", 'danger')
|
||
return HTTPFound(url)
|
||
elif type_stage == "B" and (groupe == "C" or groupe == "D") and eleve_edit['PERMIS_DEMANDE'] != "B78" :
|
||
request.session.flash(u"Le groupe demandée est réservé pour boite automatique", 'danger')
|
||
return HTTPFound(url)
|
||
elif type_stage == "B78" and params['REF'] == "HCB" :
|
||
request.session.flash(u"Le groupe demandée est réservé pour boite automatique", 'danger')
|
||
return HTTPFound(url)
|
||
elif type_stage == "B" and int(code) <= 2 :
|
||
request.session.flash(u"Les moniteurs sont autorisés à modifier seulement le planning Moto !", 'danger')
|
||
return HTTPFound(url)
|
||
elif type_stage == "C" and eleve_edit['PERMIS_DEMANDE'] != "POINT":
|
||
request.session.flash(u"La catégorie de permis demandée n'est pas compatible avec ce planning !", 'danger')
|
||
return HTTPFound(url)
|
||
elif type_stage == "M" and not eleve_edit['PERMIS_DEMANDE'].startswith('A'):
|
||
request.session.flash(u"La catégorie de permis demandée n'est pas compatible avec ce planning !", 'danger')
|
||
return HTTPFound(url)
|
||
elif eleve_edit['COMPLET_LE'] == None or eleve_edit['DOSSIER_DATE'] == None:
|
||
request.session.flash(u"Attention! Le dossier de l'élève est INCOMPLET ou NON ENREGISTRE!", 'warning')
|
||
if eleve_edit['visite_med_fin_le'] != None :
|
||
days = (eleve_edit['visite_med_fin_le'] - date.today()).days
|
||
if days < 0 :
|
||
request.session.flash(u"Attention! La date de visite médicale de l'élève est exprirée.", 'danger')
|
||
return HTTPFound(url)
|
||
elif days < 90 :
|
||
request.session.flash(u"Attention! La date de visite médicale de l'élève est exprirée.", 'warning')
|
||
if eleve_formule and int(eleve_formule['STAGE']) == 0 :
|
||
request.session.flash(u"La FORMULE de cet élève n'est pas de type stage !", 'danger')
|
||
return HTTPFound(url)
|
||
elif int(cd_cli) != int(cd_cli2) and len(eleve_stage) > 0 :
|
||
request.session.flash(u"L'élève est déjà inscrit au stage de la semaine %s, groupe %s" %(str(semaine),str(groupe)),'danger')
|
||
return HTTPFound(url)
|
||
else:
|
||
request.session.flash(u"L'élève non validé pour le stage de la semaine %s, groupe %s" %(str(semaine),str(groupe)),'danger')
|
||
return HTTPFound(url)
|
||
else:
|
||
request.session.flash(u"Eleve fomat incorrect %s, groupe %s" %(str(semaine),str(groupe)),'danger')
|
||
return HTTPFound(url)
|
||
params['CD_UTI'] = member.cd_uti
|
||
params['AGENCE'] = stage_edit['AGENCE']
|
||
if int(cd_cli) == 0 :
|
||
update_stages_lig(request, no_ligne, params,1)
|
||
else:
|
||
if'REF' not in params :
|
||
params['REF'] = rdvb['REF']
|
||
params['LIGNE_CPT'] = rdvb['ligne_cpt']
|
||
update_stages_lig(request, no_ligne, params)
|
||
request.session.flash(u"Le rendez-vous a été mis à jour avec succès.", 'success')
|
||
return HTTPFound(request.session['url_retour'])
|
||
|
||
return {
|
||
'page_title': 'Stage de la semaine %s' % (semaine),
|
||
'url': url,
|
||
'url_retour': request.session['url_retour'],
|
||
'rdvb': rdvb,
|
||
'statuts': statuts,
|
||
'message': message,
|
||
'eleve' : eleve,
|
||
'delete' : delete,
|
||
'cree_le' : cree_le,
|
||
'modif_le' : modif_le,
|
||
'fin_reservation': fin_reservation,
|
||
'reference': reference,
|
||
'ligne_cpt' : rdvb['ligne_cpt'] if rdvb != None else None,
|
||
'cd_uti' : stage_edit['CD_UTI'],
|
||
'cd_cli' : rdvb['CD_CLI']
|
||
}
|
||
|
||
|
||
@view_config(route_name='stageb_list', renderer='../templates/planning/stageb_list.pt', permission='view')
|
||
def stageb_list(request):
|
||
|
||
def generer_datatable(date_stage, groupe_stage, type_stage, cd_mon_stage):
|
||
# lire les stages B
|
||
items = get_stage_lig_by_date(request, 'B', date_stage, groupe_stage)
|
||
|
||
dates_stage = ''
|
||
date_deb = date.today()
|
||
date_fin = date.today()
|
||
# construire la liste
|
||
liste=[]
|
||
dates_stage = ''
|
||
for item in items:
|
||
# mémoriser les dates du stage
|
||
dates_stage = '%s au %s' % (item.debut.strftime('%d'), item.fin.strftime('%d-%m-%Y'))
|
||
date_deb = item.debut.date()
|
||
date_fin = item.fin
|
||
|
||
if type_stage == 'A' or (type_stage == 'S' and item.CD_MON == cd_mon_stage) or (type_stage == 'C' and item.cd_circuit == cd_mon_stage):
|
||
# n'affiche que les élèves du moniteur
|
||
solde = to_euroN(item.solde)
|
||
if item.nom_entreprise :
|
||
solde += ' E'
|
||
if item.perime_le:
|
||
code_ok = to_age(item.perime_le, '<')
|
||
else:
|
||
code_ok = ''
|
||
# examen prévu ?
|
||
examen = get_examens_prevu(request, item.CD_CLI)
|
||
if examen:
|
||
if examen.PERMIS == 'ETG':
|
||
code_ok = 'Inscrit'
|
||
|
||
if item.VALIDE == 'N':
|
||
heures = item.heures
|
||
else:
|
||
heures = 'VAL'
|
||
|
||
circuit = item.seance
|
||
if item.cd_circuit:
|
||
circuit += ' - ' + item.cd_circuit
|
||
|
||
d = (item.CD_CLI, item.GROUPE, item.niveau, to_str(item.CD_MON), to_str(circuit),
|
||
to_str(item.CD_CLI) + ' - ' + item.NOM, solde, code_ok,
|
||
item.filiere + '-' + item.CD_REF, item.LIEU, heures, str(item.STATUT),
|
||
item.TYPE + to_str(item.SEMAINE) + item.GROUPE + to_str(item.CD_CLI), item.VALIDE)
|
||
|
||
liste.append(d)
|
||
return date_deb, date_fin, dates_stage, json.dumps(liste)
|
||
|
||
|
||
date_stage = request.matchdict['date']
|
||
date_date_stage = datetime.strptime(date_stage,'%Y-%m-%d')
|
||
weeknumber = date_date_stage.isocalendar()[1]
|
||
if len(str(weeknumber)) == 1:
|
||
weeknumber = "0" + str(weeknumber)
|
||
semaine = str(date_date_stage.year) +''+str(weeknumber)
|
||
groupe_stage = request.matchdict['groupe']
|
||
type_stage = request.matchdict['sorc']
|
||
cd_mon_stage = request.matchdict['cd_mon']
|
||
|
||
url = request.route_url('stageb_list', date=date_stage, groupe=groupe_stage, sorc=type_stage, cd_mon=cd_mon_stage)
|
||
|
||
|
||
|
||
groupe = dict({
|
||
"A" : "Grp A-5 jrs B",
|
||
"B" : "Grp B-3 jrs B",
|
||
"C" : "Grp C-5 jrs B78",
|
||
"D" : "Grp D-3 jrs B78",
|
||
"E" : "Grp E",
|
||
"F" : "Grp F",
|
||
"G" : "Grp G-B96 en ligne",
|
||
"H" : "Grp H-B96",
|
||
"I" : "Grp I-B96",
|
||
"J" : "Grp J–POST PERMIS VAISE",
|
||
"K" : "Grp K–POST PERMIS CHARPENNES",
|
||
"L" : "Grp L–POST PERMIS PRESQUILE",
|
||
"M" : "Grp M–POST PERMIS VAUGNERAY",
|
||
"N" : "Gpr N"
|
||
})
|
||
|
||
# si 'A' en paramètre
|
||
if type_stage == 'A':
|
||
cb_all = "oui"
|
||
|
||
# si afficher tous est coché ?
|
||
if 'cb_all' in request.params:
|
||
cb_all = "oui"
|
||
type_stage = 'A'
|
||
else:
|
||
cb_all = "non"
|
||
|
||
# si 'A' en paramètre
|
||
if type_stage == 'A':
|
||
cb_all = "oui"
|
||
|
||
# initialise la variable de session
|
||
if 'url_retour' not in request.session:
|
||
request.session['url_retour'] = url
|
||
# save url appelant dans une variable de session
|
||
if request.referrer and request.referrer != url:
|
||
request.session['url_retour'] = request.referrer
|
||
message = ''
|
||
|
||
# generer la datatable
|
||
date_deb, date_fin, dates_stage, dt_data = generer_datatable(date_stage, groupe_stage, type_stage, cd_mon_stage)
|
||
# lire les moniteurs stageB de la semaine
|
||
moniteurs = get_moniteurs_by_activite(request, date_deb, date_fin, 10, 11)
|
||
cd_mon = request.authenticated_userid
|
||
member = get_users_by_code(request, cd_mon)
|
||
|
||
if 'form.submitted' in request.params:
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
liste_param = ''
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
cd_cli = request.params[param]
|
||
# maj le statut de la ligne à 1
|
||
update_stage_lig_statut(request, 'B', date_stage, cd_cli)
|
||
if liste_param:
|
||
liste_param += "-%s" % cd_cli
|
||
else:
|
||
liste_param = cd_cli
|
||
# des lignes ont été sélectionnées ?
|
||
if len(liste_param) > 0:
|
||
# goto fiche de suivi
|
||
return HTTPFound(location=request.route_url('show_iframe', param='B' + liste_param))
|
||
|
||
if 'form.stage' in request.params or 'form.circuit' in request.params:
|
||
message = ''
|
||
cd_mon = request.params['cd_mon']
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
if 'form.stage' in request.params:
|
||
update_stageb_lig_moniteur(request, date_stage, request.params[param], cd_mon)
|
||
message = "Le moniteur STAGE est mis à jour avec succès"
|
||
else:
|
||
update_stageb_lig_circuit(request, date_stage, request.params[param], cd_mon)
|
||
message = "Le moniteur CIRCUIT est mis à jour avec succès"
|
||
# generer la datatable
|
||
date_deb, date_fin, dates_stage, dt_data = generer_datatable(date_stage, groupe_stage, type_stage, cd_mon_stage)
|
||
|
||
if 'form.seance' in request.params:
|
||
message = ''
|
||
seance = request.params['seance']
|
||
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
update_stageb_lig_seance(request, date_stage, request.params[param], seance)
|
||
message = "La SEANCE est mise à jour avec succès"
|
||
# generer la datatable
|
||
date_deb, date_fin, dates_stage, dt_data = generer_datatable(date_stage, groupe_stage, type_stage, cd_mon_stage)
|
||
|
||
if 'form.updated' in request.params :
|
||
params = dict(request.params)
|
||
stage = get_pla_stage_by_semaine(request,'B',semaine,groupe_stage)
|
||
del params['form.updated']
|
||
params['debut'] = datetime.strptime(request.params['debut']+' '+request.params['starttime'],'%d-%m-%Y %H:%M') if request.params['debut'] != None and request.params['debut'] != '' else None
|
||
params['fin'] = datetime.strptime(request.params['fin'],'%d-%m-%Y') if request.params['fin'] != None and request.params['fin'] != '' else None
|
||
del params['starttime']
|
||
params['CD_UTI'] = cd_mon
|
||
params['nom_formateur'] = params['nom_formateur'].split(' | ')[0]
|
||
params['nom_psy'] = params['nom_psy'].split(' | ')[0]
|
||
# params['DISPO'] = int(params['TOTAL']) - int(params['DISPO'])
|
||
update_pla_stage(request,params,'B',semaine,groupe_stage)
|
||
request.session.flash(u"Le stage B groupe %s a été mis à jour avec succès" %groupe_stage,'success')
|
||
# generer la datatable
|
||
date_deb, date_fin, dates_stage, dt_data = generer_datatable(date_stage, groupe_stage, type_stage, cd_mon_stage)
|
||
|
||
if 'form.validated' in request.params :
|
||
params = dict(request.params)
|
||
hashed = to_sha1(params['password']) if 'password' in params else None
|
||
passed = member.mdp_hash == hashed
|
||
if hashed == None or passed :
|
||
if StageHasPending(request,"B",semaine,groupe_stage):
|
||
request.session.flash(u"Il y a un ou des élèves provisoires dans ce stage. Validation impossible","danger")
|
||
return HTTPFound(location=url)
|
||
else:
|
||
# lire tous les planning
|
||
items = get_stage_lig_by_date(request, 'B', date_stage, groupe_stage)
|
||
AGENCE = member.agence
|
||
stage = get_pla_stage_by_semaine(request,'B',semaine,groupe_stage)
|
||
date_valeur = stage['fin']
|
||
VALIDE = 'O'
|
||
LIBELLE = groupe[groupe_stage]
|
||
for item in items :
|
||
nStatus = 1
|
||
if int (item.STATUT) != 0 :
|
||
nStatus = item.STATUT
|
||
# update stage ligne and eleve_cpt
|
||
update_stage_lig_by_cd_cli(request,'B',semaine,groupe_stage,item.CD_CLI,nStatus,VALIDE,AGENCE,item.ligne_cpt,LIBELLE,date_valeur)
|
||
# update stage
|
||
update_pla_stage_by_semaine(request,'B',semaine,groupe_stage,AGENCE,VALIDE,member.cd_uti)
|
||
request.session.flash(u"Le stage est validé avec succés","success")
|
||
return HTTPFound(location=request.route_url('stages_schd', type='B'))
|
||
else:
|
||
request.session.flash(u"Erreur d'authentification" ,'danger')
|
||
return HTTPFound(location=url)
|
||
|
||
if 'form.deleted' in request.params:
|
||
items = get_stage_lig_by_date(request, 'B', date_stage, groupe_stage)
|
||
if len(items) > 0 :
|
||
request.session.flash(u"Interdiction de suppression, des eleves ont déjà inscrit dans ce stage." ,'danger')
|
||
return HTTPFound(location=url)
|
||
else:
|
||
delete_pla_stage_by_semaine(request,'B',semaine,groupe_stage)
|
||
request.session.flash(u"Le stage %s groupe %s du %s est supprimé avec success"%('B',groupe_stage,date_stage),"success")
|
||
return HTTPFound(location=request.route_url('stages_schd', type='B'))
|
||
|
||
if 'form.deleted_selected' in request.params:
|
||
ids = str(request.params['deleted_selected_inputs']).split('-')
|
||
|
||
stage_edit = get_pla_stage_by_semaine(
|
||
request, 'B', semaine, groupe_stage)
|
||
type_stage = 'B'
|
||
for eleve_id in ids:
|
||
eleve = get_eleves_by_code(request, eleve_id)
|
||
rdvb = get_stage_lig_by_cd_cli(request, type_stage, eleve_id)
|
||
if member.secu < 9 and int(eleve_id) > 100000:
|
||
isdelayok = isDelaiOK(
|
||
request, stage_edit['fin'], rdvb['cree_le'].date(), 8)
|
||
if not isdelayok:
|
||
request.session.flash(u"Interdiction de suppression de l'éleve %s dans le stage %s groupe %s." % (
|
||
eleve['NOM']+" "+eleve['PRENOM'], type_stage, groupe_stage), 'danger')
|
||
|
||
delete_stage_lig_by_cd_cli(
|
||
request, type_stage, semaine, groupe_stage, eleve_id)
|
||
request.session.flash(u"L'eleve %s est bien suprimé dans le stage %s groupe_stage %s." % (
|
||
eleve['NOM']+" "+eleve['PRENOM'], type_stage, groupe_stage), 'success')
|
||
return HTTPFound(url)
|
||
|
||
stage = get_pla_stage_by_semaine(request,'B',semaine,groupe_stage)
|
||
ispassed = (stage['fin'] - date.today()).days > 0
|
||
stage_debut = ""
|
||
starttime = ""
|
||
if stage['debut'] != None :
|
||
stage_debut = stage['debut'].strftime('%d-%m-%Y')
|
||
starttime = stage['debut'].strftime('%H:%M')
|
||
stage_fin = stage['fin'].strftime('%d-%m-%Y') if stage['fin'] != None else ""
|
||
|
||
return {
|
||
'page_title': 'Stage B du %s' % date_date_stage.strftime('%d-%m-%Y'),
|
||
'url': url,
|
||
'url_retour': request.session['url_retour'],
|
||
'message': message,
|
||
'dt_data': dt_data,
|
||
'moniteurs': moniteurs,
|
||
'cd_mon': cd_mon,
|
||
'cb_all': cb_all,
|
||
'groupe': groupe,
|
||
'stage' : stage,
|
||
'ispassed' : ispassed,
|
||
'code' : member.secu,
|
||
'stage_debut' : stage_debut,
|
||
'stage_fin' : stage_fin,
|
||
'starttime' : starttime,
|
||
'codeleve' : stage.TYPE + to_str(stage.SEMAINE) + stage.GROUPE + to_str(0)
|
||
}
|
||
|
||
@view_config(route_name='circuit_list', renderer='../templates/planning/circuit_list.pt', permission='view')
|
||
def circuit_list(request):
|
||
|
||
def generer_datatable(type_stage, date_stage,groupe):
|
||
# lire les circuits
|
||
items = get_motos_lig_by_date(request, type_stage, date_stage, groupe)
|
||
# construire la liste
|
||
liste=[]
|
||
dates_stage = ''
|
||
for item in items:
|
||
dates_stage = item.DATE.strftime('%d-%m-%Y')
|
||
solde = to_euroN(item.solde)
|
||
if item.nom_entreprise :
|
||
solde += ' E'
|
||
|
||
if item.perime_le:
|
||
code_ok = to_age(item.perime_le, '<')
|
||
else:
|
||
code_ok = ''
|
||
|
||
if item.VALIDE == 'N':
|
||
heures = item.heures
|
||
else:
|
||
heures = 'VAL'
|
||
|
||
d = (item.CD_CLI, item.GROUPE, item.niveau, to_str(item.cd_circuit), to_str(item.CD_CLI) + ' - ' + item.NOM, solde, code_ok,
|
||
item.filiere + '-' + item.cd_mon, item.LIEU, heures, item.STATUT, item.no_ligne)
|
||
liste.append(d)
|
||
return dates_stage, json.dumps(liste)
|
||
|
||
type_stage = 'I'
|
||
date_stage = request.matchdict['date']
|
||
groupe = request.matchdict['groupe']
|
||
url = request.route_url('circuit_list', date=date_stage ,groupe=groupe)
|
||
logged_in = request.authenticated_userid
|
||
member = get_users_by_code(request, logged_in)
|
||
code = int(member.secu)
|
||
groupe_stage = dict({
|
||
"A" : "Grp A-8h à 11h",
|
||
"B" : "Grp B-12h à 15h",
|
||
"C" : "Grp C-15h à 18h",
|
||
"D" : "Grp D-18h à 21h",
|
||
"E" : "Grp E-8h à 12h",
|
||
"F" : "Grp F-13h à 17h",
|
||
"G" : "Grp G-13h à 17h",
|
||
})
|
||
|
||
|
||
# initialise la variable de session
|
||
if 'url_retour' not in request.session:
|
||
request.session['url_retour'] = url
|
||
# save url appelant dans une variable de session
|
||
if request.referrer and request.referrer != url:
|
||
request.session['url_retour'] = request.referrer
|
||
|
||
message = ''
|
||
|
||
# generer la datatable
|
||
dates_stage, dt_data = generer_datatable('I', date_stage,groupe)
|
||
# lire les moniteurs stageB de la semaine
|
||
cd_mon = request.authenticated_userid
|
||
|
||
button_title = 'Suivi groupe'
|
||
moniteurs = get_moniteurs_by_activite(request, date_stage, date_stage, 37, 37)
|
||
|
||
if 'form.submitted' in request.params:
|
||
# des lignes ont été sélectionnées ?
|
||
if len(request.params) > 1:
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
liste_param = ''
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
if liste_param:
|
||
liste_param += "-%s" % request.params[param]
|
||
else:
|
||
liste_param = request.params[param]
|
||
|
||
if liste_param :
|
||
# suivi circuit ou suivi rdvp
|
||
return HTTPFound(location=request.route_url('show_iframe', param=type_stage + liste_param))
|
||
else:
|
||
message = 'Veuillez sélectionner au moins un(e) élève'
|
||
|
||
if 'form.circuit' in request.params:
|
||
message = ''
|
||
cd_mon = request.params['cd_mon']
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
update_motos_lig_circuit(request, type_stage, date_stage, request.params[param], cd_mon)
|
||
message = "Le moniteur CIRCUIT est mis à jour avec succès"
|
||
|
||
# generer la datatable
|
||
dates_stage, dt_data = generer_datatable(type_stage, date_stage)
|
||
|
||
formated_date = datetime.strptime(date_stage,'%Y-%m-%d') if date_stage != None and date_stage != '' else None
|
||
|
||
if 'form.updated' in request.params :
|
||
params = dict(request.params)
|
||
del params['form.updated']
|
||
update_pla_motos(request,type_stage,formated_date,groupe,params)
|
||
request.session.flash(u"Le stage %s groupe %s a été mis à jour avec succès" %(type_stage,groupe),'success')
|
||
|
||
if 'form.validated' in request.params :
|
||
params = dict(request.params)
|
||
diff = (formated_date - datetime.today()).days
|
||
if diff > 0 :
|
||
request.session.flash(u"Hmm, il est encore trop tôt pour valider ce planning","danger")
|
||
return HTTPFound(location=url)
|
||
if planningHasPending(request,type_stage,formated_date,groupe):
|
||
request.session.flash(u"Il y a un ou des élèves provisoires dans ce planning. Validation impossible","danger")
|
||
return HTTPFound(location=url)
|
||
else:
|
||
# lire tous les planning
|
||
items = get_motos_lig_by_date(request, type_stage, formated_date, groupe)
|
||
planning = get_pla_moto_by_date(request,type_stage,groupe,formated_date)
|
||
fin_reservation = None
|
||
VALIDE = 'O'
|
||
AGENCE = member.agence
|
||
CD_UTI = member.cd_uti
|
||
for item in items :
|
||
nStatus = 1
|
||
if int (item.STATUT) != 0 :
|
||
nStatus = item.STATUT
|
||
# update planning ligne and eleve_cpt
|
||
update_motos_lig_by_cd_cli(request,type_stage,formated_date,groupe,item.CD_CLI,nStatus,VALIDE,AGENCE,item.ligne_cpt,item.REF,item.CD_MON)
|
||
# update planning
|
||
update_pla_moto_by_date(request,type_stage,formated_date,groupe,AGENCE,VALIDE,member.cd_uti)
|
||
request.session.flash(u"Le planning est validé avec succés","success")
|
||
return HTTPFound(location=request.route_url('motos_schd', type=type_stage))
|
||
|
||
if 'form.deleted' in request.params:
|
||
items = get_motos_lig_by_date(request, type_stage, formated_date, groupe)
|
||
if len(items) > 0 :
|
||
request.session.flash(u"Interdiction de suppression, des eleves ont déjà inscrit dans ce planning." ,'danger')
|
||
return HTTPFound(location=url)
|
||
else:
|
||
delete_pla_moto_by_date(request,type_stage,formated_date,groupe)
|
||
request.session.flash(u"Le planning %s groupe %s du %s est supprimé avec success"%(type_stage,groupe,date_stage),"success")
|
||
return HTTPFound(location=request.route_url('motos_schd', type=type_stage))
|
||
|
||
stage = get_pla_moto_by_date(request,type_stage,groupe,formated_date)
|
||
if not stage :
|
||
request.session.flash(u"Planning non trouvé","danger")
|
||
return HTTPFound(location=request.route_url('motos_schd', type=type_stage))
|
||
|
||
return {
|
||
'page_title': 'Circuit forfait du %s' % dates_stage,
|
||
'url': url,
|
||
'url_retour': request.session['url_retour'],
|
||
'message': message,
|
||
'dt_data': dt_data,
|
||
'moniteurs': moniteurs,
|
||
'cd_mon': cd_mon,
|
||
'button_title': button_title,
|
||
'type': type_stage,
|
||
'stage' : stage,
|
||
'groupe' : groupe_stage,
|
||
'grp' : groupe,
|
||
'date':date_stage,
|
||
'code':code,
|
||
'codeleve' : to_str(0)
|
||
}
|
||
|
||
@view_config(route_name='motos_list', renderer='../templates/planning/motos_list.pt', permission='view')
|
||
def motos_list(request):
|
||
|
||
def generer_datatable(type_stage, date_stage, groupe):
|
||
# lire les circuits
|
||
items = get_motos_lig_by_date(request, type_stage, date_stage, groupe)
|
||
# construire la liste
|
||
liste=[]
|
||
dates_stage = ''
|
||
for item in items:
|
||
dates_stage = item.DATE.strftime('%d-%m-%Y')
|
||
solde = to_euroN(item.solde)
|
||
if item.nom_entreprise :
|
||
solde += ' E'
|
||
|
||
if item.perime_le:
|
||
code_ok = to_age(item.perime_le, '<')
|
||
else:
|
||
code_ok = ''
|
||
|
||
if item.VALIDE == 'N':
|
||
heures = item.heures
|
||
else:
|
||
heures = 'VAL'
|
||
d = (item.CD_CLI, item.GROUPE, item.niveau, to_str(item.CD_MON), to_str(item.CD_CLI) + ' - ' + item.NOM, solde,code_ok,'%s - %s' % (item.filiere, item.cd_mon), item.LIEU, heures, item.STATUT, item.no_ligne, item.VALIDE)
|
||
liste.append(d)
|
||
return dates_stage, json.dumps(liste)
|
||
|
||
type_stage = request.matchdict['type']
|
||
date_stage = request.matchdict['date']
|
||
groupe = request.matchdict['groupe']
|
||
url = request.route_url('motos_list', type=type_stage, date=date_stage, groupe=groupe)
|
||
logged_in = request.authenticated_userid
|
||
member = get_users_by_code(request, logged_in)
|
||
code = int(member.secu)
|
||
groupe_stage = dict({
|
||
"A" : "Grp A-8h à 11h",
|
||
"B" : "Grp B-12h à 15h",
|
||
"C" : "Grp C-15h à 18h",
|
||
"D" : "Grp D-18h à 21h",
|
||
"E" : "Grp E-8h à 12h",
|
||
"F" : "Grp F-13h à 17h",
|
||
"G" : "Grp G-13h à 17h",
|
||
})
|
||
|
||
# initialise la variable de session
|
||
if 'url_retour' not in request.session:
|
||
request.session['url_retour'] = url
|
||
# save url appelant dans une variable de session
|
||
if request.referrer and request.referrer != url:
|
||
request.session['url_retour'] = request.referrer
|
||
|
||
message = ''
|
||
|
||
# lire le stage
|
||
stage = get_motos_byId(request, type_stage, date_stage, groupe)
|
||
|
||
# generer la datatable
|
||
dates_stage, dt_data = generer_datatable(type_stage, date_stage, groupe)
|
||
# moniteur par défaut = moniteur connecté
|
||
cd_mon = logged_in
|
||
|
||
if type_stage == "R":
|
||
page_title = 'RDV pédagogique du %s' % dates_stage
|
||
button_title = 'Suivi théorique'
|
||
moniteurs = get_moniteurs_by_activite(request, date_stage, date_stage, 52, 55)
|
||
elif type_stage == "E":
|
||
page_title = 'Examen blanc B du %s' % dates_stage
|
||
button_title = 'Suivi groupe'
|
||
moniteurs = get_moniteurs_by_activite(request, date_stage, date_stage, 54, 54)
|
||
elif type_stage == "F":
|
||
page_title = 'Examen blanc A du %s' % dates_stage
|
||
button_title = 'Suivi groupe'
|
||
moniteurs = get_moniteurs_by_activite(request, date_stage, date_stage, 54, 54)
|
||
else:
|
||
page_title = 'Stage code %s' % dates_stage
|
||
button_title = 'Smartcode'
|
||
moniteurs = get_moniteurs_by_activite(request, date_stage, date_stage, 18, 18)
|
||
|
||
|
||
if 'form.submitted' in request.params:
|
||
# des lignes ont été sélectionnées ?
|
||
if len(request.params) > 1:
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
liste_param = ''
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
cd_cli = request.params[param]
|
||
# mise à jour du cd_mon
|
||
update_motos_lig_cd_mon(request, type_stage, date_stage, cd_cli, logged_in)
|
||
if liste_param:
|
||
liste_param += "-%s" % cd_cli
|
||
else:
|
||
liste_param = cd_cli
|
||
|
||
if type_stage == "D":
|
||
# stage code --> smart code
|
||
return HTTPFound(location=request.route_url('show_iframe', param='smartcode'))
|
||
|
||
if liste_param :
|
||
# suivi circuit ou suivi rdvp
|
||
return HTTPFound(location=request.route_url('show_iframe', param=type_stage + liste_param))
|
||
else:
|
||
message = 'Veuillez sélectionner au moins un(e) élève'
|
||
|
||
if 'form.circuit' in request.params:
|
||
message = ''
|
||
cd_mon = request.params['cd_mon']
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
update_motos_lig_circuit(request, type_stage, date_stage, request.params[param], cd_mon)
|
||
message = "Le moniteur CIRCUIT est mis à jour avec succès"
|
||
|
||
# generer la datatable
|
||
dates_stage, dt_data = generer_datatable(type_stage, date_stage, groupe)
|
||
|
||
formated_date = datetime.strptime(date_stage,'%Y-%m-%d') if date_stage != None and date_stage != '' else None
|
||
if 'form.updated' in request.params :
|
||
params = dict(request.params)
|
||
del params['form.updated']
|
||
update_pla_motos(request,type_stage,formated_date,groupe,params)
|
||
request.session.flash(u"Le stage %s groupe %s a été mis à jour avec succès" %(type_stage,groupe),'success')
|
||
|
||
if 'form.validated' in request.params :
|
||
params = dict(request.params)
|
||
diff = (formated_date - datetime.today()).days
|
||
if diff > 0 :
|
||
request.session.flash(u"Hmm, il est encore trop tôt pour valider ce planning","danger")
|
||
return HTTPFound(location=url)
|
||
if planningHasPending(request,type_stage,formated_date,groupe):
|
||
request.session.flash(u"Il y a un ou des élèves provisoires dans ce planning. Validation impossible","danger")
|
||
return HTTPFound(location=url)
|
||
else:
|
||
# lire tous les planning
|
||
items = get_motos_lig_by_date(request, type_stage, formated_date, groupe)
|
||
planning = get_pla_moto_by_date(request,type_stage,groupe,formated_date)
|
||
fin_reservation = None
|
||
VALIDE = 'O'
|
||
AGENCE = member.agence
|
||
CD_UTI = member.cd_uti
|
||
for item in items :
|
||
nStatus = 1
|
||
if int (item.STATUT) != 0 :
|
||
nStatus = item.STATUT
|
||
# update planning ligne and eleve_cpt
|
||
update_motos_lig_by_cd_cli(request,type_stage,formated_date,groupe,item.CD_CLI,nStatus,VALIDE,AGENCE,item.ligne_cpt,item.REF,item.CD_MON)
|
||
# update planning
|
||
update_pla_moto_by_date(request,type_stage,formated_date,groupe,AGENCE,VALIDE,member.cd_uti)
|
||
request.session.flash(u"Le planning est validé avec succés","success")
|
||
return HTTPFound(location=request.route_url('motos_schd', type=type_stage))
|
||
|
||
|
||
if 'form.deleted' in request.params:
|
||
items = get_motos_lig_by_date(request, type_stage, formated_date, groupe)
|
||
if len(items) > 0 :
|
||
request.session.flash(u"Interdiction de suppression, des eleves ont déjà inscrit dans ce planning." ,'danger')
|
||
return HTTPFound(location=url)
|
||
else:
|
||
delete_pla_moto_by_date(request,type_stage,formated_date,groupe)
|
||
request.session.flash(u"Le planning %s groupe %s du %s est supprimé avec success"%(type_stage,groupe,date_stage),"success")
|
||
return HTTPFound(location=request.route_url('motos_schd', type=type_stage))
|
||
|
||
if 'form.deleted_selected' in request.params:
|
||
ids = str(request.params['deleted_selected_inputs']).split('-')
|
||
for eleve_id in ids:
|
||
eleve = get_eleves_by_code(request, eleve_id)
|
||
delete_pla_moto_by_cd_cli(
|
||
request, type_stage, groupe, formated_date, eleve_id)
|
||
request.session.flash(u"L'eleve %s est bien suprimé dans % %s." % (
|
||
eleve['NOM'] + " " + eleve['PRENOM'], page_title), 'success')
|
||
return {
|
||
'page_title': page_title,
|
||
'url': url,
|
||
'url_retour': request.session['url_retour'],
|
||
'message': message,
|
||
'dt_data': dt_data,
|
||
'type' : type_stage,
|
||
'stage': stage,
|
||
'moniteurs': moniteurs,
|
||
'cd_mon': cd_mon,
|
||
'button_title': button_title,
|
||
'groupe' : groupe_stage,
|
||
'grp' : groupe,
|
||
'date':date_stage,
|
||
'code':code,
|
||
'codeleve' : to_str(0)
|
||
}
|
||
|
||
@view_config(route_name='stages_schd', renderer='../templates/planning/stages_schd.pt', permission='view')
|
||
def stages_schd(request):
|
||
type_stage = request.matchdict['type']
|
||
cd_mon = request.authenticated_userid
|
||
member = get_users_by_code(request, cd_mon)
|
||
code = int(member.secu)
|
||
groupe = dict({
|
||
"A" : "Grp A-5 jrs B",
|
||
"B" : "Grp B-3 jrs B",
|
||
"C" : "Grp C-5 jrs B78",
|
||
"D" : "Grp D-3 jrs B78",
|
||
"E" : "Grp E",
|
||
"F" : "Grp F",
|
||
"G" : "Grp G-B96 en ligne",
|
||
"H" : "Grp H-B96",
|
||
"I" : "Grp I-B96",
|
||
"J" : "Grp J–POST PERMIS VAISE",
|
||
"K" : "Grp K–POST PERMIS CHARPENNES",
|
||
"L" : "Grp L–POST PERMIS PRESQUILE",
|
||
"M" : "Grp M–POST PERMIS VAUGNERAY",
|
||
"N" : "Gpr N"
|
||
})
|
||
if type_stage == 'M':
|
||
title = "Stages 2R"
|
||
groupe = dict({
|
||
"A" : "Grp A-Stage 8h",
|
||
"B" : "Grp B-10h",
|
||
"C" : "Grp C-Stage 15H",
|
||
"D" : "Grp D-10h ",
|
||
"E" : "Grp E-10h",
|
||
"F" : "Grp F-10h",
|
||
"G" : "Grp G-10h",
|
||
"H" : "Grp H-10h",
|
||
"I" : "Grp I-10h",
|
||
"J" : "Grp J-10h",
|
||
"K" : "Grp K-10h",
|
||
"L" : "Grp L-10h",
|
||
"M" : "Grp M-10h",
|
||
"N" : "Gpr N-10h"
|
||
})
|
||
elif type_stage == 'C':
|
||
title = "Stages PAP"
|
||
groupe = dict({
|
||
"A" : "Grp A-CHARP",
|
||
"B" : "Grp B-VAUGN",
|
||
"C" : "Grp C",
|
||
"D" : "Grp D",
|
||
"E" : "Grp E",
|
||
"F" : "Grp F",
|
||
"G" : "Grp G",
|
||
"H" : "Grp H",
|
||
"I" : "Grp I",
|
||
"J" : "Grp J",
|
||
"K" : "Grp K",
|
||
"L" : "Grp L",
|
||
"M" : "Grp M",
|
||
"N" : "Gpr N"
|
||
})
|
||
else:
|
||
title = "Stages B"
|
||
|
||
message = ''
|
||
|
||
if 'form.submitted' in request.params :
|
||
|
||
params = dict(request.params)
|
||
semaine = get_pla_stage_by_semaine(request,type_stage,params['SEMAINE'],params['GROUPE'])
|
||
if semaine is None:
|
||
del params['form.submitted']
|
||
params['debut'] = datetime.strptime(request.params['debut']+' '+request.params['starttime'],'%d-%m-%Y %H:%M') if request.params['debut'] != None and request.params['debut'] != '' else None
|
||
params['fin'] = datetime.strptime(request.params['fin'],'%d-%m-%Y') if request.params['fin'] != None and request.params['fin'] != '' else None
|
||
del params['starttime']
|
||
params['CD_UTI'] = cd_mon
|
||
params['nom_formateur'] = params['nom_formateur'].split(' | ')[0]
|
||
params['nom_psy'] = params['nom_psy'].split(' | ')[0]
|
||
params['VALIDE'] = 'N'
|
||
params['ROUTE'] = 0
|
||
params['DISPO'] = params['TOTAL']
|
||
params['DispoRoute'] = 0
|
||
# params['DISPO'] = int(params['TOTAL']) - int(params['DISPO'])
|
||
params['TYPE'] = type_stage
|
||
insert_pla_stage(request,params)
|
||
request.session.flash(u"Le stage %s groupe %s est crée avec succès" %(type_stage,params['GROUPE']),'success')
|
||
else:
|
||
request.session.flash(u"Le stage %s groupe %s est dejà existé"%(type_stage,params['GROUPE']), 'danger')
|
||
|
||
rows = get_stages(request, type_stage)
|
||
|
||
# construire la liste des events
|
||
events = []
|
||
for row in rows:
|
||
if row.VALIDE == 'O':
|
||
color = 'LightGreen' # planning validé = vert pale
|
||
elif StageHasPending(request, row.TYPE, row.SEMAINE, row.GROUPE) == True :
|
||
color = "LightPink" # en attente
|
||
elif row.DISPO > 0 :
|
||
color = "LightYellow" # disponible
|
||
else:
|
||
color = "LightBlue" # complet
|
||
if type_stage == 'B':
|
||
url = '/stageb_list/%s/%s/%s/%s' % (row.debut.strftime('%Y-%m-%d'), row.GROUPE, 'A', 'x')
|
||
elif type_stage == 'M':
|
||
url = '/stagea_list/%s/%s' % (row.debut.strftime('%Y-%m-%d'), row.GROUPE)
|
||
else:
|
||
url = '/stagec_list/%s/%s' % (row.debut.strftime('%Y-%m-%d'), row.GROUPE)
|
||
json_event = {
|
||
'title': '%s - %s %s/%s' % (row.GROUPE, row.LIBELLE, row.DISPO, row.TOTAL),
|
||
'start': row.debut.strftime('%Y-%m-%d %H:%M:%S'),
|
||
'end': row.fin.strftime('%Y-%m-%d 18:00:00'),
|
||
'allDay': False,
|
||
'color': color,
|
||
'textColor': '#000000',
|
||
'url': url,
|
||
}
|
||
events.append(json_event)
|
||
|
||
|
||
return {
|
||
'page_title': title,
|
||
'calendar_events': json.dumps(events),
|
||
'type_stage': type_stage,
|
||
"groupe" : groupe,
|
||
'message' : message,
|
||
'code': code
|
||
}
|
||
|
||
@view_config(route_name='motos_schd', renderer='../templates/planning/motos_schd.pt', permission='view')
|
||
def motos_schd(request):
|
||
# type de planning motos
|
||
cd_mon = request.authenticated_userid
|
||
member = get_users_by_code(request, cd_mon)
|
||
code = int(member.secu)
|
||
type_stage = request.matchdict['type']
|
||
if type_stage == 'I':
|
||
page_title = "Circuit forfait"
|
||
elif type_stage == 'R':
|
||
page_title = "Rendez-vous pédagogique"
|
||
elif type_stage == 'D':
|
||
page_title = "Stage code"
|
||
elif type_stage == 'E':
|
||
page_title = "Examens blancs B"
|
||
elif type_stage == 'F':
|
||
page_title = "Examens blancs A"
|
||
else:
|
||
page_title = "Planning 2R"
|
||
|
||
|
||
|
||
groupe = dict({
|
||
"A" : "Grp A-8h à 11h",
|
||
"B" : "Grp B-12h à 15h",
|
||
"C" : "Grp C-15h à 18h",
|
||
"D" : "Grp D-18h à 21h",
|
||
"E" : "Grp E-8h à 12h",
|
||
"F" : "Grp F-13h à 17h",
|
||
"G" : "Grp G-13h à 17h",
|
||
})
|
||
if 'form.submitted' in request.params:
|
||
params = dict(request.params)
|
||
params['DATE'] = datetime.strptime(request.params['DATE'],'%d-%m-%Y') if request.params['DATE'] != None and request.params['DATE'] != '' else None
|
||
exist = get_pla_moto_by_date(request,type_stage,params['GROUPE'],params['DATE'])
|
||
if not exist :
|
||
del params['form.submitted']
|
||
params['AGENCE'] = member.agence
|
||
params['CD_UTI'] = cd_mon
|
||
if 'ROUTE' in params :
|
||
params['ROUTE_DISPO'] = params['ROUTE']
|
||
params['DISPO'] = params['TOTAL']
|
||
insert_pla_moto(request,params)
|
||
request.session.flash(u"Le planning %s groupe %s est crée avec succès" %(type_stage,params['GROUPE']),'success')
|
||
else:
|
||
request.session.flash(u"Le planning %s groupe %s est dejà existé"%(type_stage,params['GROUPE']), 'danger')
|
||
|
||
if 'form.duplicated' in request.params :
|
||
params = dict(request.params)
|
||
del params['form.duplicated']
|
||
start = datetime.strptime(request.params['DATE1'],'%d/%m/%Y') if request.params['DATE1'] != None and request.params['DATE1'] != '' else None
|
||
dest = datetime.strptime(request.params['DATE2'],'%d/%m/%Y') if request.params['DATE2'] != None and request.params['DATE2'] != '' else None
|
||
nb = int(request.params['NB'])
|
||
for i in range(1,nb+1,1):
|
||
duplicate_pla_moto_by_semaine(request,type_stage,start,dest,code)
|
||
dest = dest + timedelta(days=7)
|
||
request.session.flash(u"La duplication du planning %s est exectuté avec succès" %(type_stage),'success')
|
||
|
||
# construire la liste des events
|
||
rows = get_motos(request, type_stage)
|
||
events = []
|
||
for row in rows:
|
||
# titre selon le type_stage
|
||
if type_stage == 'A' or type_stage == 'F':
|
||
title = '%s - P:%s/%s R:%s/%s' % (row.GROUPE, row.DISPO, row.TOTAL, row.ROUTE_DISPO, row.ROUTE)
|
||
url = '/planninga_list/%s/%s/%s' % (type_stage, row.DATE, row.GROUPE)
|
||
elif type_stage == 'I':
|
||
title = '%s - %s/%s' % (row.GROUPE, row.DISPO, row.TOTAL)
|
||
url = '/circuit_list/%s/%s' % (row.DATE,row.GROUPE)
|
||
else:
|
||
title = '%s - %s/%s' % (row.GROUPE, row.DISPO, row.TOTAL)
|
||
url = '/motos_list/%s/%s/%s' % (type_stage, row.DATE, row.GROUPE)
|
||
# couleur de la cellule
|
||
if row.VALIDE == 'O':
|
||
color = 'LightGreen' # planning validé = vert pale
|
||
elif PlanningHasPending(request, row.TYPE, row.DATE, row.GROUPE) == True :
|
||
color = "LightPink" # en attente
|
||
elif row.DISPO == 0 and row.ROUTE_DISPO == 0 :
|
||
color = "LightBlue" # complet
|
||
else:
|
||
color = "LightYellow" # disponible
|
||
|
||
if row.LIBELLE == None or len(row.LIBELLE) == 0:
|
||
comment = '.'
|
||
else:
|
||
comment = row.LIBELLE
|
||
|
||
json_event = {
|
||
'title': title,
|
||
'start': row.DATE.strftime('%Y-%m-%d 08:00:00'),
|
||
'end': row.DATE.strftime('%Y-%m-%d 18:00:00'),
|
||
'allDay': False,
|
||
'color': color,
|
||
'textColor': '#000000',
|
||
'description': comment,
|
||
'url': url,
|
||
}
|
||
events.append(json_event)
|
||
|
||
return {
|
||
'page_title': page_title,
|
||
'calendar_events': json.dumps(events),
|
||
'groupe' : groupe,
|
||
'type' : type_stage
|
||
}
|
||
|
||
@view_config(route_name='show_iframe', renderer='../templates/planning/show_iframe.pt', permission='view')
|
||
def show_iframe(request):
|
||
logged_in = request.authenticated_userid
|
||
# lire la fiche du moniteur
|
||
moniteur = get_users_by_code(request, logged_in)
|
||
# calculer le jour de l'année d'auj
|
||
d = date.today()
|
||
yearday = (d - date(d.year, 1, 1)).days + 1
|
||
# calculer la clé du moniteur
|
||
keyM = int(yearday * d.year / d.day * (ord(logged_in[0]) + ord(logged_in[1])))
|
||
|
||
param = request.matchdict['param']
|
||
choicelist = 'pedagogie-pedagoGL-agences-infos'
|
||
if param in choicelist:
|
||
# param = aide et infos iFrame :
|
||
pvar = 'codeU=%s&Mn=%s&keyM=%s' % (logged_in, moniteur.nom, keyM)
|
||
iframe_src = "https://suivi-eleve.marietton.com/documents-interne/%s.php?%s" % (param, pvar)
|
||
elif param == 'smartcode':
|
||
# param = télécommande code
|
||
param = 'codeU=%s&Mn=%s&keyM=%s' % (logged_in, moniteur.nom, keyM)
|
||
iframe_src = "https://www.marietton.com/telecode/indexE.php?%s" % param
|
||
elif param == 'msgerie':
|
||
# param = messagerie interne
|
||
param = 'codeU=%s&Mn=%s&keyM=%s' % (logged_in, moniteur.nom, keyM)
|
||
iframe_src = "https://suivi-eleve.marietton.com/MSG-messagerie.php?%s" % param
|
||
elif param == 'dessin':
|
||
# param = dessin
|
||
param = 'Mn=%s&codeU=%s&keyM=%s' % (moniteur.nom, logged_in, keyM)
|
||
iframe_src = "https://suivi-eleve.marietton.com/dessin/index.php?%s" % param
|
||
elif param == 'listingGL':
|
||
# param = listing GL
|
||
param = 'codeU=%s&Mn=%s&keyM=%s' % (logged_in, moniteur.nom, keyM)
|
||
iframe_src = "http://devng.marietton.com/stagiairePro.php?%s" % param
|
||
elif param.startswith('suivi-peda-'):
|
||
# param = suivi pédagogique
|
||
# code élève est à la fin de param
|
||
cd_cli = param[-6:]
|
||
# fiche eleve
|
||
eleve = get_eleves_by_code(request, cd_cli)
|
||
|
||
keyE = int(yearday * d.year / d.day * eleve.CD_CLI)
|
||
param = 'codeE=%s&key=%s&Mn=%s&codeU=%s&keyM=%s&En=%s&MnR=%s&filiere=%s&agence=%s&ste=%s&AP=%s&email=%s&permis=%s&formule=%s' % (
|
||
cd_cli, keyE, moniteur.nom, logged_in, keyM, eleve.NOMPREN, eleve.CD_MON, eleve.filiere,
|
||
eleve.AGENCE, eleve.NOM_ENTREPRISE, eleve.annulation_permis, eleve.email, eleve.PERMIS_DEMANDE, eleve.FORMULE)
|
||
iframe_src = "https://www.suivi-eleve.marietton.com/suivi.php?%s" % param
|
||
else:
|
||
if param[:1] == 'R':
|
||
# rendez-vous pédagogique
|
||
php_page = 'rvpLotUp.php'
|
||
elif param[:1] == 'M':
|
||
# planning 2R
|
||
php_page = 'comp2RLotUp.php'
|
||
else:
|
||
# planning circuit
|
||
php_page = 'circuitLotUp.php'
|
||
|
||
# param = liste d'élève
|
||
codes_list = param[1:]
|
||
codes = codes_list.split("-")
|
||
# totaliser les codes élève
|
||
codes_sum = 0
|
||
for code in codes:
|
||
codes_sum += int(code)
|
||
|
||
# calcul des clés élève et moniteur
|
||
# codeE = concaténation des codes Élèves séparé par un tiret : codeE=672211-661640-271213
|
||
# keyE = la même que pour la fiche de suivi sauf que le code élève est remplacé par l’addition de tous les code élève
|
||
keyE = int(yearday * d.year / d.day * codes_sum)
|
||
param = 'codeE=%s&key=%s&Mn=%s&codeU=%s&keyM=%s' % (codes_list, keyE, moniteur.nom, logged_in, keyM)
|
||
iframe_src = "https://suivi-eleve.marietton.com/%s?%s" % (php_page, param)
|
||
|
||
return {
|
||
'page_title': "",
|
||
'iframe_src': iframe_src,
|
||
}
|
||
|
||
|
||
@view_config(route_name='plannings', renderer='../templates/planning/plannings.pt', permission='view')
|
||
def plannings(request):
|
||
logged_in = request.authenticated_userid.lower()
|
||
|
||
# lire la fiche du moniteur
|
||
moniteur = get_users_by_code(request, logged_in)
|
||
# calcul des clés élève et moniteur
|
||
d = date.today()
|
||
# calculer le jour de l'année d'auj
|
||
yearday = (d - date(d.year, 1, 1)).days + 1
|
||
|
||
keyM = int(yearday * d.year / d.day * (ord(logged_in[0]) + ord(logged_in[1])))
|
||
url_listeGL = "http://devng.marietton.com/stagiairePro.php?codeU=%s&Mn=%s&keyM=%s" % (logged_in, moniteur.nom, keyM)
|
||
return {
|
||
'page_title': "Les plannings",
|
||
'logged_in': logged_in,
|
||
'url_listeGL': url_listeGL,
|
||
}
|
||
|
||
|
||
@view_config(route_name='stagea_list', renderer='../templates/planning/stagea_list.pt', permission='view')
|
||
def stagea_list(request):
|
||
|
||
def generer_datatable(date_stage, groupe):
|
||
# lire les stages B
|
||
items = get_stage_lig_by_date(request, 'M', date_stage, groupe)
|
||
dates_stage = ''
|
||
date_deb = date.today()
|
||
date_fin = date.today()
|
||
# construire la liste
|
||
liste=[]
|
||
dates_stage = ''
|
||
for item in items:
|
||
# mémoriser les dates du stage
|
||
dates_stage = '%s au %s' % (item.debut.strftime('%d'), item.fin.strftime('%d-%m-%Y'))
|
||
date_deb = item.debut.date()
|
||
date_fin = item.fin
|
||
|
||
# n'affiche que les élèves du moniteur
|
||
solde = to_euroN(item.solde)
|
||
if item.perime_le:
|
||
code_ok = to_age(item.perime_le, '<')
|
||
else:
|
||
code_ok = ''
|
||
|
||
# date inscription + date 1er plateau
|
||
date_plateau = 'Insc.:' + item.cree_le.strftime('%d-%m-%Y')
|
||
if item.h1plateau_le:
|
||
date_plateau += ' 1erP.:' + item.h1plateau_le.strftime('%d-%m-%Y')
|
||
|
||
# date examen plateau + route
|
||
if item.TR_P_DATE:
|
||
date_examens = '[%s] %s' % (item.TR_P_NB, item.TR_P_DATE.strftime('%d-%m-%Y'))
|
||
else:
|
||
date_examens = 'néant'
|
||
if item.TR_R_DATE:
|
||
date_examens += ' - [%s] %s' % (item.TR_R_NB, item.TR_R_DATE.strftime('%d-%m-%Y'))
|
||
else:
|
||
date_examens += ' - néant'
|
||
# examen prévu ?
|
||
examen = get_examens_prevu(request, item.CD_CLI)
|
||
if examen:
|
||
if examen.PERMIS == 'ETG':
|
||
code_ok = 'Inscrit'
|
||
else:
|
||
date_examens += ' AP'
|
||
|
||
if item.VALIDE == 'N':
|
||
heures = ''
|
||
else:
|
||
heures = 'VAL'
|
||
|
||
circuit = item.seance
|
||
if item.cd_circuit:
|
||
circuit += ' - ' + item.cd_circuit
|
||
|
||
d = (item.CD_CLI, to_str(item.CD_CLI) + ' - ' + item.NOM, solde, code_ok, item.permis_demande, date_plateau, date_examens, str(item.STATUT),
|
||
item.TYPE + to_str(item.SEMAINE) + item.GROUPE + to_str(item.CD_CLI), item.VALIDE)
|
||
liste.append(d)
|
||
return date_deb, date_fin, dates_stage, json.dumps(liste)
|
||
|
||
date_stage = request.matchdict['date']
|
||
date_date_stage = datetime.strptime(date_stage,'%Y-%m-%d')
|
||
weeknumber = date_date_stage.isocalendar()[1]
|
||
if len(str(weeknumber)) == 1:
|
||
weeknumber = "0"+str(weeknumber)
|
||
semaine = str(date_date_stage.year) +''+str(weeknumber)
|
||
groupe_stage = request.matchdict['groupe']
|
||
|
||
groupe = dict({
|
||
"A" : "Grp A-Stage 8h",
|
||
"B" : "Grp B-10h",
|
||
"C" : "Grp C-Stage 15H",
|
||
"D" : "Grp D-10h ",
|
||
"E" : "Grp E-10h",
|
||
"F" : "Grp F-10h",
|
||
"G" : "Grp G-10h",
|
||
"H" : "Grp H-10h",
|
||
"I" : "Grp I-10h",
|
||
"J" : "Grp J-10h",
|
||
"K" : "Grp K-10h",
|
||
"L" : "Grp L-10h",
|
||
"M" : "Grp M-10h",
|
||
"N" : "Gpr N-10h"
|
||
})
|
||
|
||
url = request.route_url('stagea_list', date=date_stage, groupe=groupe_stage)
|
||
|
||
message = ''
|
||
|
||
cd_mon = request.authenticated_userid
|
||
member = get_users_by_code(request, cd_mon)
|
||
|
||
if 'form.submitted' in request.params:
|
||
# des lignes ont été sélectionnées ?
|
||
if len(request.params) > 1:
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
liste_param = ''
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
cd_cli = request.params[param]
|
||
# maj le statut de la ligne à 1
|
||
update_stage_lig_statut(request, 'M', date_stage, cd_cli)
|
||
if liste_param:
|
||
liste_param += "-%s" % cd_cli
|
||
else:
|
||
liste_param = cd_cli
|
||
if liste_param :
|
||
# suivi 2R
|
||
return HTTPFound(location=request.route_url('show_iframe', param='M' + liste_param))
|
||
else:
|
||
message = 'Veuillez sélectionner au moins un(e) élève'
|
||
|
||
if 'form.updated' in request.params :
|
||
params = dict(request.params)
|
||
stage = get_pla_stage_by_semaine(request,'M',semaine,groupe_stage)
|
||
del params['form.updated']
|
||
params['debut'] = datetime.strptime(request.params['debut']+' '+request.params['starttime'],'%d-%m-%Y %H:%M') if request.params['debut'] != None and request.params['debut'] != '' else None
|
||
params['fin'] = datetime.strptime(request.params['fin'],'%d-%m-%Y') if request.params['fin'] != None and request.params['fin'] != '' else None
|
||
del params['starttime']
|
||
params['CD_UTI'] = cd_mon
|
||
params['nom_formateur'] = params['nom_formateur'].split(' | ')[0]
|
||
params['nom_psy'] = params['nom_psy'].split(' | ')[0]
|
||
# params['DISPO'] = int(params['TOTAL']) - int(params['DISPO'])
|
||
update_pla_stage(request,params,'M',semaine,groupe_stage)
|
||
request.session.flash(u"Le stage 2R groupe %s a été mis à jour avec succès" %groupe_stage,'success')
|
||
|
||
if 'form.validated' in request.params :
|
||
params = dict(request.params)
|
||
hashed = to_sha1(params['password']) if 'password' in params else None
|
||
passed = member.mdp_hash == hashed
|
||
if hashed == None or passed :
|
||
if StageHasPending(request,"M",semaine,groupe_stage):
|
||
request.session.flash(u"Il y a un ou des élèves provisoires dans ce stage. Validation impossible","danger")
|
||
return HTTPFound(location=url)
|
||
else:
|
||
# lire tous les planning
|
||
items = get_stage_lig_by_date(request, 'M', date_stage, groupe_stage)
|
||
AGENCE = member.agence
|
||
stage = get_pla_stage_by_semaine(request,'M',semaine,groupe_stage)
|
||
date_valeur = stage['fin']
|
||
VALIDE = 'O'
|
||
LIBELLE = groupe[groupe_stage]
|
||
for item in items :
|
||
nStatus = 1
|
||
if int (item.STATUT) != 0 :
|
||
nStatus = item.STATUT
|
||
# update stage ligne and eleve_cpt
|
||
update_stage_lig_by_cd_cli(request,'M',semaine,groupe_stage,item.CD_CLI,nStatus,VALIDE,AGENCE,item.ligne_cpt,LIBELLE,date_valeur)
|
||
# update stage
|
||
update_pla_stage_by_semaine(request,'M',semaine,groupe_stage,AGENCE,VALIDE,member.cd_uti)
|
||
request.session.flash(u"Le stage est validé avec succés","success")
|
||
return HTTPFound(location=request.route_url('stages_schd', type='M'))
|
||
else:
|
||
request.session.flash(u"Erreur d'authentification" ,'danger')
|
||
return HTTPFound(location=url)
|
||
|
||
if 'form.deleted' in request.params:
|
||
items = get_stage_lig_by_date(request, 'M', date_stage, groupe_stage)
|
||
if len(items) > 0 :
|
||
request.session.flash(u"Interdiction de suppression, des eleves ont déjà inscrit dans ce stage." ,'danger')
|
||
return HTTPFound(location=url)
|
||
else:
|
||
delete_pla_stage_by_semaine(request,'M',semaine,groupe_stage)
|
||
request.session.flash(u"Le stage %s groupe %s du %s est supprimé avec success"%('M',groupe_stage,date_stage),"success")
|
||
return HTTPFound(location=request.route_url('stages_schd', type='M'))
|
||
|
||
if 'form.deleted_selected' in request.params:
|
||
ids = str(request.params['deleted_selected_inputs']).split('-')
|
||
|
||
stage_edit = get_pla_stage_by_semaine(
|
||
request, 'M', semaine, groupe_stage)
|
||
type_stage = 'M'
|
||
for eleve_id in ids:
|
||
eleve = get_eleves_by_code(request, eleve_id)
|
||
rdvb = get_stage_lig_by_cd_cli(request, type_stage, eleve_id)
|
||
if member.secu < 9 and int(eleve_id) > 100000:
|
||
isdelayok = isDelaiOK(
|
||
request, stage_edit['fin'], rdvb['cree_le'].date(), 8)
|
||
if not isdelayok:
|
||
request.session.flash(u"Interdiction de suppression de l'éleve %s dans le stage %s groupe %s." % (
|
||
eleve['NOM']+" "+eleve['PRENOM'], type_stage, groupe_stage), 'danger')
|
||
|
||
delete_stage_lig_by_cd_cli(
|
||
request, type_stage, semaine, groupe_stage, eleve_id)
|
||
request.session.flash(u"L'eleve %s est bien suprimé dans le stage %s groupe_stage %s." % (
|
||
eleve['NOM']+" "+eleve['PRENOM'], type_stage, groupe_stage), 'success')
|
||
return HTTPFound(url)
|
||
|
||
# generer la datatable
|
||
stage = get_pla_stage_by_semaine(request,'M',semaine,groupe_stage)
|
||
ispassed = (stage['fin'] - date.today()).days > 0
|
||
stage_debut = ""
|
||
starttime = ""
|
||
if stage['debut'] != None :
|
||
stage_debut = stage['debut'].strftime('%d-%m-%Y')
|
||
starttime = stage['debut'].strftime('%H:%M')
|
||
stage_fin = stage['fin'].strftime('%d-%m-%Y') if stage['fin'] != None else ""
|
||
date_deb, date_fin, dates_stage, dt_data = generer_datatable(date_stage, groupe_stage)
|
||
|
||
return {
|
||
'page_title': 'Stage 2R du %s' % date_date_stage.strftime('%d-%m-%Y'),
|
||
'url': url,
|
||
'message': message,
|
||
'dt_data': dt_data,
|
||
'groupe': groupe,
|
||
'stage' : stage,
|
||
'stage_debut' : stage_debut,
|
||
'stage_fin' : stage_fin,
|
||
'ispassed' : ispassed,
|
||
'code' : int(member.secu),
|
||
'starttime' : starttime,
|
||
'codeleve' : stage.TYPE + to_str(stage.SEMAINE) + stage.GROUPE + to_str(0)
|
||
}
|
||
|
||
@view_config(route_name='planninga_list', renderer='../templates/planning/planninga_list.pt', permission='view')
|
||
def planninga_list(request):
|
||
|
||
def generer_datatable(type_stage, date_stage, groupe):
|
||
# lire le planning A
|
||
items = get_motos_lig_by_date(request, type_stage , date_stage, groupe)
|
||
|
||
dates_stage = ''
|
||
# construire la liste
|
||
liste=[]
|
||
dates_stage = ''
|
||
for item in items:
|
||
# mémoriser les dates du stage
|
||
dates_stage = item.DATE.strftime('%d-%m-%Y')
|
||
|
||
# n'affiche que les élèves du moniteur
|
||
solde = to_euroN(item.solde)
|
||
if item.perime_le:
|
||
code_ok = to_age(item.perime_le, '<')
|
||
else:
|
||
code_ok = ''
|
||
# date 1er plateau
|
||
if item.h1plateau_le:
|
||
date_plateau = item.h1plateau_le.strftime('%d-%m-%Y')
|
||
else:
|
||
date_plateau = ''
|
||
|
||
# date examen plateau + route
|
||
if item.TR_P_DATE:
|
||
date_examens = '[%s] %s' % (item.TR_P_NB, item.TR_P_DATE.strftime('%d-%m-%Y'))
|
||
if item.tr_p_ok:
|
||
date_examens += '(OK)'
|
||
else:
|
||
date_examens = 'néant'
|
||
if item.TR_R_DATE:
|
||
date_examens += ' - [%s] %s' % (item.TR_R_NB, item.TR_R_DATE.strftime('%d-%m-%Y'))
|
||
else:
|
||
date_examens += ' - néant'
|
||
# examen prévu ?
|
||
examen = get_examens_prevu(request, item.CD_CLI)
|
||
if examen:
|
||
if examen.PERMIS == 'ETG':
|
||
code_ok = 'Inscrit'
|
||
else:
|
||
date_examens += ' AP'
|
||
|
||
if item.VALIDE == 'N':
|
||
heures = ''
|
||
else:
|
||
heures = 'VAL'
|
||
if item.Route == 0:
|
||
cat = 'P - '
|
||
else:
|
||
cat = 'R - '
|
||
cat = cat + item.permis_demande
|
||
|
||
d = (item.CD_CLI, to_str(item.CD_CLI) + ' - ' + item.NOM, solde, code_ok, cat, date_plateau, item.heures,
|
||
date_examens,
|
||
str(item.STATUT), item.no_ligne, item.VALIDE)
|
||
liste.append(d)
|
||
|
||
return dates_stage, json.dumps(liste)
|
||
|
||
type_stage = request.matchdict['type']
|
||
date_stage = request.matchdict['date']
|
||
groupe = request.matchdict['groupe']
|
||
url = request.route_url('planninga_list', type=type_stage, date=date_stage, groupe=groupe)
|
||
logged_in = request.authenticated_userid
|
||
member = get_users_by_code(request, logged_in)
|
||
code = int(member.secu)
|
||
groupe_stage = dict({
|
||
"A" : "Grp A-8h à 11h",
|
||
"B" : "Grp B-12h à 15h",
|
||
"C" : "Grp C-15h à 18h",
|
||
"D" : "Grp D-18h à 21h",
|
||
"E" : "Grp E-8h à 12h",
|
||
"F" : "Grp F-13h à 17h",
|
||
"G" : "Grp G-13h à 17h",
|
||
})
|
||
|
||
message = ''
|
||
|
||
# generer la datatable
|
||
dates_stage, dt_data = generer_datatable(type_stage, date_stage, groupe)
|
||
# planning A ou TB A
|
||
if type_stage == "A":
|
||
page_title = 'Planning 2R du %s' % date_stage
|
||
else:
|
||
page_title = 'Test blanc 2R du %s' % date_stage
|
||
|
||
if 'form.submitted' in request.params:
|
||
# des lignes ont été sélectionnées ?
|
||
if len(request.params) > 1:
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
liste_param = ''
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
cd_cli = request.params[param]
|
||
# mise à jour du cd_mon
|
||
update_motos_lig_cd_mon(request, type_stage, date_stage, cd_cli, logged_in)
|
||
if liste_param:
|
||
liste_param += "-%s" % cd_cli
|
||
else:
|
||
liste_param = cd_cli
|
||
|
||
if liste_param :
|
||
# suivi 2R
|
||
return HTTPFound(location=request.route_url('show_iframe', param='M' + liste_param))
|
||
else:
|
||
message = 'Veuillez sélectionner au moins un(e) élève'
|
||
|
||
formated_date = datetime.strptime(date_stage,'%Y-%m-%d') if date_stage != None and date_stage != '' else None
|
||
|
||
if 'form.updated' in request.params :
|
||
params = dict(request.params)
|
||
del params['form.updated']
|
||
update_pla_motos(request,type_stage,formated_date,groupe,params)
|
||
request.session.flash(u"Le stage %s groupe %s a été mis à jour avec succès" %(type_stage,groupe),'success')
|
||
|
||
if 'form.validated' in request.params :
|
||
params = dict(request.params)
|
||
diff = (formated_date - datetime.today()).days
|
||
if diff > 0 :
|
||
request.session.flash(u"Hmm, il est encore trop tôt pour valider ce planning","danger")
|
||
return HTTPFound(location=url)
|
||
if planningHasPending(request,type_stage,formated_date,groupe):
|
||
request.session.flash(u"Il y a un ou des élèves provisoires dans ce planning. Validation impossible","danger")
|
||
return HTTPFound(location=url)
|
||
else:
|
||
# lire tous les planning
|
||
items = get_motos_lig_by_date(request, type_stage, formated_date, groupe)
|
||
planning = get_pla_moto_by_date(request,type_stage,groupe,formated_date)
|
||
fin_reservation = None
|
||
VALIDE = 'O'
|
||
AGENCE = member.agence
|
||
CD_UTI = member.cd_uti
|
||
for item in items :
|
||
nStatus = 1
|
||
if int (item.STATUT) != 0 :
|
||
nStatus = item.STATUT
|
||
# update planning ligne and eleve_cpt
|
||
update_motos_lig_by_cd_cli(request,type_stage,formated_date,groupe,item.CD_CLI,nStatus,VALIDE,AGENCE,item.ligne_cpt,item.REF,item.CD_MON)
|
||
# update planning
|
||
update_pla_moto_by_date(request,type_stage,formated_date,groupe,AGENCE,VALIDE,member.cd_uti)
|
||
request.session.flash(u"Le planning est validé avec succés","success")
|
||
return HTTPFound(location=request.route_url('motos_schd', type=type_stage))
|
||
|
||
|
||
if 'form.deleted' in request.params:
|
||
items = get_motos_lig_by_date(request, type_stage, formated_date, groupe)
|
||
if len(items) > 0 :
|
||
request.session.flash(u"Interdiction de suppression, des eleves ont déjà inscrit dans ce planning." ,'danger')
|
||
return HTTPFound(location=url)
|
||
else:
|
||
delete_pla_moto_by_date(request,type_stage,formated_date,groupe)
|
||
request.session.flash(u"Le planning %s groupe %s du %s est supprimé avec success"%(type_stage,groupe,date_stage),"success")
|
||
return HTTPFound(location=request.route_url('motos_schd', type=type_stage))
|
||
|
||
if 'form.deleted_selected' in request.params:
|
||
ids = str(request.params['deleted_selected_inputs']).split('-')
|
||
for eleve_id in ids:
|
||
eleve = get_eleves_by_code(request, eleve_id)
|
||
delete_pla_moto_by_cd_cli(
|
||
request, type_stage, groupe, formated_date, eleve_id)
|
||
request.session.flash(u"L'eleve %s est bien suprimé dans le planning %s groupe_stage %s." % (
|
||
eleve['NOM']+" "+eleve['PRENOM'], type_stage, groupe), 'success')
|
||
return HTTPFound(url)
|
||
stage = get_pla_moto_by_date(request,type_stage,groupe,formated_date)
|
||
if not stage :
|
||
request.session.flash(u"Planning non trouvé","danger")
|
||
return HTTPFound(location=request.route_url('motos_schd', type=type_stage))
|
||
|
||
return {
|
||
'page_title': page_title,
|
||
'url': url,
|
||
'message': message,
|
||
'type': type_stage,
|
||
'dt_data': dt_data,
|
||
'stage' : stage,
|
||
'groupe' : groupe_stage,
|
||
'grp' : groupe,
|
||
'date':date_stage,
|
||
'code':code,
|
||
'codeleve' : to_str(0)
|
||
}
|
||
|
||
@view_config(route_name='stagec_list', renderer='../templates/planning/stagec_list.pt', permission='view')
|
||
def stagec_list(request):
|
||
|
||
def generer_datatable(date_stage, groupe):
|
||
# lire les stages B
|
||
items = get_stage_lig_by_date(request, 'C', date_stage, groupe)
|
||
|
||
dates_stage = ''
|
||
date_deb = date.today()
|
||
date_fin = date.today()
|
||
# construire la liste
|
||
liste=[]
|
||
dates_stage = ''
|
||
for item in items:
|
||
# mémoriser les dates du stage
|
||
dates_stage = '%s au %s' % (item.debut.strftime('%d'), item.fin.strftime('%d-%m-%Y'))
|
||
date_deb = item.debut.date()
|
||
date_fin = item.fin
|
||
|
||
# n'affiche que les élèves du moniteur
|
||
solde = to_euroN(item.solde)
|
||
# date inscription
|
||
inscrit_le = item.cree_le.strftime('%d-%m-%Y')
|
||
|
||
if item.VALIDE == 'N':
|
||
heures = ''
|
||
else:
|
||
heures = 'VAL'
|
||
|
||
d = (item.CD_CLI, to_str(item.CD_CLI) + ' - ' + item.NOM, solde, item.permis_demande,
|
||
inscrit_le, item.LIEU, str(item.STATUT),
|
||
item.TYPE + to_str(item.SEMAINE) + item.GROUPE + to_str(item.CD_CLI), item.VALIDE)
|
||
|
||
liste.append(d)
|
||
return date_deb, date_fin, dates_stage, json.dumps(liste)
|
||
|
||
groupe = dict({
|
||
"A" : "Grp A-CHARP",
|
||
"B" : "Grp B-VAUGN",
|
||
"C" : "Grp C",
|
||
"D" : "Grp D",
|
||
"E" : "Grp E",
|
||
"F" : "Grp F",
|
||
"G" : "Grp G",
|
||
"H" : "Grp H",
|
||
"I" : "Grp I",
|
||
"J" : "Grp J",
|
||
"K" : "Grp K",
|
||
"L" : "Grp L",
|
||
"M" : "Grp M",
|
||
"N" : "Gpr N"
|
||
})
|
||
|
||
date_stage = request.matchdict['date']
|
||
groupe_stage = request.matchdict['groupe']
|
||
url = request.route_url('stagec_list', date=date_stage, groupe=groupe_stage)
|
||
date_date_stage = datetime.strptime(date_stage,'%Y-%m-%d')
|
||
weeknumber = date_date_stage.isocalendar()[1]
|
||
if len(str(weeknumber)) == 1:
|
||
weeknumber = "0"+str(weeknumber)
|
||
semaine = str(date_date_stage.year) +''+str(weeknumber)
|
||
|
||
message = ''
|
||
|
||
cd_mon = request.authenticated_userid
|
||
member = get_users_by_code(request, cd_mon)
|
||
|
||
if 'form.submitted' in request.params:
|
||
# des lignes ont été sélectionnées ?
|
||
if len(request.params) > 1:
|
||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||
liste_param = ''
|
||
for param in request.params:
|
||
if param[:2] == 'id':
|
||
if liste_param:
|
||
liste_param += "-%s" % request.params[param]
|
||
else:
|
||
liste_param = request.params[param]
|
||
if liste_param :
|
||
# suivi PAP
|
||
return HTTPFound(location=request.route_url('show_iframe', param='M' + liste_param))
|
||
else:
|
||
message = 'Veuillez sélectionner au moins un(e) élève'
|
||
|
||
if 'form.validated' in request.params :
|
||
params = dict(request.params)
|
||
hashed = to_sha1(params['password']) if 'password' in params else None
|
||
passed = member.mdp_hash == hashed
|
||
if hashed == None or passed :
|
||
if StageHasPending(request,"C",semaine,groupe_stage):
|
||
request.session.flash(u"Il y a un ou des élèves provisoires dans ce stage. Validation impossible","danger")
|
||
return HTTPFound(location=url)
|
||
else:
|
||
# lire tous les planning
|
||
items = get_stage_lig_by_date(request, 'C', date_stage, groupe_stage)
|
||
AGENCE = member.agence
|
||
stage = get_pla_stage_by_semaine(request,'C',semaine,groupe_stage)
|
||
date_valeur = stage['fin']
|
||
VALIDE = 'O'
|
||
LIBELLE = groupe[groupe_stage]
|
||
for item in items :
|
||
nStatus = 1
|
||
if int (item.STATUT) != 0 :
|
||
nStatus = item.STATUT
|
||
# update stage ligne and eleve_cpt
|
||
update_stage_lig_by_cd_cli(request,'C',semaine,groupe_stage,item.CD_CLI,nStatus,VALIDE,AGENCE,item.ligne_cpt,LIBELLE,date_valeur)
|
||
# update stage
|
||
update_pla_stage_by_semaine(request,'C',semaine,groupe_stage,AGENCE,VALIDE,member.cd_uti)
|
||
request.session.flash(u"Le stage est validé avec succés","success")
|
||
return HTTPFound(location=request.route_url('stages_schd', type='C'))
|
||
else:
|
||
request.session.flash(u"Erreur d'authentification" ,'danger')
|
||
return HTTPFound(location=url)
|
||
|
||
if 'form.updated' in request.params :
|
||
params = dict(request.params)
|
||
stage = get_pla_stage_by_semaine(request,'C',semaine,groupe_stage)
|
||
del params['form.updated']
|
||
params['debut'] = datetime.strptime(request.params['debut']+' '+request.params['starttime'],'%d-%m-%Y %H:%M') if request.params['debut'] != None and request.params['debut'] != '' else None
|
||
params['fin'] = datetime.strptime(request.params['fin'],'%d-%m-%Y') if request.params['fin'] != None and request.params['fin'] != '' else None
|
||
del params['starttime']
|
||
params['CD_UTI'] = cd_mon
|
||
params['nom_formateur'] = params['nom_formateur'].split(' | ')[0]
|
||
params['nom_psy'] = params['nom_psy'].split(' | ')[0]
|
||
# params['DISPO'] = int(params['TOTAL']) - int(params['DISPO'])
|
||
update_pla_stage(request,params,'C',semaine,groupe_stage)
|
||
request.session.flash(u"Le stage PAP groupe %s a été mis à jour avec succès" %groupe_stage,'success')
|
||
|
||
if 'form.deleted' in request.params:
|
||
items = get_stage_lig_by_date(request, 'C', date_stage, groupe_stage)
|
||
if len(items) > 0 :
|
||
request.session.flash(u"Interdiction de suppression, des eleves ont déjà inscrit dans ce stage." ,'danger')
|
||
return HTTPFound(location=url)
|
||
else:
|
||
delete_pla_stage_by_semaine(request,'C',semaine,groupe_stage)
|
||
request.session.flash(u"Le stage %s groupe %s du %s est supprimé avec success"%('C',groupe_stage,date_stage),"success")
|
||
return HTTPFound(location=request.route_url('stages_schd', type='C'))
|
||
|
||
if 'form.deleted_selected' in request.params:
|
||
ids = str(request.params['deleted_selected_inputs']).split('-')
|
||
|
||
stage_edit = get_pla_stage_by_semaine(
|
||
request, 'C', semaine, groupe_stage)
|
||
type_stage = 'C'
|
||
for eleve_id in ids:
|
||
eleve = get_eleves_by_code(request, eleve_id)
|
||
rdvb = get_stage_lig_by_cd_cli(request, type_stage, eleve_id)
|
||
if member.secu < 9 and int(eleve_id) > 100000:
|
||
isdelayok = isDelaiOK(
|
||
request, stage_edit['fin'], rdvb['cree_le'].date(), 8)
|
||
if not isdelayok:
|
||
request.session.flash(u"Interdiction de suppression de l'éleve %s dans le stage %s groupe %s." % (
|
||
eleve['NOM'] + " " + eleve['PRENOM'], type_stage, groupe_stage), 'danger')
|
||
delete_stage_lig_by_cd_cli(
|
||
request, type_stage, semaine, groupe_stage, eleve_id)
|
||
request.session.flash(u"L'eleve %s est bien suprimé dans le stage %s groupe_stage %s." % (
|
||
eleve['NOM'] + " " + eleve['PRENOM'], type_stage, groupe_stage), 'success')
|
||
return HTTPFound(url)
|
||
|
||
# generer la datatable
|
||
stage = get_pla_stage_by_semaine(request,'C',semaine,groupe_stage)
|
||
ispassed = (stage['fin'] - date.today()).days > 0
|
||
stage_debut = ""
|
||
starttime = ""
|
||
if stage['debut'] != None :
|
||
stage_debut = stage['debut'].strftime('%d-%m-%Y')
|
||
starttime = stage['debut'].strftime('%H:%M')
|
||
stage_fin = stage['fin'].strftime('%d-%m-%Y') if stage['fin'] != None else ""
|
||
date_deb, date_fin, dates_stage, dt_data = generer_datatable(date_stage, groupe_stage)
|
||
|
||
return {
|
||
'page_title': 'Stage PAP du %s' % date_date_stage.strftime('%d-%m-%Y'),
|
||
'url': url,
|
||
'message': message,
|
||
'dt_data': dt_data,
|
||
'groupe': groupe,
|
||
'stage' : stage,
|
||
'stage_debut' : stage_debut,
|
||
'stage_fin' : stage_fin,
|
||
'code' : member.secu,
|
||
'ispassed' : ispassed,
|
||
'starttime' : starttime,
|
||
'codeleve' : stage.TYPE + to_str(stage.SEMAINE) + stage.GROUPE + to_str(0)
|
||
}
|
||
|
||
@view_config(route_name='planifier', renderer='../templates/planning/planifier.pt', permission='view')
|
||
def planifier(request):
|
||
|
||
def generer_planning(agence, cd_mon, datedeb, datefin):
|
||
|
||
# construire la liste des rdv du moniteurs
|
||
rows = get_rendez_vous_moniteur(request, agence, cd_mon, datedeb, datefin)
|
||
events = []
|
||
for row in rows:
|
||
if row.comment == None:
|
||
comment = ''
|
||
else:
|
||
comment = row.comment
|
||
if row.NOM_ENTREPRISE :
|
||
etoile = ' (E)'
|
||
else:
|
||
etoile = ''
|
||
nom = row.nom + etoile
|
||
|
||
# déterminer la couleur de l'event
|
||
if row.date_valeur :
|
||
color = 'LightGreen' # rdv validé = vert pale
|
||
else:
|
||
if to_int(row.ref) != row.cd_cli :
|
||
if row.statut > 1 :
|
||
color = 'DeepPink' # rdv élève décommandé
|
||
if row.statut == 10 or row.statut == 15 :
|
||
color = 'LightGray' # moniteur absent
|
||
elif row.fin_reservation :
|
||
color = 'LightPink' # résa = LightPink
|
||
else:
|
||
color = 'LightYellow' # rdv élève = jaune pale
|
||
if row.circuit == 1:
|
||
color = 'Gold' # gold
|
||
elif row.circuit == 2:
|
||
color = 'Plum' # Plum
|
||
elif row.circuit == 3:
|
||
color = 'YellowGreen' # YellowGreen
|
||
elif row.circuit == 4:
|
||
color = 'DeepSkyBlue' # DeepSkyBlue
|
||
elif row.circuit == 5:
|
||
color = 'LimeGreen' # LimeGreen
|
||
elif row.circuit == 6:
|
||
color = 'GoldenRod' # Marron
|
||
else:
|
||
if row.cd_cli == 99995 :
|
||
color = 'White' # résa web = couleur blanc)
|
||
elif row.cd_cli == 1 :
|
||
color = 'Gainsboro' # ///////
|
||
else:
|
||
color = 'LightBlue' # activité
|
||
if row.statut == 10 or row.statut == 15 :
|
||
color = 'LightGray' # moniteur absent
|
||
|
||
json_event = {
|
||
'title': nom,
|
||
'start': '%s %02d:00:00' % (row.DATE.strftime('%Y-%m-%d'), row.noplan),
|
||
'end': '%s %02d:00:00' % (row.DATE.strftime('%Y-%m-%d'), row.noplan + row.qte),
|
||
'description': comment,
|
||
'allDay': False,
|
||
'color': color,
|
||
'textColor': '#000000',
|
||
'url': '/activ_edit/%s' % (row.no_ligne),
|
||
}
|
||
events.append(json_event)
|
||
|
||
return json.dumps(events)
|
||
|
||
logged_in = request.authenticated_userid.upper()
|
||
TODAY = date.today()
|
||
|
||
# récupérer les paramètres de l'appel de la view
|
||
datePlan = request.matchdict['date']
|
||
if datePlan == '6mois':
|
||
# la plannification des activités se fait 6 mois à l'avance
|
||
datePlan = TODAY + relativedelta(months=6)
|
||
else:
|
||
datePlan = datetime.strptime(datePlan,'%Y-%m-%d')
|
||
|
||
cd_mon = request.matchdict['cd_mon']
|
||
if cd_mon == 'codeMon':
|
||
cd_mon,cd_mon_B78 = get_user_cd_mon(request, logged_in)
|
||
# si cd_mon a été changé par le user
|
||
if 'cd_mon' in request.params:
|
||
cd_mon = request.params["cd_mon"]
|
||
|
||
url = request.route_url('planifier', cd_mon=cd_mon, date=datePlan.strftime('%Y-%m-%d'))
|
||
|
||
member = get_users_by_code(request, logged_in)
|
||
if not member:
|
||
request.session.flash(u"Moniteur %s introuvable" % (logged_in), 'danger')
|
||
return HTTPFound(location=request.route_url("home"))
|
||
|
||
agence = member.agence
|
||
QTE = 1
|
||
message = ''
|
||
|
||
# -- CREER une semaine type
|
||
if 'form.submitted' in request.params:
|
||
if 'alterne' in request.params:
|
||
increment = 2
|
||
else:
|
||
increment = 1
|
||
# insérer la semaine type sélectionnée
|
||
semaine = request.params['semaine']
|
||
QTE = int(request.params['QTE'])
|
||
dateRDV = datetime.strptime(request.params['dateRDV'],'%d-%m-%Y')
|
||
|
||
# date de départ = Lundi
|
||
dateDepart = dateRDV - timedelta(days = dateRDV.weekday())
|
||
insert_semaine_type(request, cd_mon, semaine, dateDepart, QTE, increment, agence, logged_in)
|
||
|
||
request.session.flash(u"La semaine type a été insérée avec succès.", 'success')
|
||
# afficher le formulaire à partir de cette date
|
||
return HTTPFound(location=request.route_url('planifier', cd_mon=cd_mon, date=dateDepart.strftime('%Y-%m-%d')))
|
||
|
||
# début = date - 3 semaines
|
||
d = datePlan + relativedelta(weeks=-3)
|
||
datedeb = d.strftime('%Y-%m-%d')
|
||
# fin = date + 6 mois
|
||
d = datePlan + relativedelta(months=+6)
|
||
datefin = d.strftime('%Y-%m-%d')
|
||
|
||
# lire les moniteurs
|
||
moniteurs = get_moniteurs_by_aff(request, agence, datedeb, datefin)
|
||
#sort moniteur , mettre B78 à la fin
|
||
moniteurs.sort(key=lambda m: str(m.PLANNING) == "B", reverse=True)
|
||
moniteursB = [moniteur for moniteur in moniteurs if moniteur.PLANNING == "B"]
|
||
moniteursB78 = [moniteur for moniteur in moniteurs if moniteur.PLANNING == "B78"]
|
||
moniteurs2R = [moniteur for moniteur in moniteurs if moniteur.PLANNING == "2R"]
|
||
moniteursGL = [moniteur for moniteur in moniteurs if moniteur.PLANNING == "GL"]
|
||
moniteurs = [moniteursB,moniteurs2R,moniteursGL,moniteursB78]
|
||
# generer le planning B
|
||
calendar_events = generer_planning(agence, cd_mon, datedeb, datefin)
|
||
# le type de planning du moniteur
|
||
moniteur = get_moniteur_by_code(request,cd_mon)
|
||
type_planning = moniteur.PLANNING
|
||
# lire les semaines type
|
||
p_semaines = get_p_semaines(request, type_planning)
|
||
semaine = ''
|
||
|
||
return {
|
||
'page_title': "Activités de %s (agence %s)" % (cd_mon, agence),
|
||
'url': url,
|
||
'datePlan': datePlan.strftime('%Y-%m-%d'),
|
||
'message': message,
|
||
'calendar_events': calendar_events,
|
||
'moniteurs': moniteurs,
|
||
'cd_mon': cd_mon,
|
||
'type_planning': type_planning,
|
||
'agence' : agence,
|
||
'p_semaines': p_semaines,
|
||
'semaine': semaine,
|
||
'QTE': QTE,
|
||
}
|
||
|
||
@view_config(route_name='activ_edit', renderer='../templates/planning/activ_edit.pt')
|
||
def activ_edit(request):
|
||
logged_in = request.authenticated_userid
|
||
cd_mon,cd_mon_B78 = get_user_cd_mon(request, logged_in)
|
||
no_ligne = request.matchdict['no_ligne']
|
||
rdvb = get_rendezvous_by_noligne(request, no_ligne)
|
||
url = request.route_url('activ_edit', no_ligne=no_ligne)
|
||
location = request.route_url("planifier", cd_mon=rdvb.CD_MON, date=rdvb.DATE.strftime('%Y-%m-%d'))
|
||
message = ''
|
||
|
||
if 'form.submitted' in request.params:
|
||
qte = int(request.params['QTE'])
|
||
if qte < 1 or qte > 12:
|
||
message = "Le nombre d'heures est incorrect"
|
||
else:
|
||
update_rdvb(request, no_ligne, rdvb.CD_CLI, rdvb.CD_CLI, rdvb.DATE.strftime('%Y-%m-%d'), rdvb.NoPlan, qte,
|
||
rdvb.REF, rdvb.CD_MON, rdvb.AGENCE, request.params['COMMENT'], 0, 0, 0, rdvb.cd_cli_old, logged_in)
|
||
|
||
request.session.flash(u"Le rendez-vous a été mis à jour avec succès.", 'success')
|
||
return HTTPFound(location=location)
|
||
|
||
if 'form.deleted' in request.params:
|
||
# user autorisé ?
|
||
userAcces = get_user_access(request, logged_in)
|
||
if userAcces < 6:
|
||
message = "Vous n'êtes pas autorisé à effectuer cette opération !"
|
||
else:
|
||
delete_eleve_cpt(request, no_ligne, rdvb.CD_CLI, rdvb.NoPlan, rdvb.STATUT, rdvb.CD_UTI)
|
||
request.session.flash(u"Le rendez-vous a été supprimer avec succès.", 'success')
|
||
return HTTPFound(location=location)
|
||
|
||
return {
|
||
'page_title': 'Activité du %s à %s h' % (rdvb.DATE.strftime('%d-%m-%Y'), rdvb.NoPlan),
|
||
'url': url,
|
||
'rdvb': rdvb,
|
||
'message': message,
|
||
'back' : location
|
||
} |