initial upload
This commit is contained in:
446
aem_gestion/views/compta.py
Normal file
446
aem_gestion/views/compta.py
Normal file
@@ -0,0 +1,446 @@
|
||||
# -*- 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),
|
||||
}
|
||||
Reference in New Issue
Block a user