creation rdv avec saisie chantier en autocompletion
This commit is contained in:
@@ -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]
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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} | ${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>
|
||||||
|
|||||||
@@ -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} | ${rdv.C_QUALITE} ${rdv.C_NOM}</span>
|
<p class="form-control-static text-danger">${nodossier} | ${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>
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user