235 lines
7.7 KiB
Python
235 lines
7.7 KiB
Python
# -*- coding: utf8 -*-
|
|
from pyramid.response import Response
|
|
from pyramid.renderers import render, get_renderer
|
|
from pyramid.view import (
|
|
view_config,
|
|
forbidden_view_config,
|
|
)
|
|
from pyramid.httpexceptions import (
|
|
HTTPFound,
|
|
HTTPNotFound,
|
|
HTTPForbidden,
|
|
)
|
|
|
|
from pyramid_mailer.message import Message, Attachment
|
|
from datetime import *
|
|
import hashlib
|
|
|
|
from sqlalchemy.exc import DBAPIError
|
|
import json
|
|
|
|
from ..models.default import *
|
|
from ..models.agenda import *
|
|
from ..models.dossier import *
|
|
|
|
|
|
@view_config(route_name='rdv_edit', renderer='../templates/agenda/rdv_edit.pt', permission='view')
|
|
def rdv_edit(request):
|
|
|
|
logged_in = request.authenticated_userid.upper()
|
|
nodossier = request.matchdict['nodossier']
|
|
nolig = request.matchdict['nolig']
|
|
url = request.route_url("rdv_edit", nodossier=nodossier, nolig=nolig)
|
|
message = ''
|
|
|
|
# lire la liste des users avec agenda
|
|
agendas = get_users_agenda(request, '')
|
|
# liste des types de rdv
|
|
types_rdv = get_types_rdv(request)
|
|
|
|
# creation d'un rdv ?
|
|
if nolig == '0':
|
|
# nouveau
|
|
rdv = {}
|
|
rdv['C_QUALITE'] = ''
|
|
rdv['C_NOM'] = ''
|
|
rdv['rdv_debut'] = datetime.today()
|
|
rdv['COMMENT'] = 'RDV DEVIS'
|
|
rdv['LISTE'] = logged_in
|
|
rdv['DATEMAJ'] = date.today()
|
|
rdv['USERMAJ'] = logged_in
|
|
page_title = "Nouveau rendez-vous"
|
|
else:
|
|
# lire le rendez-vous
|
|
rdv = get_dossier_rdv_by_no(request, nodossier, nolig)
|
|
if not rdv:
|
|
request.session.flash(u"Rendez-vous non trouvé : %s" % nodossier, 'warning')
|
|
return HTTPFound(location=request.route_url('agenda', date='today'))
|
|
|
|
page_title= "Modification du rdv du %s" % (rdv.rdv_debut.strftime('%d-%m-%Y %H:%M'))
|
|
|
|
if 'form.submitted' in request.params:
|
|
new_values = {}
|
|
for param, db_value in rdv.items():
|
|
if param in request.params and request.params[param] != db_value:
|
|
new_values[param] = request.params[param]
|
|
|
|
if new_values:
|
|
new_values['USERMAJ'] = logged_in.upper()
|
|
ddate = datetime.strptime(new_values['rdv_debut'], '%d-%m-%Y %H:%M')
|
|
import pdb;pdb.set_trace()
|
|
update_rdv(request, nodossier, nolig, new_values)
|
|
request.session.flash(u"Le rendez-vous a été mis à jour avec succès.", 'success')
|
|
return HTTPFound(location=request.route_url('agenda', date=ddate.strftime('%Y-%m-%d')))
|
|
|
|
if 'form.deleted' in request.params:
|
|
delete_rdv(request, nodossier, nolig)
|
|
request.session.flash(u"Le rendez-vous a été supprimé avec succès.", 'success')
|
|
return HTTPFound(location=request.route_url('agenda', date=rdv.rdv_debut.strftime('%Y-%m-%d')))
|
|
|
|
return {
|
|
'page_title': page_title,
|
|
'url': url,
|
|
'logged_in': logged_in,
|
|
'nodossier': nodossier,
|
|
'nolig': nolig,
|
|
'types_rdv': types_rdv,
|
|
'agendas': agendas,
|
|
'rdv': rdv,
|
|
'message': message,
|
|
}
|
|
|
|
@view_config(route_name='agenda', renderer='../templates/agenda/agenda.pt', permission='view')
|
|
def agenda(request):
|
|
|
|
message = ''
|
|
# récupérer les paramètres de l'appel de la view
|
|
datePlan = request.matchdict['date']
|
|
logged_in = request.authenticated_userid.upper()
|
|
|
|
if datePlan == 'today':
|
|
datePlan = date.today().strftime('%Y-%m-%d')
|
|
url = request.route_url('agenda', date=datePlan)
|
|
url_select = request.route_url('dossier_select', date=datePlan)
|
|
|
|
# liste des types de rdv
|
|
types_rdv = get_types_rdv(request)
|
|
type_rdv = 'RDV DEVIS'
|
|
|
|
# liste des users avec agenda
|
|
agendas = get_users_agenda(request, '')
|
|
|
|
# le user est-il un commercial ?
|
|
member = get_member_by_id(request, logged_in)
|
|
if member.access == 0:
|
|
isCommercial = True
|
|
else:
|
|
isCommercial = False
|
|
agenda = member.agenda
|
|
|
|
# prendre en compte les paramètres de saisie
|
|
if 'agenda' in request.params:
|
|
agenda = request.params["agenda"]
|
|
|
|
# -- CREER un rendez-vous
|
|
if 'form.submitted' in request.params:
|
|
dateRDV = request.params['dateRDV']
|
|
heureRDV = request.params['heureRDV']
|
|
type_rdv = request.params['type_rdv']
|
|
|
|
societe = request.params['societe']
|
|
name = request.params['name'].split(' | ')
|
|
create_rdv(request, name[1], dateRDV, heureRDV, type_rdv, agenda, logged_in.upper())
|
|
request.session.flash(u"Le rendez-vous a été CREE avec succès.", 'success')
|
|
# position le planning à le date de crétaion du RDV
|
|
datePlan = dateRDV
|
|
|
|
rows = get_rendez_vous(request, agenda)
|
|
|
|
# construire la liste des events
|
|
events = []
|
|
for row in rows:
|
|
# déterminer la couleur de l'event selon la societe
|
|
societe = row.nodossier[0:2]
|
|
if societe == "PE":
|
|
color = "#ffffb3"
|
|
elif societe == "ME":
|
|
color = "#ffe44d"
|
|
elif societe == "PL":
|
|
color = "#b3ff66"
|
|
elif societe == "PO":
|
|
color = "#b1dae7"
|
|
else:
|
|
color = "#ffb3cc"
|
|
|
|
json_event = {
|
|
'title': '%s %s' % (row.c_qualite, row.c_nom),
|
|
'description': '%s %s' % (row.c_cp, row.c_ville.capitalize()),
|
|
'start': row.rdv_debut.strftime('%Y-%m-%d %H:%M:%S'),
|
|
'end': row.rdv_fin.strftime('%Y-%m-%d %H:%M:%S'),
|
|
'allDay': False,
|
|
'color': color,
|
|
'textColor': 'Black',
|
|
'url': '/dossier_view/%s' % (row.nodossier),
|
|
}
|
|
events.append(json_event)
|
|
|
|
|
|
return {
|
|
'page_title': 'Agenda de %s' % agenda,
|
|
'calendar_events': json.dumps(events),
|
|
'agendas': agendas,
|
|
'agenda': agenda,
|
|
'isCommercial': isCommercial,
|
|
'types_rdv': types_rdv,
|
|
'type_rdv': type_rdv,
|
|
'message': message,
|
|
'url': url,
|
|
'url_select': url_select,
|
|
'datePlan': datePlan,
|
|
}
|
|
|
|
@view_config(route_name='planning', renderer='../templates/agenda/planning.pt', permission='view')
|
|
def planning(request):
|
|
|
|
# construire la liste des ressources
|
|
# {"id":"a","title":"Auditorium A"}
|
|
ressources = []
|
|
# liste des users avec agenda
|
|
users = get_users_agenda(request, '')
|
|
for row in users:
|
|
json_ressources = {
|
|
'id': row.CD_UTI,
|
|
'title': row.NOM
|
|
}
|
|
ressources.append(json_ressources)
|
|
|
|
# construire la liste des events
|
|
events = []
|
|
for user in users:
|
|
rows = get_rendez_vous(request, user.CD_UTI)
|
|
for row in rows:
|
|
# déterminer la couleur de l'event selon la societe
|
|
societe = row.nodossier[0:2]
|
|
if societe == "PE":
|
|
color = "#ffffb3"
|
|
elif societe == "ME":
|
|
color = "#ffe44d"
|
|
elif societe == "PL":
|
|
color = "#b3ff66"
|
|
elif societe == "PO":
|
|
color = "#b1dae7"
|
|
else:
|
|
color = "#ffb3cc"
|
|
|
|
json_event = {
|
|
'resourceId': user.CD_UTI,
|
|
'title': row.c_nom,
|
|
'description': '%s %s' % (row.c_cp, row.c_ville.capitalize()),
|
|
'start': row.rdv_debut.strftime('%Y-%m-%d %H:%M:%S'),
|
|
'end': row.rdv_fin.strftime('%Y-%m-%d %H:%M:%S'),
|
|
'allDay': False,
|
|
'color': color,
|
|
'textColor': 'Black',
|
|
'url': '/dossier_view/%s' % (row.nodossier),
|
|
}
|
|
events.append(json_event)
|
|
|
|
|
|
return {
|
|
'page_title': 'Planning',
|
|
'calendar_events': json.dumps(events),
|
|
'calendar_ressources': json.dumps(ressources),
|
|
}
|
|
|