diff --git a/diff.txt b/diff.txt new file mode 100644 index 0000000..e69de29 diff --git a/mondumas/models/default.py b/mondumas/models/default.py index 93e6984..226cab7 100644 --- a/mondumas/models/default.py +++ b/mondumas/models/default.py @@ -113,3 +113,8 @@ 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, libelle): + query = "SELECT * FROM articles WHERE libart like :libelle;" + results = request.dbsession.execute(query, {'libelle': libelle + "%"}) + return results.fetchall() + diff --git a/mondumas/models/devis.py b/mondumas/models/devis.py index 1120736..302a184 100644 --- a/mondumas/models/devis.py +++ b/mondumas/models/devis.py @@ -30,13 +30,13 @@ def get_devis_byName(request, societe, 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 LIMIT 300;;""" % (societe, name) + 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 ORDER BY no_id DESC LIMIT 300;""" + 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%' LIMIT 500)""" + 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 @@ -88,6 +88,20 @@ def get_devis_lig_by_no(request,nodossier): 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:] @@ -111,3 +125,24 @@ def get_devis_by_no(request,nodossier): 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) diff --git a/mondumas/routes.py b/mondumas/routes.py index 173113c..051a952 100644 --- a/mondumas/routes.py +++ b/mondumas/routes.py @@ -10,6 +10,7 @@ def includeme(config): config.add_route('ajax_client', '/ajax_client') config.add_route('ajax_codepostal', '/ajax_codepostal') config.add_route('ajax_lookup', '/ajax_lookup') + config.add_route('ajax_texte', '/ajax_texte') config.add_route('changer_mdp', '/changer_mdp') config.add_route('envoyer_mdp', '/envoyer_mdp') config.add_route('login', '/login') @@ -18,9 +19,10 @@ def includeme(config): config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}') config.add_route('init_mdp', '/init_mdp/{user}/{lien}') # devis + config.add_route('devis_ligne', '/devis_ligne/{type_ligne}/{nodossier}/{nolig}') config.add_route('devis_list', '/devis_list') config.add_route('devis_create', '/devis_create/{nodossier}') - config.add_route('devis_lignes', '/devis_lignes/{nodossier}') + config.add_route('devis_web', '/devis_web/{nodossier}') config.add_route('devis_view', '/devis_view/{nodossier}') # dossier config.add_route('demandes','/demandes') diff --git a/mondumas/static/css/style.less b/mondumas/static/css/style.less index 0569245..8f1fa17 100644 --- a/mondumas/static/css/style.less +++ b/mondumas/static/css/style.less @@ -88,6 +88,12 @@ .modal-dialog { top:7%; } +.type-ligne-panel { + padding-left: 25px; + margin-top: 5px; + margin-bottom: 20px; + display: none; +} .footer { background-color: #2f2f2f; diff --git a/mondumas/templates/default/home.pt b/mondumas/templates/default/home.pt index 57f93ac..66e6125 100644 --- a/mondumas/templates/default/home.pt +++ b/mondumas/templates/default/home.pt @@ -18,7 +18,7 @@
-

DEVIS

+

E-DEVIS

diff --git a/mondumas/templates/devis/devis_ligne.pt b/mondumas/templates/devis/devis_ligne.pt new file mode 100644 index 0000000..3194a2a --- /dev/null +++ b/mondumas/templates/devis/devis_ligne.pt @@ -0,0 +1,148 @@ + +
+ + +
+ + + + +
+ diff --git a/mondumas/templates/devis/devis_list.pt b/mondumas/templates/devis/devis_list.pt index 0a8f014..2bcc91a 100644 --- a/mondumas/templates/devis/devis_list.pt +++ b/mondumas/templates/devis/devis_list.pt @@ -58,7 +58,7 @@ - ${societe}-${detail.numero} + ${societe}-${detail.numero}-W ${detail.date.strftime('%d-%m-%Y')} ${detail.nomcli} diff --git a/mondumas/templates/devis/devis_lignes.pt b/mondumas/templates/devis/devis_web.pt similarity index 87% rename from mondumas/templates/devis/devis_lignes.pt rename to mondumas/templates/devis/devis_web.pt index 2dd495f..980c7cc 100644 --- a/mondumas/templates/devis/devis_lignes.pt +++ b/mondumas/templates/devis/devis_web.pt @@ -61,19 +61,21 @@ - ${detail.REF} - ${detail.LIB} - ${layout.to_decz(detail.QTE)} - ${layout.to_euroz(detail.PRIXHT)} - ${layout.to_euroz(detail.MTHT)} - ${detail.USERMAJ} + ${detail.ref} + ${detail.libelle} + ${layout.to_decz(detail.qte)} + ${layout.to_euroz(detail.prixht)} + ${layout.to_euroz(detail.mtht)} + ${detail.usermaj}

- Nouvelle ligne

+
+
-
-
diff --git a/mondumas/templates/dossier/dossier_view.pt b/mondumas/templates/dossier/dossier_view.pt index 3b6e566..d97e21b 100644 --- a/mondumas/templates/dossier/dossier_view.pt +++ b/mondumas/templates/dossier/dossier_view.pt @@ -198,7 +198,7 @@ ${detail.nodossier} - ${detail.nodossier}-${detail.web} + ${detail.nodossier}-${detail.web} ${detail.date.strftime('%d-%m-%Y')} ${detail.nomcli} diff --git a/mondumas/views/default.py b/mondumas/views/default.py index bbc63ac..776c436 100644 --- a/mondumas/views/default.py +++ b/mondumas/views/default.py @@ -314,4 +314,19 @@ def ajax_client(request): return Response(json.dumps(liste)) +@view_config(route_name='ajax_texte') +def ajax_texte(request): + recherche = request.GET['recherche'] + + # lire les codes postaux commencant par + items = get_article(request, recherche) + + liste=[] + for row in items: + d = row.LIBART + liste.append(d) + + return Response(json.dumps(liste)) + + diff --git a/mondumas/views/devis.py b/mondumas/views/devis.py index 0567d02..faac862 100644 --- a/mondumas/views/devis.py +++ b/mondumas/views/devis.py @@ -95,25 +95,42 @@ def devis_view(request): 'bg_color': bg_color, } -@view_config(route_name='devis_lignes', renderer='../templates/devis/devis_lignes.pt', permission='view') -def devis_lignes(request): +@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] - url = request.route_url("devis_lignes", nodossier=nodossier) + 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_lig_by_no(request, nodossier) + 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.added' in request.params: + if 'form.submited' in request.params: type_lig = request.params['type_lig'] - import pdb;pdb.set_trace() + 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), @@ -123,3 +140,91 @@ def devis_lignes(request): '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'] = '' + 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(u"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] + + 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, + }