début ajout statut clôture
This commit is contained in:
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"html.validate.scripts": false
|
"html.validate.scripts": false,
|
||||||
"editor.minimap.enabled": false
|
"editor.minimap.enabled": false,
|
||||||
|
"python.pythonPath": "C:\\Users\\Thien-An\\AppData\\Local\\Programs\\Python\\Python37\\python.exe"
|
||||||
}
|
}
|
||||||
@@ -19,7 +19,7 @@ pyramid.includes =
|
|||||||
pyramid_tm
|
pyramid_tm
|
||||||
|
|
||||||
|
|
||||||
sqlalchemy.url = mysql://root:superbionicle@localhost/bddevfac?charset=utf8
|
sqlalchemy.url = mysql://phuoc:phuoc!@192.168.1.17/bddevfac?charset=utf8
|
||||||
# sqlalchemy.url = mysql://phuoc:phuoc!@192.168.0.31/bddevfac?charset=utf8
|
# sqlalchemy.url = mysql://phuoc:phuoc!@192.168.0.31/bddevfac?charset=utf8
|
||||||
|
|
||||||
mondumas.admin_email = cao.thien-phuoc@orange.fr
|
mondumas.admin_email = cao.thien-phuoc@orange.fr
|
||||||
|
|||||||
@@ -329,6 +329,20 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<p class="text-center"><b>Voulez-vous clôturer le dossier ?</b></p>
|
<p class="text-center"><b>Voulez-vous clôturer le dossier ?</b></p>
|
||||||
</div>
|
</div>
|
||||||
|
<label class="control-label col-xs-4">Sélectionner le type de clôture :</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<label class="radio"><input type="radio" name="type_act" value="annulé" checked>Annulé</label>
|
||||||
|
<label class="radio"><input type="radio" name="type_act" value="refusé">Refusé</label>
|
||||||
|
<label class="radio"><input type="radio" name="type_act" value="en attente">En attente</label>
|
||||||
|
</div>
|
||||||
|
<label class="control-label col-xs-4">Motif :</label>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input class="form-control" type="text" id="motif" name="motif" value=""
|
||||||
|
placeholder="65 caractères maximum"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="65"
|
||||||
|
data-fv-stringlength-message="65 caractères maximum"/>
|
||||||
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
|
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
|
||||||
<button type="submit" class="btn btn-warning" name="form.close">Clôturer</button>
|
<button type="submit" class="btn btn-warning" name="form.close">Clôturer</button>
|
||||||
|
|||||||
@@ -1,372 +1,372 @@
|
|||||||
# -*- coding: utf8 -*-
|
# -*- coding: utf8 -*-
|
||||||
from pyramid.response import Response
|
from pyramid.response import Response
|
||||||
from pyramid.renderers import render, get_renderer
|
from pyramid.renderers import render, get_renderer
|
||||||
from pyramid.view import (
|
from pyramid.view import (
|
||||||
view_config,
|
view_config,
|
||||||
forbidden_view_config,
|
forbidden_view_config,
|
||||||
)
|
)
|
||||||
from pyramid.httpexceptions import (
|
from pyramid.httpexceptions import (
|
||||||
HTTPFound,
|
HTTPFound,
|
||||||
HTTPNotFound,
|
HTTPNotFound,
|
||||||
HTTPForbidden,
|
HTTPForbidden,
|
||||||
)
|
)
|
||||||
|
|
||||||
from datetime import *
|
from datetime import *
|
||||||
import pdfkit
|
import pdfkit
|
||||||
|
|
||||||
from ..views.default import *
|
from ..views.default import *
|
||||||
from ..models.default import *
|
from ..models.default import *
|
||||||
from ..models.dossier import *
|
from ..models.dossier import *
|
||||||
from ..models.devis import *
|
from ..models.devis import *
|
||||||
|
|
||||||
@view_config(route_name='devis_list', renderer='../templates/devis/devis_list.pt', permission='view')
|
@view_config(route_name='devis_list', renderer='../templates/devis/devis_list.pt', permission='view')
|
||||||
def devis_list(request):
|
def devis_list(request):
|
||||||
|
|
||||||
url = request.route_url('devis_list')
|
url = request.route_url('devis_list')
|
||||||
|
|
||||||
logged_in = request.authenticated_userid.upper()
|
logged_in = request.authenticated_userid.upper()
|
||||||
message = ''
|
message = ''
|
||||||
member = get_member_by_id(request, logged_in)
|
member = get_member_by_id(request, logged_in)
|
||||||
societe_defaut = member.societe
|
societe_defaut = member.societe
|
||||||
societe = societe_defaut
|
societe = societe_defaut
|
||||||
access_defaut = member.access
|
access_defaut = member.access
|
||||||
liste=[]
|
liste=[]
|
||||||
name = ''
|
name = ''
|
||||||
cb_tous = "non"
|
cb_tous = "non"
|
||||||
|
|
||||||
if 'form.submitted' in request.params:
|
if 'form.submitted' in request.params:
|
||||||
name = request.params['name']
|
name = request.params['name']
|
||||||
societe = request.params['societe']
|
societe = request.params['societe']
|
||||||
|
|
||||||
# lire les devis
|
# lire les devis
|
||||||
devis = get_devis_byName(request, societe, name)
|
devis = get_devis_byName(request, societe, name)
|
||||||
if len(devis) == 0:
|
if len(devis) == 0:
|
||||||
message = "Devis non trouvé : %s" % name
|
message = "Devis non trouvé : %s" % name
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': "Rechercher un devis",
|
'page_title': "Rechercher un devis",
|
||||||
'url': url,
|
'url': url,
|
||||||
'message': message,
|
'message': message,
|
||||||
'devis': devis,
|
'devis': devis,
|
||||||
'societe': societe,
|
'societe': societe,
|
||||||
'name': name,
|
'name': name,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='devis_create', permission='view')
|
@view_config(route_name='devis_create', permission='view')
|
||||||
def devis_create(request):
|
def devis_create(request):
|
||||||
nodossier = request.matchdict['nodossier']
|
nodossier = request.matchdict['nodossier']
|
||||||
societe = nodossier[0:2]
|
societe = nodossier[0:2]
|
||||||
logged_in = request.authenticated_userid.upper()
|
logged_in = request.authenticated_userid.upper()
|
||||||
|
|
||||||
# créer un devis à partir d'un dossier
|
# créer un devis à partir d'un dossier
|
||||||
no_devis = insert_devis_from_dossier(request, nodossier, logged_in)
|
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')
|
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')
|
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')
|
@view_config(route_name='devis_view', renderer='../templates/devis/devis_view.pt', permission='view')
|
||||||
def devis_view(request):
|
def devis_view(request):
|
||||||
nodevis = request.matchdict['nodevis']
|
nodevis = request.matchdict['nodevis']
|
||||||
societe = nodevis[0:2]
|
societe = nodevis[0:2]
|
||||||
url = request.route_url("devis_view", nodevis=nodevis)
|
url = request.route_url("devis_view", nodevis=nodevis)
|
||||||
|
|
||||||
type_doc = nodevis[3:5]
|
type_doc = nodevis[3:5]
|
||||||
if type_doc == 'DE':
|
if type_doc == 'DE':
|
||||||
page_title = "Devis no : %s" % (nodevis)
|
page_title = "Devis no : %s" % (nodevis)
|
||||||
entete = get_devis_by_no(request, nodevis)
|
entete = get_devis_by_no(request, nodevis)
|
||||||
elif type_doc == 'FA':
|
elif type_doc == 'FA':
|
||||||
page_title = "Facture no : %s" % (nodevis)
|
page_title = "Facture no : %s" % (nodevis)
|
||||||
entete = get_facture_by_no(request, nodevis)
|
entete = get_facture_by_no(request, nodevis)
|
||||||
else:
|
else:
|
||||||
page_title = "Proforma no : %s" % (nodevis)
|
page_title = "Proforma no : %s" % (nodevis)
|
||||||
entete = get_proforma_by_no(request, nodevis)
|
entete = get_proforma_by_no(request, nodevis)
|
||||||
|
|
||||||
if entete is None:
|
if entete is None:
|
||||||
request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger')
|
request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger')
|
||||||
return HTTPFound(location=request.route_url("dossier_lookup"))
|
return HTTPFound(location=request.route_url("dossier_lookup"))
|
||||||
# lire tous les lignes du doc
|
# lire tous les lignes du doc
|
||||||
details = get_devis_lig_by_no(request, nodevis)
|
details = get_devis_lig_by_no(request, nodevis)
|
||||||
# select background color according to society
|
# select background color according to society
|
||||||
bg_color = "bg-%s" % societe
|
bg_color = "bg-%s" % societe
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': page_title,
|
'page_title': page_title,
|
||||||
'nodevis': nodevis,
|
'nodevis': nodevis,
|
||||||
'entete': entete,
|
'entete': entete,
|
||||||
'details': details,
|
'details': details,
|
||||||
'bg_color': bg_color,
|
'bg_color': bg_color,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='devis_web', renderer='../templates/devis/devis_web.pt', permission='view')
|
@view_config(route_name='devis_web', renderer='../templates/devis/devis_web.pt', permission='view')
|
||||||
def devis_web(request):
|
def devis_web(request):
|
||||||
nodevis = request.matchdict['nodevis']
|
nodevis = request.matchdict['nodevis']
|
||||||
societe = nodevis[0:2]
|
societe = nodevis[0:2]
|
||||||
no_id = nodevis[5:]
|
no_id = nodevis[5:]
|
||||||
url = request.route_url("devis_web", nodevis=nodevis)
|
url = request.route_url("devis_web", nodevis=nodevis)
|
||||||
logged_in = request.authenticated_userid.upper()
|
logged_in = request.authenticated_userid.upper()
|
||||||
|
|
||||||
devis = get_devis_by_no(request, nodevis)
|
devis = get_devis_by_no(request, nodevis)
|
||||||
if devis is None:
|
if devis is None:
|
||||||
request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger')
|
request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger')
|
||||||
return HTTPFound(location=request.route_url("dossier_lookup"))
|
return HTTPFound(location=request.route_url("dossier_lookup"))
|
||||||
|
|
||||||
nochantier = str(devis.nochantier)
|
nochantier = str(devis.nochantier)
|
||||||
# lire tous les lignes du devis
|
# lire tous les lignes du devis
|
||||||
details = get_devis_lignes_by_no(request, nodevis, '0')
|
details = get_devis_lignes_by_no(request, nodevis, '0')
|
||||||
# select background color according to society
|
# select background color according to society
|
||||||
bg_color = "bg-%s" % societe
|
bg_color = "bg-%s" % societe
|
||||||
|
|
||||||
# -- ajouter une ligne
|
# -- ajouter une ligne
|
||||||
if 'form.submited' in request.params:
|
if 'form.submited' in request.params:
|
||||||
type_lig = request.params['type_lig']
|
type_lig = request.params['type_lig']
|
||||||
if type_lig == 'ST':
|
if type_lig == 'ST':
|
||||||
# ajout d'un SOUS-TOTAL
|
# ajout d'un SOUS-TOTAL
|
||||||
new_values = {}
|
new_values = {}
|
||||||
new_values['type_ligne'] = 'ST'
|
new_values['type_ligne'] = 'ST'
|
||||||
new_values['ref'] = 'ST'
|
new_values['ref'] = 'ST'
|
||||||
new_values['libelle'] = 'Sous-total'
|
new_values['libelle'] = 'Sous-total'
|
||||||
new_values['usermaj'] = logged_in
|
new_values['usermaj'] = logged_in
|
||||||
new_values['societe'] = societe
|
new_values['societe'] = societe
|
||||||
new_values['no_id'] = no_id
|
new_values['no_id'] = no_id
|
||||||
new_values['nolig'] = len(details) + 1
|
new_values['nolig'] = len(details) + 1
|
||||||
update_devis_ligne(request, nodevis, '0', new_values)
|
update_devis_ligne(request, nodevis, '0', new_values)
|
||||||
return HTTPFound(location=url)
|
return HTTPFound(location=url)
|
||||||
else:
|
else:
|
||||||
return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodevis=nodevis, nolig='0'))
|
return HTTPFound(request.route_url("devis_ligne", type_ligne=type_lig, nodevis=nodevis, nolig='0'))
|
||||||
|
|
||||||
if 'form.generate' in request.params:
|
if 'form.generate' in request.params:
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
'page-size': 'A4',
|
'page-size': 'A4',
|
||||||
'margin-top': '1cm',
|
'margin-top': '1cm',
|
||||||
'margin-right': '1cm',
|
'margin-right': '1cm',
|
||||||
'margin-bottom': '2cm',
|
'margin-bottom': '2cm',
|
||||||
'margin-left': '1.5cm',
|
'margin-left': '1.5cm',
|
||||||
'footer-font-size':'7',
|
'footer-font-size':'7',
|
||||||
'footer-right': '[page] / [topage]',
|
'footer-right': '[page] / [topage]',
|
||||||
}
|
}
|
||||||
|
|
||||||
# créer le répertoire du chantier s'il n'existe pas encore
|
# créer le répertoire du chantier s'il n'existe pas encore
|
||||||
path = '%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier)
|
path = '%s/%s/%s' % (request.registry.settings['mondumas.devfac_dir'], societe, nochantier)
|
||||||
os.makedirs(path, exist_ok=True)
|
os.makedirs(path, exist_ok=True)
|
||||||
# générer le devis en PDF
|
# générer le devis en PDF
|
||||||
filename = "%s-DD%s-DE%s-devis.pdf" % (societe, nochantier, no_id)
|
filename = "%s-DD%s-DE%s-devis.pdf" % (societe, nochantier, no_id)
|
||||||
dest = "mondumas/static/DEVFAC/DOCS_ATTACHES/%s/%s/%s" % (societe, nochantier, filename)
|
dest = "mondumas/static/DEVFAC/DOCS_ATTACHES/%s/%s/%s" % (societe, nochantier, filename)
|
||||||
# import pdb;pdb.set_trace()
|
# import pdb;pdb.set_trace()
|
||||||
|
|
||||||
# supprimer le fichier s'il existe déjà
|
# supprimer le fichier s'il existe déjà
|
||||||
if os.path.exists(dest):
|
if os.path.exists(dest):
|
||||||
os.remove(dest)
|
os.remove(dest)
|
||||||
|
|
||||||
# on est en developpement ou en production
|
# on est en developpement ou en production
|
||||||
if request.registry.settings["mail.username"] == "sasdumas@entreprise-dumas.com":
|
if request.registry.settings["mail.username"] == "sasdumas@entreprise-dumas.com":
|
||||||
origin = 'https://gestion.entreprise-dumas.com/devis_preview/%s' % nodevis
|
origin = 'https://gestion.entreprise-dumas.com/devis_preview/%s' % nodevis
|
||||||
pdfkit.from_url(origin, dest, options=options)
|
pdfkit.from_url(origin, dest, options=options)
|
||||||
else:
|
else:
|
||||||
origin = request.route_url('devis_preview', nodevis=nodevis)
|
origin = request.route_url('devis_preview', nodevis=nodevis)
|
||||||
config = pdfkit.configuration(wkhtmltopdf="C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe")
|
config = pdfkit.configuration(wkhtmltopdf="C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe")
|
||||||
pdfkit.from_url(origin, dest, configuration=config, options=options)
|
pdfkit.from_url(origin, dest, configuration=config, options=options)
|
||||||
|
|
||||||
insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), 0, 'CLT', filename, '160 Ko', logged_in)
|
insert_dossier_attaches(request, '%s-%s' % (societe, nochantier), 0, 'CLT', filename, '160 Ko', logged_in)
|
||||||
|
|
||||||
request.session.flash(u"Le devis a été généré avec succès.", 'success')
|
request.session.flash(u"Le devis a été généré avec succès.", 'success')
|
||||||
return HTTPFound(location=request.route_url('dossier_view', nodossier='%s-%s' % (societe, nochantier)))
|
return HTTPFound(location=request.route_url('dossier_view', nodossier='%s-%s' % (societe, nochantier)))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': "Devis no : %s W" % (nodevis),
|
'page_title': "Devis no : %s W" % (nodevis),
|
||||||
'url': url,
|
'url': url,
|
||||||
'nodevis': nodevis,
|
'nodevis': nodevis,
|
||||||
'devis': devis,
|
'devis': devis,
|
||||||
'details': details,
|
'details': details,
|
||||||
'bg_color': bg_color,
|
'bg_color': bg_color,
|
||||||
'max_no': len(details),
|
'max_no': len(details),
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='devis_ligne', renderer='../templates/devis/devis_ligne.pt', permission='view')
|
@view_config(route_name='devis_ligne', renderer='../templates/devis/devis_ligne.pt', permission='view')
|
||||||
def devis_ligne(request):
|
def devis_ligne(request):
|
||||||
type_ligne = request.matchdict['type_ligne']
|
type_ligne = request.matchdict['type_ligne']
|
||||||
nodevis = request.matchdict['nodevis']
|
nodevis = request.matchdict['nodevis']
|
||||||
nolig = request.matchdict['nolig']
|
nolig = request.matchdict['nolig']
|
||||||
societe = nodevis[0:2]
|
societe = nodevis[0:2]
|
||||||
no_id = nodevis[5:]
|
no_id = nodevis[5:]
|
||||||
url = request.route_url("devis_ligne", type_ligne=type_ligne, nodevis=nodevis, nolig=nolig)
|
url = request.route_url("devis_ligne", type_ligne=type_ligne, nodevis=nodevis, nolig=nolig)
|
||||||
logged_in = request.authenticated_userid.upper()
|
logged_in = request.authenticated_userid.upper()
|
||||||
message = ''
|
message = ''
|
||||||
|
|
||||||
dossier = get_devis_by_no(request, nodevis)
|
dossier = get_devis_by_no(request, nodevis)
|
||||||
if dossier is None:
|
if dossier is None:
|
||||||
request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger')
|
request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger')
|
||||||
return HTTPFound(location=request.route_url("dossier_lookup"))
|
return HTTPFound(location=request.route_url("dossier_lookup"))
|
||||||
# lire le nombre total de lignes du devis
|
# lire le nombre total de lignes du devis
|
||||||
lignes = get_devis_lignes_by_no(request, nodevis, '0')
|
lignes = get_devis_lignes_by_no(request, nodevis, '0')
|
||||||
nb_lignes = len(lignes)
|
nb_lignes = len(lignes)
|
||||||
|
|
||||||
if nolig == '0':
|
if nolig == '0':
|
||||||
# nouveau
|
# nouveau
|
||||||
ligne = {}
|
ligne = {}
|
||||||
ligne['type_ligne'] = type_ligne
|
ligne['type_ligne'] = type_ligne
|
||||||
ligne['ref'] = ''
|
ligne['ref'] = ''
|
||||||
if type_ligne == 'AR':
|
if type_ligne == 'AR':
|
||||||
ligne['qte'] = 1
|
ligne['qte'] = 1
|
||||||
ligne['metrage'] = ''
|
ligne['metrage'] = ''
|
||||||
ligne['deduction'] = ''
|
ligne['deduction'] = ''
|
||||||
else:
|
else:
|
||||||
ligne['qte'] = 0
|
ligne['qte'] = 0
|
||||||
ligne['prixht'] = 0
|
ligne['prixht'] = 0
|
||||||
ligne['libelle'] = ''
|
ligne['libelle'] = ''
|
||||||
ligne['usermaj'] = logged_in
|
ligne['usermaj'] = logged_in
|
||||||
ligne['datemaj'] = datetime.now()
|
ligne['datemaj'] = datetime.now()
|
||||||
page_title= 'Nouvelle ligne %s' % type_ligne
|
page_title= 'Nouvelle ligne %s' % type_ligne
|
||||||
else:
|
else:
|
||||||
# lire la ligne du devis
|
# lire la ligne du devis
|
||||||
ligne = get_devis_lignes_by_no(request, nodevis, nolig)
|
ligne = get_devis_lignes_by_no(request, nodevis, nolig)
|
||||||
page_title= "Modification de la ligne %s" % (nolig)
|
page_title= "Modification de la ligne %s" % (nolig)
|
||||||
# import pdb;pdb.set_trace()
|
# import pdb;pdb.set_trace()
|
||||||
|
|
||||||
# -- ajouter une ligne
|
# -- ajouter une ligne
|
||||||
if 'form.submited' in request.params:
|
if 'form.submited' in request.params:
|
||||||
if type_ligne == 'TX':
|
if type_ligne == 'TX':
|
||||||
# ajout d'un TEXTE
|
# ajout d'un TEXTE
|
||||||
new_values = {}
|
new_values = {}
|
||||||
for param, db_value in ligne.items():
|
for param, db_value in ligne.items():
|
||||||
if param in request.params and request.params[param] != db_value:
|
if param in request.params and request.params[param] != db_value:
|
||||||
new_values[param] = request.params[param]
|
new_values[param] = request.params[param]
|
||||||
|
|
||||||
new_values['type_ligne'] = type_ligne
|
new_values['type_ligne'] = type_ligne
|
||||||
new_values['usermaj'] = logged_in
|
new_values['usermaj'] = logged_in
|
||||||
new_values['societe'] = societe
|
new_values['societe'] = societe
|
||||||
new_values['no_id'] = no_id
|
new_values['no_id'] = no_id
|
||||||
if nolig == '0':
|
if nolig == '0':
|
||||||
new_values['nolig'] = nb_lignes + 1
|
new_values['nolig'] = nb_lignes + 1
|
||||||
else:
|
else:
|
||||||
new_values['nolig'] = nolig
|
new_values['nolig'] = nolig
|
||||||
update_devis_ligne(request, nodevis, nolig, new_values)
|
update_devis_ligne(request, nodevis, nolig, new_values)
|
||||||
request.session.flash("La ligne de texte a été mis à jour avec succès.", 'success')
|
request.session.flash("La ligne de texte a été mis à jour avec succès.", 'success')
|
||||||
return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis))
|
return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis))
|
||||||
|
|
||||||
elif type_ligne == 'AR':
|
elif type_ligne == 'AR':
|
||||||
# ajout d'un article
|
# ajout d'un article
|
||||||
new_values = {}
|
new_values = {}
|
||||||
for param, db_value in ligne.items():
|
for param, db_value in ligne.items():
|
||||||
if param in request.params and request.params[param] != db_value:
|
if param in request.params and request.params[param] != db_value:
|
||||||
new_values[param] = request.params[param]
|
new_values[param] = request.params[param]
|
||||||
|
|
||||||
# calcul métrage si saisi
|
# calcul métrage si saisi
|
||||||
metrage = 0
|
metrage = 0
|
||||||
saisie = request.params['metrage']
|
saisie = request.params['metrage']
|
||||||
if len(saisie) > 0:
|
if len(saisie) > 0:
|
||||||
try:
|
try:
|
||||||
metrage = eval(saisie)
|
metrage = eval(saisie)
|
||||||
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
|
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
|
||||||
message = "Erreur de syntaxe dans la formule de calcul"
|
message = "Erreur de syntaxe dans la formule de calcul"
|
||||||
|
|
||||||
# calcul deduction si saisi
|
# calcul deduction si saisi
|
||||||
saisie = request.params['deduction']
|
saisie = request.params['deduction']
|
||||||
if len(saisie) > 0:
|
if len(saisie) > 0:
|
||||||
deduc = 0
|
deduc = 0
|
||||||
try:
|
try:
|
||||||
deduc = eval(saisie)
|
deduc = eval(saisie)
|
||||||
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
|
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
|
||||||
message = "Erreur de syntaxe dans la formule de calcul"
|
message = "Erreur de syntaxe dans la formule de calcul"
|
||||||
if deduc < 0 :
|
if deduc < 0 :
|
||||||
metrage += deduc
|
metrage += deduc
|
||||||
else:
|
else:
|
||||||
metrage -= deduc
|
metrage -= deduc
|
||||||
# si metrage saisi, le mettre dans qte
|
# si metrage saisi, le mettre dans qte
|
||||||
if metrage > 0:
|
if metrage > 0:
|
||||||
new_values['qte'] = metrage
|
new_values['qte'] = metrage
|
||||||
new_values['type_ligne'] = type_ligne
|
new_values['type_ligne'] = type_ligne
|
||||||
new_values['usermaj'] = logged_in
|
new_values['usermaj'] = logged_in
|
||||||
new_values['societe'] = societe
|
new_values['societe'] = societe
|
||||||
new_values['no_id'] = no_id
|
new_values['no_id'] = no_id
|
||||||
if nolig == '0':
|
if nolig == '0':
|
||||||
new_values['nolig'] = nb_lignes + 1
|
new_values['nolig'] = nb_lignes + 1
|
||||||
else:
|
else:
|
||||||
new_values['nolig'] = nolig
|
new_values['nolig'] = nolig
|
||||||
update_devis_ligne(request, nodevis, nolig, new_values)
|
update_devis_ligne(request, nodevis, nolig, new_values)
|
||||||
request.session.flash(u"La ligne de devis a été mis à jour avec succès.", 'success')
|
request.session.flash(u"La ligne de devis a été mis à jour avec succès.", 'success')
|
||||||
return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis))
|
return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis))
|
||||||
|
|
||||||
# -- ajouter une ligne
|
# -- ajouter une ligne
|
||||||
if 'form.deleted' in request.params:
|
if 'form.deleted' in request.params:
|
||||||
delete_devis_ligne(request, nodevis, nolig)
|
delete_devis_ligne(request, nodevis, nolig)
|
||||||
request.session.flash(u"La ligne de devis a été supprimée avec succès.", 'success')
|
request.session.flash(u"La ligne de devis a été supprimée avec succès.", 'success')
|
||||||
return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis))
|
return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis))
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': page_title,
|
'page_title': page_title,
|
||||||
'url': url,
|
'url': url,
|
||||||
'message': message,
|
'message': message,
|
||||||
'nodevis': nodevis,
|
'nodevis': nodevis,
|
||||||
'nolig': nolig,
|
'nolig': nolig,
|
||||||
'dossier': dossier,
|
'dossier': dossier,
|
||||||
'ligne': ligne,
|
'ligne': ligne,
|
||||||
'type_ligne': type_ligne,
|
'type_ligne': type_ligne,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='devis_preview', renderer='../templates/devis/devis_preview.pt')
|
@view_config(route_name='devis_preview', renderer='../templates/devis/devis_preview.pt')
|
||||||
def devis_preview(request):
|
def devis_preview(request):
|
||||||
nodevis = request.matchdict['nodevis']
|
nodevis = request.matchdict['nodevis']
|
||||||
societe = nodevis[0:2]
|
societe = nodevis[0:2]
|
||||||
no_id = nodevis[5:]
|
no_id = nodevis[5:]
|
||||||
|
|
||||||
# calculer les totaux HT et TTC
|
# calculer les totaux HT et TTC
|
||||||
sum_devis_totaux(request, nodevis)
|
sum_devis_totaux(request, nodevis)
|
||||||
# select logo according to society
|
# select logo according to society
|
||||||
logo_url = request.static_url('mondumas:static/img/Logo-%s.jpg' % societe)
|
logo_url = request.static_url('mondumas:static/img/Logo-%s.jpg' % societe)
|
||||||
|
|
||||||
devis = get_devis_by_no(request, nodevis)
|
devis = get_devis_by_no(request, nodevis)
|
||||||
# import pdb;pdb.set_trace()
|
# import pdb;pdb.set_trace()
|
||||||
if devis is None:
|
if devis is None:
|
||||||
request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger')
|
request.session.flash(u"Le document no %s est introuvable" % (nodevis), 'danger')
|
||||||
return HTTPFound(location=request.route_url("dossier_lookup"))
|
return HTTPFound(location=request.route_url("dossier_lookup"))
|
||||||
|
|
||||||
# lire tous les lignes du devis
|
# lire tous les lignes du devis
|
||||||
details = get_devis_lignes_by_no(request, nodevis, '0')
|
details = get_devis_lignes_by_no(request, nodevis, '0')
|
||||||
|
|
||||||
# générer les détails en HTML
|
# générer les détails en HTML
|
||||||
dt_html = ''
|
dt_html = ''
|
||||||
for ligne in details:
|
for ligne in details:
|
||||||
if ligne.ref == 'T1':
|
if ligne.ref == 'T1':
|
||||||
dt_html += '<tr><td colspan="3" style="text-align:center;"><h4>%s</h4></td></tr>' % ligne.libelle
|
dt_html += '<tr><td colspan="3" style="text-align:center;"><h4>%s</h4></td></tr>' % ligne.libelle
|
||||||
elif ligne.ref == 'T2':
|
elif ligne.ref == 'T2':
|
||||||
dt_html += '<tr><td colspan="3" style="text-align:center;"><p><b>%s</b></p></td></tr>' % ligne.libelle
|
dt_html += '<tr><td colspan="3" style="text-align:center;"><p><b>%s</b></p></td></tr>' % ligne.libelle
|
||||||
elif ligne.ref == 'TX':
|
elif ligne.ref == 'TX':
|
||||||
dt_html += '<tr><td></td><td colspan="3"><p>%s</p></td></tr>' % ligne.libelle
|
dt_html += '<tr><td></td><td colspan="3"><p>%s</p></td></tr>' % ligne.libelle
|
||||||
elif ligne.type_ligne == 'AR':
|
elif ligne.type_ligne == 'AR':
|
||||||
dt_html += '<tr><td style="vertical-align: top">%s</td>' % ligne.ref
|
dt_html += '<tr><td style="vertical-align: top">%s</td>' % ligne.ref
|
||||||
dt_html += '<td><p>%s<br />' % ligne.libelle
|
dt_html += '<td><p>%s<br />' % ligne.libelle
|
||||||
if ligne.metrage:
|
if ligne.metrage:
|
||||||
dt_html += ligne.metrage
|
dt_html += ligne.metrage
|
||||||
if ligne.deduction:
|
if ligne.deduction:
|
||||||
dt_html += '<br />déduction :<br />'
|
dt_html += '<br />déduction :<br />'
|
||||||
dt_html += '<i>%s</i>' % ligne.deduction
|
dt_html += '<i>%s</i>' % ligne.deduction
|
||||||
dt_html += '</td>'
|
dt_html += '</td>'
|
||||||
dt_html += '<td style="text-align:right; vertical-align:top">%s</td>' % ligne.qte
|
dt_html += '<td style="text-align:right; vertical-align:top">%s</td>' % ligne.qte
|
||||||
dt_html += '<td style="text-align:right; vertical-align:top">%s</td>' % to_euro(ligne.prixht)
|
dt_html += '<td style="text-align:right; vertical-align:top">%s</td>' % to_euro(ligne.prixht)
|
||||||
dt_html += '<td style="text-align:right; vertical-align:top">%s</td></tr>' % to_euro(ligne.mtht)
|
dt_html += '<td style="text-align:right; vertical-align:top">%s</td></tr>' % to_euro(ligne.mtht)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': '',
|
'page_title': '',
|
||||||
'logo_url': logo_url,
|
'logo_url': logo_url,
|
||||||
'nodevis': nodevis,
|
'nodevis': nodevis,
|
||||||
'devis': devis,
|
'devis': devis,
|
||||||
'details': details,
|
'details': details,
|
||||||
'dt_html': dt_html,
|
'dt_html': dt_html,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='devis_lig_mv', permission='view')
|
@view_config(route_name='devis_lig_mv', permission='view')
|
||||||
def devis_lig_mv(request):
|
def devis_lig_mv(request):
|
||||||
move = request.matchdict['move']
|
move = request.matchdict['move']
|
||||||
nodevis = request.matchdict['nodevis']
|
nodevis = request.matchdict['nodevis']
|
||||||
nolig = request.matchdict['nolig']
|
nolig = request.matchdict['nolig']
|
||||||
societe = nodevis[0:2]
|
societe = nodevis[0:2]
|
||||||
no_id = nodevis[5:]
|
no_id = nodevis[5:]
|
||||||
logged_in = request.authenticated_userid.upper()
|
logged_in = request.authenticated_userid.upper()
|
||||||
|
|
||||||
move_devis_ligne(request, nodevis, int(nolig), move)
|
move_devis_ligne(request, nodevis, int(nolig), move)
|
||||||
request.session.flash(u"La ligne de devis a été déplacée avec succès.", 'success')
|
request.session.flash(u"La ligne de devis a été déplacée avec succès.", 'success')
|
||||||
return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis))
|
return HTTPFound(location=request.route_url("devis_web", nodevis=nodevis))
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user