creation rdv avec saisie chantier en autocompletion

This commit is contained in:
2020-03-14 11:45:26 +01:00
parent cdff87d001
commit 59778cf3e9
7 changed files with 130 additions and 77 deletions

View File

@@ -76,11 +76,14 @@ def update_rdv(request, nodossier, nolig, new_values):
else: else:
s = "%s=:%s" % (param, param) s = "%s=:%s" % (param, param)
new_values['societe'] = societe if nolig == '0':
new_values['no_id'] = no_id create_rdv(request, nodossier, new_values['DATEVI'], new_values['HEUREVI'], new_values['COMMENT'], new_values['LISTE'], new_values['USERMAJ'])
new_values['nolig'] = nolig else:
query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s new_values['societe'] = societe
execute_query(request, query, new_values) new_values['no_id'] = no_id
new_values['nolig'] = nolig
query = "UPDATE dem_lig SET %s WHERE societe = :societe AND NO_ID = :no_id AND NOLIG = :nolig ;" % s
execute_query(request, query, new_values)
def create_rdv(request, nodossier, dateRDV, heureRDV, type_rdv, agenda, logged_in): def create_rdv(request, nodossier, dateRDV, heureRDV, type_rdv, agenda, logged_in):
societe = nodossier[0:2] societe = nodossier[0:2]

View File

@@ -8,6 +8,7 @@ def includeme(config):
config.add_route('home', '/') config.add_route('home', '/')
config.add_route('affiche_message','/affiche_message/{login}') config.add_route('affiche_message','/affiche_message/{login}')
config.add_route('ajax_codepostal', '/ajax_codepostal') config.add_route('ajax_codepostal', '/ajax_codepostal')
config.add_route('ajax_lookup', '/ajax_lookup')
config.add_route('changer_mdp', '/changer_mdp') config.add_route('changer_mdp', '/changer_mdp')
config.add_route('envoyer_mdp', '/envoyer_mdp') config.add_route('envoyer_mdp', '/envoyer_mdp')
config.add_route('login', '/login') config.add_route('login', '/login')

View File

