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

1472 lines
58 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf8 -*-
from pyramid.response import Response
from jours_feries_france.compute import JoursFeries
from pyramid.view import (
view_config,
)
from pyramid.httpexceptions import (
HTTPFound,
)
from PIL import Image
from markdown2 import Markdown
import datetime
import os
# import io
import shutil
import json
from aem_gestion.models.crm import to_int
from ..models.eleves import *
from ..models.default import (
get_users_by_code,
get_agences,
get_departements,
)
from ..models.planning import (
get_moniteurs_by_aff,
)
from ..models.crm import (
get_prospects_rdv_byCode,
)
from ..views.default import (
to_age,
to_date,
to_euro,
to_euroz,
to_time,
to_int,
to_percent,
envoyerMailEleve,
)
from dateutil.relativedelta import relativedelta
@view_config(route_name='eleves', renderer='../templates/eleves/eleves.pt', permission='view')
@view_config(route_name='eleve_select', renderer='../templates/eleves/eleves.pt', permission='view')
def eleves(request):
if 'eleve_select' in request.current_route_path():
# récupérer les paramètres de l'appel de la view
datePlan = request.matchdict['date']
cd_mon = request.matchdict['cd_mon']
# sélectionner élève -> goto planning
goto_url = request.route_url('eleve_selected', cd_mon=cd_mon, date=datePlan, cd_cli='')
url = request.route_url('eleve_select', cd_mon=cd_mon, date=datePlan)
else:
# recherche élève -> goto fiche élève
goto_url = 'fiche_eleve'
url = request.route_url('eleves')
logged_in = request.authenticated_userid
message = ''
code = 0
eleves = []
name = ''
statut = 10
cb_tous = "non"
if 'form.submitted' in request.params:
name = request.params['name']
# si afficher tous les fiches ?
if 'cb_tous' in request.params:
cb_tous = "oui"
statut = 100
else:
cb_tous = "non"
statut = 10
# pas de saisie, lire les 50 derniers crées de l'agence
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"))
code = member.agence
if name == '':
name = str(member.agence)
# lire les élèves
eleves = get_eleves_by_name(request, name, statut)
if len(eleves) == 0:
message = "Elève non trouvé %s" % name
return {
'page_title': "Rechercher un élève",
'url': url,
'goto_url': goto_url,
'message': message,
'eleves': eleves,
'name': name,
'code': code,
'cb_tous': cb_tous,
}
@view_config(route_name='eleve_selected', permission='view')
def eleve_selected(request):
# récupérer les paramètres de l'appel de la view
datePlan = request.matchdict['date']
cd_mon = request.matchdict['cd_mon']
cd_cli = request.matchdict['cd_cli']
# fiche eleve
eleve = get_eleves_by_code(request, cd_cli)
return HTTPFound(location=request.route_url('monplanning', cd_mon=cd_mon, date=datePlan))
@view_config(route_name='fiche_eleve', renderer='../templates/eleves/fiche_eleve.pt', permission='view')
def fiche_eleve(request):
logged_in = request.authenticated_userid
""" Fiche inscription view """
cd_cli = request.matchdict['cd_cli']
url = request.route_url('fiche_eleve', cd_cli=cd_cli)
# fiche eleve
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'danger')
return HTTPFound(location=request.route_url('eleves'))
if eleve.AGENCE == 0:
request.session.flash(u"Ce code élève %s ne correspond pas à un élève." % cd_cli, 'danger')
return HTTPFound(location=request.route_url('eleves'))
complet_le = eleve.COMPLET_LE.strftime('%d-%m-%Y') if eleve.COMPLET_LE != None else ''
permis_delivre_le = eleve.permis_delivre_le.strftime('%d-%m-%Y') if eleve.permis_delivre_le != None else ''
if eleve.DATE_NAIS == None:
request.session.flash(u"La fiche de %s est incomplète. Veuillez renseigner les champs obligatoires." % eleve.NOMPREN, 'danger')
return HTTPFound(location=request.route_url('eleve_edit', cd_cli=cd_cli))
visite_med_le = date.strftime(eleve.visite_med_le, "%d/%m/%Y") if eleve.visite_med_le != None and str(
eleve.visite_med_le).strip() != '' else ''
visite_med_fin_le = date.strftime(eleve.visite_med_fin_le, "%d/%m/%Y") if eleve.visite_med_fin_le != None and str(
eleve.visite_med_fin_le).strip() != '' else ''
complet_le = date.strftime(eleve.COMPLET_LE, "%d/%m/%Y") if eleve.COMPLET_LE != None and str(
eleve.COMPLET_LE).strip() != '' else ''
visite_med_le = date.strftime(eleve.visite_med_le, "%d/%m/%Y") if eleve.visite_med_le != None and str(
eleve.visite_med_le).strip() != '' else ''
visite_med_fin_le = date.strftime(eleve.visite_med_fin_le, "%d/%m/%Y") if eleve.visite_med_fin_le != None and str(
eleve.visite_med_fin_le).strip() != '' else ''
complet_le = date.strftime(eleve.COMPLET_LE, "%d/%m/%Y") if eleve.COMPLET_LE != None and str(
eleve.COMPLET_LE).strip() != '' else ''
agence = get_agences(request, eleve.AGENCE)
age = to_age(eleve.DATE_NAIS, '>')
age_years = relativedelta(date.today(), eleve.DATE_NAIS).years
if eleve.stage_debut:
dates_stage = '%s au %s' % (eleve.stage_debut.strftime('%d-%m-%Y'), eleve.stage_fin.strftime('%d-%m-%Y'))
else:
dates_stage = ''
# moniteur référent 1
referent1_nom = ''
if eleve.CD_MON:
referent = get_moniteurs_by_code(request, eleve.CD_MON)
if referent:
referent1_nom = '%s (%s)' % (referent.NOM, referent.CD_MON)
else:
referent1_nom = '??? - (%s)' % eleve.CD_MON
# moniteur référent 2
referent2_nom = ''
if eleve.cd_ref2:
referent = get_moniteurs_by_code(request, eleve.cd_ref2)
if referent:
referent2_nom = '%s (%s)' % (referent.NOM, referent.CD_MON)
else:
referent2_nom = '??? - (%s)' % eleve.cd_ref2
# moniteur stage
stage_nom = ''
if eleve.cd_stage:
stage_nom = eleve.cd_stage
referent = get_moniteurs_by_code(request, eleve.cd_stage)
if referent:
stage_nom = '%s (%s)' % (referent.NOM, referent.CD_MON)
# moniteur circuit
circuit_nom = ''
if eleve.cd_circuit:
circuit_nom = eleve.cd_circuit
referent = get_moniteurs_by_code(request, eleve.cd_circuit)
if referent:
circuit_nom = '%s (%s)' % (referent.NOM, referent.CD_MON)
# compte élève
comptes = get_eleve_compte(request, cd_cli)
liste_compte = []
solde = 0.0
mtvaltotal = 0.0
# 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_contrat = "http://devng.marietton.com/contrat-choix.php?codeU=%s&Mn=%s&keyM=%s&codeE=%s" % (logged_in, moniteur.nom, keyM, cd_cli)
for item in comptes:
MTVAL = item.MTVAL if item.MTVAL != None and item.MTVAL != '' else 0
DEBIT = item.DEBIT if item.DEBIT != None and item.DEBIT != '' else 0
CREDIT = item.CREDIT if item.CREDIT != None and item.CREDIT != '' else 0
dateheure = item.DATE.strftime('%d-%m-%Y') if item.DATE != None else ''
if item.NoPlan > 0:
dateheure += ' - %s:00' % format(item.NoPlan, '02d')
if item.QTE > 0:
quantite = item.QTE
else:
quantite = ''
if item.DATE_VALEUR:
date_val = item.DATE_VALEUR.strftime('%d-%m-%Y') if item.DATE_VALEUR != None else ''
mtvaltotal += float(MTVAL)
else:
date_val = ""
d = (dateheure, item.CD_MON, item.INTITULE, quantite, to_euroz(DEBIT), to_euroz(CREDIT), item.lib4,
date_val, to_euroz(MTVAL), item.no_ligne,item.MODE_REGL)
liste_compte.append(d)
# calculate solde
solde -= float(DEBIT)
solde += float(CREDIT)
# examens
examens = get_examens_aff_byCD_CLI(request, cd_cli)
# permis obtenu par l'élève
permis = get_eleves_permis(request, cd_cli)
# suivi élève
suivis = get_eleve_suivi(request, cd_cli, 0)
# rdv élève
rdvs = get_prospects_rdv_byCode(request, 'E', cd_cli)
# documents
docs = get_eleve_docs(request, cd_cli, 'DOC')
justifs = get_eleve_docs(request, cd_cli, 'JUST')
justifs_manquant = get_eleve_justifs_manquant(request, cd_cli)
docs_manquant = get_eleve_docs_manquant(request, cd_cli)
# devis
devis = get_devis_by_eleve(request, cd_cli)
# devis CPF
devis_cpf = get_devis_cpf_by_eleve(request, cd_cli)
# fiche de suivi élève
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
keyE = int(yearday * d.year / d.day * eleve.CD_CLI)
keyM = int(yearday * d.year / d.day * (ord(logged_in[0]) + ord(logged_in[1])))
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' % (
str(eleve.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
if 'form.justif_added' in request.params:
code_add = request.params["code_add"]
insert_eleve_justif(request, cd_cli, code_add, 'JUST', logged_in, eleve.PERMIS_DEMANDE)
request.session.flash("'%s' a été ajouté avec succès." % code_add, 'success')
return HTTPFound(location=url)
if 'form.doc_added' in request.params:
doc_add = request.params["doc_add"]
insert_eleve_justif(request, cd_cli, doc_add, 'DOC', logged_in, eleve.PERMIS_DEMANDE)
request.session.flash("'%s' a été ajouté avec succès." % doc_add, 'success')
return HTTPFound(location=url)
return {
'page_title': "Fiche élève : %s - %s" % (eleve.CD_CLI, eleve.NOMPREN),
'url': url,
'eleve': eleve,
'agence': agence,
'age': age,
'age_years': age_years,
'dates_stage': dates_stage,
'referent1_nom': referent1_nom,
'referent2_nom': referent2_nom,
'stage_nom': stage_nom,
'circuit_nom': circuit_nom,
'dt_compte': json.dumps(liste_compte),
'solde': solde,
'mtvaltotal' : mtvaltotal,
'examens': examens,
'permis': permis,
'justifs': justifs,
'justifs_manquant': justifs_manquant,
'docs_manquant': docs_manquant,
'code_add': '',
'docs': docs,
'doc_add': '',
'devis': devis,
'devis_cpf': devis_cpf,
'suivis': suivis,
'rdvs': rdvs,
'visite_med_le': visite_med_le,
'visite_med_fin_le': visite_med_fin_le,
'complet_le': complet_le,
'iframe_src': iframe_src,
'docs_url': request.static_url(request.registry.settings['aem_gestion.justifs_url']) + str(eleve.CD_CLI),
'url_contrat': url_contrat,
'code':moniteur.secu,
'permis_delivre_le':permis_delivre_le
}
@view_config(route_name='eleve_edit', renderer='../templates/eleves/eleve_edit.pt', permission='view')
def eleve_edit(request):
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
cd_cli = request.matchdict['cd_cli']
url = request.route_url('eleve_edit', cd_cli=cd_cli)
codepostaux = get_codespostaux(request)
eleve = get_eleves_by_code(request, cd_cli)
permis = get_permis(request)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
date_nais = date.strftime(eleve.DATE_NAIS, "%d/%m/%Y") if eleve.DATE_NAIS != None else ''
title = "Nouveau fiche éléve " if cd_cli == "0" else "Modifier fiche : %s" % eleve.NOMPREN
stages = get_eleve_stage(request, cd_cli)
can_change_permis = stages == None or stages[0].debut_en_clair == None and eleve.heures_prevues <= 0
CODEPOST = '%s | %s' % (eleve.CODEPOST, eleve.VILLE)
if cd_cli == "0":
CODEPOST = ''
if 'form.submitted' in request.params:
params = dict(request.params)
params['agence'] = member.agence
if 'NePasRelancer' not in params:
params['NePasRelancer'] = 0
else:
params['NePasRelancer'] = 1
if 'NePasSpammer' not in params:
params['NePasSpammer'] = 0
else:
params['NePasSpammer'] = 1
cp = params['CODEPOST'].split(' | ')
if len(cp) < 2:
params['CODEPOST'] = ''
params['VILLE'] = ''
else:
params['CODEPOST'] = cp[0]
params['VILLE'] = cp[1]
if cd_cli == "0":
cd_cli = insert_eleve_by_formule(request, params)
request.session.flash(u"Une fiche élève a été ajouté avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
else:
new_values = {}
params['DATE_NAIS'] = datetime.strptime(params['DATE_NAIS'], '%d/%m/%Y').strftime("%Y-%m-%d")
for param, db_value in eleve.items():
if param in params and params[param] != db_value:
new_values[param] = params[param]
if 'FORMULE' in params and params['FORMULE'] != '':
if params['FORMULE'] != eleve.FORMULE:
# delete_eleve_inscription(
# request, eleve.CD_CLI, eleve.FORMULE)
debit_eleve_inscription(
request, eleve.CD_CLI, params['FORMULE'], member.agence, member.cd_uti)
update_eleve(request, cd_cli, new_values)
request.session.flash(u"La fiche élève a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
return {
'page_title': title,
'url': url,
'permis': permis,
'eleve': eleve,
'code_postal': CODEPOST,
'representant_cp': '%s | %s' % (eleve.representant_cp, eleve.representant_ville),
'date_nais': date_nais,
'dept_nais': get_all_dept_nais(request),
'nations': get_all_dept_nais_pays(request),
'formules': get_all_formules(request, eleve.PERMIS_DEMANDE),
'codepostaux': codepostaux,
'code': member.secu,
'can_change_permis': can_change_permis
}
@view_config(route_name='eleve_referent', renderer='../templates/eleves/eleve_referent.pt', permission='view')
def eleve_referent(request):
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
cd_cli = request.matchdict['cd_cli']
url = request.route_url('eleve_referent', cd_cli=cd_cli)
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
TODAY = date.today().strftime('%Y-%m-%d')
referents = get_moniteurs_by_aff(request, eleve.AGENCE, TODAY, TODAY)
if eleve.PERMIS_DEMANDE == "B78" :
referents = [r for r in referents if r.PLANNING=="B78"]
if 'form.submitted' in request.params:
new_values = {}
for param, db_value in eleve.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
if new_values:
update_eleve(request, cd_cli, new_values)
request.session.flash(u"La fiche élève a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
return {
'page_title': "Modifier Réferents - Niveaux : %s" % eleve.NOMPREN,
'url': url,
'eleve': eleve,
'referents': referents,
'code': member.secu
}
@view_config(route_name='eleve_filiere_niveau', renderer='../templates/eleves/eleve_filiere_niveau.pt', permission='view')
def eleve_filiere_niveau(request):
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
cd_cli = request.matchdict['cd_cli']
url = request.route_url('eleve_filiere_niveau', cd_cli=cd_cli)
niveaux = ['NR', 'A', 'B', 'C', 'D']
filieres = get_all_filieres(request)
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
if 'form.submitted' in request.params:
new_values = {}
for param, db_value in eleve.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
if new_values:
update_eleve(request, cd_cli, new_values)
request.session.flash(u"La fiche élève a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
return {
'page_title': "Modifier Réferents - Niveaux : %s" % eleve.NOMPREN,
'url': url,
'eleve': eleve,
'niveaux': niveaux,
'filieres': filieres,
'code': member.secu
}
@view_config(route_name='eleve_entreprise', renderer='../templates/eleves/eleve_entreprise.pt', permission='view')
def eleve_entreprise(request):
cd_cli = request.matchdict['cd_cli']
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
url = request.route_url('eleve_entreprise', cd_cli=cd_cli)
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(
u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
title = "Modifier Entreprise : %s" % eleve.NOMPREN
visite_med_le = date.strftime(
eleve.visite_med_le, "%d/%m/%Y") if eleve.visite_med_le != None and str(eleve.visite_med_le).strip() != '' else ''
visite_med_fin_le = date.strftime(
eleve.visite_med_fin_le, "%d/%m/%Y") if eleve.visite_med_fin_le != None and str(eleve.visite_med_fin_le).strip() != '' else ''
if 'form.submitted' in request.params:
params = dict(request.params)
if 'NePasRelancer' not in params:
params['NePasRelancer'] = 0
else:
params['NePasRelancer'] = 1
new_values = {}
params['visite_med_le'] = datetime.strptime(params['visite_med_le'], '%d/%m/%Y').strftime(
"%Y-%m-%d") if params['visite_med_le'] != None and str(params['visite_med_le']).strip() != '' else None
params['visite_med_fin_le'] = datetime.strptime(params['visite_med_fin_le'], '%d/%m/%Y').strftime(
"%Y-%m-%d") if params['visite_med_fin_le'] != None and str(params['visite_med_fin_le']).strip() != '' else None
for param, db_value in eleve.items():
if param in params and params[param] != db_value:
new_values[param] = params[param]
update_eleve(request, cd_cli, new_values)
request.session.flash(
u"La fiche élève a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
return {
'page_title': title,
'url': url,
'eleve': eleve,
'visite_med_le': visite_med_le,
'visite_med_fin_le': visite_med_fin_le,
'code': member.secu
}
@view_config(route_name='suivi_edit', renderer='../templates/eleves/suivi_edit.pt', permission='view')
def suivi_edit(request):
cd_cli = request.matchdict['cd_cli']
no_ligne = request.matchdict['no_ligne']
url = request.route_url('suivi_edit', cd_cli=cd_cli, no_ligne=no_ligne)
message = ''
if no_ligne == '0':
# nouveau
item = {}
item['CD_CLI'] = cd_cli
item['no_ligne'] = no_ligne
item['RESULTAT'] = ''
page_title = 'Nouvelle ligne de suivi'
else:
# lire la fiche de l'item
item = get_eleve_suivi(request, cd_cli, no_ligne)
if not item:
request.session.flash(u"Suivi non trouvé : %s" % no_ligne, 'warning')
return HTTPFound(location=request.route_url('fiche_eleve'))
page_title = "Suivi no : %s" % (item.no_ligne)
if 'form.submitted' in request.params:
new_values = {}
for param, db_value in item.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
new_values['cd_cli'] = cd_cli
new_values['cd_uti'] = request.authenticated_userid.upper()
if new_values:
update_suivi(request, no_ligne, new_values)
request.session.flash(u"Le suivi a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli) + '#suivi')
if 'form.deleted' in request.params:
delete_suivi(request, no_ligne)
request.session.flash(u"Le suivi a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli) + '#suivi')
return {
'page_title': page_title,
'url': url,
'item': item,
'message': message,
}
@view_config(route_name='eleve_credit', renderer='../templates/eleves/eleve_credit.pt', permission='view')
def eleve_credit(request):
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
cd_cli = request.matchdict['cd_cli']
no_ligne = request.matchdict['no_ligne']
ismodifiable = True
iseditable = True
code = member.secu
compteurl=request.route_url('fiche_eleve',cd_cli=cd_cli)+"#compte"
if code < 6 :
request.session.flash(u"Vous n'avez pas l'acces.", 'danger')
return HTTPFound(location=compteurl)
elif code < 9 :
mode_regls = get_mode_reglement(request,4)
else:
mode_regls = get_mode_reglement(request,0)
compte = None
if int(no_ligne) != 0 :
compte = get_eleve_compte_by_no_ligne(request,no_ligne)
date_credit = compte.DATE.strftime("%d/%m/%Y") if compte.DATE != None and compte.DATE != '' else ''
date_valeur = compte.DATE_VALEUR.strftime("%d/%m/%Y") if compte.DATE_VALEUR != None and compte.DATE_VALEUR != '' else ''
date_exporte = compte.exporte_le.strftime("%d/%m/%Y") if compte.exporte_le != None and compte.exporte_le != '' else ''
if code < 9 :
ismodifiable = False
# days = (datetime.today().date() - compte.DATE).days
# if days > 0 :
# ismodifiable = False
# elif days != 0 :
# iseditable = False
# ismodifiable = True
# if int(compte.MODE_REGL) == 1 :
# ismodifiable = False
if date_exporte != '':
ismodifiable = False
else:
date_credit = datetime.today().date().strftime("%d/%m/%Y")
date_valeur = datetime.today().date().strftime("%d/%m/%Y")
date_exporte = ''
compte = {
'INTITULE': '','MODE_REGL' : 2, 'CREDIT' : '','MTVAL' : 0,'MT1' : '','MT3' : 0,'no_chrono': ''
}
url = request.route_url('eleve_credit', cd_cli=cd_cli,no_ligne=no_ligne)
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
params = request.params
if 'form.deleted' in params:
delete_eleve_compte_by_no_ligne(request, no_ligne, cd_cli)
request.session.flash(u"Le règlement %s est supprimé " % cd_cli, 'success')
return HTTPFound(location=compteurl)
if 'form.submitted' in params:
date = datetime.strptime(params['DATE'],"%d/%m/%Y").date()
today = datetime.today().date()
diff = date - today
if not ismodifiable:
request.session.flash(u"Vous n'avez pas l'acces pour la modification de règlement", 'danger')
return HTTPFound(location=compteurl)
if code < 9 :
if (int(params['MODE_REGL'])!= 2 and diff.days != 0) or (int(params['MODE_REGL']) == 2 and diff.days < 0):
request.session.flash(u"Date invalidé pour ce mode règlement", 'danger')
return HTTPFound(location=request.route_url('eleve_credit',cd_cli=cd_cli, no_ligne=no_ligne))
year = date.year
feries = JoursFeries.for_year(year).values()
if int(params['MODE_REGL']) != 4 and date in feries:
request.session.flash(u"Le jour du %s est ferié ." % date.strftime("%d/%m/%Y"), 'danger')
return HTTPFound(location=url)
somme = int(float(params['MT1'])) + int(float(params['MT3']))
credit_val = int(float(params['CREDIT']))
if somme != credit_val :
request.session.flash(u"Le montant ne correspond pas à la ventilation .", 'danger')
return HTTPFound(location=url)
# create or update
DATE = datetime.strptime(params['DATE'], '%d/%m/%Y') if params['DATE'] != '' else None
MTVAL = params['MTVAL'] if 'MTVAL' in params else 0
call_proc_eleve_credit(request,no_ligne,cd_cli,DATE,params['MODE_REGL'],params['INTITULE'],params['CREDIT'],params['MT1'],0.0,params['MT3'],MTVAL,member.agence,logged_in)
request.session.flash(u"Le compte eleve est mis à jour .", 'success')
return HTTPFound(compteurl)
if 'form.send-email' in params :
eleve_compte = get_eleve_compte_complete_by_no_ligne(request,no_ligne)
solde = get_solde_reel(request,cd_cli)
agence_infos = get_agences(request,eleve.AGENCE)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
TODAY = datetime.today().strftime('%d/%m/%Y')
HT = 0.0
destinataires = [eleve.email]
sujet = "Règlement"
fblogo = request.static_url('aem_gestion:static/img/fb.png')
corps= """
<table style="width:520px;">
<tr>
<td style="width:50%">
<p align="left">
CERRA MARIETTON <br/>
{0} <br/>
{1}<br/>
{2} {3}<br/>
Tél: {4}<br/>
{5}<br/>
</p>
</td>
<td style="width:50%">
<p align="right">
<font size="6"> Reçu</font>
</p>
</td>
</tr>
</table>
<p align="center">
a reçu de <br/>
{6} {7} <br/>
{8}<br/>
{9} {10}<br/>
</p>
<p align="center">
<table border="0" >
<tr>
<td >
<span>Code éleve : &nbsp; {11}</span>
</td>
<td >
<span>La somme de <span style="font-weight:bold" >{12}</span> &nbsp; en {13}</span>
</td>
</tr>
<tr>
<td >
<span>Catégorie &nbsp;&nbsp;: &nbsp; {14}</span>
</td>
<td >
<span>en reglement de : &nbsp; {15}</span>
</td>
</tr>
<tr>
<td >
<span>Solde&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: &nbsp; <span style="font-weight:bold" >{16}</span></span>
</td>
<td >
<span>(montant HT : {17})</span>
</td>
</tr>
</table>
</p>
<p align="right" style="margin-right:50px;">
Lyon, le {18}
<p>
<br/>
<br/>
<p align="center" style="font-size:18px;font-weight:bold;">
Retrouvez votre règlement sur : <a href="https://monespace.marietton.com">monespace.marietton.com</a>
<p>
<p align="center" style="font-size:18px;font-weight:bold;">
<img width="30" height="20" src="{19}" /> &nbsp; <span> &nbsp; &nbsp;Rejoignez nous sur : <a href="https://www.facebook.com/AutoEcoleMarietton">www.facebook.com/AutoEcoleMarietton</a></span><p>""".format(agence_infos.LIBELLE,agence_infos.adresse,agence_infos.codepostal,agence_infos.ville,agence_infos.TELEPHONE,agence_infos.email,
eleve.CIVILITE,eleve.NOMPREN,eleve.ADRESSE,eleve.CODEPOST,eleve.VILLE,eleve.CD_CLI,
to_euroz(eleve_compte.CREDIT),eleve_compte.mode,eleve.PERMIS_DEMANDE,eleve_compte.INTITULE,to_euroz(solde.CREDIT),to_euroz(HT),TODAY,fblogo)
markdowner = Markdown()
corps = markdowner.convert(corps)
corps = """<div style="margin:auto;width:520px;">"""+corps+"""</div>"""
envoyerMailEleve(request, destinataires, sujet, corps)
request.session.flash("un email a été envoyé à l'élève : %s." % eleve.email, 'success')
return {
'page_title': "Règlement de : %s" % eleve.NOMPREN,
'url': url,
'eleve': eleve,
'code': code,
'date_credit':date_credit,
'date_valeur':date_valeur,
'date_exporte':date_exporte,
'mode_regls':mode_regls,
'compte' : compte,
'ismodifiable': ismodifiable,
'iseditable' : iseditable,
'no_ligne' : int(no_ligne),
}
@view_config(route_name='eleve_debit', renderer='../templates/eleves/eleve_debit.pt', permission='view')
def eleve_debit(request):
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
cd_cli = request.matchdict['cd_cli']
no_ligne = request.matchdict['no_ligne']
code = member.secu
url = request.route_url('eleve_debit', cd_cli=cd_cli,no_ligne=no_ligne)
eleve = get_eleves_by_code(request, cd_cli)
compteurl = request.route_url('fiche_eleve',cd_cli=cd_cli)+"#compte"
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'info')
return HTTPFound(location=request.route_url('eleves'))
else:
# Controller bloquant concerant l'eleve
datefinvisite = eleve.visite_med_fin_le if eleve.visite_med_fin_le != None and eleve.visite_med_fin_le != '' else eleve.visite_med_le
if eleve.AGENCE == 0 :
request.session.flash(u"Eleve encore provisoire.", 'danger')
return HTTPFound(compteurl)
elif code != 9 and eleve.CLOTURE_LE != None:
request.session.flash(u"Ce dossier est déjà clôturé .",'info')
return HTTPFound(compteurl)
elif eleve.ELEVEGARDE02 == True:
request.session.flash(u"Le dossier est gardé par l'élève.",'info')
return HTTPFound(compteurl)
elif datefinvisite != None :
delta = (datefinvisite - datetime.today().date()).days
if 0 <= delta < 90 :
request.session.flash(u"La date de visite médicale de l'élève expirera dans %s jours."%(delta),'danger')
if delta < 0 :
request.session.flash(u"La date de visite médicale de l'élève est expirée.",'warning')
return HTTPFound(compteurl)
elif eleve.FORMULE == None or eleve.FORMULE == '' :
request.session.flash(u"La FORMULE de l'élève n'est pas renseignée ",'danger')
return HTTPFound(compteurl)
# Controller non bloquant concerant l'eleve
if eleve.COMPLET_LE == None or eleve.DOSSIER_DATE == None :
request.session.flash(u"Le dossier de l'élève est INCOMPLET ou NON ENREGISTRE.",'warning')
ismodifiable = True
iseditable = True
iseditable2 = True
isDeltable = True
data_reference = list(get_examen_reference(request,cd_cli))
first_ref = dict(data_reference[0])
reference = []
for i,dref in enumerate(data_reference) :
elref = {
'index' : i,
"COMPTE" : dref.COMPTE,"CTVA":dref.CTVA,"FAM":dref.FAM,"REF":dref.REF,
"LIB":dref.LIB,"PUTTC":float(dref.PUTTC),"CD_UTI":dref.cd_uti,"type_examen":dref.type_examen
}
reference.append(elref)
first_ref = dict(reference[0])
if int(no_ligne) != 0 :
compte = get_eleve_compte_by_no_ligne(request,no_ligne)
date_debit = compte.DATE.strftime("%d/%m/%Y") if compte.DATE != None and compte.DATE != '' else None
date_valeur = compte.DATE_VALEUR.strftime("%d/%m/%Y") if compte.DATE_VALEUR != None and compte.DATE_VALEUR != '' else None
date_exporte = compte.exporte_le.strftime("%d/%m/%Y") if compte.exporte_le != None and compte.exporte_le != '' else None
if code < 9 :
iseditable = False
isDeltable = False
ismodifiable = False
else :
isDeltable = True
if compte.NoPlan > 0 :
iseditable2 = False
if compte.exporte_le != None :
isDeltable = False
ismodifiable = False
if (compte.no_chrono != None and compte.no_chrono != '') or ('STAGE' in compte.INTITULE) :
isDeltable = False
if date_exporte != None :
isDeltable = False
ismodifiable = False
# if compte.DATE != None and compte.DATE != '' and (compte.DATE-datetime.today().date()).days > 0 and code != 9 :
else:
if code < 9 :
iseditable = False
elif code < 6 :
request.session.flash(u"Vous n'avez pas l'acces.", 'danger')
return HTTPFound(compteurl)
statut = 0
montant = first_ref['PUTTC']
if first_ref['FAM'] == 'H':
statut = 1
mt_valeur = 0
if first_ref['FAM'] == 'F':
date_debit = datetime.today().date().strftime("%d/%m/%Y")
elif first_ref['FAM'] == 'S':
date_debit = None
else:
mt_valeur = first_ref['PUTTC']
date_debit = datetime.today().date().strftime("%d/%m/%Y")
date_valeur = datetime.today().date().strftime("%d/%m/%Y")
date_exporte = None
compte = {
'INTITULE': first_ref['LIB'],'MODE_REGL' : None, 'DEBIT' : montant,'MTVAL' : mt_valeur,'MT1' : '','MT3' :'','no_chrono': '','STATUT':statut,
'REF' : first_ref['REF'],'CTVA': first_ref['CTVA'],'COMPTE' :first_ref['COMPTE'],'QTE':1,'LIEU_RDV':'','HEURE' : '0:00:00'
}
params = request.params
if 'form.deleted' in params:
delete_eleve_compte_by_no_ligne(request,no_ligne,cd_cli)
request.session.flash(u"Le regelement %s est supprimé " % cd_cli, 'success')
return HTTPFound(compteurl)
if 'form.submitted' in params:
DEBIT = params['DEBIT'] if 'DEBIT' in params else compte['DEBIT']
if code == 0 :
solde = get_solde_reel(request,cd_cli)
credit = float(solde.CREDIT)
debit = float(DEBIT)
if credit < debit :
request.session.flash(u"Votre solde est insiffusant .", 'danger')
return HTTPFound(location=url)
# create or update
DATE = datetime.strptime(params['DATE'], '%d/%m/%Y') if params['DATE'] != '' else None
datevaleur = datetime.strptime(params['DATE_VALEUR'], '%d/%m/%Y') if 'DATE_VALEUR' in params and params['DATE_VALEUR'] != '' else None
MTVAL = params['MTVAL'] if 'MTVAL' in params else compte['MTVAL']
COMPTE = params['COMPTE'] if 'COMPTE' in params else compte['COMPTE']
STATUT = params['STATUT'] if 'STATUT' in params else compte['STATUT']
call_proc_eleve_debit(request,no_ligne,cd_cli,DATE,params['REF'],params['INTITULE'],params['QTE'],DEBIT,datevaleur,MTVAL,COMPTE,STATUT,0,member.agence,logged_in)
request.session.flash(u"Le compte eleve est mis à jour .", 'success')
return HTTPFound(compteurl)
return {
'page_title': "Debit de : %s" % eleve.NOMPREN,
'url': url,
'eleve': eleve,
'code': code,
'date_debit':date_debit,
'date_valeur':date_valeur,
'date_exporte':date_exporte,
'compte' : compte,
'reference': reference,
'ismodifiable': ismodifiable,
'iseditable' : iseditable,
'iseditable2':iseditable2,
'isDeltable' : isDeltable,
'no_ligne' : int(no_ligne)
}
@view_config(route_name='eleve_lettrer', renderer='../templates/eleves/eleve_lettrer.pt', permission='view')
def eleve_lettrer(request):
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
cd_cli = request.matchdict['cd_cli']
code = member.secu
url = request.route_url('eleve_lettrer', cd_cli=cd_cli)
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'info')
return HTTPFound(location=request.route_url('eleves'))
params = request.params
if 'form.lettrer' in params:
items = params.getall('selected[]')
lettre = get_eleve_max_lettre(request, cd_cli)
for item in items :
citem = item.replace("'", '"')
dictitem = json.loads(citem)
no_ligne = dictitem['0']
maxlettre = lettre.maxlettre +1
update_eleve_lettre(request,no_ligne,maxlettre)
request.session.flash(u"Lettrage terminé.", 'success')
if 'form.delettrer' in params :
item = params['selected[]']
citem = item.replace("'", '"')
dictitem = json.loads(citem)
lettre = dictitem['8']
update_eleve_delettre(request,cd_cli,lettre,datetime.today())
request.session.flash(u"Delettrage terminé.", 'success')
if 'form.auto-lettrer' in params :
eleve_auto_lettre(request,cd_cli)
request.session.flash(u"Lettrage auto terminé.", 'success')
# compte élève
comptes = get_eleve_compte(request, cd_cli)
liste_compte = []
solde = 0.0
moniteur = get_users_by_code(request, logged_in)
for item in comptes:
dateheure = item.DATE.strftime('%d-%m-%Y') if item.DATE != None else ''
if item.NoPlan > 0:
dateheure += ' - %s:00' % format(item.NoPlan, '02d')
if item.DATE_VALEUR:
date_val = item.DATE_VALEUR.strftime('%d-%m-%Y') if item.DATE_VALEUR != None else ''
else:
date_val = ""
MTVAL = item.MTVAL if item.MTVAL != None and item.MTVAL != '' else 0
DEBIT = item.DEBIT if item.DEBIT != None and item.DEBIT != '' else 0
CREDIT = item.CREDIT if item.CREDIT != None and item.CREDIT != '' else 0
d = (item.no_ligne,dateheure, item.INTITULE,to_euroz(DEBIT), to_euroz(CREDIT),item.lib4,
date_val, to_euroz(MTVAL),item.lettre,item.no_ligne,)
liste_compte.append(d)
# calculate solde
solde -= float(DEBIT)
solde += float(CREDIT)
return {
'page_title': "Compte éleve : %s - %s" % (eleve.CD_CLI, eleve.NOMPREN),
'url': url,
'eleve': eleve,
'dt_compte': json.dumps(liste_compte),
'solde': solde,
'code':moniteur.secu
}
@view_config(route_name='eleve_upd')
def eleve_upd(request):
# récupérer les paramètres de l'appel de la view
cd_cli = request.matchdict['cd_cli']
key_cli = request.matchdict['key_cli']
param = request.matchdict['param']
# calcul clé de l'élève
d = date.today()
# calculer le jour de l'année d'auj
yearday = (d - date(d.year, 1, 1)).days + 1
keyE = int(yearday * d.year / d.day * int(cd_cli))
# contoler la clé de l'élève
if to_int(key_cli) != keyE:
body = "KEY ERROR!"
else:
# update fiche eleve
data = param.split("=")
if data[0] == 'heures_revues':
new_values = {}
new_values[data[0]] = data[1]
update_eleve(request, cd_cli, new_values)
body = "MAJ OK!"
return Response(
content_type='text/plain',
body=body
)
@view_config(route_name='doc_upload', renderer='../templates/eleves/doc_upload.pt', permission='view')
def doc_upload(request):
logged_in = request.authenticated_userid.upper()
no_ligne = request.matchdict['no_ligne']
cd_cli = request.matchdict['cd_cli']
url = request.route_url("doc_upload", no_ligne=no_ligne, cd_cli=cd_cli)
message = ""
# lire le document à uploader
justif = get_eleve_justifs(request, no_ligne)
if justif is None:
request.session.flash(u"Le justif %s est introuvable" % (no_ligne), 'danger')
return HTTPFound(location=request.route_url("fiche_eleve", cd_cli=cd_cli))
url_retour = request.route_url('fiche_eleve', cd_cli=cd_cli) + '#justifs'
if 'form.submitted' in request.params:
if 'libelle_fic' in request.params:
new_values = {}
new_values['libelle_fic'] = request.params['libelle_fic']
new_values['cd_uti'] = logged_in
if 'nom_fic' in request.params:
new_values['nom_fic'] = request.params['nom_fic']
update_eleve_justif(request, no_ligne, new_values)
request.session.flash('Le e-photo est enregistré avec succès.', 'success')
if request.POST['uploadfile'] != b'':
# récupère le fichier download dans le dossier /tmp
input_file = request.POST['uploadfile'].file
input_name = request.POST['uploadfile'].filename
input_parts = input_name.split('.')
input_ext = input_parts[len(input_parts) - 1]
ext_allowed = ['jpeg', 'jpg', 'png', 'pdf']
temp_file = downloadFile2Temp(input_file, input_name, ext_allowed)
if temp_file[:8] == 'ERREUR: ':
request.session.flash(temp_file, 'danger')
return HTTPFound(location=url)
# fabriquer le nom du document
TODAY = date.today().strftime('%Y-%m-%d')
filename = '%s_%s_%s_%s.%s' % (cd_cli, justif.type, justif.code, TODAY, input_ext)
tempFile2Dossier(request, no_ligne, cd_cli, temp_file, filename, logged_in)
request.session.flash('%s : Ce fichier est téléchargé avec succès.' % input_name, 'success')
return HTTPFound(location=url_retour)
return {
'page_title': "Télécharger un document",
'url': url,
'url_retour': url_retour,
'justif': justif,
}
@view_config(route_name='doc_edit', renderer='../templates/eleves/doc_edit.pt', permission='view')
def doc_edit(request):
logged_in = request.authenticated_userid.upper()
no_ligne = request.matchdict['no_ligne']
cd_cli = request.matchdict['cd_cli']
url = request.route_url("doc_edit", no_ligne=no_ligne, cd_cli=cd_cli)
message = ""
# lire le document à uploader
justif = get_eleve_justifs(request, no_ligne)
if justif is None:
request.session.flash(u"Le justif %s est introuvable" % (no_ligne), 'danger')
return HTTPFound(location=request.route_url("fiche_eleve", cd_cli=cd_cli))
url_retour = request.route_url('fiche_eleve', cd_cli=cd_cli) + '#justifs'
if 'form.submitted' in request.params:
new_values = {}
new_values['cd_uti'] = logged_in
if 'libelle_fic' in request.params:
new_values['libelle_fic'] = request.params['libelle_fic']
# valide coché ?
if 'valide' in request.params:
new_values['valide'] = 1
else:
new_values['valide'] = 0
update_eleve_justif(request, no_ligne, new_values)
request.session.flash('Le fichier est validé avec succès.', 'success')
return HTTPFound(location=url_retour)
if 'form.erased' in request.params:
new_values = {}
new_values['cd_uti'] = logged_in
new_values['nom_fic'] = ''
new_values['taille_fic'] = 0
new_values['valide'] = 0
# supprimer le fichier de la pièce
file_path = '%s/%s/%s' % (request.registry.settings['aem_gestion.justifs_dir'], cd_cli, justif.nom_fic)
if os.path.exists(file_path):
os.remove(file_path)
update_eleve_justif(request, no_ligne, new_values)
request.session.flash('Le fichier est effacé avec succès.', 'success')
return HTTPFound(location=url_retour)
if 'form.deleted' in request.params:
if justif.nom_fic:
# supprimer le fichier de la pièce
file_path = '%s/%s/%s' % (request.registry.settings['aem_gestion.justifs_dir'], cd_cli, justif.nom_fic)
if os.path.exists(file_path):
os.remove(file_path)
delete_eleve_justif(request, no_ligne)
request.session.flash('Le fichier est supprimé avec succès.', 'success')
return HTTPFound(location=url_retour)
return {
'page_title': "Modifier un document",
'url': url,
'url_retour': url_retour,
'justif': justif,
}
def downloadFile2Temp(input_file, input_name, ext_allowed):
# récupère son extension
input_extension = input_name.split('.')[-1]
# extensions autorisées ?
if input_extension.lower() not in ext_allowed:
return "ERREUR: Le format du fichier n'est pas valide. Téléchargement impossible."
# Finally write the data to a temporary file
temp_file_path = os.path.join('/tmp/', input_name)
# supprimer le fichier s'il existe déjà
if os.path.exists(temp_file_path):
os.remove(temp_file_path)
input_file.seek(0)
with open(temp_file_path, 'wb') as output_file:
shutil.copyfileobj(input_file, output_file)
# controler la taille du fichier < 4 Mo
filesize = round(os.path.getsize(temp_file_path) / 1024)
if filesize > 4096:
os.remove(temp_file_path)
return "ERREUR: La taille du fichier dépasse la limite autorisée. Téléchargement impossible."
if input_extension in ['jpeg', 'jpg', 'png']:
# using the Python Image Library (PIL) to resize an image
resize_photos(temp_file_path)
return temp_file_path
def tempFile2Dossier(request, no_ligne, cd_cli, temp_file, filename, logged_in):
# créer le répertoire du chantier
path = '%s/%s' % (request.registry.settings['aem_gestion.justifs_dir'], cd_cli)
os.makedirs(path, exist_ok=True)
filepath = os.path.join('%s/%s' % (path, filename))
# supprimer le fichier s'il existe déjà
if os.path.exists(filepath):
os.remove(filepath)
# Finally move the temporary file to folder
shutil.move(temp_file, filepath)
filesize = round(os.path.getsize(filepath) / 1024)
new_values = {}
new_values['nom_fic'] = filename
new_values['taille_fic'] = filesize
new_values['cd_uti'] = logged_in
update_eleve_justif(request, no_ligne, new_values)
def resize_photos(image_file):
# using the Python Image Library (PIL) to resize an image
img_org = Image.open(image_file)
# get the size of the original image
width_org, height_org = img_org.size
# set the resizing factor so the aspect ratio can be retained
# factor > 1.0 increases size
# factor < 1.0 decreases size
factor = 0.75
width = int(width_org * factor)
height = int(height_org * factor)
# best down-sizing filter
img_anti = img_org.resize((width, height), Image.ANTIALIAS)
# split image filename into name and extension
name, ext = os.path.splitext(image_file)
# create a new file name for saving the result
img_anti.save(image_file)
return
@view_config(route_name='eleve_email', renderer='../templates/eleves/eleve_email.pt', permission='view')
def eleve_email(request):
logged_in = request.authenticated_userid
cd_cli = request.matchdict['cd_cli']
url = request.route_url('eleve_email', cd_cli=cd_cli)
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
TODAY = date.today().strftime('%Y-%m-%d')
destinataires = [eleve.email]
sujet = "Dossier à compléter"
corps = """
Bonjour %s %s,
Suite à la vérification de votre dossier, certaine(s) pièce(s) justificative(s) sont manquante(s). Merci de vous rendre sur votre espace élève, en cliquant sur e lien suivant, :
[monespace.marietton.com](https://monespace.marietton.com/login_as/%s)
afin de téléchaarger ces pièces manquantes dans les plus brefs délais afin de ne pas bloquer votre dossier.
Si vous rencontrez des soucis, nhésitez pas à nous contacter par Chat, ou téléphone.
À très vite,
Votre Auto-école Marietton
""" % (eleve.CIVILITE, eleve.NOMPREN, cd_cli)
markdowner = Markdown()
corps = markdowner.convert(corps)
if 'form.submitted' in request.params:
envoyerMailEleve(request, destinataires, sujet, corps)
request.session.flash("un email a été envoyé à l'élève : %s." % eleve.email, 'success')
return HTTPFound(request.route_url('fiche_eleve', cd_cli=cd_cli) + '#justifs')
return {
'page_title': "Email à l'élève : %s" % eleve.NOMPREN,
'url': url,
'eleve': eleve,
'destinataires': destinataires,
'sujet': sujet,
'corps': corps,
}
@view_config(route_name='eleve_pap', renderer='../templates/eleves/eleve_pap.pt', permission='view')
def eleve_pap(request):
logged_in = request.authenticated_userid
cd_cli = request.matchdict['cd_cli']
url = request.route_url('eleve_pap', cd_cli=cd_cli)
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
cas_pap = ['CAS 1', 'CAS 2', 'CAS 3', 'CAS 4']
# lire la table des départements
dept = get_departements(request)
# dates optionnelles
if eleve.permis_delivre_le:
permis_delivre_le = eleve.permis_delivre_le.strftime('%d/%m/%Y')
else:
permis_delivre_le = ''
if eleve.infraction_le:
infraction_le = eleve.infraction_le.strftime('%d/%m/%Y')
else:
infraction_le = ''
if eleve.infraction_a:
infraction_a = eleve.infraction_a.strftime("%H:%M")
else:
infraction_a = ''
if 'form.submitted' in request.params:
cas_PAP = request.params['cas_PAP']
permis_delivre_le = request.params['permis_delivre_le']
infraction_le = request.params['infraction_le']
infraction_a = request.params['infraction_a']
permis_delivrele = to_date(permis_delivre_le)
infractionle = to_date(infraction_le)
infractiona = to_time(infraction_a)
#import pdb;pdb.set_trace()
if cas_PAP == 'CAS 2':
infractionle = to_date(infraction_le)
infractiona = to_time(infraction_a)
if infractionle == False or infractiona == False:
request.session.flash("Pour le CAS 2, veuillez saisir une date et une heure d'infraction valides." , 'danger')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
new_values = {}
for param, db_value in eleve.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
new_values['permis_delivre_le'] = permis_delivrele.strftime("%Y-%m-%d")
# si date saisie, ajouter dans new_values
if infractionle == False:
new_values.pop('infraction_le')
else:
new_values['infraction_le'] = infractionle.strftime("%Y-%m-%d")
if infractiona == False:
new_values.pop('infraction_a')
else:
new_values['infraction_a'] = infractiona.strftime("%H:%M")
new_values['CD_UTI'] = logged_in
update_eleve(request, cd_cli, new_values)
request.session.flash(u"La fiche élève a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
return {
'page_title': "Modifier Permis à Point : %s" % eleve.NOMPREN,
'url': url,
'eleve': eleve,
'cas_pap': cas_pap,
'dept': dept,
'permis_delivre_le': permis_delivre_le,
'infraction_le': infraction_le,
'infraction_a': infraction_a,
}
@view_config(route_name='eleve_permis', renderer='../templates/eleves/eleve_permis.pt', permission='view')
def eleve_permis(request):
logged_in = request.authenticated_userid.upper()
cd_cli = request.matchdict['cd_cli']
no_ligne = request.matchdict['no_ligne']
url = request.route_url('eleve_permis', cd_cli=cd_cli, no_ligne=no_ligne)
message = ""
if no_ligne == '0':
# nouveau
titre = "Nouveau permis"
permis = {}
permis['PERMIS'] = ''
permis['NUMERO'] = ''
permis['OBTENU_LE'] = ''
permis['LIEU'] = ''
OBTENU_LE = ''
else:
permis = get_eleves_permis_byNo(request, no_ligne)
titre = "Modifier le permis : %s" % permis.PERMIS
OBTENU_LE = permis.OBTENU_LE.strftime('%d/%m/%Y')
if 'form.submitted' in request.params:
coded = request.params["PERMIS"]
if coded == '0':
message = "Veuillez saisir une catégorie valide."
else:
OBTENU_LE = to_date(request.params['OBTENU_LE'])
new_values = {}
for param, db_value in permis.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
new_values['OBTENU_LE'] = OBTENU_LE.strftime("%Y-%m-%d")
new_values['CD_UTI'] = logged_in
update_eleve_permis(request, cd_cli, no_ligne, new_values)
request.session.flash("Le permis a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
if 'form.deleted' in request.params:
delete_eleve_permis(request, no_ligne)
request.session.flash("Le permis a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
return {
'page_title': titre,
'url': url,
'message': message,
'cd_cli': cd_cli,
'permis': permis,
'OBTENU_LE': OBTENU_LE,
}
@view_config(route_name='eleve_doc_prefecture', renderer='../templates/eleves/eleve_doc_prefecture.pt', permission='view')
def eleve_doc_prefecture(request):
cd_cli = request.matchdict['cd_cli']
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
url = request.route_url('eleve_doc_prefecture', cd_cli=cd_cli)
eleve = get_eleves_by_code(request, cd_cli)
if not eleve:
request.session.flash(
u"La fiche élève %s n'existe pas." % cd_cli, 'success')
return HTTPFound(location=request.route_url('eleves'))
title = "Dossier Prefecture : %s" % eleve.NOMPREN
agences = get_agences(request, 0)
status = get_status(request)
dossier_date = date.strftime(
eleve.DOSSIER_DATE, "%d/%m/%Y") if eleve.DOSSIER_DATE != None and str(eleve.DOSSIER_DATE).strip() != '' else ''
if 'form.submitted' in request.params:
params = dict(request.params)
new_values = {}
if params['DOSSIER_NO'] != None and str(params['DOSSIER_NO']).strip() != '':
if params['DOSSIER_DATE'] != None and str(params['DOSSIER_DATE']).strip() != '':
params['DOSSIER_DATE'] = datetime.strptime(
params['DOSSIER_DATE'], '%d/%m/%Y').strftime("%Y-%m-%d")
else:
request.session.flash(
u"Date est obligatoire pour l'immatriculation donnée", 'danger')
else:
params['DOSSIER_NO'] = None
params['DOSSIER_DATE'] = None
for param, db_value in eleve.items():
if param in params and str(params[param]) != str(db_value):
new_values[param] = params[param]
if new_values:
if (eleve.DOSSIER_NO == None or str(eleve.DOSSIER_NO).strip() == '') and 'DOSSIER_NO' in new_values:
eleve_doc_valorise(request, eleve.FORMULE, cd_cli)
update_eleve(request, cd_cli, new_values)
request.session.flash(
u"La fiche élève a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
return {
'page_title': title,
'url': url,
'eleve': eleve,
'dossier_date': dossier_date,
'agences': agences,
'status': status,
'code': member.secu
}
@view_config(route_name='eleve_representant', renderer='../templates/eleves/eleve_representant.pt', permission='view')
def eleve_representant(request):
logged_in = request.authenticated_userid
member = get_users_by_code(request, logged_in)
cd_cli = request.matchdict['cd_cli']
url = request.route_url('eleve_representant', cd_cli=cd_cli)
eleve = get_eleves_by_code(request, cd_cli)
if 'form.submitted' in request.params:
new_values = {}
for param, db_value in eleve.items():
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
representant_cp = request.params['representant_cp'].split(' | ')
if len(representant_cp) < 2:
new_values['representant_cp'] = ''
new_values['representant_ville'] = ''
else:
new_values['representant_cp'] = representant_cp[0]
new_values['representant_ville'] = representant_cp[1]
payeur_cp = request.params['payeur_cp'].split(' | ')
if len(payeur_cp) < 2:
new_values['payeur_cp'] = ''
new_values['payeur_ville'] = ''
else:
new_values['payeur_cp'] = payeur_cp[0]
new_values['payeur_ville'] = payeur_cp[1]
if new_values:
update_eleve(request, cd_cli, new_values)
request.session.flash(
u"La fiche élève a été mise à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('fiche_eleve', cd_cli=cd_cli))
return {
'page_title': "Modifier Rép. légal - Infos payeur : %s" % eleve.NOMPREN,
'url': url,
'representant_cp': '%s | %s' % (eleve.representant_cp, eleve.representant_ville),
'payeur_cp': '%s | %s' % (eleve.payeur_cp, eleve.payeur_ville),
'eleve': eleve,
'code': member.secu,
}