Files
dumas_gestion/mondumas/models/agenda.py

175 lines
6.2 KiB
Python

# -*- 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 dateutil.relativedelta
import transaction
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_agendas(request,code):
if code =='':
query = "SELECT * FROM p_agenda where actif = 1 order by code;"
results = request.dbsession.execute(query).fetchall()
else:
query = "SELECT * FROM p_agenda where code = :code;"
results = request.dbsession.execute(query, {'code': code}).first()
return results
def get_table(code):
if code == 'DD':
table = 'dem_devis'
elif code == 'OS':
table = 'ordres'
else:
table = 'rdvous'
return table
def get_table_details(code):
if code == 'DD':
table = 'dem_lig'
elif code == 'OS':
table = 'ordres_lig'
else:
table = 'rdvous_lig'
return table
def get_dossier_by_no(request,nodossier):
societe = nodossier[0:2]
table = get_table(nodossier[3:5])
no_id = nodossier[6:]
query = """
SELECT d.*, c.*, a.NOM as nom_cabinet, e.NOM as nom_expert FROM %s d
INNER JOIN clients c ON d.societe = c.societe and d.cd_cli = c.cd_cli
INNER JOIN p_cabinet a ON d.societe = a.societe and d.cabinet = a.code
INNER JOIN p_experts e ON d.societe = e.societe and d.cabinet = e.code_cab and d.expert = e.code_exp
where d.societe = '%s' and d.no_id=%s;""" % (table, societe, no_id);
results = request.dbsession.execute(query).first()
return results
def get_dossier_rdv_by_no(request,nodossier, nolig):
societe = nodossier[0:2]
table = get_table_details(nodossier[3:5])
no_id = nodossier[6:]
if nolig == '0':
query = "SELECT * FROM %s where societe = '%s' and no_id=%s;" % (table, societe, no_id)
results = request.dbsession.execute(query).fetchall()
else:
query = "SELECT * FROM %s where societe = '%s' and no_id=%s and nolig=%s;" % (table, societe, no_id, nolig)
results = request.dbsession.execute(query).first()
return results
def get_rendez_vous(request, itc):
d = datetime.now()
d = d - dateutil.relativedelta.relativedelta(months=2)
# début du mois M-2
datedeb = d.strftime('%Y-%m-01')
# lire les rdv de l'ITC
query = """
(SELECT CONCAT(l.societe,"-OS-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM ordres_lig l
INNER JOIN ordres e ON l.societe=e.societe AND l.no_id=e.no_id
WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi)
UNION
(SELECT CONCAT(l.societe,"-DD-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM dem_lig l
INNER JOIN dem_devis e ON l.societe=e.societe AND l.no_id=e.no_id
WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi)
UNION
(SELECT CONCAT(l.societe,"-RD-",l.no_id) as nodossier, l.rdv_debut, l.rdv_fin, e.c_nom FROM rdvous_lig l
INNER JOIN rdvous e ON l.societe=e.societe AND l.no_id=e.no_id
WHERE l.datevi >= :datedeb AND l.liste=:itc ORDER BY l.datevi, l.heurevi);
"""
results = request.dbsession.execute(query, {'datedeb': datedeb, 'itc': itc}).fetchall()
return results
def delete_rdv(request, nodossier, nolig):
societe = nodossier[0:2]
table = get_table_details(nodossier[3:5])
no_id = nodossier[6:]
query = "DELETE FROM %s where societe = '%s' and no_id=%s and nolig=%s;" % (table, societe, no_id, nolig)
execute_query(request, query, {})
def update_rdv(request, nodossier, nolig, comment, commentvi, date_rdv):
societe = nodossier[0:2]
table = get_table_details(nodossier[3:5])
no_id = nodossier[6:]
# formater les champs
ddate = datetime.strptime(date_rdv, '%d-%m-%Y %H:%M')
datevi = ddate.strftime("%Y-%m-%d")
heurevi = date_rdv[-5:]
auj = date.today().strftime("%Y-%m-%d")
if nolig == '0':
query = "INSERT INTO %s SET societe='%s',no_id=%s,date='%s',datevi='%s',heurevi='%s',comment='%s',commentvi='%s'" % (table, societe, no_id,auj,datevi, heurevi, comment, commentvi)
else:
query = "UPDATE %s SET datevi='%s', heurevi='%s', comment='%s', commentvi='%s' where societe = '%s' and no_id=%s and nolig=%s;" % (table, datevi, heurevi, comment, commentvi, societe, no_id, nolig)
execute_query(request, query, {})
def update_journal(request, jnl, no_id, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'date':
ddate = datetime.strptime(new_values['date'], '%d/%m/%Y')
new_values['date'] = ddate.strftime("%Y/%m/%d")
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if no_id == '0':
if jnl == 'C':
query = "INSERT INTO jnl_caisse SET %s" % s
else:
query = "INSERT INTO jnl_caisse SET %s" % s
else:
new_values['no_id'] = no_id
if jnl == 'C':
query = "UPDATE jnl_caisse SET %s WHERE no_id = :no_id;" % s
else:
query = "UPDATE jnl_banque SET %s WHERE no_id = :no_id;" % s
execute_query(request, query, new_values)
def delete_membre(request, mbr_id):
query = "DELETE FROM membres WHERE mbr_id = :mbr_id ;"
execute_query(request, query, {'mbr_id': mbr_id})
def update_membre(request, mbr_id, new_values):
# formater les champs
s = ''
for param in new_values.keys():
if param == 'nom':
new_values['nom'] = new_values['nom'].upper()
if param == 'ville':
new_values['ville'] = new_values['ville'].upper()
if s:
s += ",%s=:%s" % (param, param)
else:
s = "%s=:%s" % (param, param)
if mbr_id == '0':
query = "INSERT INTO membres SET %s" % s
else:
new_values['mbr_id'] = mbr_id
query = "UPDATE membres SET %s WHERE mbr_id = :mbr_id;" % s
execute_query(request, query, new_values)