# -*- 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= """
|
CERRA MARIETTON
{0}
{1}
{2} {3}
Tél: {4}
{5}
|
Reçu
|
a reçu de
{6} {7}
{8}
{9} {10}
|
Code éleve : {11}
|
La somme de {12} en {13}
|
|
Catégorie : {14}
|
en reglement de : {15}
|
|
Solde : {16}
|
(montant HT : {17})
|
Lyon, le {18}
Retrouvez votre règlement sur : monespace.marietton.com
Rejoignez nous sur : www.facebook.com/AutoEcoleMarietton
""".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 = """
"""+corps+"""
"""
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, n’hé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,
}