@@ -14,16 +14,6 @@
</div> </div>
</select> </select>
</div> </div>
<label class="control-label col-sm-2">Dossier en cours :</label>
<div class="col-sm-6">
<div class="input-group">
<input class="form-control" type="text" name="dossier" value="${mem_nodossier}&nbsp;&nbsp;|&nbsp;&nbsp;${mem_nomdossier}" readonly />
<div class="input-group-btn">
<a href="${url_select}" class="btn btn-primary">
<span class="glyphicon glyphicon-search"></span></a>
</div>
</div>
</div>
</div> </div>
</form> </form>
</div> </div>
@@ -57,19 +47,30 @@
data-fv-icon-validating="glyphicon glyphicon-refresh"> data-fv-icon-validating="glyphicon glyphicon-refresh">
<p> <p>
Voulez-vous créer un rendez-vous avec : <br /> Voulez-vous créer un rendez-vous : <br />
</p> </p>
<div class="col-xs-offset-3 col-xs-9">
<b>le <span id=dateheureRDV>date</span></b><br />
</div>
<p>pour la société</p>
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-2 col-sm-8"> <div class="col-xs-offset-3 col-xs-8">
<p class="text-danger"><b>${mem_nodossier} - ${mem_nomdossier}</p> <label class="radio-inline"><input type="radio" name="societe" value="PE" checked>PE</label>
<p>le <span id=dateheureRDV>date</p> <label class="radio-inline"><input type="radio" name="societe" value="ME">ME</label>
<label class="radio-inline"><input type="radio" name="societe" value="PL">PL</label>
<label class="radio-inline"><input type="radio" name="societe" value="PO">PO</label>
<label class="radio-inline"><input type="radio" name="societe" value="CD">CD</label>
</div> </div>
</div> </div>
<input type="hidden" name="dateRDV" id=dateRDV value="date">
<input type="hidden" name="heureRDV" id=heureRDV value="heure">
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-2 col-sm-10"> <label class="col-xs-3 control-label">Nom ou numéro</label>
<label>Motif :</label> <div class="col-xs-8">
<input type="text" class="form-control" id="name" name="name" placeholder="3 caractères minimum" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Motif</label>
<div class="col-sm-8">
<select class="form-control" id="type_rdv" name="type_rdv"> <select class="form-control" id="type_rdv" name="type_rdv">
<div tal:repeat="item types_rdv"> <div tal:repeat="item types_rdv">
<option value="${item.LIB}" tal:attributes="selected type_rdv==item.LIB and 'selected' or None">${item.LIB}</option> <option value="${item.LIB}" tal:attributes="selected type_rdv==item.LIB and 'selected' or None">${item.LIB}</option>
@@ -77,11 +78,12 @@
</select> </select>
</div> </div>
</div> </div>
<input type="hidden" name="dateRDV" id=dateRDV value="date">
<input type="hidden" name="heureRDV" id=heureRDV value="heure">
<div class="form-group"> <div class="form-group">
<div class="col-sm-5 col-sm-offset-4"> <div class="col-sm-5 col-sm-offset-4">
<button type="submit" class="btn btn-danger" name="form.submitted" <button type="submit" class="btn btn-danger" name="form.submitted">Créer</button>
tal:condition="mem_nodossier != 'Aucun'">Créer</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button> <button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
</div> </div>
</div> </div>
@@ -92,11 +94,15 @@
</div> </div>
</div> </div>
<br />
<br />
</div><!-- content --> </div><!-- content -->
<div metal:fill-slot="additional_scripts"> <div metal:fill-slot="additional_scripts">
<script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar-scheduler/1.9.4/scheduler.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar-scheduler/1.9.4/scheduler.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/locale/fr.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/locale/fr.js"></script>
<!-- autocomplete plugin -->
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
var datePlan = '${datePlan}'; var datePlan = '${datePlan}';
@@ -121,6 +127,13 @@
element.find('.fc-title').append("<br/>" + event.description); element.find('.fc-title').append("<br/>" + event.description);
}, },
dayClick: function(date, jsEvent, view) { dayClick: function(date, jsEvent, view) {
inputDate = moment(date).format('YYYY-MM-DD');
var today = new Date();
// disable dayClick for past dates
if (date < today)
{
return false;
}
$('#dateheureRDV').html(moment(date).format('dddd DD MMMM à HH:mm')); $('#dateheureRDV').html(moment(date).format('dddd DD MMMM à HH:mm'));
$('#dateRDV').attr('value', moment(date).format('YYYY-MM-DD')); $('#dateRDV').attr('value', moment(date).format('YYYY-MM-DD'));
$('#heureRDV').attr('value', moment(date).format('HH:mm')); $('#heureRDV').attr('value', moment(date).format('HH:mm'));
@@ -136,6 +149,22 @@
validating: 'glyphicon glyphicon-refresh' validating: 'glyphicon glyphicon-refresh'
}, },
}); });
$('#name').autocomplete({
source: function (request, response) {
$.ajax({
url:'/ajax_lookup',
dataType: 'json',
data: {
recherche: $("input[name='societe']:checked").val() + request.term,
},
success: function (data) {
response( data );
},
});
},
minLength: 6,
appendTo: "#confirmCreate"
});
}); });
</script> </script>
</div> </div>

View File

