1472 lines
58 KiB
Python
1472 lines
58 KiB
Python
# -*- 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 : {11}</span>
|
||
</td>
|
||
<td >
|
||
<span>La somme de <span style="font-weight:bold" >{12}</span> en {13}</span>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td >
|
||
<span>Catégorie : {14}</span>
|
||
</td>
|
||
<td >
|
||
<span>en reglement de : {15}</span>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td >
|
||
<span>Solde : <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}" /> <span> 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, 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,
|
||
}
|