# -*- 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, }