447 lines
15 KiB
Python
447 lines
15 KiB
Python
# -*- 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),
|
|
}
|