ajout module devis
@@ -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
|
||||
@@ -57,35 +57,6 @@ def get_clients_byName(request, societe, nom):
|
||||
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):
|
||||
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
|
||||
|
||||
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):
|
||||
societe = nodossier[0:2]
|
||||
nochantier = int(nodossier[3:])
|
||||
|
||||
@@ -17,10 +17,14 @@ def includeme(config):
|
||||
config.add_route('logout', '/logout')
|
||||
config.add_route('redefinir_mdp', '/redefinir_mdp/{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
|
||||
config.add_route('demandes','/demandes')
|
||||
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_lookup', '/dossier_lookup')
|
||||
config.add_route('dossier_select', '/dossier_select/{date}')
|
||||
|
||||
|
After Width: | Height: | Size: 3.0 MiB |
|
After Width: | Height: | Size: 5.0 MiB |
|
After Width: | Height: | Size: 546 KiB |
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 578 KiB |
|
After Width: | Height: | Size: 859 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 915 KiB |
|
After Width: | Height: | Size: 896 KiB |
|
After Width: | Height: | Size: 903 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 176 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 162 KiB |
@@ -0,0 +1,21 @@
|
||||
CRÉATION D'UN SITE WEB MUTUALISÉ EN LANGUEDOC-ROUSSILLON
|
||||
http://regionlr.caes.cnrs.fr/
|
||||
|
||||
HISTORIQUE :
|
||||
Les origines de ce site web sont liées à une volonté du bureau de la Region d'homogénéiser la communication par Internet entre les 4 entité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 était aussi de faciliter la diffusion des informations pour leurs responsables, professionnelle(e)s ou élu(e)s du CAES Région, mais aussi de permettre à des élus et/ou présidents de CLAS de rédiger des articles. Un plus grand nombre d'élus peut ainsi se partager cette diffusion de l'information sous contrôle toutefois de responsables choisis.
|
||||
Le projet a été décidé lors du CRC aux Plantiers en juin 2013.
|
||||
|
||||
ARCHITECTURE :
|
||||
L'architecture SPIP a été choisie parmi d'autres CMS connus (Drupal, Joomla, WordPress ...) parce que le webmestre le connaissait un peu ! De plus cette solution est proposée dans les offres d'hébergement (http://www.offres-de-services-labos.net/hebergement.html) que la DSI met à 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 à rédiger un article, lui ajouter un document ou une photo. L'article, une fois rédigé dans un espace privé, est soumis pour validation à un administrateur qui peut l'accepter et le publier sur la partie publique donc visible du site. Ce contrôle est nécessaire compte-tenu du fait que le Président de Région est responsable de la publication.
|
||||
L'administrateur, outre cette validation des articles, participe à la présentation des contenus, en regroupant les articles dans les rubriques appropriées. Chaque CLAS ainsi que la RÉGION a donc une certaine autonomie pour gérer ses infos.
|
||||
|
||||
La présentation graphique des pages est commune à l'ensemble du site mais varie en fonction de chaque entité qui possède chacune un logo simple permettant une identification facile par les agents. Il y a toutefois des éléments communs à chaque page car ils concernent des infos pratiques pour les usagers du CAES en général, dans lesquels on trouve aussi des outils basiques comme la fonction Rechercher ou un mini calendrier qui fournit une vue compacte des évènements du mois en cours. Il a été mis en place également une zone Intranet pour partager des documents destinés aux élus et professionnels du CAES.
|
||||
|
||||
HÉBERGEMENT :
|
||||
SPIP est proposé dans les offres d'hébergement de la DSI avec une convention qui doit être signée par le Président du CAES. Nous avons choisi une formule gratuite avec un espace serveur de 2 Go mais cet espace dédié peut ê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é 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ê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ées assez sereinement en concertation entre nous et tous les informaticiens impliqués à Montpellier ou au CAES National et nous tenons à les remercier pour leurs conseils et contributions dans ce projet.
|
||||
|
||||
Pour toute question pratique, s'adresser à Gilles Niel (gilles.niel@enscm.fr)
|
||||
|
||||
|
After Width: | Height: | Size: 109 KiB |