ajout module devis

This commit is contained in:
2020-09-23 17:11:07 +02:00
parent 64b049251e
commit ec19e2db35
872 changed files with 65160 additions and 112 deletions

113
mondumas/models/devis.py Normal file
View File

@@ -0,0 +1,113 @@
# -*- 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 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;"""
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)"""
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 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

View File

@@ -57,35 +57,6 @@ def get_clients_byName(request, societe, nom):
return results return results
def get_devis_by_no(request,nodossier):
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_dossier_rdv_by_no(request,nodossier, nolig): def get_dossier_rdv_by_no(request,nodossier, nolig):
societe = nodossier[0:2] societe = nodossier[0:2]
@@ -150,22 +121,6 @@ WHERE societe<>:societe AND C_NOM=:C_NOM AND C_ADR=:C_ADR AND C_CP=:C_CP AND C_V
return results 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_docs_attaches(request, nodossier, norapport, nosection, filename): def get_docs_attaches(request, nodossier, norapport, nosection, filename):
societe = nodossier[0:2] societe = nodossier[0:2]
nochantier = int(nodossier[3:]) nochantier = int(nodossier[3:])

View File

@@ -17,10 +17,14 @@ def includeme(config):
config.add_route('logout', '/logout') config.add_route('logout', '/logout')
config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}') config.add_route('redefinir_mdp', '/redefinir_mdp/{lien}')
config.add_route('init_mdp', '/init_mdp/{user}/{lien}') config.add_route('init_mdp', '/init_mdp/{user}/{lien}')
# devis
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_view', '/devis_view/{nodossier}')
# dossier # dossier
config.add_route('demandes','/demandes') config.add_route('demandes','/demandes')
config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{nosection}/{nomfic}') config.add_route('delete_img','/delete_img/{nodossier}/{norapport}/{nosection}/{nomfic}')
config.add_route('devis_view', '/devis_view/{nodossier}')
config.add_route('dossier_edit', '/dossier_edit/{nodossier}') config.add_route('dossier_edit', '/dossier_edit/{nodossier}')
config.add_route('dossier_lookup', '/dossier_lookup') config.add_route('dossier_lookup', '/dossier_lookup')
config.add_route('dossier_select', '/dossier_select/{date}') config.add_route('dossier_select', '/dossier_select/{date}')

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 915 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 903 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

View File

@@ -0,0 +1,21 @@
CR<EFBFBD>ATION D'UN SITE WEB MUTUALIS<49> EN LANGUEDOC-ROUSSILLON
http://regionlr.caes.cnrs.fr/
HISTORIQUE :
Les origines de ce site web sont li<6C>es <20> une volont<6E> du bureau de la Region d'homog<6F>n<EFBFBD>iser la communication par Internet entre les 4 entit<69>s de la R<>gion CAES Languedoc Roussillon : la R<>gion et les 3 CLAS de Banyuls, Montpellier et Perpignan, en les regroupant sur un seul site d'h<>bergement.
Un autre objectif <20>tait aussi de faciliter la diffusion des informations pour leurs responsables, professionnelle(e)s ou <20>lu(e)s du CAES R<>gion, mais aussi de permettre <20> des <20>lus et/ou pr<70>sidents de CLAS de r<>diger des articles. Un plus grand nombre d'<27>lus peut ainsi se partager cette diffusion de l'information sous contr<74>le toutefois de responsables choisis.
Le projet a <20>t<EFBFBD> d<>cid<69> lors du CRC aux Plantiers en juin 2013.
ARCHITECTURE :
L'architecture SPIP a <20>t<EFBFBD> choisie parmi d'autres CMS connus (Drupal, Joomla, WordPress ...) parce que le webmestre le connaissait un peu ! De plus cette solution est propos<6F>e dans les offres d'h<>bergement (http://www.offres-de-services-labos.net/hebergement.html) que la DSI met <20> disposition pour les laboratoires dans son offre de services et permet de garder une adresse dans le domaine 'cnrs.fr' et le sous-domaine du CAES.
Par ailleurs SPIP ne demande pas un gros investissement pour apprendre <20> r<>diger un article, lui ajouter un document ou une photo. L'article, une fois r<>dig<69> dans un espace priv<69>, est soumis pour validation <20> un administrateur qui peut l'accepter et le publier sur la partie publique donc visible du site. Ce contr<74>le est n<>cessaire compte-tenu du fait que le Pr<50>sident de R<>gion est responsable de la publication.
L'administrateur, outre cette validation des articles, participe <20> la pr<70>sentation des contenus, en regroupant les articles dans les rubriques appropri<72>es. Chaque CLAS ainsi que la R<>GION a donc une certaine autonomie pour g<>rer ses infos.
La pr<70>sentation graphique des pages est commune <20> l'ensemble du site mais varie en fonction de chaque entit<69> qui poss<73>de chacune un logo simple permettant une identification facile par les agents. Il y a toutefois des <20>l<EFBFBD>ments communs <20> chaque page car ils concernent des infos pratiques pour les usagers du CAES en g<>n<EFBFBD>ral, dans lesquels on trouve aussi des outils basiques comme la fonction Rechercher ou un mini calendrier qui fournit une vue compacte des <20>v<EFBFBD>nements du mois en cours. Il a <20>t<EFBFBD> mis en place <20>galement une zone Intranet pour partager des documents destin<69>s aux <20>lus et professionnels du CAES.
H<EFBFBD>BERGEMENT :
SPIP est propos<6F> dans les offres d'h<>bergement de la DSI avec une convention qui doit <20>tre sign<67>e par le Pr<50>sident du CAES. Nous avons choisi une formule gratuite avec un espace serveur de 2 Go mais cet espace d<>di<64> peut <20>tre plus important ainsi que le nombre de bases MySQl. Localement un informaticien de la DR13 a d'abord fait le lien entre notre demande et la DSI puis nous a aid<69> pour la partie administrative, le choix du nom de domaine et la mise en place du site en d<>veloppement. Une fois le site pr<70>t, les informaticiens du CAES ont permis la migration du site en d<>veloppement vers le site actuel ouvert au public.
Toutes ces phases se sont d<>roul<75>es assez sereinement en concertation entre nous et tous les informaticiens impliqu<71>s <20> Montpellier ou au CAES National et nous tenons <20> les remercier pour leurs conseils et contributions dans ce projet.
Pour toute question pratique, s'adresser <20> Gilles Niel (gilles.niel@enscm.fr)

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Some files were not shown because too many files have changed in this diff Show More