diff --git a/development.ini b/development.ini
index 3640f35..7bbc137 100644
--- a/development.ini
+++ b/development.ini
@@ -18,8 +18,9 @@ pyramid.includes =
pyramid_mailer
pyramid_tm
-
+
sqlalchemy.url = mysql://phuoc:phuoc!@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
mondumas.admin_email = cao.thien-phuoc@orange.fr
diff --git a/mondumas/models/devis.py b/mondumas/models/devis.py
index ce8de54..24034f4 100644
--- a/mondumas/models/devis.py
+++ b/mondumas/models/devis.py
@@ -1,228 +1,236 @@
-# -*- coding: utf8 -*-
-from sqlalchemy import text
-from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy.orm import (
- scoped_session,
- sessionmaker,
-)
-from zope.sqlalchemy import (
- ZopeTransactionExtension,
- mark_changed
-)
-
-from datetime import *
-import transaction
-import os
-
-from ..views.default import (
- to_int,
-)
-
-
-def execute_query(request, query, params):
- """Execute query and mark session as changed"""
- request.dbsession.execute(query, params)
- mark_changed(request.dbsession)
- transaction.commit()
-
-def get_devis_byName(request, societe, name):
- numero = to_int(name)
-
- if numero > 0:
- query = """SELECT date,'DE' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, COALESCE(totalht,0) AS montant, status, nosin, nopol, nochantier, web
- FROM devis WHERE societe=:societe AND no_id >=:name AND web = 'W' LIMIT 300;;""" % (societe, name)
- elif len(name) == 0:
- query = """SELECT date,'DE' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, COALESCE(totalht,0) AS montant, status, nosin, nopol, nochantier, web
- FROM devis WHERE societe=:societe AND web = 'W' ORDER BY no_id DESC LIMIT 300;"""
- else:
- query = """(SELECT date,'DE' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, COALESCE(totalht,0) AS montant, status, nosin, nopol , nochantier, web
- FROM devis WHERE societe=:societe AND c_nom LIKE ':name%' AND web = 'W' LIMIT 500)"""
- results = request.dbsession.execute(query, {'societe': societe, 'name': name}).fetchall()
- return results
-
-def get_devfac_by_no(request,nodossier):
- # lire devis, facture ou proforma
-
- societe = nodossier[0:2]
- type_doc = nodossier[3:5]
- no_id = nodossier[5:]
-
- if type_doc == 'DE':
- query = """
- SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM devis d
- INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
- INNER JOIN p_cabinet a ON d.cabinet = a.code
- INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
- WHERE d.societe = :societe and d.no_id=:no_id;"""
- elif type_doc == 'FA':
- query = """
- SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM facture d
- INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
- INNER JOIN p_cabinet a ON d.cabinet = a.code
- INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
- WHERE d.societe = :societe and d.no_id=:no_id;"""
- else:
- query = """
- SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM proforma d
- INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
- INNER JOIN p_cabinet a ON d.cabinet = a.code
- INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
- WHERE d.societe = :societe and d.no_id=:no_id;"""
-
- results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
- return results
-
-def get_devis_lig_by_no(request,nodossier):
-
- societe = nodossier[0:2]
- type_doc = nodossier[3:5]
- no_id = nodossier[5:]
-
- if type_doc == 'DE':
- query = "SELECT * FROM devis_lig WHERE societe = :societe and no_id=:no_id;"
- elif type_doc == 'FA':
- query = "SELECT * FROM facture_lig WHERE societe = :societe and no_id=:no_id;"
- else:
- query = "SELECT * FROM proforma_lig WHERE societe = :societe and no_id=:no_id;"
-
- results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
- return results
-
-def get_devis_lignes_by_no(request, nodossier, nolig):
- societe = nodossier[0:2]
- type_doc = nodossier[3:5]
- no_id = nodossier[5:]
-
- if nolig == '0':
- query = "SELECT * FROM devis_lignes WHERE societe = :societe and no_id=:no_id;"
- results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
- else:
- query = "SELECT * FROM devis_lignes WHERE societe = :societe and no_id=:no_id and nolig=:nolig;"
- results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id, 'nolig': nolig}).first()
- return results
-
-
-def insert_devis_from_dossier(request, nodossier, logged_in):
- societe = nodossier[0:2]
- no_id = nodossier[3:]
-
- query = "CALL spINS_DEVIS_FROM_DOSSIER(:societe, 'DDW', :no_id, :logged_in);"
- results = request.dbsession.execute(query,{'societe': societe, 'no_id': no_id, 'logged_in': logged_in}).first()
- return results
-
-def get_devis_by_no(request,nodossier):
- # lire devis, facture ou proforma
-
- societe = nodossier[0:2]
- no_id = nodossier[5:]
-
- query = """
- SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM devis d
- INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
- INNER JOIN p_cabinet a ON d.cabinet = a.code
- INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
- WHERE d.societe = :societe and d.no_id=:no_id;"""
-
- results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
- return results
-
-def get_facture_by_no(request,nodossier):
- # lire facture
-
- societe = nodossier[0:2]
- no_id = nodossier[5:]
-
- query = """
- SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM facture d
- INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
- INNER JOIN p_cabinet a ON d.cabinet = a.code
- INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
- WHERE d.societe = :societe and d.no_id=:no_id;"""
-
- results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
- return results
-
-def get_proforma_by_no(request,nodossier):
- # lire facture
-
- societe = nodossier[0:2]
- no_id = nodossier[5:]
-
- query = """
- SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM proforma d
- INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
- INNER JOIN p_cabinet a ON d.cabinet = a.code
- INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
- WHERE d.societe = :societe and d.no_id=:no_id;"""
-
- results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
- return results
-
-def update_devis_ligne(request, nodossier, nolig, new_values):
- societe = nodossier[0:2]
- no_id = nodossier[5:]
- # formater les champs
- s = ''
- for param in new_values.keys():
- if s:
- s += ",%s=:%s" % (param, param)
- else:
- s = "%s=:%s" % (param, param)
-
- if nolig == '0':
- query = "INSERT INTO devis_lignes SET %s" % s
- else:
- new_values['societe'] = societe
- new_values['no_id'] = no_id
- new_values['nolig'] = nolig
- query = "UPDATE devis_lignes SET %s WHERE societe = :societe and no_id=:no_id and nolig = :nolig;" % s
- # import pdb;pdb.set_trace()
- execute_query(request, query, new_values)
-
-def sum_devis_totaux(request, nodossier):
- societe = nodossier[0:2]
- no_id = nodossier[5:]
-
- query = """UPDATE devis SET totalht = (SELECT SUM(mtht) FROM devis_lignes WHERE societe=:societe AND no_id=:no_id),
- totaltva = ROUND(totalht * tauxtva / 100,2),
- totalttc = totalht + totaltva
- WHERE societe=:societe AND 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})
-
+# -*- coding: utf8 -*-
+from sqlalchemy import text
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import (
+ scoped_session,
+ sessionmaker,
+)
+from zope.sqlalchemy import (
+ ZopeTransactionExtension,
+ mark_changed
+)
+
+from datetime import *
+import transaction
+import os
+
+from ..views.default import (
+ to_int,
+)
+
+
+def execute_query(request, query, params):
+ """Execute query and mark session as changed"""
+ request.dbsession.execute(query, params)
+ mark_changed(request.dbsession)
+ transaction.commit()
+
+def get_devis_byName(request, societe, name):
+ numero = to_int(name)
+
+ if numero > 0:
+ query = """SELECT date,'DE' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, COALESCE(totalht,0) AS montant, status, nosin, nopol, nochantier, web
+ FROM devis WHERE societe=:societe AND no_id >=:name AND web = 'W' LIMIT 300;;""" % (societe, name)
+ elif len(name) == 0:
+ query = """SELECT date,'DE' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, COALESCE(totalht,0) AS montant, status, nosin, nopol, nochantier, web
+ FROM devis WHERE societe=:societe AND web = 'W' ORDER BY no_id DESC LIMIT 300;"""
+ else:
+ query = """(SELECT date,'DE' AS TYPE, LPAD(no_id,6,'0') AS numero, nomcli, CONCAT(c_nom,'; ',c_adr,'; ',c_ville) AS chantier, COALESCE(totalht,0) AS montant, status, nosin, nopol , nochantier, web
+ FROM devis WHERE societe=:societe AND c_nom LIKE ':name%' AND web = 'W' LIMIT 500)"""
+ results = request.dbsession.execute(query, {'societe': societe, 'name': name}).fetchall()
+ return results
+
+def get_devfac_by_no(request,nodossier):
+ # lire devis, facture ou proforma
+
+ societe = nodossier[0:2]
+ type_doc = nodossier[3:5]
+ no_id = nodossier[5:]
+
+ if type_doc == 'DE':
+ query = """
+ SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM devis d
+ INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
+ INNER JOIN p_cabinet a ON d.cabinet = a.code
+ INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
+ WHERE d.societe = :societe and d.no_id=:no_id;"""
+ elif type_doc == 'FA':
+ query = """
+ SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM facture d
+ INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
+ INNER JOIN p_cabinet a ON d.cabinet = a.code
+ INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
+ WHERE d.societe = :societe and d.no_id=:no_id;"""
+ else:
+ query = """
+ SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM proforma d
+ INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
+ INNER JOIN p_cabinet a ON d.cabinet = a.code
+ INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
+ WHERE d.societe = :societe and d.no_id=:no_id;"""
+
+ results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
+ return results
+
+def get_devis_lig_by_no(request,nodossier):
+
+ societe = nodossier[0:2]
+ type_doc = nodossier[3:5]
+ no_id = nodossier[5:]
+
+ if type_doc == 'DE':
+ query = "SELECT * FROM devis_lig WHERE societe = :societe and no_id=:no_id;"
+ elif type_doc == 'FA':
+ query = "SELECT * FROM facture_lig WHERE societe = :societe and no_id=:no_id;"
+ else:
+ query = "SELECT * FROM proforma_lig WHERE societe = :societe and no_id=:no_id;"
+
+ results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
+ return results
+
+def get_devis_lignes_by_no(request, nodossier, nolig):
+ societe = nodossier[0:2]
+ type_doc = nodossier[3:5]
+ no_id = nodossier[5:]
+
+ if nolig == '0':
+ query = "SELECT * FROM devis_lignes WHERE societe = :societe and no_id=:no_id;"
+ results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).fetchall()
+ else:
+ query = "SELECT * FROM devis_lignes WHERE societe = :societe and no_id=:no_id and nolig=:nolig;"
+ results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id, 'nolig': nolig}).first()
+ return results
+
+
+def insert_devis_from_dossier(request, nodossier, logged_in):
+ societe = nodossier[0:2]
+ no_id = nodossier[3:]
+
+ query = "CALL spINS_DEVIS_FROM_DOSSIER(:societe, 'DDW', :no_id, :logged_in);"
+ results = request.dbsession.execute(query,{'societe': societe, 'no_id': no_id, 'logged_in': logged_in}).first()
+ return results
+
+def get_devis_by_no(request,nodossier):
+ # lire devis, facture ou proforma
+
+ societe = nodossier[0:2]
+ no_id = nodossier[5:]
+
+ query = """
+ SELECT d.*, c.*, s.libelle, a.NOM as nom_cabinet, e.NOM as nom_expert FROM devis d
+ INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
+ INNER JOIN p_cabinet a ON d.cabinet = a.code
+ INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
+ INNER JOIN p_statuts s ON d.STATUS = s.code
+ WHERE d.societe = :societe and d.no_id=:no_id;"""
+
+ results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
+ return results
+
+def get_facture_by_no(request,nodossier):
+ # lire facture
+
+ societe = nodossier[0:2]
+ no_id = nodossier[5:]
+
+ query = """
+ SELECT d.*, c.*, s.libelle, a.NOM as nom_cabinet, e.NOM as nom_expert FROM facture d
+ INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
+ INNER JOIN p_cabinet a ON d.cabinet = a.code
+ INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
+ INNER JOIN p_statuts s ON d.STATUS = s.code
+ WHERE d.societe = :societe and d.no_id=:no_id;"""
+
+ results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
+ return results
+
+def get_proforma_by_no(request,nodossier):
+ # lire facture
+
+ societe = nodossier[0:2]
+ no_id = nodossier[5:]
+
+ query = """
+ SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM proforma d
+ INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
+ INNER JOIN p_cabinet a ON d.cabinet = a.code
+ INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
+ WHERE d.societe = :societe and d.no_id=:no_id;"""
+
+ results = request.dbsession.execute(query, {'societe': societe, 'no_id': no_id}).first()
+ return results
+
+def update_devis_ligne(request, nodossier, nolig, new_values):
+ societe = nodossier[0:2]
+ no_id = nodossier[5:]
+ # formater les champs
+ s = ''
+ for param in new_values.keys():
+ if s:
+ s += ",%s=:%s" % (param, param)
+ else:
+ s = "%s=:%s" % (param, param)
+
+ if nolig == '0':
+ query = "INSERT INTO devis_lignes SET %s" % s
+ else:
+ new_values['societe'] = societe
+ new_values['no_id'] = no_id
+ new_values['nolig'] = nolig
+ query = "UPDATE devis_lignes SET %s WHERE societe = :societe and no_id=:no_id and nolig = :nolig;" % s
+ # import pdb;pdb.set_trace()
+ execute_query(request, query, new_values)
+
+def sum_devis_totaux(request, nodossier):
+ societe = nodossier[0:2]
+ no_id = nodossier[5:]
+
+ query = """UPDATE devis SET totalht = (SELECT SUM(mtht) FROM devis_lignes WHERE societe=:societe AND no_id=:no_id),
+ totaltva = ROUND(totalht * tauxtva / 100,2),
+ totalttc = totalht + totaltva
+ WHERE societe=:societe AND 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})
+
+def update_devis_cloture(request, nodevis, status, logged_in):
+ societe = nodevis[0:2]
+ nochantier = int(nodevis[5:])
+ # met le montant regle à 1 centime pour terminé le dossier
+ query = "UPDATE devis SET STATUS = :status, USERMAJ = :logged_in WHERE societe=:societe AND no_id=:nochantier;"
+ execute_query(request, query, {'societe': societe, 'nochantier': nochantier, 'status': status, 'logged_in': logged_in})
\ No newline at end of file
diff --git a/mondumas/models/dossier.py b/mondumas/models/dossier.py
index 79f9153..9fb857d 100644
--- a/mondumas/models/dossier.py
+++ b/mondumas/models/dossier.py
@@ -30,13 +30,14 @@ def get_dossier_by_no(request,nodossier):
societe = nodossier[0:2]
no_id = nodossier[3:]
query = """
-SELECT d.*, a.NOM as nom_cabinet, e.NOM as nom_expert,
+SELECT d.*, s.libelle, a.NOM as nom_cabinet, e.NOM as nom_expert,
c.QUALITE AS cli_QUALITE, c.NOM AS cli_NOM, c.ADRESSE AS cli_ADRESSE, c.ADRESSE2 AS cli_ADRESSE2, c.CP AS cli_CP, c.VILLE AS cli_VILLE,
c.TEL1 AS cli_TEL1, c.TEL2 AS cli_TEL2, c.TELP AS cli_TELP, c.FAX AS cli_FAX, c.NOMRESP AS cli_NOMRESP
FROM dem_devis d
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
INNER JOIN p_cabinet a ON d.cabinet = a.code
INNER JOIN p_experts e ON d.cabinet = e.code_cab and d.expert = e.code_exp
+INNER JOIN p_statuts s ON d.STATUS = s.code
where d.societe = '%s' and d.no_id=%s;""" % (societe, no_id);
results = request.dbsession.execute(query).first()
return results
@@ -329,6 +330,9 @@ def get_status_by_id(request, code):
if code == '':
query = """SELECT * FROM p_statuts;"""
results = request.dbsession.execute(query,).fetchall()
+ elif code == 'DE':
+ query = """SELECT * FROM p_statuts WHERE code >= 3;"""
+ results = request.dbsession.execute(query,).fetchall()
else:
query = """SELECT * FROM p_statuts WHERE code = :code;"""
results = request.dbsession.execute(query, {'code': code}).first()
diff --git a/mondumas/templates/devis/devis_view.pt b/mondumas/templates/devis/devis_view.pt
index 23eab26..96fe14e 100644
--- a/mondumas/templates/devis/devis_view.pt
+++ b/mondumas/templates/devis/devis_view.pt
@@ -1,99 +1,157 @@
-
-
-
-
-
-
-
-
-
- CHANTIER${entete.societe}-${entete.nochantier}
- |
-
- ${entete.C_QUALITE} ${entete.C_NOM}
- ${entete.C_ADR}
- ${entete.C_ADR2}
- ${entete.C_CP} ${entete.C_VILLE}
- ${entete.C_EMAIL}
- |
-
-
-
- Etage - Code
- Tél. domicile - prof.
- Tél. mobile - fax
- |
-
- ${entete.C_ETAGE} - ${entete.C_CODE}
- ${entete.C_TEL1} - ${entete.C_TEL2}
- ${entete.C_TELP} - ${entete.C_FAX}
- |
-
-
-
-
-
-
-
-
- CLIENT |
-
- ${entete.QUALITE} ${entete.NOM}
- ${entete.ADRESSE}
- ${entete.ADRESSE2}
- ${entete.CP} ${entete.VILLE}
- |
-
-
-
- Responsable
- Tél. 1 - 2
- Tél. mobile - fax
- |
-
- ${entete.NOMRESP}
- ${entete.TEL1} - ${entete.TEL2}
- ${entete.TELP} - ${entete.FAX}
- |
-
-
-
-
Statut : ${entete.STATUS}
-
-
-
-
- | Total HT |
- Total TVA |
- Total TTC |
- TVA |
-
-
- | ${layout.to_euro(entete.TOTALHT)} |
- ${layout.to_euro(entete.TOTALTVA)} |
- ${layout.to_euro(entete.TOTALTTC)} |
- ${entete.TAUXTVA} % |
-
-
-
-
-
- | Réf |
- Désignation |
- Qté |
- PU HT |
- Montant HT |
- |
-
-
- | ${detail.REF} |
- ${detail.LIB} |
- ${layout.to_euro(detail.QTE)} |
- ${layout.to_euroz(detail.PRIXHT)} |
- ${layout.to_euroz(detail.MTHT)} |
- ${detail.USERMAJ} |
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+ CHANTIER${entete.societe}-${entete.nochantier}
+ |
+
+ ${entete.C_QUALITE} ${entete.C_NOM}
+ ${entete.C_ADR}
+ ${entete.C_ADR2}
+ ${entete.C_CP} ${entete.C_VILLE}
+ ${entete.C_EMAIL}
+ |
+
+
+
+ Etage - Code
+ Tél. domicile - prof.
+ Tél. mobile - fax
+ |
+
+ ${entete.C_ETAGE} - ${entete.C_CODE}
+ ${entete.C_TEL1} - ${entete.C_TEL2}
+ ${entete.C_TELP} - ${entete.C_FAX}
+ |
+
+
+
+
+
+
+
+
+ CLIENT |
+
+ ${entete.QUALITE} ${entete.NOM}
+ ${entete.ADRESSE}
+ ${entete.ADRESSE2}
+ ${entete.CP} ${entete.VILLE}
+ |
+
+
+
+ Responsable
+ Tél. 1 - 2
+ Tél. mobile - fax
+ |
+
+ ${entete.NOMRESP}
+ ${entete.TEL1} - ${entete.TEL2}
+ ${entete.TELP} - ${entete.FAX}
+ |
+
+
+
+
+
Statut : ${entete.libelle}
+
+
Dernière modif. le ${entete.DATEMAJ.strftime('%d/%m/%Y à %H:%M')} par ${entete.USERMAJ}
+
+ Modif. statut
+
+
+
+
+
+
+
+
+ | Total HT |
+ Total TVA |
+ Total TTC |
+ TVA |
+
+
+ | ${layout.to_euro(entete.TOTALHT)} |
+ ${layout.to_euro(entete.TOTALTVA)} |
+ ${layout.to_euro(entete.TOTALTTC)} |
+ ${entete.TAUXTVA} % |
+
+
+
+
+
+ | Réf |
+ Désignation |
+ Qté |
+ PU HT |
+ Montant HT |
+ |
+
+
+ | ${detail.REF} |
+ ${detail.LIB} |
+ ${layout.to_euro(detail.QTE)} |
+ ${layout.to_euroz(detail.PRIXHT)} |
+ ${layout.to_euroz(detail.MTHT)} |
+ ${detail.USERMAJ} |
+
+
+
+
+
+
+
+
diff --git a/mondumas/templates/dossier/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt
index 3f5aa92..071b5ea 100644
--- a/mondumas/templates/dossier/dossier_view.pt
+++ b/mondumas/templates/dossier/dossier_view.pt
@@ -97,11 +97,11 @@
-
Statut : ${dossier.STATUS}
+
Statut : ${dossier.libelle}
Dernière modif. le ${dossier.DATEMAJ.strftime('%d/%m/%Y à %H:%M')} par ${dossier.USERMAJ}
Clôturer dossier
+ data-toggle="modal" data-target="#confirmCloture"> Modif. statut dossier
diff --git a/mondumas/views/devis.py b/mondumas/views/devis.py
index 6643b58..99be898 100644
--- a/mondumas/views/devis.py
+++ b/mondumas/views/devis.py
@@ -70,6 +70,7 @@ def devis_create(request):
def devis_view(request):
nodevis = request.matchdict['nodevis']
societe = nodevis[0:2]
+ logged_in = request.authenticated_userid.upper()
url = request.route_url("devis_view", nodevis=nodevis)
type_doc = nodevis[3:5]
@@ -91,12 +92,34 @@ def devis_view(request):
# select background color according to society
bg_color = "bg-%s" % societe
+ status = get_status_by_id(request, 'DE')
+
+ if 'form.close' in request.params:
+ status = request.params["status"]
+ motif = request.params["motif"]
+
+ code, libelle = status.split(' | ')
+ code = int(code)
+
+ nodossier = str(entete.societe) + '-' + str(entete.nochantier)
+
+ if type_doc == 'DE':
+ if code >= 10:
+ comment = 'Le devis est ' + libelle + ' : ' + motif
+ insert_suivi(request, nodossier, comment)
+ update_devis_cloture(request, nodevis, code, logged_in)
+ request.session.flash(u"Le statut du devis a été changé avec succès.", 'success')
+ return HTTPFound(url)
+
return {
'page_title': page_title,
+ 'url': url,
'nodevis': nodevis,
'entete': entete,
'details': details,
'bg_color': bg_color,
+ 'status': status,
+ 'type_doc': type_doc,
}
@view_config(route_name='devis_web', renderer='../templates/devis/devis_web.pt', permission='view')