move line up and down
This commit is contained in:
@@ -156,3 +156,40 @@ def sum_devis_totaux(request, nodossier):
|
|||||||
totalttc = totalht + totaltva
|
totalttc = totalht + totaltva
|
||||||
WHERE societe=:societe AND no_id=:no_id;"""
|
WHERE societe=:societe AND no_id=:no_id;"""
|
||||||
execute_query(request, query, {'societe': societe, 'no_id': no_id})
|
execute_query(request, query, {'societe': societe, 'no_id': no_id})
|
||||||
|
|
||||||
|
def delete_devis_ligne(request, nodossier, nolig):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
query = "DELETE FROM devis_lignes WHERE societe = :societe and no_id=:no_id and nolig=%s;"
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id})
|
||||||
|
|
||||||
|
def move_devis_ligne(request, nodossier, nolig, move):
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
|
||||||
|
# get max no ligne du devis
|
||||||
|
query = "SELECT count(*) AS max_no FROM devis_lignes WHERE societe = :societe and no_id=:no_id;"
|
||||||
|
results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
|
||||||
|
max_no = results.max_no + 1
|
||||||
|
|
||||||
|
step = 0
|
||||||
|
if move == 'up':
|
||||||
|
# déplacement vers le haut
|
||||||
|
if nolig > 1:
|
||||||
|
step = -1
|
||||||
|
else:
|
||||||
|
# déplacement vers le haut
|
||||||
|
if nolig < max_no:
|
||||||
|
step = +1
|
||||||
|
|
||||||
|
if step != 0:
|
||||||
|
# déplacer le suivant ou précédent vers la fin
|
||||||
|
query = """UPDATE devis_lignes SET nolig = :max_no WHERE societe = :societe and no_id=:no_id and nolig = :nolig + :step;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nolig': nolig, 'max_no': max_no, 'step': step})
|
||||||
|
# permuter avec le suivant ou précédent
|
||||||
|
query = """UPDATE devis_lignes SET nolig = nolig + :step WHERE societe = :societe and no_id=:no_id and nolig = :nolig;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nolig': nolig, 'step': step})
|
||||||
|
# remettre le précédent ou suivant à la place de la ligne déplacée
|
||||||
|
query = """UPDATE devis_lignes SET nolig = :nolig WHERE societe = :societe and no_id=:no_id and nolig = :max_no;"""
|
||||||
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'nolig': nolig, 'max_no': max_no})
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ def includeme(config):
|
|||||||
config.add_route('init_mdp', '/init_mdp/{user}/{lien}')
|
config.add_route('init_mdp', '/init_mdp/{user}/{lien}')
|
||||||
# devis
|
# devis
|
||||||
config.add_route('devis_ligne', '/devis_ligne/{type_ligne}/{nodossier}/{nolig}')
|
config.add_route('devis_ligne', '/devis_ligne/{type_ligne}/{nodossier}/{nolig}')
|
||||||
|
config.add_route('devis_lig_mv', '/devis_lig_mv/{move}/{nodossier}/{nolig}')
|
||||||
config.add_route('devis_list', '/devis_list')
|
config.add_route('devis_list', '/devis_list')
|
||||||
config.add_route('devis_create', '/devis_create/{nodossier}')
|
config.add_route('devis_create', '/devis_create/{nodossier}')
|
||||||
config.add_route('devis_web', '/devis_web/{nodossier}')
|
config.add_route('devis_web', '/devis_web/{nodossier}')
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<p class="text-right">Surface</p>
|
<p class="text-right">Surf./ Qté</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
<p class="text-right">P.U. HT</p>
|
<p class="text-right">P.U. HT</p>
|
||||||
@@ -52,14 +52,13 @@
|
|||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
<p class="text-right">Montant HT</p>
|
<p class="text-right">Montant HT</p>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
|
||||||
</div> <!-- row : entête tableau-->
|
</div> <!-- row : entête tableau-->
|
||||||
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<br />
|
|
||||||
<div class="row">
|
|
||||||
<hr>
|
<hr>
|
||||||
|
<div tal:replace="structure dt_html">Page text goes here.</div>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a class="btn btn-success" role="button" href="${request.route_url('devis_preview', nodossier=nodossier)}">
|
<a class="btn btn-primary" role="button" href="${request.route_url('devis_preview', nodossier=nodossier)}">
|
||||||
<span class="glyphicon glyphicon-plus"></span> Prévisualiser</a>
|
<span class="glyphicon glyphicon-plus"></span> Prévisualiser</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -64,14 +64,23 @@
|
|||||||
<th class="text-right">PU HT</th>
|
<th class="text-right">PU HT</th>
|
||||||
<th class="text-right">Montant HT</th>
|
<th class="text-right">Montant HT</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr tal:repeat="detail details">
|
<tr tal:repeat="detail details">
|
||||||
<td>${detail.ref}</td>
|
<td><a href="/devis_ligne/${detail.type_ligne}/${nodossier}/${detail.nolig}">${detail.ref}</a></td>
|
||||||
<td><a href="/devis_ligne/${detail.type_ligne}/${nodossier}/${detail.nolig}">${detail.libelle}</a></td>
|
<td>${detail.libelle}</td>
|
||||||
<td class="text-right">${layout.to_decz(detail.qte)}</td>
|
<td class="text-right">${layout.to_decz(detail.qte)}</td>
|
||||||
<td class="text-right">${layout.to_euroz(detail.prixht)}</td>
|
<td class="text-right">${layout.to_euroz(detail.prixht)}</td>
|
||||||
<td class="text-right">${layout.to_euroz(detail.mtht)}</td>
|
<td class="text-right">${layout.to_euroz(detail.mtht)}</td>
|
||||||
<td class="text-center">${detail.usermaj}</td>
|
<td class="text-center">${detail.usermaj}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<a class="btn btn-primary btn-xs" role="button" tal:condition="detail.nolig>1"
|
||||||
|
href="${request.route_url('devis_lig_mv',move='up',nodossier=nodossier,nolig=detail.nolig)}">
|
||||||
|
<span class="glyphicon glyphicon-arrow-up"></span></a>
|
||||||
|
<a class="btn btn-primary btn-xs" role="button" tal:condition="detail.nolig < max_no"
|
||||||
|
href="${request.route_url('devis_lig_mv',move='dn',nodossier=nodossier,nolig=detail.nolig)}">
|
||||||
|
<span class="glyphicon glyphicon-arrow-down"></span></a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ def devis_web(request):
|
|||||||
'dossier': dossier,
|
'dossier': dossier,
|
||||||
'details': details,
|
'details': details,
|
||||||
'bg_color': bg_color,
|
'bg_color': bg_color,
|
||||||
|
'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')
|
||||||
@@ -210,23 +211,29 @@ def devis_ligne(request):
|
|||||||
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
|
# calcul métrage si saisi
|
||||||
metrage = 0
|
metrage = 0
|
||||||
|
saisie = request.params['metrage']
|
||||||
|
if len(saisie) > 0:
|
||||||
try:
|
try:
|
||||||
metrage = eval(request.params['metrage'])
|
metrage = eval(saisie)
|
||||||
except SyntaxError:
|
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
|
||||||
request.session.flash("Erreur de syntaxe dans la formule de calcul", 'danger')
|
message = "Erreur de syntaxe dans la formule de calcul"
|
||||||
return HTTPFound(location=url)
|
|
||||||
|
# calcul deduction si saisi
|
||||||
|
saisie = request.params['deduction']
|
||||||
|
if len(saisie) > 0:
|
||||||
deduc = 0
|
deduc = 0
|
||||||
try:
|
try:
|
||||||
deduc = eval(request.params['deduction'])
|
deduc = eval(saisie)
|
||||||
except SyntaxError:
|
except (SyntaxError, NameError, TypeError, ZeroDivisionError):
|
||||||
request.session.flash("Erreur de syntaxe dans la formule de calcul", 'danger')
|
message = "Erreur de syntaxe dans la formule de calcul"
|
||||||
return HTTPFound(location=url)
|
|
||||||
if deduc < 0 :
|
if deduc < 0 :
|
||||||
metrage += deduc
|
metrage += deduc
|
||||||
else:
|
else:
|
||||||
metrage -= deduc
|
metrage -= deduc
|
||||||
|
# si metrage saisi, le mettre dans qte
|
||||||
|
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
|
||||||
@@ -240,6 +247,12 @@ def devis_ligne(request):
|
|||||||
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", nodossier=nodossier))
|
return HTTPFound(location=request.route_url("devis_web", nodossier=nodossier))
|
||||||
|
|
||||||
|
# -- ajouter une ligne
|
||||||
|
if 'form.deleted' in request.params:
|
||||||
|
delete_devis_ligne(request, nodossier, nolig)
|
||||||
|
request.session.flash(u"La ligne de devis a été supprimée avec succès.", 'success')
|
||||||
|
return HTTPFound(location=request.route_url("devis_web", nodossier=nodossier))
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': page_title,
|
'page_title': page_title,
|
||||||
@@ -262,6 +275,8 @@ def devis_preview(request):
|
|||||||
|
|
||||||
# calculer les totaux HT et TTC
|
# calculer les totaux HT et TTC
|
||||||
sum_devis_totaux(request, nodossier)
|
sum_devis_totaux(request, nodossier)
|
||||||
|
# select logo according to society
|
||||||
|
logo_url = request.static_url('mondumas:static/img/Logo-%s.jpg' % societe)
|
||||||
|
|
||||||
dossier = get_devis_by_no(request, nodossier)
|
dossier = get_devis_by_no(request, nodossier)
|
||||||
# import pdb;pdb.set_trace()
|
# import pdb;pdb.set_trace()
|
||||||
@@ -271,8 +286,27 @@ def devis_preview(request):
|
|||||||
|
|
||||||
# lire tous les lignes du devis
|
# lire tous les lignes du devis
|
||||||
details = get_devis_lignes_by_no(request, nodossier, '0')
|
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)
|
# générer les détails en HTML
|
||||||
|
dt_html = ''
|
||||||
|
for ligne in details:
|
||||||
|
if ligne.ref == 'T1':
|
||||||
|
dt_html += '<h4 class="text-center">%s</h4>' % ligne.libelle
|
||||||
|
elif ligne.ref == 'T2':
|
||||||
|
dt_html += '<p><b>%s</b></p>' % ligne.libelle
|
||||||
|
elif ligne.ref == 'TX':
|
||||||
|
dt_html += '<div class="col-sm-7"><p>%s</p></div>' % ligne.libelle
|
||||||
|
elif ligne.type_ligne == 'AR':
|
||||||
|
dt_html += '<div class="col-sm-7"><p>%s<br />' % ligne.libelle
|
||||||
|
if ligne.metrage:
|
||||||
|
dt_html += '<i>%s</i><br />' % ligne.metrage
|
||||||
|
if ligne.deduction:
|
||||||
|
dt_html += 'déduction :<br />'
|
||||||
|
dt_html += '<i>%s</i><br />' % ligne.deduction
|
||||||
|
dt_html += '</p></div>'
|
||||||
|
dt_html += '<div class="col-sm-1"><p class="text-right">%s</p></div>' % ligne.qte
|
||||||
|
dt_html += '<div class="col-sm-2"><p class="text-right">%s</p></div>' % ligne.prixht
|
||||||
|
dt_html += '<div class="col-sm-2"><p class="text-right">%s</p></div>' % ligne.mtht
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': '',
|
'page_title': '',
|
||||||
@@ -281,5 +315,18 @@ def devis_preview(request):
|
|||||||
'nodossier': nodossier,
|
'nodossier': nodossier,
|
||||||
'dossier': dossier,
|
'dossier': dossier,
|
||||||
'details': details,
|
'details': details,
|
||||||
|
'dt_html': dt_html,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@view_config(route_name='devis_lig_mv', permission='view')
|
||||||
|
def devis_lig_mv(request):
|
||||||
|
move = request.matchdict['move']
|
||||||
|
nodossier = request.matchdict['nodossier']
|
||||||
|
nolig = request.matchdict['nolig']
|
||||||
|
societe = nodossier[0:2]
|
||||||
|
no_id = nodossier[5:]
|
||||||
|
logged_in = request.authenticated_userid.upper()
|
||||||
|
|
||||||
|
move_devis_ligne(request, nodossier, int(nolig), move)
|
||||||
|
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", nodossier=nodossier))
|
||||||
|
|||||||
Reference in New Issue
Block a user