@@ -13,7 +13,7 @@
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-3">No dossier</label> <label class="control-label col-sm-3">No dossier</label>
<div class="col-sm-9"> <div class="col-sm-9">
<span class="form-control-static text-danger">${nodossier}&nbsp;&nbsp;|&nbsp;&nbsp;${rdv.C_QUALITE} ${rdv.C_NOM}</span> <p class="form-control-static text-danger">${nodossier}&nbsp;&nbsp;|&nbsp;&nbsp;${rdv.C_QUALITE} ${rdv.C_NOM}</p>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -29,18 +29,25 @@
<span class="glyphicon glyphicon-calendar"></span> <span class="glyphicon glyphicon-calendar"></span>
</span> </span>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-3" for="COMMENT">Commentaire</label> <label class="control-label col-sm-3">Motif </label>
<div class="col-sm-9"> <div class="col-sm-9">
<input class="form-control" type="text" id=".COMMENT" name="COMMENT" value="${rdv.COMMENT}" <select class="form-control" id="COMMENT" name="COMMENT">
placeholder="65 caractères maximum" <div tal:repeat="item types_rdv">
data-fv-notempty="true" <option value="${item.LIB}" tal:attributes="selected rdv.COMMENT==item.LIB and 'selected' or None">${item.LIB}</option>
data-fv-notempty-message="Un commentaire est obligatoire" </div>
data-fv-stringlength="true" </select>
data-fv-stringlength-max="65" </div>
data-fv-stringlength-message="65 caractères maximum" /> </div>
<div class="form-group">
<label class="control-label col-sm-3" for="LISTE">RDV avec</label>
<div class="col-sm-9">
<select class="form-control" id="LISTE" name="LISTE">
<div tal:repeat="item agendas">
<option value="${item.CD_UTI}" tal:attributes="selected rdv.LISTE==item.CD_UTI and 'selected' or None">${item.NOM}</option>
</div>
</select>
</div> </div>
</div> </div>

View File

@@ -29,32 +29,34 @@ def rdv_edit(request):
logged_in = request.authenticated_userid.upper() logged_in = request.authenticated_userid.upper()
nodossier = request.matchdict['nodossier'] nodossier = request.matchdict['nodossier']
nolig = request.matchdict['nolig'] 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 ? # creation d'un rdv ?
if nolig == '0': if nolig == '0':
# lire le user avec agenda # nouveau
agenda = get_users_agenda(request, logged_in) rdv = {}
if agenda: rdv['C_QUALITE'] = ''
aujourdhui = datetime.now() rdv['C_NOM'] = ''
create_rdv(request, nodossier, aujourdhui.strftime("%Y-%m-%d"), aujourdhui.strftime("%H:00"), 'RDV DEVIS', logged_in, logged_in) rdv['rdv_debut'] = datetime.today()
request.session.flash(u"Le rendez-vous a été CREE avec succès.", 'success') rdv['COMMENT'] = 'RDV DEVIS'
else: rdv['LISTE'] = logged_in
request.session.flash(u"Vous ne pouvez pas créer de rendez-vous.", 'danger') rdv['DATEMAJ'] = date.today()
return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) rdv['USERMAJ'] = logged_in
page_title = "Nouveau rendez-vous"
url = request.route_url("rdv_edit", nodossier=nodossier, nolig=nolig) else:
# lire le rendez-vous
message = '' rdv = get_dossier_rdv_by_no(request, nodossier, nolig)
# lire le rendez-vous if not rdv:
rdv = get_dossier_rdv_by_no(request, nodossier, nolig) request.session.flash(u"Rendez-vous non trouvé : %s" % nodossier, 'warning')
if not rdv: return HTTPFound(location=request.route_url('agenda', date='today'))
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'))
# memorize nodossier et nom dossier
request.session['mem_nodossier'] = nodossier
request.session['mem_nomdossier'] = '%s %s' % (rdv.C_QUALITE, rdv.C_NOM)
page_title= "Modification du rdv du %s" % (rdv.rdv_debut.strftime('%d-%m-%Y %H:%M'))
if 'form.submitted' in request.params: if 'form.submitted' in request.params:
new_values = {} new_values = {}
@@ -64,11 +66,11 @@ def rdv_edit(request):
if new_values: if new_values:
new_values['USERMAJ'] = logged_in.upper() 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) update_rdv(request, nodossier, nolig, new_values)
request.session.flash(u"Le rendez-vous a été mis à jour avec succès.", 'success') 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')))
return HTTPFound(location=request.route_url('agenda', date=rdv.rdv_debut.strftime('%Y-%m-%d')))
if 'form.deleted' in request.params: if 'form.deleted' in request.params:
delete_rdv(request, nodossier, nolig) delete_rdv(request, nodossier, nolig)
@@ -81,6 +83,8 @@ def rdv_edit(request):
'logged_in': logged_in, 'logged_in': logged_in,
'nodossier': nodossier, 'nodossier': nodossier,
'nolig': nolig, 'nolig': nolig,
'types_rdv': types_rdv,
'agendas': agendas,
'rdv': rdv, 'rdv': rdv,
'message': message, 'message': message,
} }
@@ -98,14 +102,6 @@ def agenda(request):
url = request.route_url('agenda', date=datePlan) url = request.route_url('agenda', date=datePlan)
url_select = request.route_url('dossier_select', date=datePlan) url_select = request.route_url('dossier_select', date=datePlan)
# recall code et nom élève
if 'mem_nodossier' in request.session:
mem_nodossier = request.session['mem_nodossier']
mem_nomdossier = request.session['mem_nomdossier']
else:
mem_nodossier = 'Aucun'
mem_nomdossier = 'dossier sélectionné'
# liste des types de rdv # liste des types de rdv
types_rdv = get_types_rdv(request) types_rdv = get_types_rdv(request)
type_rdv = 'RDV DEVIS' type_rdv = 'RDV DEVIS'
@@ -126,13 +122,17 @@ def agenda(request):
agenda = request.params["agenda"] agenda = request.params["agenda"]
# -- CREER un rendez-vous # -- CREER un rendez-vous
if 'form.submitted' in request.params and mem_nodossier != 'Aucun': if 'form.submitted' in request.params:
dateRDV = request.params['dateRDV'] dateRDV = request.params['dateRDV']
heureRDV = request.params['heureRDV'] heureRDV = request.params['heureRDV']
type_rdv = request.params['type_rdv'] type_rdv = request.params['type_rdv']
create_rdv(request, mem_nodossier, dateRDV, heureRDV, type_rdv, agenda, logged_in.upper()) 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') 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) rows = get_rendez_vous(request, agenda)
@@ -174,8 +174,6 @@ def agenda(request):
'types_rdv': types_rdv, 'types_rdv': types_rdv,
'type_rdv': type_rdv, 'type_rdv': type_rdv,
'message': message, 'message': message,
'mem_nodossier': mem_nodossier,
'mem_nomdossier': mem_nomdossier,
'url': url, 'url': url,
'url_select': url_select, 'url_select': url_select,
'datePlan': datePlan, 'datePlan': datePlan,

