# -*- coding: utf8 -*- from pyramid.view import ( view_config, ) from pyramid.httpexceptions import ( HTTPFound, ) from datetime import datetime as dt, date from dateutil.relativedelta import relativedelta import json from ..models.compta import * from ..models.default import ( get_users_by_code, ) from ..models.eleves import get_permis from ..views.default import ( to_date, to_euro, to_euroz, to_time, to_int, to_percent, ) @view_config(route_name='export_cpta', renderer='../templates/compta/export_cpta.pt', permission='manage') def export_cpta(request): logged_in = request.authenticated_userid.lower() url = request.route_url('export_cpta') message = '' brouillard = [] total_debit = 0 total_credit = 0 NOW = dt.now() if 'etape' in request.params: etape = '2' etape = request.params['etape'] # récuprérer la date de fin date_fin = dt.strptime(request.params['date_fin'], '%d-%m-%Y') else: etape = '1' date_fin = NOW.date() nom_fichier = "C-AEM-%s-%s.PNM" % (date_fin.strftime("%y%m%d"), NOW.strftime("%H%M")) if 'form.extraction' in request.params: # générer le brouillard jusqu'à la date de fin message = generer_brouillard(request, logged_in, date_fin) if len(message) == 0: etape = '2' # si extraction OK, afficher le brouillard brouillard = get_brouillard(request, logged_in) for item in brouillard: if item.SENS == 'C': total_credit += float(item.MONTANT) else: total_debit += float(item.MONTANT) else: # afficher message erreur request.session.flash(message, 'danger') if 'form.generer' in request.params: import os # créer le répertoire /JUSTIFS/EXPORT path = request.registry.settings['aem_gestion.justifs_dir'] + '/EXPORT/' os.makedirs(path, exist_ok=True) path_fichier = path + nom_fichier # générer le fichier PNM dans le répertoire EXPORT message = generer_export(request, logged_in, path_fichier) # MAJ les comptes clients exportés dans la période update_cpt_export(request, date_fin) request.session.flash("La génération du fichier d'export " + nom_fichier + " est terminée.", 'success') etape = '3' return { 'page_title': "Exportation des écritures", 'url': url, 'message': message, 'etape' : etape, 'date_fin': date_fin, 'nom_fichier': nom_fichier, 'brouillard': brouillard, 'total_credit': to_euro(total_credit), 'total_debit': to_euro(total_debit), } @view_config(route_name='jnl_caisse', renderer='../templates/compta/jnl_caisse.pt', permission='view') def jnl_caisse(request): logged_in = request.authenticated_userid url = request.route_url('jnl_caisse') message = '' member = get_users_by_code(request, logged_in) if member.secu < 6 : request.session.flash("Vous n'avez le niveau d'accès requis pour ce traitement", 'error') return HTTPFound(location=request.route_url('home')) date_edition = dt.now().date() agence = member.agence if 'form.submitted' in request.params: # récuprérer la date d'édition date_edition = request.params['date_edition'] return HTTPFound(location=request.route_url('prt_caisse', date_edition=date_edition)) return { 'page_title': 'Agence %s : Journal de caisse du %s' % (agence, date_edition.strftime('%d-%m-%Y')), 'url': url, 'message': message, 'date_edition': date_edition, } @view_config(route_name='prt_caisse', renderer='../templates/compta/prt_caisse.pt', permission='view') def prt_caisse(request): date_edition = dt.strptime(request.matchdict['date_edition'], '%d-%m-%Y') logged_in = request.authenticated_userid member = get_users_by_code(request, logged_in) if member.secu <= 6 : return HTTPFound(location=request.route_url('home')) agence = member.agence # lire la caisse du jour items = get_caisse(request, agence, date_edition) # construire la liste liste=[] # lire la caisse du jour items = get_caisse(request, agence, date_edition) totalMode = 0.0 totalGeneral = 0.0 groupe = '' for item in items: # rupture sur mode_regl if groupe != item.lib4 : if groupe != '': # ajouter une ligne de sous-total d = ('', '', '', '*** TOTAL pour ' + groupe, to_euro(totalMode), groupe, '', '') liste.append(d) totalGeneral += totalMode totalMode = 0.0 cree_le = item.cree_le.strftime('%d-%m-%y') modif_le = item.modif_le.strftime('%d-%m') d = (item.CD_CLI, item.NOM, item.permis_demande, item.INTITULE, to_euro(item.CREDIT), item.lib4, item.CD_UTI, cree_le + ', ' + modif_le) liste.append(d) totalMode += float(item.CREDIT) groupe = item.lib4 # ajouter une ligne de sous-total d = ('', '', '', '*** TOTAL pour ' + groupe, to_euro(totalMode), groupe, '', '') liste.append(d) # ajouter ligne Total général totalGeneral += totalMode d = ('', '', '', '*** TOTAL AGENCE ' + str(agence), to_euro(totalGeneral), '', '', '') liste.append(d) return { 'page_title': 'Agence %s : Journal de caisse du %s' % (agence, date_edition.strftime('%d-%m-%Y')), 'date_edition': date_edition, 'dt_data': json.dumps(liste), 'agence': agence, } @view_config(route_name='solder_contrats', renderer='../templates/compta/solder_contrats.pt', permission='manage') def solder_contrats(request): logged_in = request.authenticated_userid.lower() url = request.route_url('solder_contrats') message = '' if 'form.solder_auto' in request.params: # Solder les comptes clients result = update_contrats_auto(request, 6, logged_in) request.session.flash(str(result.NB) + " contrats AUTO ont été soldés !", 'success') if 'form.solder_moto' in request.params: # Solder les comptes clients result = update_contrats_auto(request, 6, logged_in) request.session.flash(str(result.NB) + " contrats MOTO ont été soldés !", 'success') return { 'page_title': "Solder les contrats échus", 'url': url, 'message': message, } @view_config(route_name='balance_clients', renderer='../templates/compta/balance_clients.pt', permission='manage') def balance_clients(request): logged_in = request.authenticated_userid.lower() url = request.route_url('balance_clients') message = '' TODAY = dt.now().date() permis = get_permis(request) cat = 'B' # date début = 01/01 de l'année date_debut = date(TODAY.year, 1, 1) date_fin = date(TODAY.year, 12, 31) if 'form.submitted' in request.params: cat = request.params['cat'] # récuprérer la date de debut date_debut = dt.strptime(request.params['date_debut'], '%d-%m-%Y') # récuprérer la date de fin date_fin = dt.strptime(request.params['date_fin'], '%d-%m-%Y') # "La date de fin doit être supérieure à la date début" if date_debut > date_fin : message("La date de fin doit être supérieure à la date début") else: # générerles écritures de balance generer_balance(request, logged_in, cat, date_debut, date_fin) request.session.flash("La génération de la balance est terminée !", 'success') if 'form.printed' in request.params: return HTTPFound(location=request.route_url('balance_print')) # dates de début et fin de la génération en cours balance_debut, balance_fin, balance_criteres = get_dates_balance(request) if balance_debut: generer_debut = balance_debut.strftime('%d-%m-%Y %H:%M') else: generer_debut = "Pas de génération en cours" if balance_fin: generer_fin = balance_fin.strftime('%d-%m-%Y %H:%M') else: generer_fin = "Génération non terminée..." return { 'page_title': "Balance CLIENTS", 'url': url, 'message': message, 'date_debut': date_debut, 'date_fin': date_fin, 'generer_debut': generer_debut, 'generer_fin' : generer_fin, 'balance_fin': balance_fin, 'balance_criteres': balance_criteres, 'permis': permis, 'cat': cat, } @view_config(route_name='balance_print', renderer='../templates/compta/balance_print.pt', permission='manage') def balance_print(request): logged_in = request.authenticated_userid.lower() TODAY = dt.now().date() # construire la liste liste=[] # lire la balance générée items = get_balance(request, logged_in) # dates de début et fin de la génération en cours balance_debut, balance_fin, criteres = get_dates_balance(request) if balance_fin == None: return HTTPFound(location=request.route_url('balance_clients')) # total agence agence = 0 ta_solde = 0.0 ta_mtval = 0.0 ta_credit = 0.0 ta_solde_c = 0.0 ta_solde_d = 0.0 # total générale tl_solde = 0.0 tl_mtval = 0.0 tl_credit = 0.0 tl_solde_c = 0.0 tl_solde_d = 0.0 for item in items: # rupture sur mode_regl if agence != item.AGENCE : if agence != 0: # ajouter une ligne de sous-total d = ('', '*** TOTAL Agence ' + str(agence), '', to_euro(ta_solde), to_euro(ta_mtval), to_euro(ta_credit), to_euro(ta_solde_d), to_euro(ta_solde_c), to_euro(ta_solde_c - ta_solde_d)) liste.append(d) tl_solde += ta_solde tl_mtval += ta_mtval tl_credit += ta_credit tl_solde_c += ta_solde_c tl_solde_d += ta_solde_d ta_solde = 0.0 ta_mtval = 0.0 ta_credit = 0.0 ta_solde_c = 0.0 ta_solde_d = 0.0 agence = item.AGENCE solde = float(item.Solde + item.CREDIT - item.MTVAL) if solde < 0 : solde_c = 0 solde_d = solde * -1 else : solde_c = solde solde_d = 0 d = (item.CD_CLI, item.INTITULE, item.FORMULE, to_euro(item.Solde), to_euro(item.MTVAL), to_euro(item.CREDIT), to_euro(solde_d), to_euro(solde_c), '') liste.append(d) ta_solde += float(item.Solde) ta_mtval += float(item.MTVAL) ta_credit += float(item.CREDIT) ta_solde_c += solde_c ta_solde_d += solde_d # ajouter dernière ligne de sous-total d = ('', '*** TOTAL Agence ' + str(agence), '', to_euro(ta_solde), to_euro(ta_mtval), to_euro(ta_credit), to_euro(ta_solde_d), to_euro(ta_solde_c), to_euro(ta_solde_c - ta_solde_d)) liste.append(d) # ajouter ligne Total général tl_solde += ta_solde tl_mtval += ta_mtval tl_credit += ta_credit tl_solde_c += ta_solde_c tl_solde_d += ta_solde_d d = ('', '*** TOTAL SOCIETE', '', to_euro(tl_solde), to_euro(tl_mtval), to_euro(tl_credit), to_euro(tl_solde_d), to_euro(tl_solde_c), to_euro(tl_solde_c - tl_solde_d)) liste.append(d) return { 'page_title': "Balance CLIENTS " + criteres, 'TODAY': TODAY, 'dt_data': json.dumps(liste), } @view_config(route_name='recap_moniteur', renderer='../templates/compta/recap_moniteur.pt', permission='manage') def recap_moniteur(request): logged_in = request.authenticated_userid.lower() url = request.route_url('recap_moniteur') message = '' TODAY = dt.now().date() # date début = 01 du mois date_debut = date(TODAY.year, TODAY.month, 1) date_fin = date_debut + relativedelta(day=31) # lire les moniteurs moniteurs = get_moniteurs_byCode(request) cd_mon1 = moniteurs[0].CD_MON cd_mon2 = moniteurs[len(moniteurs) - 1].CD_MON if 'form.submitted' in request.params: cd_mon1 = request.params['cd_mon1'] cd_mon2 = request.params['cd_mon2'] # récuprérer la date de debut date_debut = dt.strptime(request.params['date_debut'], '%d-%m-%Y') # récuprérer la date de fin date_fin = dt.strptime(request.params['date_fin'], '%d-%m-%Y') # "La date de fin doit être supérieure à la date début" if date_debut > date_fin : message("La date de fin doit être supérieure à la date début") else: return HTTPFound(location=request.route_url('recap_print', cd_mon1=cd_mon1, cd_mon2=cd_mon2, date1=date_debut.date(), date2=date_fin.date())) return { 'page_title': "Récap des activités Moniteurs", 'url': url, 'message': message, 'date_debut': date_debut, 'date_fin': date_fin, 'moniteurs': moniteurs, 'cd_mon1': cd_mon1, 'cd_mon2': cd_mon2, } @view_config(route_name='recap_print', renderer='../templates/compta/recap_print.pt', permission='manage') def recap_print(request): cd_mon1 = request.matchdict['cd_mon1'] cd_mon2 = request.matchdict['cd_mon2'] date1 = request.matchdict['date1'] date2 = request.matchdict['date2'] d1 = dt.strptime(date1, '%Y-%m-%d') d2 = dt.strptime(date2, '%Y-%m-%d') periode = 'du %s au %s' % (d1.strftime('%d-%m-%Y'), d2.strftime('%d-%m-%Y')) TODAY = dt.now().date() # lire le recap des activités des moniteurs # rupture sur CD_MON / REF / STATUT items = get_recap(request, cd_mon1, cd_mon2, date1, date2) # total moniteur nom = '' tm_heures = 0 # construire la liste liste=[] for item in items: # rupture sur NOM if nom != item.NOM : if nom != '': # ajouter une ligne de total Moniteur d = (nom,'','*** TOTAL', nom + ' - ' + cd_mon, str(tm_heures) + ' h') liste.append(d) tm_heures = 0 if item.STATUT == 15: statut = '(%s)' % item.STATUT qte = '(%s)' % item.SUM_QTE else: statut = str(item.STATUT) qte = str(item.SUM_QTE) d = (item.NOM, statut, item.REF, item.INTITULE, qte) liste.append(d) # cumuler les heures tm_heures += item.SUM_QTE nom = item.NOM cd_mon = item.CD_MON # ajouter une ligne de total Moniteur d = (nom,'','*** TOTAL', nom + ' - ' + cd_mon, str(tm_heures) + ' h') liste.append(d) return { 'page_title': "Récap des activités Moniteurs", 'periode': periode, 'TODAY': TODAY, 'dt_data': json.dumps(liste), }