retouche get tarifs

This commit is contained in:
2021-06-04 12:26:13 +02:00
parent 83860d3c21
commit 1356fc2255
9 changed files with 117 additions and 188 deletions

View File

@@ -108,19 +108,20 @@ def delete_membre(request, cd_uti):
query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;"
execute_query(request, query, {'cd_uti': cd_uti})
def get_article(request, type, libelle):
if type == 'TX':
query = "SELECT * FROM articles WHERE fam='T' and libart like :libelle;"
results = request.dbsession.execute(query, {'libelle': libelle + "%"}).fetchall()
elif type == 'AR':
query = "SELECT * FROM articles WHERE ref_cli2 like :libelle;"
results = request.dbsession.execute(query, {'libelle': libelle + "%"}).fetchall()
elif type == 'REF':
query = "SELECT * FROM articles WHERE ref = :ref;"
results = request.dbsession.execute(query, {'ref': libelle}).first()
def get_article(request, type, groupe, libelle):
if type == 'LIB':
if groupe == 'TEXTE':
# lire tous les textes dont le libelle commençe par
query = "SELECT * FROM tarifs WHERE groupe='TEXTE' and libelle like :libelle;"
results = request.dbsession.execute(query, {'libelle': libelle + "%"}).fetchall()
else:
# lire tous les tarifs du grupe dont le ref commençe par libelle
query = "SELECT * FROM tarifs WHERE groupe=:groupe and ref like :libelle;"
results = request.dbsession.execute(query, {'groupe': groupe, 'libelle': libelle + "%"}).fetchall()
else:
query = "SELECT * FROM articles WHERE ref_cli2 = :ref;"
results = request.dbsession.execute(query, {'ref': libelle}).first()
# lire tous les tarif du grupe dont le ref est égale à
query = "SELECT * FROM tarifs WHERE groupe=:groupe and ref = :libelle;"
results = request.dbsession.execute(query, {'groupe': groupe, 'libelle': libelle}).first()
return results
def get_codespostaux(request, codep):

View File

@@ -241,7 +241,16 @@ def update_tarif(request, ref, new_values):
query = "UPDATE tarifs SET %s WHERE ref = :ref;" % s
execute_query(request, query, new_values)
def delete_tarifs(request, ref):
def delete_tarif(request, ref):
query = "DELETE FROM tarifs WHERE ref = :ref ;"
execute_query(request, query, {'ref': ref})
def get_tarifs_byGroupe(request, groupe):
query = "SELECT * FROM tarifs WHERE groupe = :groupe;"
results = request.dbsession.execute(query, {'groupe': groupe}).fetchall()
return results
def get_tarif(request, groupe, ref):
query = "SELECT * FROM tarifs WHERE groupe = :groupe and ref = :ref;"
results = request.dbsession.execute(query, {'groupe': groupe, 'ref': ref}).first()
return results

View File

@@ -68,8 +68,8 @@ def includeme(config):
config.add_route('text_edit', '/text_edit/{text_id}')
config.add_route('text_list', '/text_list')
config.add_route('text_view', '/text_view/{text_id}')
config.add_route('tarif_edit', '/tarif_edit/{ref}')
config.add_route('tarifs', '/tarifs')
config.add_route('tarif_edit', '/tarif_edit/{groupe}/{ref}')
config.add_route('tarifs', '/tarifs/{groupe}')
config.add_route('tarifs_import', '/tarifs_import')
config.add_route('user_edit', '/user_edit/{cd_uti}')
config.add_route('users', '/users')

View File

