313 lines
10 KiB
Python
313 lines
10 KiB
Python
# -*- coding: utf8 -*-
|
|
from pyramid.response import Response
|
|
from pyramid.renderers import render, get_renderer
|
|
from pyramid.view import (
|
|
view_config,
|
|
forbidden_view_config,
|
|
)
|
|
from pyramid.httpexceptions import (
|
|
HTTPFound,
|
|
HTTPNotFound,
|
|
HTTPForbidden,
|
|
)
|
|
|
|
from pyramid_mailer.message import Message, Attachment
|
|
from datetime import *
|
|
import hashlib
|
|
|
|
from sqlalchemy.exc import DBAPIError
|
|
from ..security import groupfinder
|
|
|
|
import json
|
|
|
|
from ..models.parametres import *
|
|
from ..models.default import *
|
|
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()
|
|
|
|
return {
|
|
'page_title': u"Paramètres",
|
|
'logged_in': logged_in,
|
|
}
|
|
|
|
@view_config(route_name='users_list', renderer='../templates/parametres/users_list.pt', permission='manage')
|
|
def users_list(request):
|
|
# lire les utilisateurs
|
|
items = get_member_by_id(request, '0')
|
|
|
|
# construire la liste
|
|
liste=[]
|
|
for item in items:
|
|
if item.actif == 0:
|
|
etat = 'Inactif'
|
|
else:
|
|
etat = ''
|
|
|
|
if item.access == 0:
|
|
role = 'Commercial'
|
|
elif item.access == 8:
|
|
role = 'Compta'
|
|
elif item.access == 9:
|
|
role = 'Admin'
|
|
else:
|
|
role = 'Gestion'
|
|
|
|
d = (item.CD_UTI, item.NOM, item.email, item.agenda, role, etat)
|
|
liste.append(d)
|
|
|
|
return {
|
|
'page_title': u'Liste des utilisateurs',
|
|
'dt_data': json.dumps(liste),
|
|
}
|
|
|
|
@view_config(route_name='users_ua', renderer='../templates/parametres/users_ua.pt', permission='manage')
|
|
def users_ua(request):
|
|
# lire les utilisateurs
|
|
items = get_member_by_id(request, '0')
|
|
|
|
# construire la liste
|
|
liste=[]
|
|
for item in items:
|
|
# utilisateur a au moins une connexion ?
|
|
if item.dern_cnx_le:
|
|
der_cnx_le = item.dern_cnx_le.strftime('%d/%m/%Y - %H:%M')
|
|
|
|
d = (der_cnx_le, item.CD_UTI, item.NOM, item.ua_string)
|
|
liste.append(d)
|
|
|
|
return {
|
|
'page_title': u'Liste des connexions',
|
|
'dt_data': json.dumps(liste),
|
|
}
|
|
|
|
@view_config(route_name='connecter_a', permission='manage')
|
|
def connecter_a(request):
|
|
# paramètre fourni ?
|
|
login = request.matchdict["login"]
|
|
if len(login) > 0:
|
|
request.session.invalidate()
|
|
headers = forget(request)
|
|
headers = remember(request, login)
|
|
return HTTPFound(location="/", headers=headers)
|
|
else:
|
|
return HTTPFound(location="/")
|
|
|
|
|
|
|
|
@view_config(route_name='user_edit', renderer='../templates/parametres/user_edit.pt', permission='manage')
|
|
def user_edit(request):
|
|
cd_uti = request.matchdict['cd_uti']
|
|
url = request.route_url('user_edit', cd_uti=cd_uti)
|
|
message = ''
|
|
access = ["0 | Production", "5 | Gestion", u"8 | Comptabilité", "9 | Administration"]
|
|
|
|
if cd_uti == '0':
|
|
# nouveau
|
|
individu = {}
|
|
individu['CD_UTI'] = '0'
|
|
individu['NOM'] = ''
|
|
individu['email'] = ''
|
|
individu['access'] = '0 | Production'
|
|
individu['actif'] = 1
|
|
individu['agenda'] = 0
|
|
page_title= 'Nouvelle Fiche'
|
|
else:
|
|
# lire la fiche de l'individu
|
|
individu = get_member_by_id(request, cd_uti)
|
|
if not individu:
|
|
request.session.flash(u"Utilisateur non trouvé : %s" % cd_uti, 'warning')
|
|
return HTTPFound(location=request.route_url('users_list'))
|
|
page_title= u"Fiche de %s" %(individu.NOM)
|
|
|
|
if 'form.submitted' in request.params:
|
|
new_values = {}
|
|
for param, db_value in individu.items():
|
|
if param in request.params and request.params[param] != db_value:
|
|
new_values[param] = request.params[param]
|
|
|
|
# actif coché ?
|
|
if 'actif' in request.params:
|
|
new_values['actif'] = 1
|
|
else:
|
|
new_values['actif'] = 0
|
|
# agenda coché ?
|
|
if 'agenda' in request.params:
|
|
new_values['agenda'] = 1
|
|
else:
|
|
new_values['agenda'] = 0
|
|
|
|
if new_values:
|
|
update_membre(request, cd_uti, new_values)
|
|
request.session.flash(u"La fiche a été mise à jour avec succès.", 'success')
|
|
return HTTPFound(location=request.route_url('users_list'))
|
|
|
|
if 'form.deleted' in request.params:
|
|
delete_membre(request, cd_uti)
|
|
request.session.flash(u"La fiche a été supprimée avec succès.", 'success')
|
|
return HTTPFound(location=request.route_url('users_list'))
|
|
|
|
return {
|
|
'page_title': page_title,
|
|
'url': url,
|
|
'individu': individu,
|
|
'access': access,
|
|
'message': message,
|
|
}
|
|
|
|
@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)
|
|
|
|
return {
|
|
'page_title': u"Tableau de bord",
|
|
'log_nuit': log_nuit,
|
|
}
|
|
|
|
@view_config(route_name='last_emailing', renderer='../templates/parametres/last_emailing.pt', permission='manage')
|
|
def last_emailing(request):
|
|
|
|
items = get_last_emailing(request)
|
|
|
|
# construire la liste
|
|
liste=[]
|
|
for item in items:
|
|
if item.rdv_date:
|
|
resa_date = item.rdv_date.strftime('%d-%m-%Y')
|
|
else:
|
|
resa_date = ""
|
|
|
|
if item.envoye_le:
|
|
envoye_le = item.envoye_le.strftime('%d-%m-%Y %H:%M')
|
|
else:
|
|
envoye_le = ""
|
|
|
|
d = (resa_date, '%s-%s' % (item.societe, item.nochantier), item.nompren, item.email, item.rdv_statut, envoye_le, item.cree_le.strftime('%d-%m-%Y %H:%M'))
|
|
liste.append(d)
|
|
|
|
return {
|
|
'page_title': u'Liste des derniers emailing',
|
|
'dt_data': json.dumps(liste),
|
|
}
|
|
|
|
@view_config(route_name='orphans_de', renderer='../templates/parametres/orphans_de.pt', permission='manage')
|
|
def orphans_de(request):
|
|
|
|
societe = request.matchdict['societe']
|
|
url = request.route_url('orphans_de', societe=societe)
|
|
message = u''
|
|
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)
|
|
|
|
if 'form.nochantier' in request.params:
|
|
message = ''
|
|
nochantier = request.params['nochantier']
|
|
|
|
# oui, NestedMultiDict([('form.submitted', u''), ('id0', u'271246'), ('id1', u'370929')])
|
|
for param in request.params:
|
|
if param[:2] == 'id':
|
|
update_nochantier(request, societe, request.params[param], int(nochantier))
|
|
message = u"Le numéro de chantier est mis à jour avec succès"
|
|
|
|
# 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)
|
|
liste.append(d)
|
|
|
|
if len(nochantiers) == 0:
|
|
nochantiers.append(1)
|
|
|
|
return {
|
|
'page_title': u"DEVIS orphelins",
|
|
'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_list', renderer='../templates/parametres/rdf_causes_list.pt', permission='manage')
|
|
def rdf_causes_list(request):
|
|
|
|
# lire les causes des RDF
|
|
items = get_rdf_causes_by_id(request, '0')
|
|
|
|
# construire la liste
|
|
liste=[]
|
|
for item in items:
|
|
modif_le = item.modif_le.strftime('%d/%m/%Y - %H:%M')
|
|
d = (item.code, item.libelle, modif_le)
|
|
liste.append(d)
|
|
|
|
return {
|
|
'page_title': u'RDF : Liste des causes de fuite',
|
|
'dt_data': json.dumps(liste),
|
|
}
|
|
|
|
@view_config(route_name='rdf_cause_edit', renderer='../templates/parametres/rdf_cause_edit.pt', permission='view')
|
|
def rdf_cause_edit(request):
|
|
|
|
logged_in = request.authenticated_userid
|
|
old_code = request.matchdict['code']
|
|
url = request.route_url("rdf_cause_edit", code=old_code)
|
|
|
|
message = ''
|
|
if old_code == '0':
|
|
# nouveau
|
|
cause = {}
|
|
cause['code'] = ''
|
|
cause['libelle'] = ''
|
|
cause['modif_le'] = datetime.now()
|
|
page_title= 'Nouvelle cause de fuite'
|
|
else:
|
|
page_title= "Modification de %s" % (old_code)
|
|
# lire la cause
|
|
cause = get_rdf_causes_by_id(request, old_code)
|
|
if not cause:
|
|
request.session.flash(u"Cause non trouvée : %s" % old_code, 'warning')
|
|
return HTTPFound(location=request.route_url('rdf_causes_list'))
|
|
|
|
if 'form.submitted' in request.params:
|
|
code = request.params['code']
|
|
libelle = request.params['libelle']
|
|
|
|
update_rdf_cause(request, old_code, code, libelle)
|
|
request.session.flash(u"La cause a été mise à jour avec succès.", 'success')
|
|
return HTTPFound(location=request.route_url('rdf_causes_list'))
|
|
|
|
if 'form.deleted' in request.params:
|
|
delete_rdf_cause(request, old_code)
|
|
request.session.flash(u"La cause a été supprimée avec succès.", 'success')
|
|
return HTTPFound(location=request.route_url('rdf_causes_list'))
|
|
|
|
return {
|
|
'page_title': page_title,
|
|
'url': url,
|
|
'old_code': old_code,
|
|
'cause': cause,
|
|
'message': message,
|
|
}
|