initial upload

This commit is contained in:
2023-06-22 10:34:18 +02:00
parent 6df897b44d
commit 5c621cf669
1030 changed files with 355394 additions and 49 deletions

View File

@@ -0,0 +1,192 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="container">
<div class="alert alert-warning" tal:condition="message" tal:content="message" />
<div class="row">
<p>
<a href="/contacts_list" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span> Retour aux CONTACTS</a>
</p>
</div>
<div class="row">
<form id="exams_agence-form" action="${url}" method="POST">
<div class="form-group">
<label class="control-label col-xs-1">Agence</label>
<div class="col-xs-11">
<a class="btn btn-default" href="${url}?agenceid=1" >VALMY</a>
<a class="btn btn-default" href="${url}?agenceid=2" >SAXE</a>
<a class="btn btn-default" href="${url}?agenceid=3" >CROIX ROUSSE</a>
<a class="btn btn-default" href="${url}?agenceid=4" >MONPLAISIR</a>
<a class="btn btn-default" href="${url}?agenceid=5" >CHARPENNES</a>
<a class="btn btn-default" href="${url}?agenceid=6" >VAUGNERAY</a>
<a class="btn btn-default" href="${url}?agenceid=7" >GENTIL</a>
<a class="btn btn-default" href="${url}?agenceid=8" >VITTON</a>
<a class="btn btn-default" href="${url}?agenceid=9" >WEB</a>
</div>
</div>
</form>
</div>
<br />
<div id="calendar"></div>
<br />
<!-- Modal : Confirmation CREATION -->
<div class="modal fade" id="confirmCreate" role="dialog" aria-labelledby="confirmCreateLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Créer un rendez-vous</h4>
</div>
<div class="modal-body">
<!-- The form is placed inside the body of modal -->
<form id="create_rdv-form" class="form-horizontal" action="${url}" method="post"
data-fv-framework="bootstrap"
data-fv-icon-valid="glyphicon glyphicon-ok"
data-fv-icon-invalid="glyphicon glyphicon-remove"
data-fv-icon-validating="glyphicon glyphicon-refresh">
<p>
Voulez-vous créer un nouveau rendez-vous : <br />
</p>
<div class="col-xs-offset-3 col-xs-9">
<b>le <span id=dateheureRDV>date</span></b><br />
</div>
<div class="form-group">
<label class="col-xs-3 control-label">Pour un</label>
<div class="col-xs-8">
<label class="radio-inline"><input type="radio" name="type_rech" value="E">Elève</label>
<label class="radio-inline"><input type="radio" name="type_rech" value="P" checked>Prospect</label>
</div>
</div>
<div class="form-group" id="form-code">
<label class="col-xs-3 control-label">Nom ou Code</label>
<div class="col-xs-8">
<input type="text" class="form-control" id="name" name="name" placeholder="3 caractères minimum" />
<span id="text-error-message" style="font-size:11px;color:#D9534F;"></span>
</div>
</div>
<input type="hidden" name="datetimeRDV" id="datetimeRDV" value="date">
<input type="hidden" name="current_agence" id="current_agence" value="${current_agence}">
<div class="form-group">
<div class="col-xs-5 col-xs-offset-3">
<button type="submit" id="submitRdv" class="btn btn-danger" name="form.submitted">Créer</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<br />
<br />
</div><!-- content -->
<div metal:fill-slot="additional_scripts">
<!-- Bootstrap Fullcalendar plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar-scheduler/1.9.4/scheduler.min.js"></script>
<script src="https://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>
$(document).ready(function() {
var datePlan = '${datePlan}';
$('#calendar').fullCalendar({
schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source',
locale: 'fr',
header: {
left: 'agendaWeek month listWeek',
center: 'prev title next',
right: 'today'
},
allDaySlot: true,
allDayHtml: "A relancer",
defaultView: 'agendaWeek',
defaultDate: moment(datePlan),
hiddenDays: [0], // hide sunday
height: 'auto',
minTime: "07:00:00",
maxTime: "21:00:00",
displayEventTime: true,
events:${calendar_events},
eventRender: function(event, element){
element.find('.fc-title').append("<br/>" + event.description);
},
dayClick: function(date, jsEvent, view) {
inputDate = moment(date).format('YYYY-MM-DD');
var today = new Date();
if (date < today)
{
return false;
}
$('#dateheureRDV').html(moment(date).format('dddd DD MMMM à HH:mm'));
$('#datetimeRDV').attr('value', moment(date).format('YYYY-MM-DD HH:mm'));
$("#confirmCreate").modal("show");
}
});
$('#create_rdv-form').formValidation({
framework: 'bootstrap',
excluded: ':disabled',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
});
$('#name').on('change input',function(){
$('#text-error-message').text('');
$('#form-code').removeClass('has-feedback has-error');
$('#submitRdv').removeClass('disabled').attr("disabled", false);;
});
$('#create_rdv-form').submit(function(ev){
var actionurl = ev.currentTarget.action;
console.log(actionurl)
var array_code = $('#name').val().split(' | ');
var reg = new RegExp('^[A-Z0-9]+-[A-Z0-9]+|[0-9]{6}$');
var condition1 = array_code.length == 2 && array_code[0].length >= 3 && array_code[1].length == 6 ;
var condition2 = reg.test( $('#name').val().trim())
if(condition1 && condition2){
$('#text-error-message').text('');
return true;
}
else{
$('#form-code').addClass('has-feedback has-error');
$('#submitRdv').addClass('disabled').attr("disabled", true);
$('#text-error-message').text('Code non validé');
ev.preventDefault();
return false;
}
});
$('#name').autocomplete({
source: function (request, response) {
$.ajax({
url:'/ajax_lookup',
dataType: 'json',
data: {
recherche: $("input[name='type_rech']:checked").val() + request.term,
},
success: function (data) {
response( data );
},
});
},
minLength: 3,
appendTo: "#confirmCreate"
});
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,175 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="alert alert-warning" tal:condition="message" tal:content="message" />
<form id="agenda_edit-form" class="form-horizontal" action="${url}" method="post" tal:condition="item"
data-fv-framework="bootstrap"
data-fv-icon-valid="glyphicon glyphicon-ok"
data-fv-icon-invalid="glyphicon glyphicon-remove"
data-fv-icon-validating="glyphicon glyphicon-refresh">
<div class="form-group">
<label class="col-xs-3 control-label" for="debut_rdv">Début rdv</label>
<div class="col-xs-8 date">
<div class="input-group input-append date" id="debut_rdv">
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-time"></span>
</span>
<input class="form-control" type="text" name="debut_rdv" value="${item.debut_rdv.strftime('%d-%m-%Y %H:%M')}"
data-fv-notempty="true"
data-fv-notempty-message="La date de début la réunion est obligatoire"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY HH:mm"
data-fv-date-message="La date de début de la réunion n'est pas valide" />
</div>
</div>
</div>
<div class="form-group">
<label class="col-xs-3 control-label" for="fin_rdv">Fin rdv</label>
<div class="col-xs-8 date">
<div class="input-group input-append date" id="fin_rdv">
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-time"></span>
</span>
<input class="form-control" type="text" name="fin_rdv" value="${item.fin_rdv.strftime('%d-%m-%Y %H:%M')}"
data-fv-notempty="true"
data-fv-notempty-message="La date de fin de la réunion est obligatoire"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY HH:mm"
data-fv-date-message="La date de fin de la réunion n'est pas valide" />
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3">Contact</label>
<div class="col-xs-5">
<p class="form-control-static"><b>${cd_prospect} - ${item.objet_rdv}</b></p>
</div>
<div class="col-xs-4">
<a class="btn btn-warning" role="button" href="${url_fiche}" tal:condition="url_fiche != ''">
<span class="glyphicon glyphicon-user"></span>&nbsp;Fiche contact</a>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3">Notes</label>
<div class="col-xs-8">
<textarea class="form-control" rows="4" cols="40" id="notes" name="notes">${item.notes}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3" for="statut">Statut</label>
<div class="col-xs-8">
<select class="form-control" name="statut">
<option value="NR" tal:attributes="selected item.statut == 'NR' and 'selected' or None">NR</option>
<option value="PRESENT" tal:attributes="selected item.statut == 'PRESENT' and 'selected' or None">PRESENT</option>
<option value="ABSENT" tal:attributes="selected item.statut == 'ABSENT' and 'selected' or None">ABSENT</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3">Résultat</label>
<div class="col-xs-8">
<input class="form-control" type="text" name="resultat" value="${item.resultat}"
data-fv-stringlength="true"
data-fv-stringlength-max="50"
data-fv-stringlength-message="50 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3">Contacté par </label>
<div class="col-xs-8">
<input class="form-control" type="text" name="contact" value="${item.contact}"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3">Dernière modif le</label>
<div class="col-xs-9">
<p class="form-control-static">${item.modif_le.strftime('%d-%m-%Y %H:%M')} par ${item.cd_uti}</p>
</div>
</div>
<div class="form-group">
<div class="col-xs-offset-3 col-xs-8">
<a href="/agenda/${item.debut_rdv.strftime('%Y-%m-%d')}" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
<button class="btn btn-danger" data-toggle="modal" data-target="#confirmDelete">
<span class="glyphicon glyphicon-trash"></span>&nbsp;Supprimer</button>
</div>
</div>
</form>
<br />
<!-- Modal : Confirmation SUPRESSION -->
<div class="modal fade" id="confirmDelete" role="dialog" aria-labelledby="confirmDeleteLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Supprimer le rendez-vous</h4>
</div>
<div class="modal-body">
<!-- The form is placed inside the body of modal -->
<form id="confirmForm" method="post" class="form-horizontal">
<p>Etes-vous certain(e) de vouloir supprimer ?</p>
<div class="form-group">
<div class="col-xs-5 col-xs-offset-3">
<button type="submit" class="btn btn-danger" name="form.deleted">Supprimer</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div metal:fill-slot="additional_scripts">
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
<script>
$(document).ready(function() {
$('#agenda_edit-form').formValidation({
framework: 'bootstrap',
message: 'This value is not valid',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
notes: {
validators: {
stringLength: {
max: 200,
message: '200 caractères maximum'
},
}
},
},
});
$('#debut_rdv').datetimepicker({
format: 'DD-MM-YYYY HH:mm',
stepping: 15,
showClear: true,
allowInputToggle: true,
});
$('#fin_rdv').datetimepicker({
format: 'DD-MM-YYYY HH:mm',
stepping: 15,
showClear: true,
allowInputToggle: true,
});
$('form input').on('keypress', function(e) {
return e.which !== 13;
});
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,68 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
<div class="row">
<form id="member-search-form" class="form-horizontal" role="form" action="${url}" method="post"
data-fv-framework="bootstrap"
data-fv-icon-valid="glyphicon glyphicon-ok"
data-fv-icon-invalid="glyphicon glyphicon-remove"
data-fv-icon-validating="glyphicon glyphicon-refresh">
<div tal:condition="action=='won'">
<p class="col-xs-offset-4 col-xs-8 text-danger">
Ce traitement va clôturer cette fiche et le prospect sera converti en client. <br />
Si vous le confirmez, cette opération sera irrévsersible.
</p>
</div>
<div tal:condition="action=='leave' or action=='cancel' or action=='error'">
<p class="col-xs-offset-4 col-xs-8 text-danger">
Ce traitement va clôturer ce devis. <br />
Si vous le confirmez, cette opération sera irrévsersible.
</p>
</div>
<div tal:condition="action=='lost'">
<p class="col-xs-offset-4 col-xs-8 text-danger">
Ce traitement va clôturer cette fiche. <br />
Si vous le confirmez, cette opération sera irrévsersible.
</p>
<div class="form-group">
<label class="control-label col-xs-4" for="motif_abandon">Motif d'abandon ? </label>
<div class="col-xs-3">
<select class="form-control" id="motif_abandon" name="motif_abandon">
<div tal:repeat="item motifs_abandon">
<option value="${item.LIBELLE}">${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-offset-4 col-xs-8">
<a class="btn btn-default" href="${url_retour}">
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Confirmer</button>
</div>
</div>
</form>
</div><!-- row -->
<script>
$(document).ready(function() {
$('#member-search-form').formValidation();
$('form input').on('keypress', function(e) {
return e.which !== 13;
});
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,744 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#contact">CONTACT</a></li>
<li><a data-toggle="tab" href="#formation">FORMATION</a></li>
<li><a data-toggle="tab" href="#relances">RELANCES</a></li>
<li tal:condition="individu.cd_prospect != 0"><a data-toggle="tab" href="#suivi">SUIVI ADM.</a></li>
<li tal:condition="individu.cd_prospect != 0"><a data-toggle="tab" href="#cpf">CPF</a></li>
<li tal:condition="individu.cd_prospect != 0"><a data-toggle="tab" href="#devis">DEVIS</a></li>
<li tal:condition="individu.cd_prospect != 0"><a data-toggle="tab" href="#vente">VENTE EN LIGNE</a></li>
</ul>
<form id="contact_edit-form" class="form-horizontal" action="${url}" method="post" tal:condition="individu"
data-fv-framework="bootstrap"
data-fv-icon-valid="glyphicon glyphicon-ok"
data-fv-icon-invalid="glyphicon glyphicon-remove"
data-fv-icon-validating="glyphicon glyphicon-refresh">
<div class="tab-content">
<!-- ONGLET CONTACT -->
<div id="contact" class="tab-pane fade in active">
<h3>CONTACT</h3>
<div class="form-group">
<label class="control-label col-xs-4" for="access">Type de contact ?</label>
<div class="col-xs-3">
<select class="form-control" id="type_contact" name="type_contact">
<div tal:repeat="item types_contact">
<option value="${item.LIBELLE}" tal:attributes="selected individu.type_contact==item.LIBELLE and 'selected' or None">${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="access">C'est pour qui ?</label>
<div class="col-xs-3">
<select class="form-control" id="pour_qui" name="pour_qui">
<div tal:repeat="item pour_quis">
<option value="${item}" tal:attributes="selected individu.pour_qui==item and 'selected' or None">${item}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="access">Pour quel type de permis ?</label>
<div class="col-xs-3">
<select class="form-control" id="permis_demande" name="permis_demande">
<div tal:repeat="item permis">
<option value="${item.CAT}" tal:attributes="selected individu.permis_demande==item.CAT and 'selected' or None">${item.CAT}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="age">Votre âge ?</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="age" name="age" value="${individu.age}"
placeholder="45 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="permis_obtenu">Avez-vous déjà un permis ?</label>
<div class="col-xs-3">
<select class="form-control" name="permis_obtenu">
<option value="Non" tal:attributes="selected individu.permis_obtenu == 'Non' and 'selected' or None">Non</option>
<option value="Oui" tal:attributes="selected individu.permis_obtenu == 'Oui' and 'selected' or None">Oui</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="client_marietton">Connaissiez-vous déjà Marietton ?</label>
<div class="col-xs-3">
<select class="form-control" name="client_marietton">
<option value="Non" tal:attributes="selected individu.client_marietton == 'Non' and 'selected' or None">Non</option>
<option value="Oui" tal:attributes="selected individu.client_marietton == 'Oui' and 'selected' or None">Oui</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="origine">Comment vous nous avez connu ?</label>
<div class="col-xs-3">
<select class="form-control" id="origine" name="origine">
<div tal:repeat="item origines">
<option value="${item.LIBELLE}" tal:attributes="selected individu.origine==item.LIBELLE and 'selected' or None">${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="origine_compl">Complément sur l'origine</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="origine_compl" name="origine_compl" value="${individu.origine_compl}"
placeholder="45 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="qui_choisit">Qui a choisi l'auto-école ?</label>
<div class="col-xs-3">
<select class="form-control" id="qui_choisit" name="qui_choisit">
<div tal:repeat="item decideurs">
<option value="${item.LIBELLE}" tal:attributes="selected individu.qui_choisit==item.LIBELLE and 'selected' or None">${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="qui_paye">Qui finance le permis ?</label>
<div class="col-xs-3">
<select class="form-control" id="qui_paye" name="qui_paye">
<div tal:repeat="item financeurs">
<option value="${item.LIBELLE}" tal:attributes="selected individu.qui_paye==item.LIBELLE and 'selected' or None">${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="profession_payeur">Profession du financeur ?</label>
<div class="col-xs-3">
<select class="form-control" id="profession_payeur" name="profession_payeur">
<div tal:repeat="item prof_financeurs">
<option value="${item.LIBELLE}" tal:attributes="selected individu.profession_payeur==item.LIBELLE and 'selected' or None">${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4">Commentaires</label>
<div class="col-xs-6">
<textarea class="form-control" rows="5" cols="40" id="observation" name="observation">${individu.observation}</textarea>
</div>
</div>
<h4 class="text-primary"><b>COORDONNEES</b></h4>
<div class="form-group">
<label class="control-label col-xs-4" for="civilite">Civilité</label>
<div class="col-xs-3">
<select class="form-control" name="civilite">
<option value="M." tal:attributes="selected individu.civilite == 'M.' and 'selected' or None">M.</option>
<option value="Mme" tal:attributes="selected individu.civilite == 'Mme' and 'selected' or None">Mme</option>
<option value="Mlle" tal:attributes="selected individu.civilite == 'Mlle' and 'selected' or None">Mlle</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="nom">Nom</label>
<div class="col-xs-5">
<input class="form-control" type="text" id="nom" name="nom" value="${individu.nom}"
placeholder="45 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="Le nom est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="prenom">Prénom</label>
<div class="col-xs-5">
<input class="form-control" type="text" id="prenom" name="prenom" value="${individu.prenom}"
placeholder="45 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="Le prénom est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="adresse">Adresse</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="adresse" name="adresse" value="${individu.adresse}"
placeholder="40 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="40"
data-fv-stringlength-message="40 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="adresse2">Adresse 2</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="adresse2" name="adresse2" value="${individu.adresse2}"
placeholder="40 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="40"
data-fv-stringlength-message="40 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="code_postal">Code postal</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="code_postal" name="code_postal" value="${code_postal}"
placeholder="5 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="Le code postal est obligatoire" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="tel_fixe">Téléphone fixe</label>
<div class="col-xs-3">
<div class="input-group">
<input class="form-control" type="text" id="tel_fixe" name="tel_fixe" value="${individu.tel_fixe}"
data-fv-phone="true"
data-fv-phone-country="FR"
data-fv-phone-message="Numéro de téléphone non valide" />
<span class="input-group-addon" tal:condition="individu.tel_fixe">
<a href="tel:${individu.tel_fixe}"><span class="glyphicon glyphicon-earphone"></span></a></span>
</div>
</div>
<label class="control-label col-xs-2" for="tel_portable">mobile</label>
<div class="col-xs-3">
<div class="input-group">
<input class="form-control" type="text" id="tel_portable" name="tel_portable" value="${individu.tel_portable}"
data-fv-phone="true"
data-fv-phone-country="FR"
data-fv-phone-message="Numéro de téléphone non valide" />
<span class="input-group-addon" tal:condition="individu.tel_portable">
<a href="tel:${individu.tel_portable}"><span class="glyphicon glyphicon-earphone"></span></a></span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="tel_pere">Téléphone père</label>
<div class="col-xs-3">
<div class="input-group">
<input class="form-control" type="text" id="tel_pere" name="tel_pere" value="${individu.tel_pere}"
data-fv-phone="true"
data-fv-phone-country="FR"
data-fv-phone-message="Numéro de téléphone non valide" />
<span class="input-group-addon" tal:condition="individu.tel_pere">
<a href="tel:${individu.tel_pere}"><span class="glyphicon glyphicon-earphone"></span></a></span>
</div>
</div>
<label class="control-label col-xs-2" for="tel_mere">mère</label>
<div class="col-xs-3">
<div class="input-group">
<input class="form-control" type="text" id="tel_mere" name="tel_mere" value="${individu.tel_mere}"
data-fv-phone="true"
data-fv-phone-country="FR"
data-fv-phone-message="Numéro de téléphone non valide" />
<span class="input-group-addon" tal:condition="individu.tel_mere">
<a href="tel:${individu.tel_mere}"><span class="glyphicon glyphicon-earphone"></span></a></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-xs-4 control-label">Email</label>
<div class="col-xs-6">
<input class="form-control" type="text" name="email" value="${individu.email}" placeholder="50 caractères maximum"
data-fv-emailaddress="true"
data-fv-emailaddress-message="L'adresse email n'est pas valide" />
</div>
</div>
<br />
</div> <!-- onglet contact -->
<!-- ONGLET FORMATION -->
<div id="formation" class="tab-pane fade">
<h3>FORMATION</h3>
<div class="form-group">
<label class="control-label col-xs-4" for="inscrit_autre_AE">Déjà inscrit dans une autre AE ?</label>
<div class="col-xs-3">
<select class="form-control" name="inscrit_autre_AE">
<option value="Non" tal:attributes="selected individu.inscrit_autre_AE == 'Non' and 'selected' or None">Non</option>
<option value="Oui" tal:attributes="selected individu.inscrit_autre_AE == 'Oui' and 'selected' or None">Oui</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4">Quavez-vous fait dans cette AE ?</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="effectue_autre_AE" name="effectue_autre_AE" value="${individu.effectue_autre_AE}"
placeholder="45 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="raison_formation">Pour quelle raison passer le permis ?</label>
<div class="col-xs-3">
<select class="form-control" id="raison_formation" name="raison_formation">
<div tal:repeat="item types_raison">
<option value="${item.LIBELLE}" tal:attributes="selected individu.raison_formation==item.LIBELLE and 'selected' or None">${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4">Avez-vous un budget pour la formation ?</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="budget_formation" name="budget_formation" value="${individu.budget_formation}"
data-fv-digits="true"
data-fv-digits-message="Veuillez saisir un montant" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="echeance_formation">Avez-vous une échéance pour lobtenir ?</label>
<div class="col-xs-3">
<select class="form-control" id="echeance_formation" name="echeance_formation">
<div tal:repeat="item echeances">
<option value="${item}" tal:attributes="selected individu.echeance_formation==item and 'selected' or None">${item}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="type_formation">Comment voulez-vous passer votre permis ? </label>
<div class="col-xs-3">
<select class="form-control" id="type_formation" name="type_formation">
<div tal:repeat="item types_formation">
<option value="${item.LIBELLE}" tal:attributes="selected individu.type_formation==item.LIBELLE and 'selected' or None">${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4">Vos disponibilités ?</label>
<div class="col-xs-6">
<input class="form-control" type="text" id="disponibilites" name="disponibilites" value="${individu.disponibilites}"
placeholder="45 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4">Attentes vis à vis AE</label>
<div class="col-xs-6">
<textarea class="form-control" rows="5" cols="40" id="attentes" name="attentes">${individu.attentes}</textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4">Sources de stress / frustrations :</label>
<div class="col-xs-6">
<textarea class="form-control" rows="5" cols="40" id="stress" name="stress">${individu.stress}</textarea>
</div>
</div>
</div> <!-- onglet contact -->
<!-- ONGLET RELANCES -->
<div id="relances" class="tab-pane fade">
<h3>RELANCES et RDV</h3>
<div class="form-group">
<label class="control-label col-xs-4" for="date_relance1">1ère relance le</label>
<div class="col-xs-2">
<input class="form-control" type="text" id="date_relance1" name="date_relance1" value="${individu.date_relance1}"
placeholder="jj/mm/aaaa"
data-fv-stringlength="true"
data-fv-stringlength-max="10"
data-fv-stringlength-message="format date jj/mm/aaaa" />
</div>
<div class="col-xs-6">
<input class="form-control" type="text" id="resultat1" name="resultat1" value="${individu.resultat1}"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="date_relance2">2ème relance le</label>
<div class="col-xs-2">
<input class="form-control" type="text" id="date_relance2" name="date_relance2" value="${individu.date_relance2}"
placeholder="jj/mm/aaaa"
data-fv-stringlength="true"
data-fv-stringlength-max="10"
data-fv-date="true"
data-fv-date-format="DD/MM/YYYY"
data-fv-date-message="La date n'est pas valide (JJ/MM/AAAA)"
data-fv-stringlength-message="format date jj/mm/aaaa" />
</div>
<div class="col-xs-6">
<input class="form-control" type="text" id="resultat2" name="resultat2" value="${individu.resultat2}"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="date_relance3">3ème relance le</label>
<div class="col-xs-2">
<input class="form-control" type="text" id="date_relance3" name="date_relance3" value="${individu.date_relance3}"
placeholder="jj/mm/aaaa"
data-fv-stringlength="true"
data-fv-stringlength-max="10"
data-fv-date="true"
data-fv-date-format="DD/MM/YYYY"
data-fv-date-message="La date n'est pas valide (JJ/MM/AAAA)"
data-fv-stringlength-message="format date jj/mm/aaaa" />
</div>
<div class="col-xs-6">
<input class="form-control" type="text" id="resultat3" name="resultat3" value="${individu.resultat3}"
data-fv-stringlength="true"
data-fv-stringlength-max="45"
data-fv-stringlength-message="45 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="a_relancer_le">A relancer le</label>
<div class="col-xs-2">
<input class="form-control" type="type" id="a_relancer_le" name="a_relancer_le" value="${individu.a_relancer_le}"
placeholder="jj/mm/aaaa"
data-fv-stringlength="true"
data-fv-stringlength-max="10"
data-fv-date="true"
data-fv-date-format="DD/MM/YYYY"
data-fv-date-message="La date n'est pas valide (JJ/MM/AAAA)"
data-fv-stringlength-message="format date jj/mm/aaaa" />
</div>
<div class="col-xs-6">
<button class="btn btn-primary" type="submit" name="form.a_relancer" tal:condition="not individu.cloture_le and individu.cd_prospect > 0">
<span class="glyphicon glyphicon-earphone"></span> A relancer à J+7</button>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="prochain_rdv_le">Prochain rdv le</label>
<div class="col-xs-2">
<p class="form-control-static" tal:condition="individu.prochain_rdv_le">
${individu.prochain_rdv_le.strftime('%d/%m/%Y - %H:%M')}</p>
</div>
<div class="col-xs-6">
<button class="btn btn-primary" type="submit" name="form.rdv_relance" tal:condition="not individu.cloture_le and individu.cd_prospect > 0">
<span class="glyphicon glyphicon-calendar"></span> Planifier un RDV</button>
</div>
</div>
<!-- agence -->
<h4 class="text-primary"><b>STATUT</b></h4>
<div class="form-group">
<label class="control-label col-xs-4" for="agence">Agence</label>
<div class="col-xs-8">
<select class="form-control" id="agence" name="agence">
<div tal:repeat="item agences">
<option value="${item.CODE}" tal:attributes="selected individu.agence==item.CODE and 'selected' or None">${item.CODE} | ${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="cd_prospect">Code prospect</label>
<div class="col-xs-8">
<p class="form-control-static"><b>${individu.cd_prospect}</b> - Code élève : ${individu.cd_cli}</p>
</div>
<label class="control-label col-xs-4" for="statut">Statut</label>
<div class="col-xs-8">
<p class="form-control-static">
${individu.statut}
<span tal:condition="individu.cloture_le">- ${individu.cloture_le.strftime('%d/%m/%Y')} -
${individu.motif_abandon}
</span>
</p>
</div>
<label class="control-label col-xs-4" for="access">Dernière modif.</label>
<div class="col-xs-8">
<p class="form-control-static">${individu.modif_le.strftime('%d/%m/%Y - %H:%M')} par ${individu.cd_uti}</p>
</div>
</div>
</div> <!-- relances -->
<!-- SUIVI -->
<div id="suivi" class="tab-pane fade">
<h3>SUIVI ADMINISTRATIF&nbsp;
<a href="${request.application_url}/contact_suivi/${individu.cd_prospect}/0" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-plus"></span>&nbsp;Nouveau</a>
</h3>
<table class="table table-striped table-bordered" cellspacing="0" width="100%">
<thead>
<tr>
<th width="20%">Date</th>
<th>Type</th>
<th>Moyen</th>
<th>Résultat</th>
<th>Uti.</th>
<th>No</th>
</tr>
</thead>
<tr tal:repeat="item suivis">
<td>${item.cree_le.strftime('%d/%m/%Y - %H:%M')}</td>
<td>${item.type_rel}</td>
<td>${item.moyen_rel}</td>
<td><a href="/contact_suivi/${item.cd_prospect}/${item.no_ligne}">${item.infos}</a></td>
<td>${item.cd_uti}</td>
<td>${item.no_ligne}</td>
</tr>
</table>
<h3 class="text-primary">RENDEZ-VOUS DU PROSPECT</h3>
<table class="table table-striped table-bordered" cellspacing="0" width="100%">
<thead>
<tr>
<th width="20%">Date</th>
<th>Statut</th>
<th>Résultat</th>
<th>Notes</th>
<th>Uti.</th>
<th width="20%">Créé le</th>
</tr>
</thead>
<tr tal:repeat="item rdvs">
<td><a href="/agenda_edit/${item.no_ligne}">${item.debut_rdv.strftime('%d/%m/%Y - %H:%M')}</a></td>
<td>${item.statut}</td>
<td>${item.resultat}</td>
<td>${item.notes}</td>
<td>${item.cd_uti}</td>
<td>${item.cree_le.strftime('%d/%m/%Y - %H:%M')}</td>
</tr>
</table>
</div>
<!-- ONGLET CPF -->
<div id="cpf" class="tab-pane fade">
<h3><a href="${request.application_url}/devis_cpf_frm/0/P${individu.cd_prospect}" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-plus"></span>&nbsp;Nouveau CPF</a></h3>
<table class="table table-condensed table-bordered" cellspacing="0" width="100%">
<thead>
<tr>
<th>No devis</th>
<th>Créé le</th>
<th>Type devis</th>
<th>Montant - Heures</th>
<th>No dossier</th>
<th>Demandé le</th>
<th class="text-center">Début le</th>
<th class="text-center">Fin le</th>
<th class="text-center">Clôturé le</th>
<th class="text-center">Util.</th>
</tr>
</thead>
<tr tal:repeat="item devis_cpf">
<td>
<a href="${request.application_url}/devis_cpf_frm/${item.no_devis}/P${individu.cd_prospect}">${item.no_devis}</a>
</td>
<td>${item.cree_le.strftime('%d-%m-%Y')}</td>
<td>${item.type_devis}</td>
<td>${layout.to_euro(item.montant_pec)} - ${item.nb_heures_pec} h</td>
<td>${item.no_dossier}</td>
<td tal:condition="item.demande_le">${item.demande_le.strftime('%d-%m-%Y')}</td>
<td tal:condition="not item.demande_le"> </td>
<td tal:condition="item.formation_debut_le">${item.formation_debut_le.strftime('%d-%m-%Y')}</td>
<td tal:condition="not item.formation_debut_le"> </td>
<td tal:condition="item.formation_fin_le">${item.formation_fin_le.strftime('%d-%m-%Y')}</td>
<td tal:condition="not item.formation_fin_le"> </td>
<td tal:condition="item.cloture_le" class="text-success text-center"><b>${item.cloture_le.strftime('%d-%m-%Y')} (${item.statut})</b></td>
<td tal:condition="not item.cloture_le"> </td>
<td class="text-center">${item.cd_uti}</td>
</tr>
</table>
<br />
<br />
</div> <!-- onglet CPF -->
<!-- ONGLET DEVIS -->
<div id="devis" class="tab-pane fade">
<h3><a href="${request.application_url}/devis_frm/0/P${individu.cd_prospect}" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-plus"></span>&nbsp;Nouveau devis</a></h3>
<table class="table table-condensed table-bordered" cellspacing="0" width="100%">
<thead>
<tr>
<th>No devis</th>
<th>Créé le</th>
<th>Organisme</th>
<th>Type devis</th>
<th class="text-center">Clôturé le</th>
<th class="text-center">Util.</th>
</tr>
</thead>
<tr tal:repeat="item devis">
<td>
<a href="${request.application_url}/devis_frm/${item.no_devis}/P${individu.cd_prospect}">${item.no_devis}</a>
</td>
<td>${item.cree_le.strftime('%d-%m-%Y')}</td>
<td>${item.organisme}</td>
<td>${item.type_devis}</td>
<td class="text-success text-center" tal:condition="item.cloture_le"><b>${item.cloture_le.strftime('%d-%m-%Y')} (${item.statut})</b></td>
<td tal:condition="not item.cloture_le"> </td>
<td class="text-center">${item.cd_uti}</td>
</tr>
</table>
<br />
<br />
</div> <!-- onglet devis -->
<!-- ONGLET VENTE -->
<div id="vente" class="tab-pane fade">
<h3>VENTE EN LIGNE</h3>
<div class="form-group">
<label class="control-label col-xs-4" for="cd_prospect">Code prospect</label>
<div class="col-xs-8">
<p class="form-control-static">${individu.cd_prospect}</p>
</div>
<label class="control-label col-xs-4" for="cd_prospect">Nom et prénom</label>
<div class="col-xs-8">
<p class="form-control-static">${individu.civilite} ${individu.nom} ${individu.prenom}</p>
</div>
<label class="control-label col-xs-4" for="cd_prospect">Email</label>
<div class="col-xs-8">
<p class="form-control-static">${individu.email}</p>
</div>
<label class="control-label col-xs-4" for="cd_prospect">Tél. portable</label>
<div class="col-xs-8">
<p class="form-control-static">${individu.tel_portable}</p>
</div>
<label class="control-label col-xs-4" for="cd_prospect">Permis demandé</label>
<div class="col-xs-8">
<p class="form-control-static">${individu.permis_demande}</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="access">Formation</label>
<div class="col-xs-3">
<select class="form-control" id="formation" name="formation">
<div tal:repeat="item formations">
<option value="${item}" tal:attributes="selected formation==item and 'selected' or None">${item}</option>
</div>
</select>
</div>
</div>
<div class="form-group" tal:condition="not individu.cloture_le">
<div class="col-xs-offset-4 col-xs-8">
<button class="btn btn-primary" type="submit" name="form.email">
<span class="glyphicon glyphicon-envelope"></span> Envoi mail INSCRIPTION</button>
<button class="btn btn-primary" type="submit" name="form.sms">
<span class="glyphicon glyphicon-phone"></span> Envoi SMS INSCRIPTION</button>
</div>
</div>
</div> <!-- onglet VENTE -->
<br />
<div class="form-group">
<div class="col-xs-offset-2 col-xs-10">
<div class="form-group">
<a class="btn btn-default" href="${request.application_url}/contacts_list">
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted" tal:condition="not individu.cloture_le">
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
<a class="btn btn-success" href="${request.application_url}/confirm/${individu.cd_prospect}/won"
tal:condition="not individu.cloture_le and individu.cd_prospect > 0">
<span class="glyphicon glyphicon-thumbs-up"></span> Gagné</a>
<a class="btn btn-danger" href="${request.application_url}/confirm/${individu.cd_prospect}/lost"
tal:condition="not individu.cloture_le and individu.cd_prospect > 0">
<span class="glyphicon glyphicon-thumbs-down"></span> Perdu</a>
</div>
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
</div> <!-- tab content -->
</form>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script type="text/javascript">
$('#contact_edit-form').formValidation({
framework: 'bootstrap',
message: 'This value is not valid',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
observation: {
validators: {
stringLength: {
max: 450,
message: '450 caractères maximum'
},
}
},
attentes: {
validators: {
stringLength: {
max: 450,
message: '450 caractères maximum'
},
}
},
stress: {
validators: {
stringLength: {
max: 450,
message: '450 caractères maximum'
},
}
},
},
});
$(document).ready(function() {
$('#code_postal').autocomplete({
source: function (request, response) {
$.ajax({
url:'/ajax_codepostal',
dataType: 'json',
data: {
recherche: request.term,
},
success: function (data) {
response( data );
},
});
},
minLength: 1,
});
});
$('form input').on('keypress', function(e) {
return e.which !== 13;
});
</script>
<script type="text/javascript">
$(function() {
// Javascript to enable link to tab
var hash = document.location.hash;
if (hash) {
console.log(hash);
$('.nav-tabs a[href="'+hash+'"]').tab('show');
}
// Change hash for page-reload
$('a[data-toggle="tab"]').on('show.bs.tab', function (e) {
window.location.hash = e.target.hash;
});
});
</script>
</div> <!-- slot contant -->
</metal:block>

View File

@@ -0,0 +1,116 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
<div class="row">
<form id="member-search-form" class="form-horizontal" role="form" action="${url}" method="post">
<div class="form-group">
<label class="col-xs-4 control-label">Nom, Code ou No mobile du contact</label>
<div class="col-xs-8">
<input type="text" class="form-control" name="name" value="${name}" />
</div>
</div>
<!-- case a cocher "Afficher fiches cloturées" -->
<div class="form-group">
<div class="col-xs-offset-4 col-xs-8">
<input type="checkbox" name="cb_tous" value="cb_tous"
tal:attributes="checked cb_tous == 'oui' and 'checked' or None">
Afficher les fiches cloturées</input>
</div>
</div>
<div class="form-group">
<div class="col-xs-offset-4 col-xs-8">
<button class="btn btn-primary" id="submitButton" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-search"></span>&nbsp;Rechercher</button>
</div>
</div>
</form>
</div><!-- row -->
<div class="row" tal:condition="nb > 0">
<table id="contacts_list" class="table table-striped table-bordered">
<thead>
<tr>
<th>Code</th>
<th>Nom, Prénom</th>
<th>Permis</th>
<th>Créé le</th>
<th>Tél. port.</th>
<th>C. postal</th>
<th>Statut</th>
</tr>
</thead>
</table>
<br />
<br />
</div>
<script>
$(document).ready(function() {
var dataSet = ${dt_data};
$.fn.dataTable.moment('DD/MM/YYYY');
$('#contacts_list').DataTable({
data: dataSet,
pageLength: 100,
bLengthChange: false,
language: {
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
},
columnDefs: [
{ "targets": 0,
"render": function (data, type, full, meta) {
// ajouter un link vers le formulaire
return '<a href="/contact_edit/' + data + '">' + data + '</a>';
},
},
],
createdRow: function( row, data, dataIndex ) {
if ( data[6] == "Gagné" ) {
$('td', row).eq(6).css('background-color', 'LightGreen');
}
if ( data[6] == "Perdu" ) {
$('td', row).eq(6).css('background-color', 'LightPink');
}
},
order: [[ 1, "asc" ]]
});
$('#member-search-form').formValidation({
framework: 'bootstrap',
message: 'This value is not valid',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
name: {
validators: {
notEmpty: {
message: 'Le nom ou le code est obligatoire'
},
stringLength: {
min: 2,
max: 30,
message: 'Le nom ou le code doit avoir de 2 à 30 caractères de long'
},
}
},
}
});
$('form input').on('keypress', function(e) {
var code = e.keyCode || e.which;
if (code === 13) {
e.preventDefault();
// simuler clic bouton submit
document.getElementById("submitButton").click();
}
});
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,59 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
<div class="row">
<form id="contact_suivi-form" action="${url}" method="post" class="form-horizontal">
<div class="form-group">
<label class="control-label col-xs-2" for="infos">Texte</label>
<div class="col-xs-8">
<textarea class="form-control" rows="20" cols="40" id="infos" name="infos">${item.infos}</textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-8">
<a href="${request.application_url}/contact_edit/${item.cd_prospect}#suivi" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span>&nbsp;Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted" tal:condition="readonly==False">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
<button class="btn btn-warning" type="submit" name="form.deleted" tal:condition="readonly==False and no_ligne!='0'">
<span class="glyphicon glyphicon-remove"></span>&nbsp;Supprimer</button>
</div>
</div>
</form>
<br />
<br />
</div> <!-- row -->
<script>
$(document).ready(function() {
$('#contact_suivi-form').formValidation({
framework: 'bootstrap',
message: 'This value is not valid',
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
infos: {
validators: {
stringLength: {
max: 900,
message: '900 caractères maximum'
},
}
},
},
});
$('form input').on('keypress', function(e) {
return e.which !== 13;
});
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,80 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<form id="frm-contacts_list" action="${request.application_url}/contacts_list" method="POST" class="form-horizontal">
<div class="form-group">
<div class="col-xs-6">
<a href="${request.application_url}" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
<a href="${request.application_url}/contact_edit/0" class="btn btn-success" role="button">
<span class="glyphicon glyphicon-plus"></span> Nouveau contact</a>
</div>
<div class="col-xs-6 text-right">
<a href="${request.application_url}/contact_lookup" class="btn btn-primary btn-lg" role="button">
<span class="glyphicon glyphicon-search"></span> RECHERCHE</a>
<a href="${request.application_url}/agenda/today" class="btn btn-primary btn-lg" role="button">
<span class="glyphicon glyphicon-calendar"></span> AGENDA</a>
</div>
</div>
</form>
<table id="contacts_list" class="table table-condensed table-striped table-bordered">
<thead>
<tr>
<th>Créé le</th>
<th>Nom Prénom</th>
<th>Type de permis</th>
<th>A relancer</th>
<th>Contact</th>
<th>Relance 1</th>
<th>Relance 2</th>
<th>Relance 3</th>
<th>Proch. rdv</th>
<th>Statut</th>
</tr>
</thead>
</table>
<br />
<br />
<script type="text/javascript">
var dataSet = ${dt_data};
$(document).ready(function() {
$.fn.dataTable.moment('DD/MM/YYYY');
$('#contacts_list').DataTable({
data: dataSet,
pageLength: 100,
bLengthChange: false,
language: {
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
},
columnDefs: [
{ "targets": 1,
"render": function (data, type, full, meta) {
// ajouter un link vers le formulaire
return '<a href="/contact_edit/' + data.substring(0, 6) + '">' + data + '</a>';
},
},
{ targets: 4,
render: function (data, type, full, meta) {
// ajouter un link vers le formulaire
if (type === 'display' && data != '')
{ data = '<span></span><a href="tel:' + data + '"> <span class="glyphicon glyphicon-earphone"></span></a>'+data+'<span>'; }
else
{ date = ''; }
return data;
},
},
],
order: [[ 0, "desc" ]]
});
});
</script>
</div><!-- content -->
</metal:block>

View File

@@ -0,0 +1,348 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
<div class="row">
<form id="devis_cpf_frm" action="${url}" method="post" class="form-horizontal">
<!-- Phase : DEMANDE -->
<h4 class="text-primary">1. Demande</h4>
<div class="form-group">
<label class="control-label col-xs-4" for="cd_prospect">Code prospect</label>
<div class="col-xs-2 text-primary">
<p class="form-control-static"><b>${devis.cd_prospect}</b></p>
</div>
<div class="col-xs-2 text-right"><b>Code élève</b></div>
<div class="col-xs-4 text-danger"><b>${devis.cd_cli}</b></div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="type_devis">Type de PEC</label>
<div class="col-xs-8" tal:condition="etape <= 3">
<select class="form-control" id="type_devis" name="type_devis">
<div tal:repeat="item types_devis">
<option value="${item.type_devis}" tal:attributes="selected devis.type_devis==item.type_devis and 'selected' or None">${item.libelle}</option>
</div>
</select>
</div>
<div class="col-xs-8" tal:condition="etape > 3">
<input class="form-control" type="text" id="type_devis" name="type_devis" value="${devis.type_devis}" readonly />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="montant_pec">Montant de PEC</label>
<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon">TTC</span>
<input class="form-control" type="text" id="montant_pec" name="montant_pec" value="${devis.montant_pec}" readonly />
</div>
</div>
<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon">HT</span>
<input class="form-control" type="text" id="montant_ht" name="montant_ht" value="${devis.montant_ht}" readonly />
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="nb_heures_pec">Nombre d'heures</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="nb_heures_pec" name="nb_heures_pec" value="${devis.nb_heures_pec}" readonly />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="no_dossier">Numéro de dossier</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="no_dossier" name="no_dossier" value="${devis.no_dossier}"
placeholder="(20 car. max.)"
data-fv-notempty="true"
data-fv-notempty-message="Le Numéro de dossier< est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="20"
data-fv-stringlength-message="20 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="demande_le">Date de demande</label>
<div class="col-xs-4">
<div class="input-group date" id="demande_le">
<input class="form-control" type="text" name="demande_le" value="${layout.date2dmy(devis.demande_le)}"
data-fv-notempty="true"
data-fv-notempty-message="La Date de damande est obligatoire"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<div class="col-xs-4">
<input class="form-control" type="text" id="demande_log" name="demande_log" value="${devis.demande_log}"
placeholder="Commentaire (20 car. max.)" />
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<a href="${url_retour}" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span>&nbsp;Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted" tal:condition="devis.cloture_le == None and devis.accepte_le == None">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
<a href="/confirm/${no_devis}/leave" class="btn btn-danger" role="button" tal:condition="no_devis != '0' and devis.facture_mt==0">
<span class="glyphicon glyphicon-remove"></span>&nbsp;Abandon</a>
<a href="/confirm/${no_devis}/cancel" class="btn btn-warning" role="button" tal:condition="no_devis != '0' and devis.facture_mt==0">
<span class="glyphicon glyphicon-remove"></span>&nbsp;Refus AEM</a>
<a href="/confirm/${no_devis}/error" class="btn btn-warning" role="button" tal:condition="no_devis != '0' and devis.facture_mt==0">
<span class="glyphicon glyphicon-remove"></span>&nbsp;Annulation AEM</a>
</div>
</div>
<!-- Phase : FORMATION -->
<div tal:condition="etape >= 2">
<h4 class="text-primary">2. Formation</h4>
<div class="form-group">
<label class="control-label col-xs-4" for="formation_debut_le">Début du programme prévu le</label>
<div class="col-xs-4">
<div class="input-group date" id="formation_debut_le">
<input class="form-control" type="text" name="formation_debut_le" value="${layout.date2dmy(devis.formation_debut_le)}"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="formation_fin_le">Fin du programme prévu le</label>
<div class="col-xs-4">
<div class="input-group date" id="formation_fin_le">
<input class="form-control" type="text" name="formation_fin_le" value="${layout.date2dmy(devis.formation_fin_le)}"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="fin_pec_le">Date de fin PEC</label>
<div class="col-xs-4">
<div class="input-group date" id="fin_pec_le">
<input class="form-control" type="text" name="fin_pec_le" value="${layout.date2dmy(devis.fin_pec_le)}"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<div class="col-xs-4">
<input class="form-control" type="text" id="validation_log" name="validation_log" value="${devis.validation_log}"
placeholder="Commentaire (20 car. max.)" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="accepte_le">Date d'acceptation</label>
<div class="col-xs-4">
<div class="input-group date" id="accepte_le">
<input class="form-control" type="text" name="accepte_le" value="${layout.date2dmy(devis.accepte_le)}"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<div class="col-xs-4">
<input class="form-control" type="text" id="accepte_log" name="accepte_log" value="${devis.accepte_log}"
placeholder="Commentaire (20 car. max.)" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="debut_renseigne_le">Date d'entrée déclarée</label>
<div class="col-xs-4">
<div class="input-group date" id="debut_renseigne_le">
<input class="form-control" type="text" name="debut_renseigne_le" value="${layout.date2dmy(devis.debut_renseigne_le)}"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
<div class="col-xs-4">
<input class="form-control" type="text" id="debut_renseigne_log" name="debut_renseigne_log" value="${devis.debut_renseigne_log}"
placeholder="Commentaire (20 car. max.)" />
</div>
<p class="col-xs-offset-4 col-xs-8 text-danger">Attention : ne pas oublier de renseigner le portail CPF </p>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<button class="btn btn-primary" type="submit" name="form.formation" tal:condition="devis.cloture_le == None and devis.fin_renseigne_le == None">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
</div>
</div>
</div>
<!-- Phase : FACTURATION -->
<div tal:condition="etape >= 3">
<h4 class="text-primary">3. Facturation</h4>
<div class="form-group">
<label class="control-label col-xs-4" for="fin_renseigne_le">Date de sortie déclarée</label>
<div class="col-xs-4">
<div class="input-group date" id="fin_renseigne_le">
<input class="form-control" type="text" name="fin_renseigne_le" value="${layout.date2dmy(devis.fin_renseigne_le)}"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="nb_heures_effectue">Nombre d'heures effectué</label>
<div class="col-xs-4">
<input class="form-control" type="text" id="nb_heures_effectue" name="nb_heures_effectue" value="${devis.nb_heures_effectue}"
data-fv-numeric="true"
data-fv-numeric-message="Le nombre d'heures est invalide" />
</div>
<div class="col-xs-4">
<input class="form-control" type="text" id="fin_renseigne_log" name="fin_renseigne_log" value="${devis.fin_renseigne_log}"
placeholder="Commentaire (20 car. max.)" />
</div>
<p class="col-xs-offset-4 col-xs-8 text-danger">Attention : ne pas oublier de renseigner le portail CPF </p>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="facture_mt">Montant facturé</label>
<div class="col-xs-4">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
<input class="form-control" type="text" id="facture_mt" name="facture_mt" value="${devis.facture_mt}"
data-fv-notempty="true"
data-fv-notempty-message="Le montant de PEC est obligatoire"
data-fv-numeric="true"
data-fv-numeric-message="Le montant est invalide" />
</div>
</div>
<div class="col-xs-4">
<input class="form-control" type="text" id="facture_log" name="facture_log" value="${devis.facture_log}"
placeholder="Commentaire (20 car. max.)" />
</div>
<p class="col-xs-offset-4 col-xs-8 text-danger">Attention : ne pas oublier de renseigner le portail CPF </p>
</div>
<div class="form-group">
<label class="control-label col-xs-4" >Numéro facture</label>
<div class="col-xs-4">
<p class="form-control-static">${devis.no_facture} <b>&nbsp;du&nbsp;&nbsp;</b>${layout.date2dmy(devis.date_facture)} </p>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<button class="btn btn-primary" type="submit" name="form.facturation" tal:condition="devis.cloture_le == None">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
</div>
</div>
</div>
<div class="form-group" tal:condition="devis.cloture_le">
<label class="control-label col-xs-4" for="cloture_le">Date de clôture</label>
<div class="col-xs-8">
<p class="form-control-static">${devis.cloture_le.strftime('%d/%m/%Y')} (${devis.statut})</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="cd_prospect">Date de création</label>
<div class="col-xs-8">
<p class="form-control-static">${devis.cree_le.strftime('%d/%m/%Y - %H:%M')}</p>
</div>
<label class="control-label col-xs-4" for="cd_prospect">Dernière modifcation</label>
<div class="col-xs-8">
<p class="form-control-static">${devis.modif_le.strftime('%d/%m/%Y - %H:%M')} par ${devis.cd_uti}</p>
</div>
</div>
</form>
<br />
<br />
</div> <!-- row -->
<!-- Bootstrap Datepicker plugin -->
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
<script>
$(document).ready(function() {
$('#devis_cpf_frm').formValidation();
// faire une requete pour récuper le montant et nb heures
$('#type_devis').on('change', function () {
$.post('/ajax_type_devis',
{type_devis: $('#type_devis').val()},
function (data) {
$('#montant_pec').val(data.montant);
$('#montant_ht').val(data.montant_ht);
$('#nb_heures_pec').val(data.nb_heures);
});
});
$('#demande_le').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
}).on('dp.change', function(e) {
// Revalidate the date field
$('#devis_cpf_frm').formValidation('revalidateField', 'demande_le');
});
$('#formation_debut_le').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
}).on('dp.change', function(e) {
// Revalidate the date field
$('#devis_cpf_frm').formValidation('revalidateField', 'formation_debut_le');
});
$('#formation_fin_le').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
}).on('dp.change', function(e) {
// Revalidate the date field
$('#devis_cpf_frm').formValidation('revalidateField', 'formation_fin_le');
});
$('#fin_pec_le').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
}).on('dp.change', function(e) {
// Revalidate the date field
$('#devis_cpf_frm').formValidation('revalidateField', 'fin_pec_le');
});
$('#accepte_le').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
}).on('dp.change', function(e) {
// Revalidate the date field
$('#devis_cpf_frm').formValidation('revalidateField', 'accepte_le');
});
$('#debut_renseigne_le').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
}).on('dp.change', function(e) {
// Revalidate the date field
$('#devis_cpf_frm').formValidation('revalidateField', 'debut_renseigne_le');
});
$('#fin_renseigne_le').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
}).on('dp.change', function(e) {
// Revalidate the date field
$('#devis_cpf_frm').formValidation('revalidateField', 'fin_renseigne_le');
});
$('form input').on('keypress', function(e) {
return e.which !== 13;
});
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,215 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
<div class="row">
<form id="devis_frm" action="${url}" method="post" class="form-horizontal">
<div class="form-group">
<label class="control-label col-xs-4" for="cd_prospect">Code prospect</label>
<div class="col-xs-8 text-primary">
<p class="form-control-static"><b>${devis.cd_prospect}</b></p>
</div>
<label class="control-label col-xs-4" for="cd_cli">Code élève</label>
<div class="col-xs-8 text-danger">
<p class="form-control-static"><b>${devis.cd_cli}</b></p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="organisme">Organisme payeur</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="organisme" name="organisme" value="${devis.organisme}"
placeholder="20 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="L'organisme est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="20"
data-fv-stringlength-message="20 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="entreprise">Entreprise</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="entreprise" name="entreprise" value="${devis.entreprise}"
placeholder="20 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="20"
data-fv-stringlength-message="20 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="adr_org">Adresse</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="adr_org" name="adr_org" value="${devis.adr_org}"
placeholder="40 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="L'adresse est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="40"
data-fv-stringlength-message="40 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="adr2_org">Adresse 2</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="adr2_org" name="adr2_org" value="${devis.adr2_org}"
placeholder="facultatif"
data-fv-stringlength="true"
data-fv-stringlength-max="40"
data-fv-stringlength-message="40 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="cp_org">Code postal</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="cp_org" name="cp_org" value="${devis.cp_org}"
placeholder="5 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="Le code postal est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="5"
data-fv-stringlength-message="5 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="ville_org">Ville</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="ville_org" name="ville_org" value="${devis.ville_org}"
placeholder="40 caractères maximum"
data-fv-notempty="true"
data-fv-notempty-message="La ville est obligatoire"
data-fv-stringlength="true"
data-fv-stringlength-max="40"
data-fv-stringlength-message="40 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="type_devis">Type de devis</label>
<div class="col-xs-8">
<select class="form-control" id="type_devis" name="type_devis">
<div tal:repeat="item types_devis">
<option value="${item.type_devis}" tal:attributes="selected devis.type_devis==item.type_devis and 'selected' or None">${item.libelle}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="no_pec">Numéro de PEC</label>
<div class="col-xs-8">
<p class="form-control-static"><b>${devis.no_pec}</b>
<span tal:condition="devis.date_pec">&nbsp;&nbsp;&nbsp;du <b>${devis.date_pec.strftime('%d/%m/%Y')}</b></span></p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="date_pec">Nombre d'heures</label>
<div class="col-xs-8">
<p class="form-control-static">${devis.nb_heures_pec} h</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="date_debut_pec">Période de PEC</label>
<div class="col-xs-8">
<p class="form-control-static">
<span tal:condition="devis.date_debut_pec">du <b>${devis.date_debut_pec.strftime('%d/%m/%Y')}</b></span>
<span tal:condition="devis.date_fin_pec"> au <b>${devis.date_fin_pec.strftime('%d/%m/%Y')}</b></span>
</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="montant_pec">Montant de PEC</label>
<div class="col-xs-8">
<p class="form-control-static">${layout.to_euro(devis.montant_pec)} (TVA : ${devis.taux_tva}%)</p>
</div>
</div>
<div class="col-sm-offset-4 col-sm-8">
<table class="table table-condensed table-bordered" cellspacing="0" width="100%">
<thead>
<tr>
<th>No facture</th>
<th>Date</th>
<th class="text-right">Montant</th>
</tr>
</thead>
<tr tal:condition="devis.date_facture1">
<td>${devis.no_facture1}</td>
<td>${devis.date_facture1.strftime('%d-%m-%Y')}</td>
<td>${layout.to_euro(devis.mt_facture1)}</td>
</tr>
<tr tal:condition="devis.date_facture2">
<td>${devis.no_facture2}</td>
<td>${devis.date_facture2.strftime('%d-%m-%Y')}</td>
<td>${layout.to_euro(devis.mt_facture2)}</td>
</tr>
<tr tal:condition="devis.date_facture3">
<td>${devis.no_facture3}</td>
<td>${devis.date_facture3.strftime('%d-%m-%Y')}</td>
<td>${layout.to_euro(devis.mt_facture3)}</td>
</tr>
<tr tal:condition="devis.date_facture4">
<td>${devis.no_facture4}</td>
<td>${devis.date_facture4.strftime('%d-%m-%Y')}</td>
<td>${layout.to_euro(devis.mt_facture4)}</td>
</tr>
</table>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="montant_pec">Reste à facturer</label>
<div class="col-xs-8">
<p class="form-control-static text-danger">${layout.to_euro(devis.reste_a_facturer)}</p>
</div>
</div>
<div class="form-group" tal:condition="devis.date_edition">
<label class="control-label col-xs-4" for="date_edition">Date d'édition</label>
<div class="col-xs-8">
<p class="form-control-static"><b>${devis.date_edition.strftime('%d/%m/%Y')}</b></p>
</div>
</div>
<div class="form-group" tal:condition="devis.cloture_le">
<label class="control-label col-xs-4" for="cloture_le">Date de clôture</label>
<div class="col-xs-8">
<p class="form-control-static">${devis.cloture_le.strftime('%d/%m/%Y')} (${devis.statut})</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="cd_prospect">Date de création</label>
<div class="col-xs-8">
<p class="form-control-static">${devis.cree_le.strftime('%d/%m/%Y - %H:%M')}</p>
</div>
<label class="control-label col-xs-4" for="cd_prospect">Dernière modifcation</label>
<div class="col-xs-8">
<p class="form-control-static">${devis.modif_le.strftime('%d/%m/%Y - %H:%M')} par ${devis.cd_uti}</p>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<a href="${url_retour}" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span>&nbsp;Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
<a href="/devis_pec/${no_devis}/${code}" class="btn btn-success" role="button" tal:condition="no_devis != '0' and access == 9">
<span class="glyphicon glyphicon-pencil"></span>&nbsp;Saisir la PEC</a>
<a href="http://devng.marietton.com/PDF/devisPEC-pdf.php?no_devis=${no_devis}" class="btn btn-warning" role="button"
tal:condition="no_devis != '0'">
<span class="glyphicon glyphicon-print"></span>&nbsp;Editer devis</a>
<button class="btn btn-danger" type="submit" name="form.abandoned" tal:condition="no_devis != '0' and devis.montant_pec==0">
<span class="glyphicon glyphicon-remove"></span>&nbsp;Abandon Devis</button>
</div>
</div>
</form>
<br />
<br />
</div> <!-- row -->
<script>
$(document).ready(function() {
$('#devis_frm').formValidation();
$('form input').on('keypress', function(e) {
return e.which !== 13;
});
});
</script>
</div>
</metal:block>

View File

@@ -0,0 +1,184 @@
<metal:block use-macro="main_template">
<div metal:fill-slot="content">
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
<div class="row">
<form id="devis_pec_frm" action="${url}" method="post" class="form-horizontal">
<div class="form-group">
<label class="control-label col-xs-4" for="cd_prospect">Code prospect</label>
<div class="col-xs-8 text-primary">
<p class="form-control-static"><b>${devis.cd_prospect}</b></p>
</div>
<label class="control-label col-xs-4" for="cd_cli">Code élève</label>
<div class="col-xs-8 text-danger">
<p class="form-control-static"><b>${devis.cd_cli}</b></p>
</div>
<label class="control-label col-xs-4" for="cd_cli">Organisme payeur</label>
<div class="col-xs-8">
<p class="form-control-static"><b>${devis.organisme}</b></p>
</div>
<label class="control-label col-xs-4" for="cd_cli">Entreprise</label>
<div class="col-xs-8">
<p class="form-control-static"><b>${devis.entreprise}</b></p>
</div>
<label class="control-label col-xs-4" for="type_devis">Type de devis</label>
<div class="col-xs-8">
<p class="form-control-static"><b>${devis.type_devis}</b></p>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="no_pec">Numéro de PEC</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="no_pec" name="no_pec" value="${devis.no_pec}"
placeholder="20 caractères maximum"
data-fv-stringlength="true"
data-fv-stringlength-max="20"
data-fv-stringlength-message="20 caractères maximum" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="date_pec">Date de PEC</label>
<div class="col-xs-8">
<div class="input-group date" id="date_pec">
<input class="form-control" type="text" name="date_pec" value="${date_pec}"
data-fv-notempty="true"
data-fv-notempty-message="La date de PEC est obligatoire"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="nb_heures_pec">Nombre d'heures</label>
<div class="col-xs-8">
<input class="form-control" type="text" id="nb_heures_pec" name="nb_heures_pec" value="${devis.nb_heures_pec}"
data-fv-numeric="true"
data-fv-numeric-message="Le nombre d'heures est invalide" />
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="date_debut_pec">Date de début PEC</label>
<div class="col-xs-8">
<div class="input-group date" id="date_debut_pec">
<input class="form-control" type="text" name="date_debut_pec" value="${date_debut_pec}"
data-fv-notempty="true"
data-fv-notempty-message="La date de début PEC est obligatoire"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="date_fin_pec">Date de fin PEC</label>
<div class="col-xs-8">
<div class="input-group date" id="date_fin_pec">
<input class="form-control" type="text" name="date_fin_pec" value="${date_fin_pec}"
data-fv-notempty="true"
data-fv-notempty-message="La date de fin PEC est obligatoire"
data-fv-date="true"
data-fv-date-format="DD-MM-YYYY"
data-fv-date-message="La date n'est pas valide" />
<span class="input-group-addon add-on">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="montant_pec">Montant de PEC</label>
<div class="col-xs-8">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
<input class="form-control" type="text" id="montant_pec" name="montant_pec" value="${devis.montant_pec}"
data-fv-notempty="true"
data-fv-notempty-message="Le montant est de PEC est obligatoire"
data-fv-numeric="true"
data-fv-numeric-message="Le montant est invalide" />
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="code_tva">Taux TVA</label>
<div class="col-xs-8">
<select class="form-control" id="code_tva" name="code_tva">
<div tal:repeat="item codes_tva">
<option value="${item.CODE}" tal:attributes="selected devis.code_tva==item.CODE and 'selected' or None">${item.TAUX} %</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-4" for="statut">Statut</label>
<div class="col-xs-8">
<select class="form-control" id="statut" name="statut">
<div tal:repeat="item statuts">
<option value="${item.CODE}" tal:attributes="selected devis.statut==item.CODE and 'selected' or None">${item.CODE} - ${item.LIBELLE}</option>
</div>
</select>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<a href="/devis_frm/${no_devis}/${code}" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span>&nbsp;Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
</div>
</div>
</form>
<br />
<br />
</div> <!-- row -->
<div metal:fill-slot="additional_scripts">
<!-- Bootstrap Datepicker plugin -->
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
<script>
$(document).ready(function() {
$('#devis_pec_frm').formValidation();
$('#date_pec').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
})
.on('dp.change', function(e) {
// Revalidate the date field
$('#devis_pec_frm').formValidation('revalidateField', 'date_pec');
});
$('#date_debut_pec').datetimepicker({
format: 'DD-MM-YYYY',
allowInputToggle: true,
})
.on('dp.change', function(e) {
// Revalidate the date field
$('#devis_pec_frm').formValidation('revalidateField', 'date_debut_pec');
});
$('#date_fin_pec').datetimepicker({
format: 'DD-MM-YYYY',
showClear: true,
allowInputToggle: true,
stepping: 15,
})
.on('dp.change', function(e) {
// Revalidate the date field
$('#devis_pec_frm').formValidation('revalidateField', 'date_fin_pec');
});
$('form input').on('keypress', function(e) {
return e.which !== 13;
});
});
</script>
</div>
</div>
</metal:block>