@@ -119,6 +119,7 @@
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$(document).ready(function() {
groupe = "${dossier.groupe}"
// validate the form
$('#devis_ligne-form').formValidation({
framework: 'bootstrap',
@@ -146,12 +147,14 @@ $(document).ready(function() {
$('#libelle').autocomplete({
minLength: 3,
appendTo: "#TX",
source: function (request, response) {
$.ajax({
url:'/ajax_texte',
dataType: 'json',
data: {
recherche: 'TX' + request.term,
groupe: 'TEXTE',
libelle: request.term,
},
success: function (data) {
response( data );
@@ -167,7 +170,8 @@ $(document).ready(function() {
url:'/ajax_texte',
dataType: 'json',
data: {
recherche: 'AR' + request.term,
groupe: groupe,
libelle: request.term,
},
success: function (data) {
response( data );
@@ -180,7 +184,10 @@ $(document).ready(function() {
// lecture de l'article
$.ajax({
url: '/ajax_article',
data: {ref:ref},
data: {
groupe: groupe,
ref:ref
},
dataType: 'json',
success:function(response){
var len = response.length;

View File

@@ -12,7 +12,7 @@
<h4>ARTICLES</h4>
</div>
<div class="col-sm-3">
<a href="${request.application_url}/tarifs"><span class="glyphicon glyphicon-list-alt logo-primary"></span></a>
<a href="${request.application_url}/tarifs/AXA"><span class="glyphicon glyphicon-list-alt logo-primary"></span></a>
<h4>TARIFS</h4>
</div>
<div class="col-sm-3">

View File

@@ -12,125 +12,44 @@
<div id="tarif" class="tab-pane fade in active">
<br />
<div class="form-group">
<label class="control-label col-xs-2" for="REF">Référence</label>
<label class="control-label col-xs-2" for="access">Groupe</label>
<div class="col-xs-7">
<p class="form-control-static">${item.groupe}</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="ref">Référence</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="REF" name="REF" value="${item.REF}"
placeholder="10 caractères maximum"
<input class="form-control" type="text" id="ref" name="ref" value="${item.ref}"
placeholder="20 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="La référence est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="10"
data-fv-stringlength-message="10 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2">Famille</label>
<div class="col-xs-6">
<select class="form-control" id="FAM" name="FAM">
<tal:block tal:repeat="famille familles">
<option value="${famille}" tal:attributes="selected famille[0]==item.FAM and 'selected' or None">${famille}</option>
</tal:block>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="LIBART">Libellé</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="LIBART" name="LIBART" value="${item.LIBART}"
placeholder="45 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="Le libellé est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="LIBCOMPL1">Libellé compl. 1</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="LIBCOMPL1" name="LIBCOMPL1" value="${item.LIBCOMPL1}"
placeholder="45 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="LIBCOMPL2">Libellé compl. 2</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="LIBCOMPL2" name="LIBCOMPL2" value="${item.LIBCOMPL2}"
placeholder="45 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="LIBCOMPL3">Libellé compl. 3</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="LIBCOMPL3" name="LIBCOMPL3" value="${item.LIBCOMPL3}"
placeholder="45 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="LIBCOMPL4">Libellé compl. 4</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="LIBCOMPL4" name="LIBCOMPL4" value="${item.LIBCOMPL4}"
placeholder="45 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="col-xs-2 control-label">Prix HT 1</label>
<div class="col-xs-6">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
<input class="form-control" type="text" id="PRIXHT1" name="PRIXHT1" value="${item.PRIXHT1}"
data-fv-numeric="true"
data-fv-numeric-message="Le montant est invalide" />
</div>
</div>
</div>
<div class="form-group">
<label class="col-xs-2 control-label">Prix HT 2</label>
<div class="col-xs-6">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
<input class="form-control" type="text" id="PRIXHT2" name="PRIXHT2" value="${item.PRIXHT2}"
data-fv-numeric="true"
data-fv-numeric-message="Le montant est invalide" />
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="ref_cli1">Réf. client 1</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="ref_cli1" name="ref_cli1" value="${item.ref_cli1}"
placeholder="20 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="20"
data-fv-stringlength-message="20 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="ref_cli2">Réf. client 2</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="ref_cli2" name="ref_cli2" value="${item.ref_cli2}"
placeholder="20 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="20"
data-fv-stringlength-message="20 caractères maximum" />
<label class="control-label col-xs-2" for="libelle">Libellé</label>
<div class="col-xs-8">
<textarea class="form-control" rows="6" cols="40" id="libelle" name="libelle">${item.libelle}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-xs-2 control-label">Prix HT</label>
<div class="col-xs-6">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
<input class="form-control" type="text" id="prixht" name="prixht" value="${item.prixht}"
data-fv-numeric="true"
data-fv-numeric-message="Le montant est invalide" />
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-2" for="access">Dernière modif.</label>
<div class="col-xs-7">
<p class="form-control-static" tal:condition="item.REF != '0'">${item.modif_le.strftime('%d/%m/%Y - %H:%M')}</p>
<p class="form-control-static" tal:condition="item.ref != '0'">${item.modif_le.strftime('%d/%m/%Y - %H:%M')}</p>
</div>
</div>
<br />
@@ -138,12 +57,12 @@
<div class="form-group">
<div class="col-xs-offset-2 col-xs-10">
<div class="form-group">
<a class="btn btn-default" href="${request.application_url}/articles">
<a class="btn btn-default" href="${request.application_url}/tarifs/${item.groupe}">
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
<button class="btn btn-warning" type="submit" name="form.deleted"
tal:condition="item.REF != '0'">
tal:condition="item.ref != '0'">
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
</div>
</div>

View File

@@ -3,11 +3,11 @@
<form method="POST" id="frm" class="form-horizontal">
<div class="form-group">
<label class="control-label col-md-1">Famille : </label>
<label class="control-label col-md-1">groupe : </label>
<div class="col-md-3">
<select class="form-control" id="famille" name="famille" onChange="$('#frm').submit()">
<tal:block tal:repeat="item familles">
<option value="${item}" tal:attributes="selected famille==item and 'selected' or None">${item}</option>
<select class="form-control" id="groupe" name="groupe" onChange="$('#frm').submit()">
<tal:block tal:repeat="item groupes">
<option value="${item}" tal:attributes="selected groupe==item and 'selected' or None">${item}</option>
</tal:block>
</select>
</div>
@@ -16,7 +16,7 @@
<p>
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
<a href="${request.application_url}/article_edit/0" class="btn btn-success" role="button">
<a href="${request.application_url}/tarif_edit/${groupe}/0" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-plus"></span> Nouvel tarif</a>
<a href="${request.application_url}/tarifs_import" class="btn btn-primary" role="button">
<span class="glyphicon glyphicon-import"></span> Import tarifs</a>
@@ -27,11 +27,9 @@
<tr>
<th>Référence</th>
<th>Libellé</th>
<th>Libellé 2</th>
<th>Unité</th>
<th class="text-right">Prix HT 1</th>
<th class="text-right">Prix HT 2</th>
<th>Réf. client 1</th>
<th>Réf. client 2</th>
<th>Modif le</th>
</tr>
</thead>
</table>
@@ -41,6 +39,7 @@
<script type="text/javascript">
var dataSet = ${dt_data};
var groupe = '${groupe}';
$(document).ready(function() {
$.fn.dataTable.moment('DD-MM-YYYY HH:mm');
@@ -48,16 +47,16 @@
data: dataSet,
pageLength: 100,
bLengthChange: false,
searching: false,
searching: true,
language: {
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
},
columnDefs: [
{ className: "text-right", "targets": [3,4] },
{ className: "text-right", "targets": [3] },
{ targets: 0,
render: function (data, type, full, meta) {
// ajouter un link vers le formulaire
return '<a href="/article_edit/' + data + '">' + data + '</a>';
return '<a href="/tarif_edit/' + groupe + '/' + data + '">' + data + '</a>';
},
},
]

View File

@@ -302,36 +302,37 @@ def ajax_client(request):
@view_config(route_name='ajax_texte')
def ajax_texte(request):
recherche = request.GET['recherche']
type = recherche[:2]
lib = recherche[2:]
groupe = request.GET['groupe']
libelle = request.GET['libelle']
# import pdb;pdb.set_trace()
# lire les articles commencant par
items = get_article(request, type, lib)
items = get_article(request, 'LIB', groupe, libelle)
liste=[]
for row in items:
if type == 'AR':
d = '%s | %s | %s' % (row.ref_cli2, row.LIBART, to_euro(row.PRIXHT2))
if groupe == 'TEXTE':
d = row.libelle
else:
d = row.LIBART
d = '%s | %s | %s' % (row.ref, row.libelle, to_euro(row.prixht))
liste.append(d)
return Response(json.dumps(liste))
@view_config(route_name='ajax_article')
def ajax_article(request):
groupe = request.GET['groupe']
ref = request.GET['ref']
# lire l'article
items = get_article(request, 'REF2', ref)
items = get_article(request, 'REF', groupe, ref)
# puis retourne son libellé et son prixht
liste=[]
d = {}
d['ref'] = items.ref_cli2
d['ref'] = items.ref
d['libelle'] = items.libelle
d['prixht'] = "%.2f" % items.PRIXHT2
d['prixht'] = "%.2f" % items.prixht
liste.append(d)
return Response(json.dumps(liste))

View File

@@ -805,65 +805,58 @@ def societe_edit(request):
@view_config(route_name='tarifs', renderer='../templates/parametres/tarifs.pt', permission='manage')
def tarifs(request):
familles = ["Article", "Texte"]
groupe = request.matchdict['groupe']
groupes = ["AXA", "MAIF", "TEXTE"]
# si table a changé
if 'famille' in request.params:
# si table a changé
if 'groupe' in request.params:
groupe = request.params["groupe"]
# lire les articles
# lire les articles
items = get_tarifs_byGroupe(request, groupe)
# construire la liste
liste=[]
for item in items:
for item in items:
d = (item.ref, item.libelle, item.unite, to_euro(item.prixht), item.modif_le.strftime("%d-%m-%Y"))
liste.append(d)
return {
return {
'page_title': 'Liste des tarifs',
'dt_data': json.dumps(liste),
'familles': familles,
'dt_data': json.dumps(liste),
'groupes': groupes,
'groupe': groupe,
}
@view_config(route_name='tarif_edit', renderer='../templates/parametres/tarif_edit.pt', permission='manage')
def tarif_edit(request):
groupe = request.matchdict['groupe']
ref = request.matchdict['ref']
ref = request.matchdict['ref']
url = request.route_url('tarif_edit', groupe=groupe, ref=ref)
logged_in = request.authenticated_userid
message = ''
familles = ["Article", "Texte"]
if ref == '0':
# nouveau
item = {}
item['REF'] = '0'
item['FAM'] = 'A'
item['LIBART'] = ''
item['PRIXHT1'] = 0
item['PRIXHT2'] = 0
item['ref_cli1'] = ''
item['ref_cli2'] = ''
item['LIBCOMPL1'] = ''
item['LIBCOMPL2'] = ''
item['LIBCOMPL3'] = ''
item['LIBCOMPL4'] = ''
item = {}
item['groupe'] = groupe
item['ref'] = '0'
item['libelle'] = ''
item['prixht'] = 0
page_title= 'Nouveau tarif'
else:
# lire l'article
else:
# lire le tarif
item = get_tarif(request, groupe, ref)
if not item:
request.session.flash("article non trouvé : %s" % ref, 'warning')
return HTTPFound(location=request.route_url('articles'))
if not item:
request.session.flash("Tarif non trouvé : %s" % ref, 'warning')
return HTTPFound(location=request.route_url('tarifs', groupe=groupe))
page_title= "Tarif : %s" %(item.ref)
if 'form.submitted' in request.params:
if 'form.submitted' in request.params:
new_ref = request.params["ref"]
if new_ref == '0':
if new_ref == '0':
message = "Veuillez saisir un code tarif valide."
else:
new_values = {}
@@ -871,21 +864,21 @@ def tarif_edit(request):
if param in request.params and request.params[param] != db_value:
new_values[param] = request.params[param]
if new_values:
update_article(request, ref, new_values)
request.session.flash("Le article a été mis à jour avec succès.", 'success')
if new_values:
new_values['groupe'] = groupe
update_tarif(request, ref, new_values)
request.session.flash("Le tarif a été mis à jour avec succès.", 'success')
return HTTPFound(location=request.route_url('tarifs', groupe=groupe))
if 'form.deleted' in request.params:
if 'form.deleted' in request.params:
delete_tarif(request, ref)
request.session.flash("Le article a été supprimé avec succès.", 'success')
request.session.flash("Le article a été supprimé avec succès.", 'success')
return HTTPFound(location=request.route_url('tarifs', groupe=groupe))
return {
'page_title': page_title,
'url': url,
'message': message,
'item': item,
'item': item,
}