View File

@@ -26,6 +26,9 @@ import json
from ..models.default import * from ..models.default import *
from ..models.agenda import * from ..models.agenda import *
from ..models.dossier import (
get_chantiers_byName
)
def to_decimal(x): def to_decimal(x):
import decimal import decimal
@@ -277,4 +280,19 @@ def ajax_codepostal(request):
return Response(json.dumps(liste)) return Response(json.dumps(liste))
@view_config(route_name='ajax_lookup')
def ajax_lookup(request):
recherche = request.GET['recherche']
societe = recherche[:2] # 1er car.
name = recherche[2:]
# lire les chantiers
chantiers = get_chantiers_byName(request, societe, name)
liste=[]
for row in chantiers:
d = "%s | %s-%s"% (row.chantier, societe, row.numero)
liste.append(d)
return Response(json.dumps(liste))

View File

@@ -185,9 +185,6 @@ def dossier_selected(request):
# fiche dossier # fiche dossier
dossier = get_dossier_by_no(request, nodossier) dossier = get_dossier_by_no(request, nodossier)
# memorize nodossier et nom dossier
request.session['mem_nodossier'] = nodossier
request.session['mem_nomdossier'] = '%s %s' % (dossier.C_QUALITE, dossier.C_NOM)
if goto == 'dossier_view': if goto == 'dossier_view':
return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier)) return HTTPFound(location=request.route_url('dossier_view', nodossier=nodossier))
else: else: