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
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
-45
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:])
+5 -1
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

@@ -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)
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