stats
This commit is contained in:
@@ -27,7 +27,7 @@ from ..views.default import *
|
||||
|
||||
@view_config(route_name='parametres', renderer='../templates/parametres/parametres.pt', permission='manage')
|
||||
def parametres(request):
|
||||
logged_in = request.authenticated_userid.lower()
|
||||
logged_in = request.authenticated_userid.upper()
|
||||
|
||||
return {
|
||||
'page_title': "Paramètres",
|
||||
@@ -168,7 +168,7 @@ def user_edit(request):
|
||||
|
||||
@view_config(route_name='dashboard', renderer='../templates/parametres/dashboard.pt', permission='manage')
|
||||
def dashboard(request):
|
||||
|
||||
|
||||
# lire le log de nuit
|
||||
log_nuit = get_log_nuit(request)
|
||||
|
||||
@@ -216,60 +216,36 @@ def rappels_rdv(request):
|
||||
'nbRappels': nbRappels,
|
||||
}
|
||||
|
||||
@view_config(route_name='orphans_de', renderer='../templates/parametres/orphans_de.pt', permission='manage')
|
||||
def orphans_de(request):
|
||||
@view_config(route_name='stats_dd', renderer='../templates/parametres/stats_dd.pt', permission='view')
|
||||
def stats_dd(request):
|
||||
|
||||
societe = request.matchdict['societe']
|
||||
url = request.route_url('orphans_de', societe=societe)
|
||||
url = request.route_url('stats_dd', societe=societe)
|
||||
message = ''
|
||||
societes = ['PE','ME','PL','PO','CD']
|
||||
nochantier = '0'
|
||||
|
||||
# prendre en compte les paramètres de saisie
|
||||
if 'societe' in request.params:
|
||||
societe = request.params["societe"]
|
||||
url = request.route_url('orphans_de', societe=societe)
|
||||
url = request.route_url('stats_dd', societe=societe)
|
||||
|
||||
if 'form.nochantier' in request.params:
|
||||
message = ''
|
||||
nochantier = request.params['nochantier']
|
||||
|
||||
# oui, NestedMultiDict([('form.submitted', ''), ('id0', '271246'), ('id1', '370929')])
|
||||
for param in request.params:
|
||||
if param[:2] == 'id':
|
||||
update_nochantier(request, societe, request.params[param], int(nochantier))
|
||||
message = "Le numéro de chantier est mis à jour avec succès"
|
||||
# lire les stats globales des demandes de devis
|
||||
stats_dd = get_stats_dd(request, societe)
|
||||
|
||||
# lire le premier devis orphelin
|
||||
devis = get_orphans_DE(request, societe)
|
||||
|
||||
# lire tous les dossiers de ce chantier
|
||||
dossiers = get_dossiers_byChantier(request, societe, '%s;%s;%s' % (devis.C_NOM, devis.C_ADR, devis.C_VILLE))
|
||||
liste=[]
|
||||
nochantiers=[]
|
||||
# construire la liste
|
||||
for item in dossiers:
|
||||
dossier_id = '%s-%s' % (item.TYPE, item.numero)
|
||||
if item.nochantier != 0:
|
||||
nochantiers.append(item.nochantier)
|
||||
nochantier = item.nochantier
|
||||
d = (dossier_id, dossier_id, item.date.strftime('%d-%m-%Y'), item.nomcli, item.chantier, to_euro(item.montant),
|
||||
item.nosin, item.nochantier)
|
||||
for item in stats_dd:
|
||||
d = (str(item.Annee), str(item.Created), str(item.Devis), str(item.Commande), str(item.Facture), str(item.ReglePart),
|
||||
str(item.Regle), str(item.Total))
|
||||
liste.append(d)
|
||||
|
||||
if len(nochantiers) == 0:
|
||||
nochantiers.append(1)
|
||||
|
||||
|
||||
return {
|
||||
'page_title': "DEVIS orphelins",
|
||||
'page_title': "Stats : Demandes de devis",
|
||||
'url': url,
|
||||
'message': message,
|
||||
'devis': devis,
|
||||
'dt_data': json.dumps(liste),
|
||||
'societes': societes,
|
||||
'societe': societe,
|
||||
'nochantiers': nochantiers,
|
||||
'nochantier': nochantier,
|
||||
}
|
||||
|
||||
@view_config(route_name='rdf_causes', renderer='../templates/parametres/rdf_causes.pt', permission='manage')
|
||||
|
||||
@@ -31,8 +31,9 @@ def batch_nuit(request):
|
||||
# ----- effacer le log
|
||||
truncate_log(request)
|
||||
|
||||
# ----- PURGE des dosiers obsolètes
|
||||
# todo
|
||||
# ----- PURGE des données obsolètes
|
||||
delete_orphan_attached_files(request)
|
||||
|
||||
# ----- RAPPELS DES RENDEZ-VOUS
|
||||
update_rappels(request)
|
||||
# attendre 5 secondes
|
||||
@@ -55,14 +56,12 @@ def notifier_rappels(request):
|
||||
rappels = get_email_rappels(request)
|
||||
|
||||
nbLus = 0
|
||||
nbEmailVide = 0
|
||||
nbEnvoyes = 0
|
||||
|
||||
for item in rappels:
|
||||
nbLus += 1
|
||||
error = 0
|
||||
if len(item.c_email) == 0 :
|
||||
nbEmailVide += 1
|
||||
insert_log(request, 'RAPPELS', '--> email vide : %s-%s - %s %s' % (item.societe, item.nochantier, item.c_qualite, item.c_nom))
|
||||
else:
|
||||
# RDV ayant une heure
|
||||
@@ -153,6 +152,95 @@ def send_mail(request, expediteur, destinataires, objet, corps):
|
||||
else:
|
||||
msg = e
|
||||
# logguer l'erreur
|
||||
insert_log(request, 'RAPPELS', "- MAILER ERROR : %s TO %s - %s" % (expediteur, destinataires, msg))
|
||||
insert_log(request, 'RAPPELS', "- MAILER ERROR : %s, TO : %s" % (msg, destinataires))
|
||||
|
||||
return len(msg)
|
||||
return len(msg)
|
||||
|
||||
@view_config(route_name='batch_test')
|
||||
def batch_test(request):
|
||||
"""
|
||||
Traitement est lancé pour tester des traitements batch
|
||||
URL = /batch_test/Sansa5tark
|
||||
Par sécurité, ce view ne peut être appelé qu'avec un paramètre secret 'Sansa5tark'
|
||||
|
||||
"""
|
||||
# contrôle : paramètre correct ? non, terminer
|
||||
par = request.matchdict['param']
|
||||
if par != 'Sansa5tark':
|
||||
return Response('Erreur : paramètre incorrect')
|
||||
|
||||
update_chantiers_status(request)
|
||||
|
||||
return Response('Batch nuit terminé OK')
|
||||
|
||||
def delete_orphan_attached_files(request):
|
||||
"""
|
||||
Ce traitement parcourt le répertoire DOCS_ATTACHES de chacune des 5 sociétés
|
||||
et controle que le dossier sur le filesystem existe dans la BD.
|
||||
S'il n'existe plus, on supprime les fichiers du dossier
|
||||
"""
|
||||
import os
|
||||
import shutil
|
||||
|
||||
societes = ['CD', 'ME', 'PE', 'PL', 'PO']
|
||||
for ste in societes:
|
||||
# Scan the directiory of attached files
|
||||
# and get an iterator of os.DirEntry objets
|
||||
path = request.registry.settings['mondumas.devfac_dir'] + '/' + ste
|
||||
obj = os.scandir(path)
|
||||
|
||||
# List all diretories in the specified path
|
||||
nbLus = 0
|
||||
nbSupp = 0
|
||||
for entry in obj :
|
||||
if entry.is_dir():
|
||||
nbLus += 1
|
||||
# le chantier existe ?
|
||||
if chantierExiste(request,ste, entry.name) == False :
|
||||
# non, supprimer les docs attaches
|
||||
shutil.rmtree(path+ '/' + entry.name)
|
||||
nbSupp += 1
|
||||
|
||||
if nbLus > 0:
|
||||
insert_log(request, 'DELETE', '%s : %d Répertoires lues, %d supprimées' % (ste, nbLus, nbSupp))
|
||||
|
||||
|
||||
def update_chantiers_status(request):
|
||||
"""
|
||||
Ce traitement parcourt tous les chantiers de chacune des 5 sociétés
|
||||
pour mettre à jour son STATUS selon l'avancement du chantier.
|
||||
"""
|
||||
|
||||
societes = ['PE','ME','PL','PO','CD']
|
||||
|
||||
for ste in societes:
|
||||
# lire tous les chantiers
|
||||
chantiers = get_all_chantiers(request, ste)
|
||||
for item in chantiers:
|
||||
# si le chantier est annulé, ne rien faire
|
||||
if item.STATUS != 'Annulé':
|
||||
status = ''
|
||||
# lire la dernière facture du chantier
|
||||
facture = get_last_facture(request, ste, item.NO_ID)
|
||||
if facture :
|
||||
# remonte le status de la facture ('','Régl part.', 'Réglée')
|
||||
status = facture.STATUS
|
||||
if status == '':
|
||||
status = 'Facturé'
|
||||
else:
|
||||
# lire le dernier devis du chantier ('','Commandé, 'Facturé')
|
||||
devis = get_last_devis(request, ste, item.NO_ID)
|
||||
if devis:
|
||||
# remonte le status de la facture
|
||||
status = devis.STATUS
|
||||
if status == '' or status == '0':
|
||||
status = 'Devis'
|
||||
else:
|
||||
if item.HUMIDITE != 0:
|
||||
status = 'Humidité'
|
||||
|
||||
# maj le status du chantier
|
||||
update_chantier_status(request, ste, item.NO_ID, status)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user