286 lines
10 KiB
Python
286 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 datetime import *
|
|
|
|
from ..views.default import *
|
|
from ..models.default import *
|
|
from ..models.devis import *
|
|
|
|
@view_config(route_name='devis_list', renderer='../templates/devis/devis_list.pt', permission='view')
|
|
def devis_list(request):
|
|
|
|
url = request.route_url('devis_list')
|
|
|
|
logged_in = request.authenticated_userid.upper()
|
|
message = ''
|
|
member = get_member_by_id(request, logged_in)
|
|
societe_defaut = member.societe
|
|
societe = societe_defaut
|
|
access_defaut = member.access
|
|
liste=[]
|
|
name = ''
|
|
cb_tous = "non"
|
|
|
|
if 'form.submitted' in request.params:
|
|
name = request.params['name']
|
|
societe = request.params['societe']
|
|
|
|
# lire les devis
|
|
devis = get_devis_byName(request, societe, name)
|
|
if len(devis) == 0:
|
|
message = "Devis non trouvé : %s" % name
|
|
|
|
return {
|
|
'page_title': "Rechercher un devis",
|
|
'url': url,
|
|
'message': message,
|
|
'devis': devis,
|
|
'societe': societe,
|
|
'name': name,
|
|
}
|
|
|
|
@view_config(route_name='devis_create', permission='view')
|
|
def devis_create(request):
|
|
nodossier = request.matchdict['nodossier']
|
|
societe = nodossier[0:2]
|
|
logged_in = request.authenticated_userid.upper()
|
|
|
|
# créer un devis à partir d'un dossier
|
|
no_devis = insert_devis_from_dossier(request, nodossier, logged_in)
|
|
|
|
request.session.flash(u"Le devis %s a été créé avec succès" % no_devis.last_insert_id, 'success')
|
|
return HTTPFound(location=request.route_url("dossier_view", nodossier=nodossier) + '#tab_documents')
|
|
|
|
|
|
|
|
@view_config(route_name='devis_view', renderer='../templates/devis/devis_view.pt', permission='view')
|
|
def devis_view(request):
|
|
nodossier = request.matchdict['nodossier']
|
|
societe = nodossier[0:2]
|
|
url = request.route_url("devis_view", nodossier=nodossier)
|
|
|
|
type_doc = nodossier[3:5]
|
|
if type_doc == 'DE':
|
|
page_title = "Devis no : %s" % (nodossier)
|
|
elif type_doc == 'FA':
|
|
page_title = "Facture no : %s" % (nodossier)
|
|
else:
|
|
page_title = "Proforma no : %s" % (nodossier)
|
|
|
|
dossier = get_devis_by_no(request, nodossier)
|
|
if dossier is None:
|
|
request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger')
|
|
return HTTPFound(location=request.route_url("dossier_lookup"))
|
|
# lire tous les lignes du devis
|
|
details = get_devis_lig_by_no(request, nodossier)
|
|
# select background color according to society
|
|
bg_color = "bg-%s" % societe
|
|
|
|
return {
|
|
'page_title': page_title,
|
|
'nodossier': nodossier,
|
|
'dossier': dossier,
|
|
'details': details,
|
|
'bg_color': bg_color,
|
|
}
|
|
|
|
@view_config(route_name='devis_web', renderer='../templates/devis/devis_web.pt', permission='view')
|
|
def devis_web(request):
|
|
nodossier = request.matchdict['nodossier']
|
|
societe = nodossier[0:2]
|
|
no_id = nodossier[5:]
|
|
url = request.route_url("devis_web", nodossier=nodossier)
|
|
logged_in = request.authenticated_userid.upper()
|
|
|
|
dossier = get_devis_by_no(request, nodossier)
|
|
if dossier is None:
|
|
request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger')
|
|
return HTTPFound(location=request.route_url("dossier_lookup"))
|
|
|
|
# lire tous les lignes du devis
|
|
details = get_devis_lignes_by_no(request, nodossier, '0')
|
|
# select background color according to society
|
|
bg_color = "bg-%s" % societe
|
|
|
|
# -- ajouter une ligne
|
|
if 'form.submited' in request.params:
|
|
type_lig = request.params['type_lig']
|
|
if type_lig == 'ST':
|
|
# ajout d'un SOUS-TOTAL
|
|
new_values = {}
|
|
new_values['type_ligne'] = 'ST'
|
|
new_values['ref'] = 'ST'
|
|
new_values['libelle'] = 'Sous-total'
|
|
new_values['usermaj'] = logged_in
|
|
new_values['societe'] = societe
|
|
new_values['no_id'] = no_id
|
|
new_values['nolig'] = len(details) + 1
|
|
update_devis_ligne(request, nodossier, '0', new_values)
|
|
return HTTPFound(location=url)
|
|
else:
|
|
return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodossier=nodossier, nolig='0'))
|
|
|
|
|
|
return {
|
|
'page_title': "Devis no : %s W" % (nodossier),
|
|
'url': url,
|
|
'nodossier': nodossier,
|
|
'dossier': dossier,
|
|
'details': details,
|
|
'bg_color': bg_color,
|
|
}
|
|
|
|
@view_config(route_name='devis_ligne', renderer='../templates/devis/devis_ligne.pt', permission='view')
|
|
def devis_ligne(request):
|
|
type_ligne = request.matchdict['type_ligne']
|
|
nodossier = request.matchdict['nodossier']
|
|
nolig = request.matchdict['nolig']
|
|
societe = nodossier[0:2]
|
|
no_id = nodossier[5:]
|
|
url = request.route_url("devis_ligne", type_ligne=type_ligne, nodossier=nodossier, nolig=nolig)
|
|
logged_in = request.authenticated_userid.upper()
|
|
message = ''
|
|
|
|
dossier = get_devis_by_no(request, nodossier)
|
|
if dossier is None:
|
|
request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger')
|
|
return HTTPFound(location=request.route_url("dossier_lookup"))
|
|
# lire le nombre total de lignes du devis
|
|
lignes = get_devis_lignes_by_no(request, nodossier, '0')
|
|
nb_lignes = len(lignes)
|
|
|
|
if nolig == '0':
|
|
# nouveau
|
|
ligne = {}
|
|
ligne['type_ligne'] = type_ligne
|
|
ligne['ref'] = ''
|
|
if type_ligne == 'AR':
|
|
ligne['qte'] = 1
|
|
ligne['metrage'] = ''
|
|
ligne['deduction'] = ''
|
|
else:
|
|
ligne['qte'] = 0
|
|
ligne['prixht'] = 0
|
|
ligne['libelle'] = ''
|
|
ligne['usermaj'] = logged_in
|
|
ligne['datemaj'] = datetime.now()
|
|
page_title= 'Nouvelle ligne %s' % type_ligne
|
|
else:
|
|
# lire la ligne du devis
|
|
ligne = get_devis_lignes_by_no(request, nodossier, nolig)
|
|
page_title= "Modification de la ligne %s" % (nolig)
|
|
# import pdb;pdb.set_trace()
|
|
|
|
# -- ajouter une ligne
|
|
if 'form.submited' in request.params:
|
|
if type_ligne == 'TX':
|
|
# ajout d'un TEXTE
|
|
new_values = {}
|
|
for param, db_value in ligne.items():
|
|
if param in request.params and request.params[param] != db_value:
|
|
new_values[param] = request.params[param]
|
|
|
|
new_values['type_ligne'] = type_ligne
|
|
new_values['usermaj'] = logged_in
|
|
new_values['societe'] = societe
|
|
new_values['no_id'] = no_id
|
|
if nolig == '0':
|
|
new_values['nolig'] = nb_lignes + 1
|
|
else:
|
|
new_values['nolig'] = nolig
|
|
update_devis_ligne(request, nodossier, nolig, new_values)
|
|
request.session.flash("La ligne de texte a été mis à jour avec succès.", 'success')
|
|
return HTTPFound(location=request.route_url("devis_web", nodossier=nodossier))
|
|
|
|
elif type_ligne == 'AR':
|
|
# ajout d'un article
|
|
new_values = {}
|
|
for param, db_value in ligne.items():
|
|
if param in request.params and request.params[param] != db_value:
|
|
new_values[param] = request.params[param]
|
|
|
|
# calcul métrage
|
|
metrage = 0
|
|
try:
|
|
metrage = eval(request.params['metrage'])
|
|
except SyntaxError:
|
|
request.session.flash("Erreur de syntaxe dans la formule de calcul", 'danger')
|
|
return HTTPFound(location=url)
|
|
deduc = 0
|
|
try:
|
|
deduc = eval(request.params['deduction'])
|
|
except SyntaxError:
|
|
request.session.flash("Erreur de syntaxe dans la formule de calcul", 'danger')
|
|
return HTTPFound(location=url)
|
|
if deduc < 0 :
|
|
metrage += deduc
|
|
else:
|
|
metrage -= deduc
|
|
new_values['qte'] = metrage
|
|
new_values['type_ligne'] = type_ligne
|
|
new_values['usermaj'] = logged_in
|
|
new_values['societe'] = societe
|
|
new_values['no_id'] = no_id
|
|
if nolig == '0':
|
|
new_values['nolig'] = nb_lignes + 1
|
|
else:
|
|
new_values['nolig'] = nolig
|
|
update_devis_ligne(request, nodossier, nolig, new_values)
|
|
request.session.flash(u"La ligne de devis a été mis à jour avec succès.", 'success')
|
|
return HTTPFound(location=request.route_url("devis_web", nodossier=nodossier))
|
|
|
|
|
|
return {
|
|
'page_title': page_title,
|
|
'url': url,
|
|
'message': message,
|
|
'nodossier': nodossier,
|
|
'nolig': nolig,
|
|
'dossier': dossier,
|
|
'ligne': ligne,
|
|
'type_ligne': type_ligne,
|
|
}
|
|
|
|
@view_config(route_name='devis_preview', renderer='../templates/devis/devis_preview.pt', permission='view')
|
|
def devis_preview(request):
|
|
nodossier = request.matchdict['nodossier']
|
|
societe = nodossier[0:2]
|
|
no_id = nodossier[5:]
|
|
url = request.route_url("devis_preview", nodossier=nodossier)
|
|
logged_in = request.authenticated_userid.upper()
|
|
|
|
# calculer les totaux HT et TTC
|
|
sum_devis_totaux(request, nodossier)
|
|
|
|
dossier = get_devis_by_no(request, nodossier)
|
|
# import pdb;pdb.set_trace()
|
|
if dossier is None:
|
|
request.session.flash(u"Le document no %s est introuvable" % (nodossier), 'danger')
|
|
return HTTPFound(location=request.route_url("dossier_lookup"))
|
|
|
|
# lire tous les lignes du devis
|
|
details = get_devis_lignes_by_no(request, nodossier, '0')
|
|
# select logo according to society
|
|
logo_url = request.static_url('mondumas:static/img/Logo-%s.jpg' % societe)
|
|
|
|
return {
|
|
'page_title': '',
|
|
'url': url,
|
|
'logo_url': logo_url,
|
|
'nodossier': nodossier,
|
|
'dossier': dossier,
|
|
'details': details,
|
|
}
|
|
|