initial upload
This commit is contained in:
126
aem_gestion/templates/parametres/activite_edit.pt
Normal file
126
aem_gestion/templates/parametres/activite_edit.pt
Normal file
@@ -0,0 +1,126 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" ></div>
|
||||
<br />
|
||||
<div class="row">
|
||||
<form id="activity_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="form-group">
|
||||
<label class="control-label col-xs-2" for="CD_CLI">Code</label>
|
||||
<div class="col-xs-5">
|
||||
<input class="form-control" type="text" id="CD_CLI" name="CD_CLI" value="${individu.CD_CLI}"
|
||||
placeholder="3 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le code est obligatoire"
|
||||
data-fv-integer="true"
|
||||
data-fv-integer-message="Le code non validé"
|
||||
data-fv-between="true"
|
||||
data-fv-between-message="Le code doit inferieur à 100000"
|
||||
data-fv-between-max="100000"
|
||||
data-fv-between-min="1" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="NOM">Nom</label>
|
||||
<div class="col-xs-5">
|
||||
<input class="form-control" type="text" id="NOM" name="NOM" value="${individu.NOM}"
|
||||
placeholder="30 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le nom est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="25"
|
||||
data-fv-stringlength-message="25 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="PRENOM">Prénom</label>
|
||||
<div class="col-xs-5">
|
||||
<input class="form-control" type="text" id="PRENOM" name="PRENOM" value="${individu.PRENOM}"
|
||||
placeholder="25 caractères maximum"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="25"
|
||||
data-fv-stringlength-message="25 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2">Catégorie</label>
|
||||
<div class="col-md-3">
|
||||
<select class="form-control" id="PERMIS_DEMANDE" name="PERMIS_DEMANDE">
|
||||
<tal:block tal:repeat="item permis">
|
||||
<option value="${item.CAT}" tal:attributes="selected individu.PERMIS_DEMANDE==item.CAT and 'selected' or None">${item.CAT}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||
<label><input type="checkbox" name="TR_P_OK" value="${individu.TR_P_OK}" id="TR_P_OK"
|
||||
tal:attributes="checked individu.TR_P_OK != None and 'checked' or None">Examen circulation
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||
<label><input type="checkbox" name="NePasRelancer" value="${individu.NePasRelancer}" id="NePasRelancer"
|
||||
tal:attributes="checked individu.NePasRelancer != 0 and 'checked' or None">Activité non imputable
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<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}/activites">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted" tal:condition="code == 9">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
<button class="btn btn-warning" type="button" data-toggle="modal" data-target="#deleteItem"
|
||||
tal:condition="individu.CD_CLI != '' and code == 9 ">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- modal -->
|
||||
<div class="modal fade" id="deleteItem" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="modalLabel">Suppression</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Confirmez-vous la suppression de cette activité/ éleve provisoire ?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
|
||||
<button type="submit" class="btn btn-danger" name="form.deleted" >Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
$('#activity_edit-form').formValidation()
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
73
aem_gestion/templates/parametres/activites.pt
Normal file
73
aem_gestion/templates/parametres/activites.pt
Normal file
@@ -0,0 +1,73 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
<style>
|
||||
.redClass{
|
||||
background-color : #E6E6E6;
|
||||
color : #9C9C9C !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="${request.application_url}/activite_edit/0" class="btn btn-success" role="button" tal:condition="code == 9">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau </a>
|
||||
</p>
|
||||
|
||||
<table id="activites_lists" class="table table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Catégorie</th>
|
||||
<th>Code</th>
|
||||
<th>Nom</th>
|
||||
<th>Sté</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#activites_lists').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 10,
|
||||
bLengthChange: false,
|
||||
order: [[ 0, 'desc' ]],
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
createdRow: function( row, data, dataIndex){
|
||||
if( dataIndex === 4 ){
|
||||
$(row).addClass('hidden');
|
||||
}
|
||||
},
|
||||
columnDefs: [
|
||||
{
|
||||
targets: 2,
|
||||
render: function (data, type, full, meta) {
|
||||
return '<a href="/activite_edit/' + full[1] + '">' + data + '</a>';
|
||||
},
|
||||
},
|
||||
{
|
||||
targets: 0,
|
||||
render: function (data, type, full, meta) {
|
||||
if(type === "sort"){
|
||||
return full[4]
|
||||
}
|
||||
return data;
|
||||
},
|
||||
}
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
189
aem_gestion/templates/parametres/agence_edit.pt
Normal file
189
aem_gestion/templates/parametres/agence_edit.pt
Normal file
@@ -0,0 +1,189 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||
<br />
|
||||
<div class="row">
|
||||
<form id="user_edit-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">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3" for="CODE">Code</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="CODE" name="CODE" value="${item.CODE}" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3" for="LIBELLE">Nom</label>
|
||||
<div class="col-xs-9">
|
||||
<input class="form-control" type="text" id="LIBELLE" name="LIBELLE" value="${item.LIBELLE}"
|
||||
placeholder="25 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le LIBELLE est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="25"
|
||||
data-fv-stringlength-message="25 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3" for="adresse">Adresse</label>
|
||||
<div class="col-xs-9">
|
||||
<input class="form-control" type="text" id="adresse" name="adresse" value="${item.adresse}"
|
||||
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" for="codepostal">Code postal - Ville</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="codepostal" name="codepostal" value="${item.codepostal}"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="5"
|
||||
data-fv-stringlength-message="5 caractères maximum" />
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<input class="form-control" type="text" id="ville" name="ville" value="${item.ville}"
|
||||
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="col-xs-3 control-label">Email</label>
|
||||
<div class="col-xs-9">
|
||||
<input class="form-control" type="text" name="email"
|
||||
value="${item.email}" placeholder="55 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="L'adresse email est obligatoire"
|
||||
data-fv-emailaddress="true"
|
||||
data-fv-emailaddress-message="L'adresse email n'est pas valide" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3" for="TELEPHONE">Téléphone</label>
|
||||
<div class="col-xs-9">
|
||||
<input class="form-control" type="text" id="TELEPHONE" name="TELEPHONE" value="${item.TELEPHONE}"
|
||||
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-3" for="google_maps">Google Maps</label>
|
||||
<div class="col-xs-9">
|
||||
<input class="form-control" type="text" id="google_maps" name="google_maps" value="${item.google_maps}" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="text-primary">Comptabilité</h4>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3" for="JNL_BNQ">Journal - Compte BNQ</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="JNL_BNQ" name="JNL_BNQ" value="${item.JNL_BNQ}"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="3"
|
||||
data-fv-stringlength-message="3 caractères maximum" />
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<input class="form-control" type="text" id="CPT_BNQ" name="CPT_BNQ" value="${item.CPT_BNQ}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le compte est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3" for="CENTRE">Centre analytique</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="CENTRE" name="CENTRE" value="${item.CENTRE}"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="3"
|
||||
data-fv-stringlength-message="3 caractères maximum" />
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<p class="form-control-static"><b>Dernière exportation : </b> ${item.DERN_EXPORT.strftime('%d/%m/%Y')}</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- VAUGNERAY -->
|
||||
<div tal:condition="item.CODE==6">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3" for="access">Dernière validation</label>
|
||||
<div class="col-xs-9">
|
||||
<p class="form-control-static">${item.DERN_VALIDATION.strftime('%d/%m/%Y')}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Délai d'annulation</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="DELAI_ANNUL" name="DELAI_ANNUL" value="${item.DELAI_ANNUL}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">Jours</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Max leçons / semaine</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="MaxLeconASemaine" name="MaxLeconASemaine" value="${item.MaxLeconASemaine}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">Si 0, ajout leçon A interdit</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Max leçons / mois</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="MaxLeconAMois" name="MaxLeconAMois" value="${item.MaxLeconAMois}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">Leçon A</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Nb jours dérogation</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="MaxJoursDerogation" name="MaxJoursDerogation" value="${item.MaxJoursDerogation}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">Jours sans blocage leçon A</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<div class="col-xs-offset-3 col-xs-10">
|
||||
<div class="form-group">
|
||||
<a class="btn btn-default" href="${request.application_url}/agences">
|
||||
<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> Enregistrer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#user_edit-form').formValidation();
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
34
aem_gestion/templates/parametres/agences.pt
Normal file
34
aem_gestion/templates/parametres/agences.pt
Normal file
@@ -0,0 +1,34 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
</p>
|
||||
|
||||
<table id="agences_list" class="table table-condensed table-striped table-bordered">
|
||||
<tr>
|
||||
<th class="text-center">Code</th>
|
||||
<th>Nom</th>
|
||||
<th class="text-center">Centre</th>
|
||||
<th>Téléphone</th>
|
||||
<th>Email</th>
|
||||
<th>Dern. validation</th>
|
||||
</tr>
|
||||
<tr tal:repeat="item items">
|
||||
<td class="text-center">${item.CODE}</td>
|
||||
<td><a href="/agence_edit/${item.CODE}">${item.LIBELLE}</a></td>
|
||||
<td class="text-center">${item.CENTRE}</td>
|
||||
<td>${item.TELEPHONE}</td>
|
||||
<td>${item.email}</td>
|
||||
<td>${item.DERN_VALIDATION.strftime('%d-%m-%Y')}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
43
aem_gestion/templates/parametres/ants_demandes.pt
Normal file
43
aem_gestion/templates/parametres/ants_demandes.pt
Normal file
@@ -0,0 +1,43 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div class="alert alert-danger" tal:condition="message" tal:content="message" />
|
||||
|
||||
<table id="ants_demandes" class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Identifiant</th>
|
||||
<th>Numéro</th>
|
||||
<th>Nom Prénom</th>
|
||||
<th>Type</th>
|
||||
<th>Statut</th>
|
||||
<th>Crée le</th>
|
||||
<th>Maj le</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD/MM/YYYY - HH:mm');
|
||||
$('#ants_demandes').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 100,
|
||||
bLengthChange: false,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
70
aem_gestion/templates/parametres/ants_tables.pt
Normal file
70
aem_gestion/templates/parametres/ants_tables.pt
Normal file
@@ -0,0 +1,70 @@
|
||||
<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 method="POST" id="frm" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-1">Table</label>
|
||||
<div class="col-md-3">
|
||||
<select class="form-control" id="table" name="table" onChange="$('#frm').submit()">
|
||||
<tal:block tal:repeat="item tables">
|
||||
<option value="${item}" tal:attributes="selected table==item and 'selected' or None">${item}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<table class="table table-striped table-bordered table-condensed" tal:condition="table=='DEPARTEMENTS' or table=='AUTORITES'">
|
||||
<tr>
|
||||
<th>Code</th>
|
||||
<th>Nom</th>
|
||||
</tr>
|
||||
<tr tal:repeat="item items">
|
||||
<td>${item.code}</td>
|
||||
<td>${item.nom}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table class="table table-striped table-bordered table-condensed" tal:condition="table=='PAYS'">
|
||||
<tr>
|
||||
<th>Pays</th>
|
||||
</tr>
|
||||
<tr tal:repeat="item items">
|
||||
<td>${item}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="row">
|
||||
<form id="table-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">
|
||||
|
||||
<div class="form-group" tal:condition="items and logged_in=='CAO'">
|
||||
<div class="col-md-offset-1 col-md-8">
|
||||
<p class="text-danger">Attention : Ne pas importer pendant les heures d'ouverture des agences !</p>
|
||||
<div class="form-group" tal:condition="table=='PAYS'">
|
||||
<button class="btn btn-primary" type="submit" name="import.pays">
|
||||
<span class="glyphicon glyphicon-import"></span> Importer dans WS_PAYS</button>
|
||||
</div>
|
||||
<div class="form-group" tal:condition="table=='DEPARTEMENTS'">
|
||||
<button class="btn btn-primary" type="submit" name="import.dept">
|
||||
<span class="glyphicon glyphicon-import"></span> Importer dans WS_DEPARTEMENTS</button>
|
||||
<button class="btn btn-primary" type="submit" name="import.communes">
|
||||
<span class="glyphicon glyphicon-import"></span> Importer dans WS_COMMUNES</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
91
aem_gestion/templates/parametres/dashboard.pt
Normal file
91
aem_gestion/templates/parametres/dashboard.pt
Normal file
@@ -0,0 +1,91 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div class="row">
|
||||
<h2>Derniers paiements</h2>
|
||||
<div class="col-md-6">
|
||||
<!-- graphique paiements -->
|
||||
<div id="chart_payments" style="width: 100%; height: 400px;"></div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<table class="table table-condensed table-bordered">
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Elève</th>
|
||||
<th style="text-align: right;">Montant</th>
|
||||
<th>Référence</th>
|
||||
<th>Err (*)</th>
|
||||
</tr>
|
||||
<tr tal:repeat="item payments">
|
||||
<td>${item.date.strftime('%d %b, %H:%M')}</td>
|
||||
<td><a href="/fiche_eleve/${item.cd_cli}">${item.cd_cli} - ${item.nom}</a></td>
|
||||
<td align="right">${item.montant}</td>
|
||||
<td>${item.ref_commande}</td>
|
||||
<td>${item.erreur[-2:]}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
(*) <a href="http://www1.paybox.com/espace-integrateur-documentation/dictionnaire-des-donnees/codes-reponses/#reseau-cb">
|
||||
Codes réponses de PAYBOX</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<h2>Dernières connexions</h2>
|
||||
<div class="col-md-6">
|
||||
<!-- graphique connexions -->
|
||||
<div id="chart_connections" style="width: 100%; height: 400px;"></div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<table class="table table-condensed table-bordered">
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th>Elève</th>
|
||||
<th>Appareil</th>
|
||||
</tr>
|
||||
<tr tal:repeat="item connections">
|
||||
<td>${item.dern_cnx_le.strftime('%d %b, %H:%M')}</td>
|
||||
<td><a href="/fiche_eleve/${item.CD_CLI}">${item.CD_CLI} - ${item.CIVILITE} ${item.NOM} (${item.PERMIS_DEMANDE})</a></td>
|
||||
<td>${item.device_used}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<h2>Derniers traitements différés</h2>
|
||||
<p><a href="/last_emailing">[ Consulter les derniers envois de mail ]</a></p>
|
||||
<table class="table table-condensed">
|
||||
<tr tal:repeat="item log_nuit">
|
||||
<td>${item.date.strftime('%d %b, %H:%M')}</td>
|
||||
<td>${item.proc}</td>
|
||||
<td>${item.msg}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
||||
<script type="text/javascript">
|
||||
google.charts.load("current", {packages:["corechart", 'bar']});
|
||||
google.charts.setOnLoadCallback(drawChart);
|
||||
var dataSet_paiements = ${courbe_paiements};
|
||||
var dataSet_connections = ${courbe_connections};
|
||||
|
||||
function drawChart() {
|
||||
var data_paiements = google.visualization.arrayToDataTable(dataSet_paiements);
|
||||
var data_connections = google.visualization.arrayToDataTable(dataSet_connections);
|
||||
|
||||
var options_connections = {
|
||||
title: 'sur les 10 derniers jours',
|
||||
};
|
||||
|
||||
var chart = new google.visualization.ColumnChart(document.getElementById('chart_payments'));
|
||||
chart.draw(data_paiements, options_connections);
|
||||
var chart = new google.visualization.ColumnChart(document.getElementById('chart_connections'));
|
||||
chart.draw(data_connections, options_connections);
|
||||
}
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
87
aem_gestion/templates/parametres/faq_edit.pt
Normal file
87
aem_gestion/templates/parametres/faq_edit.pt
Normal file
@@ -0,0 +1,87 @@
|
||||
<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="faq_edit-form" action="${url}" method="post" class="form-horizontal">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="intitule">Intitulé</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="intitule" name="intitule" value="${intitule}"
|
||||
placeholder="40 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="L'intitule 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-2" for="texte">Texte</label>
|
||||
<div class="col-xs-8">
|
||||
<textarea class="form-control monospace-font" rows="15" cols="40" id="texte" name="texte">${texte}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="theme">Thème</label>
|
||||
<div class="col-xs-4">
|
||||
<select class="form-control" id="theme" name="theme">
|
||||
<div tal:repeat="item themes">
|
||||
<option value="${item}" tal:attributes="selected theme==item and 'selected' or None">${item}</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-8">
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
<a href="${request.application_url}/faq_view/${faq_id}" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" tal:condition="faq_id != '0'">
|
||||
<div class="col-sm-offset-2 col-sm-8">
|
||||
<button class="btn btn-warning" type="submit" name="form.deleted">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#faq_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: {
|
||||
texte: {
|
||||
validators: {
|
||||
stringLength: {
|
||||
max: 30000,
|
||||
message: '30000 caractères maximum'
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
31
aem_gestion/templates/parametres/faq_list.pt
Normal file
31
aem_gestion/templates/parametres/faq_list.pt
Normal file
@@ -0,0 +1,31 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div class="row">
|
||||
<p>
|
||||
<a href="faq_edit/0" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span>
|
||||
Créér une nouvelle FAQ</a>
|
||||
</p>
|
||||
<table class="table table-condensed table-striped table-bordered">
|
||||
<tr>
|
||||
<th>Intitule</th>
|
||||
<th>Thème</th>
|
||||
<th>Dernière mise à jour</th>
|
||||
</tr>
|
||||
|
||||
<tr tal:repeat="ligne faqs">
|
||||
<td><a href="faq_view/${ligne.faq_id}">${ligne.intitule}</a></td>
|
||||
<td>${ligne.theme}</td>
|
||||
<td><span tal:content="ligne.modif_le.strftime('%d/%m/%Y %H:%M')" /></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
|
||||
</metal:block>
|
||||
|
||||
21
aem_gestion/templates/parametres/faq_view.pt
Normal file
21
aem_gestion/templates/parametres/faq_view.pt
Normal file
@@ -0,0 +1,21 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<br />
|
||||
<a href="${request.application_url}/faq_edit/${faq_id}" class="btn btn-primary" role="button">
|
||||
<span class="glyphicon glyphicon-pencil"></span> Modifier</a>
|
||||
<a href="${request.application_url}/faq_list" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Fermer</a>
|
||||
<br />
|
||||
<hr>
|
||||
<div tal:replace="structure texte">
|
||||
Page text goes here.
|
||||
</div>
|
||||
<hr>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
561
aem_gestion/templates/parametres/formule_edit.pt
Normal file
561
aem_gestion/templates/parametres/formule_edit.pt
Normal file
@@ -0,0 +1,561 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||
|
||||
<form id="formule_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="control-label col-xs-4" for="FORMULE">Formule</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="FORMULE" name="FORMULE" value="${item.FORMULE}"
|
||||
placeholder="5 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="La formule est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="10"
|
||||
data-fv-stringlength-message=" caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-4" for="LIBELLE">Libellé</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="LIBELLE" name="LIBELLE" value="${item.LIBELLE}"
|
||||
placeholder="30 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le libellé est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="30"
|
||||
data-fv-stringlength-message="30 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-offset-4 col-xs-3 checkbox">
|
||||
<label><input type="checkbox" name="STAGE" value="item.STAGE" id="STAGE"
|
||||
tal:attributes="checked item.STAGE != 0 and 'checked' or None">Formule stage
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-xs-5 checkbox">
|
||||
<label><input type="checkbox" name="forfait_code" value="item.forfait_code" id="forfait_code"
|
||||
tal:attributes="checked item.forfait_code != 0 and 'checked' or None">avec forfait code
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-4">Type examen</label>
|
||||
<div class="col-xs-8">
|
||||
<select class="form-control" id="type_examen" name="type_examen">
|
||||
<tal:block tal:repeat="type_exa types_exa">
|
||||
<option value="${type_exa}" tal:attributes="selected type_exa==item.type_examen and 'selected' or None">${type_exa}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-4">Filière</label>
|
||||
<div class="col-xs-8">
|
||||
<select class="form-control" id="FILIERE" name="FILIERE">
|
||||
<tal:block tal:repeat="fil filieres">
|
||||
<option value="${fil.code}" tal:attributes="selected fil.code==item.FILIERE and 'selected' or None">${fil.libelle}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Validité du code</label>
|
||||
<div class="col-xs-8">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Jours</span>
|
||||
<input class="form-control" type="text" id="DUREE_CODE" name="DUREE_CODE" value="${item.DUREE_CODE}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de limite.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Validité conduite</label>
|
||||
<div class="col-xs-8">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Jours</span>
|
||||
<input class="form-control" type="text" id="DUREE_COND" name="DUREE_COND" value="${item.DUREE_COND}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de limite.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-4" for="DateDeb">Date début validité</label>
|
||||
<div class="col-xs-8">
|
||||
<div class="input-group date" id="DateDeb">
|
||||
<input class="form-control" type="text" name="DateDeb" value="${item.DateDeb.strftime('%d-%m-%Y')}"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="La date de début 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="DateFin">Date fin validité</label>
|
||||
<div class="col-xs-8">
|
||||
<div class="input-group date" id="DateFin">
|
||||
<input class="form-control" type="text" name="DateFin" value="${item.DateFin.strftime('%d-%m-%Y')}"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="La date de fin 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>
|
||||
|
||||
<h3 class="text-primary">Ce forfait comprend :</h3>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Présentation théorique</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="NBPTGRATUIT" name="NBPTGRATUIT" value="${item.NBPTGRATUIT}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">Pratique</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="NBPPGRATUIT" name="NBPPGRATUIT" value="${item.NBPPGRATUIT}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Heure de conduite</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="NBHCGRATUIT" name="NBHCGRATUIT" value="${item.NBHCGRATUIT}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="VAL_HCG" name="VAL_HCG" value="${item.VAL_HCG}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Séance de circuit</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="NBCCGRATUIT" name="NBCCGRATUIT" value="${item.NBCCGRATUIT}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="VAL_CCG" name="VAL_CCG" value="${item.VAL_CCG}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Examen blanc</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="NBTAGRATUIT" name="NBTAGRATUIT" value="${item.NBTAGRATUIT}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="VAL_TAG" name="VAL_TAG" value="${item.VAL_TAG}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">RDV pédagogique</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="NBRPGRATUIT" name="NBRPGRATUIT" value="${item.NBRPGRATUIT}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="VAL_RPG" name="VAL_RPG" value="${item.VAL_RPG}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Heure de route</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="text" id="NBHRGRATUIT" name="NBHRGRATUIT" value="${item.NBHRGRATUIT}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="VAL_HRG" name="VAL_HRG" value="${item.VAL_HRG}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Nb heure(s) par séance</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="HSeance" name="HSeance" value="${item.HSeance}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="text-primary">Produits à débiter à l'instription</h3>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Réf. 1</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="INS1" name="INS1" value="${item.INS1}" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="MTVAL1" name="MTVAL1" value="${item.MTVAL1}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Réf. 2</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="INS2" name="INS2" value="${item.INS2}" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="MTVAL2" name="MTVAL2" value="${item.MTVAL2}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Réf. 3</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="INS3" name="INS3" value="${item.INS3}" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="MTVAL3" name="MTVAL3" value="${item.MTVAL3}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Réf. 4</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="INS4" name="INS4" value="${item.INS4}" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="MTVAL4" name="MTVAL4" value="${item.MTVAL4}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-3 control-label">Réf. 5</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="INS5" name="INS5" value="${item.INS5}" />
|
||||
</div>
|
||||
<label class="col-xs-2 control-label">valorisée à </label>
|
||||
<div class="col-xs-3">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="MTVAL5" name="MTVAL5" value="${item.MTVAL5}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="text-primary">Produits à débiter pour :</h3>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Examen blanc</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="TFISC" name="TFISC" value="${item.TFISC}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Présentation théorique</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="P_THEOS" name="P_THEOS" value="${item.P_THEOS}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">1ère présentation pratique</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="P_PRATS1" name="P_PRATS1" value="${item.P_PRATS1}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Présentation pratique suivante</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="P_PRATS" name="P_PRATS" value="${item.P_PRATS}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Heure de conduite</label>
|
||||
<div class="col-xs-4">
|
||||
<input class="form-control" type="text" id="HCONDUIT" name="HCONDUIT" value="${item.HCONDUIT}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-xs-4 control-label">Document formant le contrat</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="CONTRAT1" name="CONTRAT1" value="${item.CONTRAT1}" readonly />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-4" for="access">Dernière modif.</label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static" tal:condition="item.FORMULE != '0'">${item.modif_le.strftime('%d/%m/%Y - %H:%M')}</p>
|
||||
</div>
|
||||
</div>
|
||||
<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}/formules">
|
||||
<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> Enregistrer</button>
|
||||
<button class="btn btn-warning" type="submit" name="form.deleted"
|
||||
tal:condition="item.FORMULE != '0'">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<div metal:fill-slot="additional_scripts">
|
||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||
<!-- 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() {
|
||||
$('#formule_edit-form').formValidation();
|
||||
$('#DateDeb').datetimepicker({
|
||||
format: 'DD-MM-YYYY',
|
||||
allowInputToggle: true,
|
||||
})
|
||||
.on('dp.change', function(e) {
|
||||
// Revalidate the date field
|
||||
$('#formule_edit-form').formValidation('revalidateField', 'DateDeb');
|
||||
});
|
||||
$('#DateFin').datetimepicker({
|
||||
format: 'DD-MM-YYYY',
|
||||
allowInputToggle: true,
|
||||
})
|
||||
.on('dp.change', function(e) {
|
||||
// Revalidate the date field
|
||||
$('#formule_edit-form').formValidation('revalidateField', 'DateFin');
|
||||
});
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
$('#INS1').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#INS2').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#INS3').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#INS4').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#INS5').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#TFISC').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#P_THEOS').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#P_PRATS1').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#P_PRATS').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
$('#HCONDUIT').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_tarifs',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 2,
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
68
aem_gestion/templates/parametres/formules.pt
Normal file
68
aem_gestion/templates/parametres/formules.pt
Normal file
@@ -0,0 +1,68 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<form method="POST" id="frm" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-1">Validité</label>
|
||||
<div class="col-md-3">
|
||||
<select class="form-control" id="validite" name="validite" onChange="$('#frm').submit()">
|
||||
<tal:block tal:repeat="item validites">
|
||||
<option value="${item}" tal:attributes="selected validite==item and 'selected' or None">${item}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="${request.application_url}/formule_edit/0" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouvelle formule</a>
|
||||
</p>
|
||||
|
||||
<table id="formules_list" class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Formule</th>
|
||||
<th>Libellé</th>
|
||||
<th class="text-center">Stage</th>
|
||||
<th>Fin validité</th>
|
||||
<th class="text-center">Filière</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD-MM-YYYY HH:mm');
|
||||
$('#formules_list').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 100,
|
||||
bLengthChange: false,
|
||||
searching: false,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
{ className: "text-center", "targets": [2,4] },
|
||||
{ targets: 0,
|
||||
render: function (data, type, full, meta) {
|
||||
// ajouter un link vers le formulaire
|
||||
return '<a href="/formule_edit/' + data + '">' + data + '</a>';
|
||||
},
|
||||
},
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
74
aem_gestion/templates/parametres/inscriptions.pt
Normal file
74
aem_gestion/templates/parametres/inscriptions.pt
Normal file
@@ -0,0 +1,74 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
<br />
|
||||
|
||||
<div class="row">
|
||||
<form method="POST" id="frm" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-1">Inscriptions</label>
|
||||
<div class="col-md-3">
|
||||
<select class="form-control" id="table" name="table" onChange="$('#frm').submit()">
|
||||
<tal:block tal:repeat="item tables">
|
||||
<option value="${item}" tal:attributes="selected table==item and 'selected' or None">${item}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<table id="inscriptions" class="table table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Début stage</th>
|
||||
<th>Nom et prénom</th>
|
||||
<th>Solde</th>
|
||||
<th>Créé le</th>
|
||||
<th>Par</th>
|
||||
<th>Fin réservation</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD-MM-YYYY HH:mm');
|
||||
$('#inscriptions').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 100,
|
||||
bLengthChange: false,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
{ className: "text-center", "targets": [3,5] },
|
||||
{ className: "text-right", "targets": [2] },
|
||||
{ "targets": 1,
|
||||
"render": function (data, type, full, meta) {
|
||||
// ajouter un link vers le formulaire
|
||||
return '<a href="/fiche_eleve/' + data.substring(0, 6) + '">' + data + '</a>';
|
||||
},
|
||||
},
|
||||
],
|
||||
createdRow: function( row, data, dataIndex ) {
|
||||
if ( data[2].substring(0, 1) == "-" ) {
|
||||
// $( row ).css( "background-color", "LIGHTGREEN" );
|
||||
// $( row ).addClass( "success" );
|
||||
$('td', row).eq(2).addClass("text-danger");
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
|
||||
</metal:block>
|
||||
|
||||
83
aem_gestion/templates/parametres/justif_edit.pt
Normal file
83
aem_gestion/templates/parametres/justif_edit.pt
Normal file
@@ -0,0 +1,83 @@
|
||||
<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="justif_edit-form" action="${url}" method="post" class="form-horizontal">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="CODE">Code document</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="CODE" name="CODE" value="${justif.CODE}"
|
||||
placeholder="10 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le type de devis est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="10"
|
||||
data-fv-stringlength-message="10 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="TYPE">Type doc</label>
|
||||
<div class="col-xs-3">
|
||||
<select class="form-control" id="TYPE" name="TYPE">
|
||||
<div tal:repeat="item types">
|
||||
<option value="${item}" tal:attributes="selected str(justif.TYPE)==item and 'selected' or None">${item}</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="LIBELLE">Intitulé</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="LIBELLE" name="LIBELLE" value="${justif.LIBELLE}"
|
||||
placeholder="30 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="L'intitule est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="30"
|
||||
data-fv-stringlength-message="30 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="conditions">Conditions</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="conditions" name="conditions" value="${justif.conditions}"
|
||||
placeholder="100 caractères maximum"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="100"
|
||||
data-fv-stringlength-message="100 caractères maximum" />
|
||||
<p>(Si pas de condition, le justificatif est obligatoire)</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-8">
|
||||
<a href="${request.application_url}/justifs_list" class="btn btn-default" role="button">
|
||||
<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> Enregistrer</button>
|
||||
<button class="btn btn-danger" type="submit" name="form.deleted"
|
||||
tal:condition="justif.CODE != '0'">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#justif_edit-form').formValidation();
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
41
aem_gestion/templates/parametres/justifs_list.pt
Normal file
41
aem_gestion/templates/parametres/justifs_list.pt
Normal file
@@ -0,0 +1,41 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<form method="POST" id="frm" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-1">Type : </label>
|
||||
<div class="col-sm-5">
|
||||
<select class="form-control" id="type" name="type" onChange="$('#frm').submit()">
|
||||
<tal:block tal:repeat="item types">
|
||||
<option value="${item}" tal:attributes="selected type==item and 'selected' or None">${item}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-sm-5">
|
||||
<a href="justif_edit/0" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau document</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<table class="table table-condensed table-striped table-bordered">
|
||||
<tr>
|
||||
<th>Code</th>
|
||||
<th>Intitulé</th>
|
||||
<th>Conditions</th>
|
||||
</tr>
|
||||
|
||||
<tr tal:repeat="ligne justifs">
|
||||
<td><a href="justif_edit/${ligne.CODE}">${ligne.CODE}</a></td>
|
||||
<td>${ligne.LIBELLE}</td>
|
||||
<td>${ligne.conditions}</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
|
||||
</metal:block>
|
||||
|
||||
76
aem_gestion/templates/parametres/last_emailing.pt
Normal file
76
aem_gestion/templates/parametres/last_emailing.pt
Normal file
@@ -0,0 +1,76 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<form method="POST" id="frm" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2">Notifications</label>
|
||||
<div class="col-sm-3">
|
||||
<select class="form-control" id="table" name="table" onChange="$('#frm').submit()">
|
||||
<tal:block tal:repeat="item tables">
|
||||
<option value="${item}" tal:attributes="selected table==item and 'selected' or None">${item}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-sm-7" tal:condition="table=='RAPPELS RDV'">
|
||||
<button class="btn btn-success" type="submit" name="form.generate">
|
||||
<span class="glyphicon glyphicon-flash"></span> Générer les rappels</button>
|
||||
<button class="btn btn-primary" type="submit" name="form.email_rappels">
|
||||
<span class="glyphicon glyphicon-send"></span> Envoyer les rappels (${nbRappels})</button>
|
||||
</div>
|
||||
<div class="col-sm-7" tal:condition="table=='RESERVATIONS'">
|
||||
<button class="btn btn-success" type="submit" name="form.confirm">
|
||||
<span class="glyphicon glyphicon-flash"></span> Confirmer les résa</button>
|
||||
<button class="btn btn-primary" type="submit" name="form.email_resa">
|
||||
<span class="glyphicon glyphicon-send"></span> Envoyer les confirmations (${nbRappels})</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<table id="last_emailing" class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Réf.</th>
|
||||
<th>Date éch.</th>
|
||||
<th>Nom</th>
|
||||
<th>Email</th>
|
||||
<th>Statut</th>
|
||||
<th>Envoyé le</th>
|
||||
<th>Créé le</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD-MM-YYYY HH:mm');
|
||||
$('#last_emailing').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 100,
|
||||
bLengthChange: false,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
{ "targets": 2,
|
||||
"render": function (data, type, full, meta) {
|
||||
// ajouter un link vers le formulaire
|
||||
return '<a href="/fiche_eleve/' + data.substring(0, 6) + '">' + data + '</a>';
|
||||
},
|
||||
},
|
||||
],
|
||||
order: [[5, 'des']],
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
257
aem_gestion/templates/parametres/moniteur_aff_edit.pt
Normal file
257
aem_gestion/templates/parametres/moniteur_aff_edit.pt
Normal file
@@ -0,0 +1,257 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||
<br />
|
||||
<div class="row" style="margin:20px;">
|
||||
<form id="moniteur-aff-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="form-group">
|
||||
<label class="control-label col-md-2" for="CD_MON">Moniteur</label>
|
||||
<div class="col-md-6">
|
||||
<input class="form-control" type="text" id="CD_MON" name="CD_MON" value="${individu.CD_MON}"
|
||||
placeholder="10 caractères maximum" readonly/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2" for="AGENCE">Agence</label>
|
||||
<div class="col-md-6">
|
||||
<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-md-2" for="DATED"> A partir de </label>
|
||||
<div class="col-md-6">
|
||||
<div class="input-group date" id='datepicker1'>
|
||||
<input class="form-control " type="text" id="DATED" name="DATED" value="${DATED}"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="La date est obligatoire"
|
||||
data-fv-date="true"
|
||||
data-fv-date-format="DD/MM/YYYY"
|
||||
data-fv-date-message="La date n'est pas valide (JJ/MM/AAAA)" />
|
||||
<!-- <span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2" for="DATEF"> Jusqu'au</label>
|
||||
<div class="col-md-6">
|
||||
<div class="input-group date" id='datepicker2'>
|
||||
<input class="form-control " type="text" id="DATEF" name="DATEF" value="${DATEF}"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="La date est obligatoire"
|
||||
data-fv-date="true"
|
||||
data-fv-date-format="DD/MM/YYYY"
|
||||
data-fv-date-message="La date n'est pas valide (JJ/MM/AAAA)" />
|
||||
<!-- <span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-calendar"></span>
|
||||
</span> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-6">Horaires </label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2" for="DMATIN">Matin</label>
|
||||
<div class="col-md-4">
|
||||
<div class="input-group">
|
||||
<input class="form-control " type="text" id="DMATIN" name="DMATIN" value="${individu.DMATIN}"
|
||||
data-fv-notempty="true"
|
||||
data-fv-integer="true"
|
||||
data-fv-integer-message = "Seulement nombre"
|
||||
data-fv-notempty-message="Heure est obligatoire" />
|
||||
</div>
|
||||
</div>
|
||||
<label class="control-label col-md-2" for="FMATIN">à</label>
|
||||
<div class="col-md-4">
|
||||
<div class="input-group">
|
||||
<input class="form-control " type="text" id="FMATIN" name="FMATIN" value="${individu.FMATIN}"
|
||||
data-fv-notempty="true"
|
||||
data-fv-integer="true"
|
||||
data-fv-integer-message = "Seulement nombre"
|
||||
data-fv-notempty-message="Heure est obligatoire"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2" for="DSOIR">Après-midi</label>
|
||||
<div class="col-md-4">
|
||||
<div class="input-group">
|
||||
<input class="form-control " type="text" id="DSOIR" name="DSOIR" value="${individu.DSOIR}"
|
||||
data-fv-notempty="true"
|
||||
data-fv-integer="true"
|
||||
data-fv-integer-message = "Seulement nombre"
|
||||
data-fv-notempty-message="Heure est obligatoire" />
|
||||
</div>
|
||||
</div>
|
||||
<label class="control-label col-md-2" for="FSOIR">à</label>
|
||||
<div class="col-md-4">
|
||||
<div class="input-group">
|
||||
<input class="form-control " type="text" id="FSOIR" name="FSOIR" value="${individu.FSOIR}"
|
||||
data-fv-notempty="true"
|
||||
data-fv-integer="true"
|
||||
data-fv-integer-message = "Seulement nombre"
|
||||
data-fv-notempty-message="Heure est obligatoire" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-6">Jours de repos </label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-2 col-md-2 checkbox">
|
||||
<label><input type="checkbox" name="REPOS1" value="individu.REPOS1" id="REPOS1"
|
||||
tal:attributes="checked individu.REPOS1 == 1 and 'checked' or None">Lundi
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-md-offset-2 col-md-2 checkbox">
|
||||
<label><input type="checkbox" name="REPOS2" value="individu.REPOS2" id="REPOS2"
|
||||
tal:attributes="checked individu.REPOS2 == 1 and 'checked' or None">Mardi
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-md-offset-2 col-md-2 checkbox">
|
||||
<label><input type="checkbox" name="REPOS3" value="individu.REPOS3" id="REPOS3"
|
||||
tal:attributes="checked individu.REPOS1 == 1 and 'checked' or None">Mercredi
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-2 col-md-2 checkbox">
|
||||
<label><input type="checkbox" name="REPOS4" value="individu.REPOS4" id="REPOS4"
|
||||
tal:attributes="checked individu.REPOS4 != 0 and 'checked' or None">Jeudi
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-md-offset-2 col-md-2 checkbox">
|
||||
<label><input type="checkbox" name="REPOS5" value="individu.REPOS5" id="REPOS5"
|
||||
tal:attributes="checked individu.REPOS5 != 0 and 'checked' or None">Vendredi
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-md-offset-2 col-md-2 checkbox">
|
||||
<label><input type="checkbox" name="REPOS6" value="individu.REPOS6" id="REPOS6"
|
||||
tal:attributes="checked individu.REPOS6 != 0 and 'checked' or None">Samedi
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access"></label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static" tal:condition="individu.no_ligne != '0'"> <b>Crée le</b> ${cree_le} , <b>modifié le</b> ${modif_le} par ${individu.cd_uti}</p>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class="form-group">
|
||||
<div class="col-md-offset-2 col-md-10">
|
||||
<div class="form-group">
|
||||
<a class="btn btn-default" href="${request.application_url}/${redirect}">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
|
||||
<button class="btn btn-warning" type="button" data-toggle="modal" data-target="#deleteMoniteurAff"
|
||||
tal:condition="individu.no_ligne != '0' and code==9">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted" tal:condition="code==9">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- modal -->
|
||||
<div class="modal fade" id="deleteMoniteurAff" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="modalLabel">Suppression</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Confirmez-vous la suppression de cette affectation ?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
|
||||
<button type="submit" class="btn btn-danger" name="form.deleted" >Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#moniteur-aff-edit-form').formValidation({
|
||||
fields : {
|
||||
DMATIN : {
|
||||
validators: {
|
||||
between: {
|
||||
min: 1,
|
||||
max: 14,
|
||||
message: 'L\'heure devrait entre 1h - 14 h'
|
||||
}
|
||||
}
|
||||
},
|
||||
FMATIN : {
|
||||
validators: {
|
||||
between: {
|
||||
min: 1,
|
||||
max: 14,
|
||||
message: 'L\'heure devrait entre 1h - 14 h'
|
||||
}
|
||||
}
|
||||
},
|
||||
DSOIR : {
|
||||
validators: {
|
||||
between: {
|
||||
min: 12,
|
||||
max: 23,
|
||||
message: 'L\'heure devrait entre 12h - 23h'
|
||||
}
|
||||
}
|
||||
},
|
||||
FSOIR : {
|
||||
validators: {
|
||||
between: {
|
||||
min: 12,
|
||||
max: 23,
|
||||
message: 'L\'heure devrait entre 12h - 23 h'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
|
||||
$('#DATED').datetimepicker({
|
||||
format: 'DD/MM/YYYY'
|
||||
});
|
||||
$('#DATEF').datetimepicker({
|
||||
useCurrent: false ,
|
||||
format: 'DD/MM/YYYY'
|
||||
});
|
||||
$("#DATED").on("dp.change", function (e) {
|
||||
$('#DATEF').data("DateTimePicker").minDate(e.date);
|
||||
});
|
||||
$("#DATEF").on("dp.change", function (e) {
|
||||
$('#DATED').data("DateTimePicker").maxDate(e.date);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
173
aem_gestion/templates/parametres/moniteur_edit.pt
Normal file
173
aem_gestion/templates/parametres/moniteur_edit.pt
Normal file
@@ -0,0 +1,173 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||
<br />
|
||||
<div class="row">
|
||||
<form id="user_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="form-group">
|
||||
<label class="control-label col-xs-2" for="CD_MON">Code</label>
|
||||
<div class="col-xs-2">
|
||||
<input class="form-control" type="text" id="CD_MON" name="CD_MON" value="${individu.CD_MON}"
|
||||
placeholder="3 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le code est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="3"
|
||||
data-fv-stringlength-message="3 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="NOM">Prénom</label>
|
||||
<div class="col-xs-5">
|
||||
<input class="form-control" type="text" id="NOM" name="NOM" value="${individu.NOM}"
|
||||
placeholder="30 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le nom est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="25"
|
||||
data-fv-stringlength-message="25 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2">Ordre Planning</label>
|
||||
<div class="col-md-3">
|
||||
<select class="form-control" id="PLANNING" name="PLANNING">
|
||||
<tal:block tal:repeat="item plannings">
|
||||
<option value="${item}" tal:attributes="selected individu.PLANNING==item and 'selected' or None">${item}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="no_autorisation">No autorisation</label>
|
||||
<div class="col-xs-5">
|
||||
<input class="form-control" type="text" id="no_autorisation" name="no_autorisation" value="${individu.no_autorisation}"
|
||||
placeholder="25 caractères maximum"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="25"
|
||||
data-fv-stringlength-message="25 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||
<label><input type="checkbox" name="obsolete" value="individu.obsolete" id="obsolete"
|
||||
tal:attributes="checked individu.obsolete == -1 and 'checked' or None">Moniteur obsolete
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access"></label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static" tal:condition="code != '0'"> <b>Crée le</b> ${cree_le} , <b>modifié le</b> ${modif_le} par ${individu.cd_uti}</p>
|
||||
</div>
|
||||
</div>
|
||||
<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}/moniteurs">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
|
||||
<button class="btn btn-warning" type="button" data-toggle="modal" data-target="#deleteMoniteur"
|
||||
tal:condition="individu.CD_MON != '0' and codeu == 9">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted" tal:condition="codeu == 9">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- modal -->
|
||||
<div class="modal fade" id="deleteMoniteur" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="modalLabel">Suppression</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Confirmez-vous la suppression de ce moniteur ?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
|
||||
<button type="submit" class="btn btn-danger" name="form.deleted" >Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
<div class="row" tal:condition="show_aff">
|
||||
<h2 style="margin-bottom:20px;">Affectation du moniteur</h2>
|
||||
<p>
|
||||
<!-- <a href="${request.application_url}/moniteurs" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a> -->
|
||||
<a href="${request.application_url}/moniteur_aff_edit/${individu.CD_MON}/0" class="btn btn-success" role="button" tal:condition="codeu==9">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau</a>
|
||||
</p>
|
||||
|
||||
<table id="moniteurs_aff_list" class="table table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No Ligne</th>
|
||||
<th>Agence</th>
|
||||
<th>Début</th>
|
||||
<th>Fin</th>
|
||||
<th>Matin</th>
|
||||
<th>Aprés-Midi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
|
||||
});
|
||||
var dataSet = ${dt_data};
|
||||
$(document).ready(function() {
|
||||
var table = $('#moniteurs_aff_list').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 10,
|
||||
bLengthChange: false,
|
||||
bFilter: true,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
{ targets: 0,
|
||||
render: function (data, type, full, meta) {
|
||||
return '<a href="/moniteur_aff_edit/'+full[6]+'/'+data+'">'+data+ '</a>'
|
||||
}
|
||||
},
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
$('#moniteurs_aff_list tbody').on('click','tr', function(){
|
||||
var data = table.row(this).data()
|
||||
|
||||
})
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
69
aem_gestion/templates/parametres/moniteurs.pt
Normal file
69
aem_gestion/templates/parametres/moniteurs.pt
Normal file
@@ -0,0 +1,69 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
<style>
|
||||
.redClass{
|
||||
background-color : #E6E6E6;
|
||||
color : #9C9C9C !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="${request.application_url}/moniteurs_agence" class="btn btn-info" role="button">
|
||||
<span class="glyphicon glyphicon-list"></span> Liste moniteurs par agence</a>
|
||||
<a href="${request.application_url}/moniteur_edit/0" class="btn btn-success" role="button" tal:condition="code == 9">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau</a>
|
||||
</p>
|
||||
|
||||
<table id="moniteurs_list" class="table table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>CD_MON</th>
|
||||
<th>Prénom Nom</th>
|
||||
<th>Planning</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#moniteurs_list').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 10,
|
||||
bLengthChange: false,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
createdRow: function( row, data, dataIndex){
|
||||
console.log(data);
|
||||
if( parseInt(data[3]) === -1 ){
|
||||
$(row).addClass('redClass');
|
||||
}
|
||||
},
|
||||
columnDefs: [
|
||||
{ targets: 1,
|
||||
render: function (data, type, full, meta) {
|
||||
if(parseInt(full[3]) === -1){
|
||||
return data;
|
||||
}
|
||||
else{
|
||||
return '<a href="/moniteur_edit/' + full[0] + '">' + data + '</a>';
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
142
aem_gestion/templates/parametres/moniteurs_agence.pt
Normal file
142
aem_gestion/templates/parametres/moniteurs_agence.pt
Normal file
@@ -0,0 +1,142 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
<style>
|
||||
.redClass{
|
||||
background-color : #E6E6E6;
|
||||
color : #9C9C9C !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>
|
||||
<a href="${request.application_url}/moniteurs" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
</p>
|
||||
<div class="row" style="margin:20px;">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-1" for="agencefilter">Agence</label>
|
||||
<div class="col-md-4">
|
||||
<select class="form-control" id="agencefilter" >
|
||||
<div tal:repeat="item agences">
|
||||
<option value="${item.CODE}" tal:attributes="selected agencefilter==item.CODE and 'selected' or None">${item.CODE} | ${item.LIBELLE}</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
<label class="control-label col-md-1" for="datefilter"> Date </label>
|
||||
<div class="col-md-4">
|
||||
<div class="input-group date">
|
||||
<input class="form-control" type="text" id="datefilter" name="datefilter" value="${datefilter}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table id="moniteurs_agence_list" class="table table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Code</th>
|
||||
<th>Prénom Nom</th>
|
||||
<th >Début</th>
|
||||
<th >Fin</th>
|
||||
<th>Matin</th>
|
||||
<th>Aprés-midi</th>
|
||||
<th>Agence</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$.fn.dataTable.ext.search.push(
|
||||
function( settings, data, dataIndex ) {
|
||||
var currentagence = $('#agencefilter').val();
|
||||
var date = $('#datefilter').val();
|
||||
var dated = data[2].substring(8);
|
||||
var datef = data[3].substring(8);
|
||||
var agence = data[6];
|
||||
if(parseInt(agence) === parseInt(currentagence)){
|
||||
var currentdate = moment(date.replaceAll('/','-'),'DD-MM-YYYY',true);
|
||||
var ddate = moment(dated.replaceAll('/','-'),'DD-MM-YYYY',true);
|
||||
var fdate = moment(datef.replaceAll('/','-'),'DD-MM-YYYY',true);
|
||||
if(currentdate.isValid() && ddate.isValid() && fdate.isValid()){
|
||||
var timesf = fdate.toDate().getTime() - currentdate.toDate().getTime();
|
||||
var timesd = ddate.toDate().getTime() - currentdate.toDate().getTime();
|
||||
var daysf = Math.round(timesf /(1000 * 3600 * 24));
|
||||
var daysd = Math.round(timesd /(1000 * 3600 * 24));
|
||||
if(daysf >= 0 && daysd <= 0){
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else{
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else{
|
||||
return false
|
||||
}
|
||||
return true;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
var table = $('#moniteurs_agence_list').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 10,
|
||||
bLengthChange: false,
|
||||
bInfo: true,
|
||||
sDom: 'frtlip',
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
|
||||
{ targets: 1,
|
||||
render: function (data, type, full, meta) {
|
||||
return '<a href="/moniteur_aff_edit/' + full[0] +'/'+ full[7] + '?origin=1">' + data + '</a>';
|
||||
}
|
||||
},
|
||||
{ targets: 2,
|
||||
render: function (data, type, full, meta) {
|
||||
return '<span style="display:none" >'+parseInt(full[8])+'</span>'+data;
|
||||
}
|
||||
},
|
||||
{ targets: 3,
|
||||
render: function (data, type, full, meta) {
|
||||
return '<span style="display:none" >'+parseInt(full[9])+'</span>'+data;
|
||||
}
|
||||
}
|
||||
|
||||
]
|
||||
});
|
||||
|
||||
$('#datefilter').datetimepicker({
|
||||
format: 'DD/MM/YYYY',
|
||||
}).on('dp.change',function (e) {
|
||||
table.draw();
|
||||
});;
|
||||
|
||||
$('#datefilter').on('input change', function(){
|
||||
var date = moment(this.value.replaceAll('/','-'),'DD-MM-YYYY',true);
|
||||
if(date.isValid()){
|
||||
console.log('valid');
|
||||
table.draw();
|
||||
}
|
||||
});
|
||||
$('#agencefilter').change(function(){
|
||||
table.draw();
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
119
aem_gestion/templates/parametres/parametres.pt
Normal file
119
aem_gestion/templates/parametres/parametres.pt
Normal file
@@ -0,0 +1,119 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div id="jquery" class="container-fluid">
|
||||
<div class="row text-center">
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/faq_list"><span class="glyphicon glyphicon-question-sign logo-primary"></span></a>
|
||||
<h4>FAQ</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/users"><span class="glyphicon glyphicon-user logo-primary"></span></a>
|
||||
<h4>UTILISATEURS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/moniteurs"><span class="glyphicon glyphicon-user logo-primary"></span></a>
|
||||
<h4>MONITEURS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/semaine_types"><span class="glyphicon glyphicon-calendar logo-primary"></span></a>
|
||||
<h4>SEMAINE-TYPE</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/types_devis"><span class="glyphicon glyphicon-list logo-primary"></span></a>
|
||||
<h4>TYPES de DEVIS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/tarifs"><span class="glyphicon glyphicon-list logo-primary"></span></a>
|
||||
<h4>TARIFS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/permis"><span class="glyphicon glyphicon-list logo-primary"></span></a>
|
||||
<h4>PERMIS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/formules"><span class="glyphicon glyphicon-list logo-primary"></span></a>
|
||||
<h4>FORMULES</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/justifs_list"><span class="glyphicon glyphicon-list logo-primary"></span></a>
|
||||
<h4>JUSTIFICATIFS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/agences"><span class="glyphicon glyphicon-list logo-primary"></span></a>
|
||||
<h4>AGENCES</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/activites"><span class="glyphicon glyphicon-sunglasses logo-primary"></span></a>
|
||||
<h4>ACTIVITES</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/pass_rousseau"><span class="glyphicon glyphicon-expand logo-primary"></span></a>
|
||||
<h4>PASS ROUSSEAU</h4>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<h2>Exploitation</h2>
|
||||
<div class="row text-center">
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/dashboard"><span class="glyphicon glyphicon-dashboard logo-primary"></span></a>
|
||||
<h4>Tableau de bord</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/inscriptions"><span class="glyphicon glyphicon-edit logo-primary"></span></a>
|
||||
<h4>Inscriptions web</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/users_ua"><span class="glyphicon glyphicon-log-in logo-primary"></span></a>
|
||||
<h4>CONNEXIONS</h4>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<h2>Compta</h2>
|
||||
<div class="row text-center">
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/recap_moniteur"><span class="glyphicon glyphicon-list-alt logo-primary"></span></a>
|
||||
<h4>RECAP HEURES MON.</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/export_cpta"><span class="glyphicon glyphicon-export logo-primary"></span></a>
|
||||
<h4>EXPORT COMPTA</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/solder_contrats"><span class="glyphicon glyphicon-check logo-primary"></span></a>
|
||||
<h4>SOLDER CONTRATS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/balance_clients"><span class="glyphicon glyphicon-scale logo-primary"></span></a>
|
||||
<h4>BALANCE CLIENTS</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center" tal:condition="logged_in=='cao'">
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/stats_pay"><span class="glyphicon glyphicon-stats logo-primary"></span></a>
|
||||
<h4>STATS REGL.</h4>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<h2>ANTS</h2>
|
||||
<div class="row text-center" tal:condition="logged_in=='cao'">
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/ants_demandes"><span class="glyphicon glyphicon-import logo-primary"></span></a>
|
||||
<h4>Demandes ANTS</h4>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<a href="${request.application_url}/ants_tables"><span class="glyphicon glyphicon-list logo-primary"></span></a>
|
||||
<h4>Tables ANTS</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
55
aem_gestion/templates/parametres/pass_rousseau.pt
Normal file
55
aem_gestion/templates/parametres/pass_rousseau.pt
Normal file
@@ -0,0 +1,55 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
</p>
|
||||
|
||||
<table id="pass_rousseau" class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Acheté le</th>
|
||||
<th>Identifiant</th>
|
||||
<th>Mot de passe</th>
|
||||
<th>Expire le</th>
|
||||
<th>Vendu le</th>
|
||||
<th>Vendu à</th>
|
||||
<th>Code postal</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD-MM-YYYY');
|
||||
$('#pass_rousseau').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 100,
|
||||
bLengthChange: false,
|
||||
order: [[ 0, "desc" ]],
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
{ targets: 5,
|
||||
"render": function (data, type, full, meta) {
|
||||
// ajouter un link vers la fiche élève
|
||||
return '<a href="/fiche_eleve/' + data + '">' + data + '</a>';
|
||||
},
|
||||
},
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
58
aem_gestion/templates/parametres/pdfviewer.pt
Normal file
58
aem_gestion/templates/parametres/pdfviewer.pt
Normal file
@@ -0,0 +1,58 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<canvas id="the-canvas"></canvas>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script src="//mozilla.github.io/pdf.js/build/pdf.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
var url = '${pdf_url}';
|
||||
|
||||
// Loaded via <script> tag, create shortcut to access PDF.js exports.
|
||||
var pdfjsLib = window['pdfjs-dist/build/pdf'];
|
||||
|
||||
// The workerSrc property shall be specified.
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
|
||||
|
||||
// Asynchronous download of PDF
|
||||
var loadingTask = pdfjsLib.getDocument(url);
|
||||
loadingTask.promise.then(function(pdf) {
|
||||
console.log('PDF loaded');
|
||||
|
||||
// Fetch the first page
|
||||
var pageNumber = 1;
|
||||
pdf.getPage(pageNumber).then(function(page) {
|
||||
console.log('Page loaded');
|
||||
|
||||
var scale = 1.5;
|
||||
var viewport = page.getViewport({scale: scale});
|
||||
|
||||
// Prepare canvas using PDF page dimensions
|
||||
var canvas = document.getElementById('the-canvas');
|
||||
var context = canvas.getContext('2d');
|
||||
canvas.height = viewport.height;
|
||||
canvas.width = viewport.width;
|
||||
|
||||
// Render PDF page into canvas context
|
||||
var renderContext = {
|
||||
canvasContext: context,
|
||||
viewport: viewport
|
||||
};
|
||||
var renderTask = page.render(renderContext);
|
||||
renderTask.promise.then(function () {
|
||||
console.log('Page rendered');
|
||||
});
|
||||
});
|
||||
}, function (reason) {
|
||||
// PDF loading error
|
||||
console.error(reason);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
56
aem_gestion/templates/parametres/permis.pt
Normal file
56
aem_gestion/templates/parametres/permis.pt
Normal file
@@ -0,0 +1,56 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="${request.application_url}/permis_edit/0" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau permis</a>
|
||||
</p>
|
||||
|
||||
<table id="permis_list" class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Catégorie</th>
|
||||
<th>Libellé</th>
|
||||
<th>Examen</th>
|
||||
<th class="text-right">En-cours autorisé</th>
|
||||
<th class="text-right">Plafond résa</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD-MM-YYYY HH:mm');
|
||||
$('#permis_list').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 100,
|
||||
bLengthChange: false,
|
||||
searching: false,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
{ className: "text-right", "targets": [3,4] },
|
||||
{ targets: 0,
|
||||
render: function (data, type, full, meta) {
|
||||
// ajouter un link vers le formulaire
|
||||
return '<a href="/permis_edit/' + data + '">' + data + '</a>';
|
||||
},
|
||||
},
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
272
aem_gestion/templates/parametres/permis_edit.pt
Normal file
272
aem_gestion/templates/parametres/permis_edit.pt
Normal file
@@ -0,0 +1,272 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||
<br />
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a data-toggle="tab" href="#permis"><h4>PERMIS</h4></a></li>
|
||||
<li tal:condition="item.CAT != '0'"><a data-toggle="tab" href="#justifs"><h4>JUSTIFICATIFS</h4></a></li>
|
||||
</ul>
|
||||
|
||||
<form id="permis_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="tab-content">
|
||||
<!-- FICHE PERMIS -->
|
||||
<div id="permis" class="tab-pane fade in active">
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="CAT">Catégorie</label>
|
||||
<div class="col-xs-6">
|
||||
<input class="form-control" type="text" id="CAT" name="CAT" value="${item.CAT}"
|
||||
placeholder="5 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="La catégorie 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-2" for="LIB">Libellé</label>
|
||||
<div class="col-xs-6">
|
||||
<input class="form-control" type="text" id="LIB" name="LIB" value="${item.LIB}"
|
||||
placeholder="30 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le libellé est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="30"
|
||||
data-fv-stringlength-message="30 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2">Type examen</label>
|
||||
<div class="col-xs-6">
|
||||
<select class="form-control" id="type_examen" name="type_examen">
|
||||
<tal:block tal:repeat="type_exa types_exa">
|
||||
<option value="${type_exa}" tal:attributes="selected type_exa==item.type_examen and 'selected' or None">${type_exa}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">En-cours autorisé</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="EnCours" name="EnCours" value="${item.EnCours}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Plafond réservation</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="plafond_resa" name="plafond_resa" value="${item.plafond_resa}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le montant est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="text-primary">Paramètres Code</h3>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Validité du Code</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Année</span>
|
||||
<input class="form-control" type="text" id="VCODE" name="VCODE" value="${item.VCODE}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Age minimum</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Année</span>
|
||||
<input class="form-control" type="text" id="AgeCode" name="AgeCode" value="${item.AgeCode}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de minimum.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Nb d'heures min.</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="HCODE" name="HCODE" value="${item.HCODE}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de minimum</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 class="text-primary">Paramètres Conduite</h3>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Age minimum</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Année</span>
|
||||
<input class="form-control" type="text" id="AgeCond" name="AgeCond" value="${item.AgeCond}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de minimum.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Age minimum AAC</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Année</span>
|
||||
<input class="form-control" type="text" id="AgeCondAAC" name="AgeCondAAC" value="${item.AgeCondAAC}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Nb d'heures min.</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="HCOND" name="HCOND" value="${item.HCOND}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de minimum</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Nb d'évaluation min.</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="HEVAL" name="HEVAL" value="${item.HEVAL}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de minimum</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Nb d'échecs pratique</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="NECHECP" name="NECHECP" value="${item.NECHECP}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de maximum</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access">Dernière modif.</label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static" tal:condition="item.CAT != '0'">${item.modif_le.strftime('%d/%m/%Y - %H:%M')}</p>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</div> <!-- onglet TARIF -->
|
||||
|
||||
<!-- JUSTIFICATIFS -->
|
||||
<div id="justifs" class="tab-pane fade">
|
||||
<br />
|
||||
<p>
|
||||
<a href="#" class="btn btn-success" role="button"
|
||||
data-toggle="modal" data-target="#confirmCreate"><span class="glyphicon glyphicon-plus"></span> Nouvel justif</a>
|
||||
</p>
|
||||
<table class="table table-condensed table-striped table-bordered">
|
||||
<tr>
|
||||
<th class="text-center">No</th>
|
||||
<th>Intitulé</th>
|
||||
<th>Conditions</th>
|
||||
<th>Modif le</th>
|
||||
</tr>
|
||||
|
||||
<tr tal:repeat="ligne justifs">
|
||||
<td class="text-center">${ligne.no_tri}</td>
|
||||
<td><a href="/permis_justif/${ligne.CAT}/${ligne.CODE}">${ligne.libelle}</a></td>
|
||||
<td>${ligne.conditions}</td>
|
||||
<td tal:condition="ligne.modif_le">${ligne.modif_le.strftime('%d/%m/%Y - %H:%M')}</td>
|
||||
<td tal:condition="not ligne.modif_le"></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<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}/permis">
|
||||
<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> Enregistrer</button>
|
||||
<button class="btn btn-warning" type="submit" name="form.deleted"
|
||||
tal:condition="item.CAT != '0'">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- 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">×</button>
|
||||
<h4 class="modal-title">Ajouter un justificatif</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<!-- The form is placed inside the body of modal -->
|
||||
<form id="add_justif-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">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3">Ajouter</label>
|
||||
<div class="col-xs-6">
|
||||
<select class="form-control static" name="code_add">
|
||||
<tal:block tal:repeat="item justifs_add">
|
||||
<option value="${item.CODE}" tal:attributes="selected code_add==item.CODE and 'selected' or None">${item.LIBELLE}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-5 col-xs-offset-3">
|
||||
<button type="submit" class="btn btn-danger" name="form.justif_added">Ajouter</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#permis_edit-form').formValidation();
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
60
aem_gestion/templates/parametres/permis_justif.pt
Normal file
60
aem_gestion/templates/parametres/permis_justif.pt
Normal file
@@ -0,0 +1,60 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div class="row">
|
||||
<form id="justif_edit-form" action="${url}" method="post" class="form-horizontal">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access">Code justif</label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static">${item.CODE}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access">Libellé justif</label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static">${item.libelle}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="no_tri">No de tri</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="no_tri" name="no_tri" value="${item.no_tri}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access">Dernière modif.</label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static" tal:condition="item.modif_le">${item.modif_le.strftime('%d/%m/%Y - %H:%M')}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-2 col-sm-8">
|
||||
<a href="${request.application_url}/permis_edit/${item.CAT}" class="btn btn-default" role="button">
|
||||
<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> Enregistrer</button>
|
||||
<button class="btn btn-danger" type="submit" name="form.deleted">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#justif_edit-form').formValidation();
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
275
aem_gestion/templates/parametres/semaine_type_view.pt
Normal file
275
aem_gestion/templates/parametres/semaine_type_view.pt
Normal file
@@ -0,0 +1,275 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
<div class="container">
|
||||
<style>
|
||||
.ui-autocomplete {
|
||||
z-index:2147483647;
|
||||
}
|
||||
.modal {
|
||||
text-align: center;
|
||||
padding: 0!important;
|
||||
}
|
||||
|
||||
.modal:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
height: 80vh;
|
||||
vertical-align: middle;
|
||||
margin-right: -4px;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
<form id="semaine_type_view-form" action="${url}" method="post" tal:condition="semaine_type"
|
||||
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 row">
|
||||
<a class="btn btn-default" href="${request.application_url}/semaine_types">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
|
||||
<label class="control-label col-xs-2" for="LIBELLE">Libellé : </label>
|
||||
<div class="col-xs-4">
|
||||
<div class="input-group">
|
||||
<input class="form-control" type="text" id="LIBELLE" name="LIBELLE" value="${semaine_type.LIBELLE}"
|
||||
placeholder="Libellé"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Libellé ne peut pas etre vide."/>
|
||||
<input type="hidden" value="${semaine_type.CODE_SEM}" name="CODE_SEM" />
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||
<button class="btn btn-success" type="submit" name="form.duplicated">
|
||||
<span class="glyphicon glyphicon-plus"></span> Dupliquer</button>
|
||||
<a class="btn btn-warning" data-toggle="modal" href="#deleteItem">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</a>
|
||||
</div>
|
||||
<!-- modal -->
|
||||
<div class="modal fade" id="deleteItem" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="modalLabel">Suppression</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Confirmez-vous la suppression de cette semaine-type ?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
|
||||
<button type="submit" class="btn btn-danger" name="form.deleted" >Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
<br />
|
||||
<div id="calendar"></div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<form id="semaine_type_activity-form" action="${url}" method="post" tal:condition="semaine_type"
|
||||
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">
|
||||
<!-- modal -->
|
||||
<div class="modal fade" id="addActivite" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="modalLabel">Nouveau activité</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group row" style="margin-bottom:15px;">
|
||||
<label class="control-label col-xs-3" for="dh_debut">Date-heure</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="dh_debut" name="dh_debut" value="" readonly />
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="ACTIVITE" id="ACTIVITE" />
|
||||
<input type="hidden" name="no_ligne" id="no_ligne" />
|
||||
<div class="form-group row" style="margin-bottom:15px;">
|
||||
<label class="control-label col-xs-3" for="AJAX">Activité</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="AJAX" value=""/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row" style="margin-bottom:15px;">
|
||||
<label class="control-label col-xs-3" for="INTITULE"></label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="INTITULE" name="INTITULE"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le libelle est obligatoire" readonly/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row " style="margin-bottom:15px;">
|
||||
<label class="control-label col-xs-3" for="qte">Nb heures</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="number" id="qte" name="qte" value="1"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="submit" class="btn btn-danger" name="form.activity.deleted">Supprimer</button>
|
||||
<button type="submit" class="btn btn-success" name="form.activity.submitted"> Enregistrer</button>
|
||||
<a href="#" onclick="duplicateActivity(this)" name="" id="dup_activity" class="btn btn-primary" >Dupliquer</a>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal"> Annuler</button>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- duplicate -->
|
||||
<div class="modal fade" id="duplicateACtivity" style="z-index:999999;" tabindex="-1" role="dialog" aria-labelledby="modalLabelActivity" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="modalLabelActivity">DUPLIQUER L'ACTIVITE</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group row">
|
||||
<label class="control-label col-xs-1" for="qte_j">Sur</label>
|
||||
<div class="col-xs-3">
|
||||
<input class="form-control" type="number" id="qte_j" name="qte_j" value="4"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le libelle est obligatoire"/>
|
||||
</div>
|
||||
<label class="control-label col-xs-9" for="qte_j">jours consécutifs</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
|
||||
<button type="submit" class="btn btn-primary" name="form.activity.duplicated" >Dupliquer</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</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>
|
||||
<script>
|
||||
|
||||
function duplicateActivity(e){
|
||||
if(e.name != ""){
|
||||
var data = JSON.parse(e.name)
|
||||
$('#modalLabelActivity').text('DUPLIQUER L\'ACTIVITE '+data['INTITULE']);
|
||||
$('#activity_no_ligne').val(data['no_ligne']);
|
||||
}
|
||||
else{
|
||||
$('#modalLabelActivity').text('DUPLIQUER L\'ACTIVITE');
|
||||
}
|
||||
|
||||
//$('#addActivite').modal('hide')
|
||||
$('#duplicateACtivity').modal('show');
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#semaine_type_view-form').formValidation();
|
||||
var fv = $('#semaine_type_activity-form').formValidation().data();
|
||||
$('#AJAX').autocomplete({
|
||||
source: function (request, response) {
|
||||
$.ajax({
|
||||
url:'/ajax_activity',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
recherche: request.term,
|
||||
},
|
||||
success: function (data) {
|
||||
response( data );
|
||||
},
|
||||
});
|
||||
},
|
||||
minLength: 1,
|
||||
select: function (event, data) {
|
||||
$('#ACTIVITE').val(data.item.data)
|
||||
$('#INTITULE').val(data.item.label)
|
||||
fv.formValidation.validateField($('#INTITULE'))
|
||||
fv.formValidation.updateStatus($('#INTITULE'),'VALID');
|
||||
return false;
|
||||
}
|
||||
})
|
||||
$('#calendar').fullCalendar({
|
||||
schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source',
|
||||
locale: 'fr',
|
||||
header: {
|
||||
left: 'agendaWeek listWeek',
|
||||
center: 'prev title next',
|
||||
right: 'today'
|
||||
},
|
||||
allDaySlot: false,
|
||||
defaultView: 'agendaWeek',
|
||||
defaultDate: "05/06/2000",
|
||||
slotDuration: '00:60:00',
|
||||
hiddenDays: [0], // hide sunday
|
||||
height: 'auto',
|
||||
minTime: "07:00:00",
|
||||
maxTime: "23:00:00",
|
||||
displayEventTime: true,
|
||||
events:${calendar_events},
|
||||
eventClick: function(calEvent, jsEvent, view) {
|
||||
var data = JSON.parse(calEvent.data)
|
||||
$('#dh_debut').val(data.dh_debut);
|
||||
$('#ACTIVITE').val(data.ACTIVITE);
|
||||
$('#INTITULE').val(data.INTITULE);
|
||||
$('#no_ligne').val(data.no_ligne);
|
||||
$('#qte').val(data.qte);
|
||||
$('#dup_activity').removeClass('hidden');
|
||||
$('#dup_activity').attr('name',JSON.stringify(data));
|
||||
$('.modal-title').text('Modification activité');
|
||||
$("#dh_debut").attr("readonly", false);
|
||||
$("#addActivite").modal("show");
|
||||
},
|
||||
dayClick: function(date, jsEvent, view) {
|
||||
$('#dh_debut').val(moment(date).format('DD-MM-YYYY HH:mm'));
|
||||
$('#ACTIVITE').val('');
|
||||
$('#INTITULE').val('');
|
||||
$('#AJAX').val('');
|
||||
$('#qte').val('1');
|
||||
$('#no_ligne').val('');
|
||||
$('.modal-title').text('Nouveau activité')
|
||||
$('#dup_activity').removeClass('hidden');
|
||||
$('#dup_activity').attr('name',"");
|
||||
$("#dh_debut").attr("readonly", true);
|
||||
$("#addActivite").modal("show");
|
||||
}
|
||||
});
|
||||
$('#dh_debut').datetimepicker({
|
||||
format:'DD-MM-YYYY HH:mm',
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</metal:block>
|
||||
|
||||
|
||||
159
aem_gestion/templates/parametres/semaine_types.pt
Normal file
159
aem_gestion/templates/parametres/semaine_types.pt
Normal file
@@ -0,0 +1,159 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
<style>
|
||||
.redClass{
|
||||
background-color : #E6E6E6;
|
||||
color : #9C9C9C !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="#" onclick="createSemaineType(this)" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau</a>
|
||||
</p>
|
||||
<div class="row" style="margin:20px;">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-1" for="planning">Planning</label>
|
||||
<div class="col-md-4">
|
||||
<select class="form-control" id="planning" >
|
||||
<div tal:repeat="item planning">
|
||||
<option value="${item}" tal:attributes="selected planning_default==item and 'selected' or None">${item}</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table id="semaine_types_list" class="table table-condensed table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Libellé</th>
|
||||
<th>Code</th>
|
||||
<th>Planning</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
<!-- Modal : Creacreationte semaine type -->
|
||||
<div class="modal fade" id="createSemaineType" role="dialog" aria-labelledby="createSemaineType" 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">×</button>
|
||||
<h4 class="modal-title">Ajouter une semaine-type</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<!-- The form is placed inside the body of modal -->
|
||||
<form id="add_semainetype-form" class="form-horizontal" action="${request.application_url}/semaine_types" 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 class="form-group">
|
||||
<label class="control-label col-xs-3" for=" type_planning">Type planning</label>
|
||||
<div class="col-md-8">
|
||||
<select class="form-control" id="type_planning" name="type_planning" >
|
||||
<div tal:repeat="item planning">
|
||||
<option value="${item}" tal:attributes="selected planning_default==item and 'selected' or None">${item}</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" id="CODE_SEM" name="CODE_SEM"/>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-3" for="LIBELLE">Libelle</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="LIBELLE" name="LIBELLE" value=""
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le libelle est obligatoire"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-5 col-xs-offset-7">
|
||||
<button type="submit" class="btn btn-success" id="btnmodal" name="form.submitted">Ajouter</button>
|
||||
<a href="#" id="view_semaine_type" class="hidden btn btn-primary" >Voir</a>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Annuler</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$.fn.dataTable.ext.search.push(
|
||||
function(settings, data, dataIndex ) {
|
||||
var planning = $('#planning').val();
|
||||
if(data[2] === planning){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
function updateSemaineType(e,data){
|
||||
var semdata = data.split(',')
|
||||
$('#LIBELLE').val(semdata[0]);
|
||||
$('#CODE_SEM').val(semdata[1]);
|
||||
$('#type_planning option[value="'+semdata[2]+'"]').prop("selected", true);
|
||||
$('#btnmodal').text('Modifier');
|
||||
$('#view_semaine_type').removeClass('hidden').attr('href','${request.application_url}/semaine_type_view/'+semdata[1])
|
||||
$('#createSemaineType').modal();
|
||||
}
|
||||
|
||||
function createSemaineType(e){
|
||||
$('#LIBELLE').val('');
|
||||
$('#CODE_SEM').val('');
|
||||
$('#type_planning option[value="${planning_default}"]').prop("selected", true);
|
||||
$('#btnmodal').text('Ajouter');
|
||||
$('#view_semaine_type').addClass('hidden').attr('href','#');
|
||||
$('#createSemaineType').modal();
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
$('#add_semainetype-form').formValidation()
|
||||
var table = $('#semaine_types_list').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 15,
|
||||
bLengthChange: false,
|
||||
bInfo: true,
|
||||
sDom: 'frtlip',
|
||||
order: [[ 0, 'asc' ]],
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
|
||||
{ targets: 0,
|
||||
render: function (data, type, full, meta) {
|
||||
return '<a href="#" onclick="updateSemaineType(this,\''+full+'\')" >'+data+'</a>';
|
||||
}
|
||||
},
|
||||
|
||||
]
|
||||
});
|
||||
$('#planning').change(function(){
|
||||
table.draw();
|
||||
});
|
||||
|
||||
/*$('#semaine_types_list tbody').on('click','tr',function(){
|
||||
var data = table.row(this).data();
|
||||
updateSemaineType(this,data)
|
||||
})*/
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
56
aem_gestion/templates/parametres/stats_exam1.pt
Normal file
56
aem_gestion/templates/parametres/stats_exam1.pt
Normal file
@@ -0,0 +1,56 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<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">
|
||||
<button class="btn btn-default" type="submit" name="form.ag1">VALMY</button>
|
||||
<button class="btn btn-default" type="submit" name="form.ag2">SAXE</button>
|
||||
<button class="btn btn-default" type="submit" name="form.ag3">CROIX ROUSSE</button>
|
||||
<button class="btn btn-default" type="submit" name="form.ag4">MONPLAISIR</button>
|
||||
<button class="btn btn-default" type="submit" name="form.ag5">CHARPENNES</button>
|
||||
<button class="btn btn-default" type="submit" name="form.ag6">VAUGNERAY</button>
|
||||
<button class="btn btn-default" type="submit" name="form.ag7">GENTIL</button>
|
||||
<button class="btn btn-default" type="submit" name="form.ag8">VITTON</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<!-- graphique colonne année N -->
|
||||
<div id="barChart_annee" style="width: 100%; height: 500px;"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
||||
<script type="text/javascript">
|
||||
google.charts.load("current", {packages:["corechart", 'bar']});
|
||||
google.charts.setOnLoadCallback(drawChart);
|
||||
var dataSet_annee = ${barChart_annee};
|
||||
|
||||
function drawChart() {
|
||||
var data_annee = google.visualization.arrayToDataTable(dataSet_annee);
|
||||
console.log(data_annee);
|
||||
var options_annee = {
|
||||
title: '${title}',
|
||||
seriesType: 'bars',
|
||||
series: {1: {type: 'line'}},
|
||||
vAxis: {
|
||||
viewWindow: {
|
||||
min:0
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var chart_annee = new google.visualization.ComboChart(document.getElementById('barChart_annee'));
|
||||
chart_annee.draw(data_annee, options_annee);
|
||||
}
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
53
aem_gestion/templates/parametres/stats_exam2.pt
Normal file
53
aem_gestion/templates/parametres/stats_exam2.pt
Normal file
@@ -0,0 +1,53 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div class="row">
|
||||
<form method="POST" id="frm" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2">Moniteur</label>
|
||||
<div class="col-md-10">
|
||||
<select class="form-control" id="cd_mon" name="cd_mon" onChange="$('#frm').submit()">
|
||||
<tal:block tal:repeat="item moniteurs">
|
||||
<option value="${item.group2}" tal:attributes="selected cd_mon==item.group2 and 'selected' or None">${item.group2_lib} - ${item.group2}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<!-- graphique colonne année N -->
|
||||
<div id="barChart_annee" style="width: 100%; height: 500px;"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
||||
<script type="text/javascript">
|
||||
google.charts.load("current", {packages:["corechart", 'bar']});
|
||||
google.charts.setOnLoadCallback(drawChart);
|
||||
var dataSet_annee = ${barChart_annee};
|
||||
|
||||
function drawChart() {
|
||||
var data_annee = google.visualization.arrayToDataTable(dataSet_annee);
|
||||
|
||||
var options_annee = {
|
||||
title: '${title}',
|
||||
seriesType: 'bars',
|
||||
series: {1: {type: 'line'}},
|
||||
vAxis: {
|
||||
viewWindow: {
|
||||
min:0
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var chart_annee = new google.visualization.ComboChart(document.getElementById('barChart_annee'));
|
||||
chart_annee.draw(data_annee, options_annee);
|
||||
}
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
47
aem_gestion/templates/parametres/stats_pay.pt
Normal file
47
aem_gestion/templates/parametres/stats_pay.pt
Normal file
@@ -0,0 +1,47 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div class="row">
|
||||
<h2>Répartition des modes de règlement</h2>
|
||||
<div class="col-md-6">
|
||||
<!-- graphique donut année N-1 -->
|
||||
<div id="donutchart_annee_1" style="width: 100%; height: 500px;"></div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<!-- graphique donut année N -->
|
||||
<div id="donutchart_annee" style="width: 100%; height: 500px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
||||
<script type="text/javascript">
|
||||
google.charts.load("current", {packages:["corechart", 'bar']});
|
||||
google.charts.setOnLoadCallback(drawChart);
|
||||
var dataSet_annee_1 = ${donut_annee_1};
|
||||
var dataSet_annee = ${donut_annee};
|
||||
|
||||
function drawChart() {
|
||||
var data_annee_1 = google.visualization.arrayToDataTable(dataSet_annee_1);
|
||||
var data_annee = google.visualization.arrayToDataTable(dataSet_annee);
|
||||
|
||||
var options_annee_1 = {
|
||||
title: '${title_1}',
|
||||
pieHole: 0.4,
|
||||
};
|
||||
var options_annee = {
|
||||
title: '${title}',
|
||||
pieHole: 0.4,
|
||||
};
|
||||
|
||||
var chart_annee_1 = new google.visualization.PieChart(document.getElementById('donutchart_annee_1'));
|
||||
chart_annee_1.draw(data_annee_1, options_annee_1);
|
||||
var chart_annee = new google.visualization.PieChart(document.getElementById('donutchart_annee'));
|
||||
chart_annee.draw(data_annee, options_annee);
|
||||
}
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
220
aem_gestion/templates/parametres/tarif_edit.pt
Normal file
220
aem_gestion/templates/parametres/tarif_edit.pt
Normal file
@@ -0,0 +1,220 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||
<br />
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a data-toggle="tab" href="#tarif"><h4>TARIF</h4></a></li>
|
||||
<li><a data-toggle="tab" href="#rappel"><h4>EMAIL DE RAPPEL</h4></a></li>
|
||||
<li><a data-toggle="tab" href="#confirmation"><h4>EMAIL DE CONFIRMATION</h4></a></li>
|
||||
</ul>
|
||||
|
||||
<form id="user_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="tab-content">
|
||||
<!-- FICHE TARIF -->
|
||||
<div id="tarif" class="tab-pane fade in active">
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="REF">Référence</label>
|
||||
<div class="col-xs-6">
|
||||
<input class="form-control" type="text" id="REF" name="REF" value="${item.REF}"
|
||||
placeholder="10 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="La référence est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="10"
|
||||
data-fv-stringlength-message="10 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="LIB">Libellé</label>
|
||||
<div class="col-xs-6">
|
||||
<input class="form-control" type="text" id="LIB" name="LIB" value="${item.LIB}"
|
||||
placeholder="30 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le libellé est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="30"
|
||||
data-fv-stringlength-message="30 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Prix TTC</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="glyphicon glyphicon-euro"></i></span>
|
||||
<input class="form-control" type="text" id="PUTTC" name="PUTTC" value="${item.PUTTC}"
|
||||
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-2" for="access">Code TVA</label>
|
||||
<div class="col-xs-6">
|
||||
<select class="form-control" id="CTVA" name="CTVA">
|
||||
<div tal:repeat="tva tvas">
|
||||
<option value="${tva.CODE}" tal:attributes="selected item.CTVA==tva.CODE and 'selected' or None">${tva.CODE} | ${tva.TAUX} %</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="agence">Compte</label>
|
||||
<div class="col-xs-6">
|
||||
<select class="form-control" id="COMPTE" name="COMPTE">
|
||||
<div tal:repeat="cpt comptes">
|
||||
<option value="${cpt.CODE}" tal:attributes="selected cpt.CODE==item.COMPTE and 'selected' or None">${cpt.CODE} | ${cpt.LIBELLE}</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2">Famille</label>
|
||||
<div class="col-xs-6">
|
||||
<select class="form-control" id="FAM" name="FAM">
|
||||
<tal:block tal:repeat="famille familles">
|
||||
<option value="${famille}" tal:attributes="selected famille[0]==item.FAM and 'selected' or None">${famille}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2">Type examen</label>
|
||||
<div class="col-xs-6">
|
||||
<select class="form-control" id="type_examen" name="type_examen">
|
||||
<tal:block tal:repeat="type_exa types_exa">
|
||||
<option value="${type_exa}" tal:attributes="selected type_exa==item.type_examen and 'selected' or None">${type_exa}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Délai de réservation</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Jour</span>
|
||||
<input class="form-control" type="text" id="delai_reservation" name="delai_reservation" value="${item.delai_reservation}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de résa.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Délai de rappel</label>
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Jour</span>
|
||||
<input class="form-control" type="text" id="delai_rappel" name="delai_rappel" value="${item.delai_rappel}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre est invalide" />
|
||||
<span class="input-group-addon">0 = pas de rappel</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||
<label><input type="checkbox" name="obsolete" value="item.obsolete" id="obsolete"
|
||||
tal:attributes="checked item.obsolete != 0 and 'checked' or None">Le tarif est obsolète
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access">Dernière modif.</label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static" tal:condition="item.REF != '0'">${item.modif_le.strftime('%d/%m/%Y - %H:%M')}</p>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
</div> <!-- onglet TARIF -->
|
||||
|
||||
<!-- EMAIL DE RAPPEL -->
|
||||
<div id="rappel" class="tab-pane fade">
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<div class="col-xs-7">
|
||||
<label class="control-label">Message de rappel en <a href="https://cours-web.ch/divers/markdown/">Markdown</a></label>
|
||||
<br /><br />
|
||||
<textarea class="form-control monospace-font" rows="20" cols="40" id="rappel_md" name="rappel_md">${item.rappel_md}</textarea>
|
||||
<p>
|
||||
Les mots-variables :<br>
|
||||
<b>!civNomPrenom!</b> : Civilité-Nom-Prénom de l'élève<br>
|
||||
<b>!codeClient!</b> : Code élève<br>
|
||||
<b>!dateRDV!</b> : Date et heure du rendez-vous<br>
|
||||
<b>!statutRDV!</b> : Information spécifique au RDV<br>
|
||||
<b>!lieuRDV!</b> :Lieu du rendez-vous
|
||||
</div>
|
||||
<div class="col-xs-5">
|
||||
<label class="control-label">Traduction en HTML</label>
|
||||
<br /><hr>
|
||||
<div tal:replace="structure item.rappel_html">
|
||||
Page text goes here.
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EMAIL DE CONFIRMATION -->
|
||||
<div id="confirmation" class="tab-pane fade">
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<div class="col-xs-7">
|
||||
<label class="control-label">Message de confirmation en <a href="https://cours-web.ch/divers/markdown/">Markdown</a></label>
|
||||
<br /><br />
|
||||
<textarea class="form-control monospace-font" rows="20" cols="40" id="confirmation_md" name="confirmation_md">${item.confirmation_md}</textarea>
|
||||
<p>
|
||||
Les mots-variables :<br>
|
||||
<b>!civNomPrenom!</b> : Civilité-Nom-Prénom de l'élève<br>
|
||||
<b>!codeClient!</b> : Code élève<br>
|
||||
<b>!dateRDV!</b> : Date et heure du rendez-vous<br>
|
||||
<b>!lieu1RDV!</b> :Lieu 1 du rendez-vous / Nom du moniteur<br>
|
||||
<b>!lieu2RDV!</b> :Lieu 2 du rendez-vous / Durée leçon
|
||||
</div>
|
||||
<div class="col-xs-5">
|
||||
<label class="control-label">Traduction en HTML</label>
|
||||
<br /><hr>
|
||||
<div tal:replace="structure confirmation_html">
|
||||
Page text goes here.
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- tab-content -->
|
||||
|
||||
<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}/tarifs">
|
||||
<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> Enregistrer</button>
|
||||
<button class="btn btn-warning" type="submit" name="form.deleted"
|
||||
tal:condition="item.REF != '0'">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#user_edit-form').formValidation();
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
70
aem_gestion/templates/parametres/tarifs.pt
Normal file
70
aem_gestion/templates/parametres/tarifs.pt
Normal file
@@ -0,0 +1,70 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<form method="POST" id="frm" class="form-horizontal">
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-1">Famille : </label>
|
||||
<div class="col-md-3">
|
||||
<select class="form-control" id="famille" name="famille" onChange="$('#frm').submit()">
|
||||
<tal:block tal:repeat="item familles">
|
||||
<option value="${item}" tal:attributes="selected famille==item and 'selected' or None">${item}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="${request.application_url}/tarif_edit/0" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau tarif</a>
|
||||
</p>
|
||||
|
||||
<table id="tarifs_list" class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Référence</th>
|
||||
<th>Libellé</th>
|
||||
<th class="text-right">PUTTC</th>
|
||||
<th>Rappel</th>
|
||||
<th>Examen</th>
|
||||
<th>Etat</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD-MM-YYYY HH:mm');
|
||||
$('#tarifs_list').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 100,
|
||||
bLengthChange: false,
|
||||
searching: false,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
columnDefs: [
|
||||
{ className: "text-center", "targets": [3,4] },
|
||||
{ className: "text-right", "targets": [2] },
|
||||
{ targets: 0,
|
||||
render: function (data, type, full, meta) {
|
||||
// ajouter un link vers le formulaire
|
||||
return '<a href="/tarif_edit/' + data + '">' + data + '</a>';
|
||||
},
|
||||
},
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
38
aem_gestion/templates/parametres/types_devis.pt
Normal file
38
aem_gestion/templates/parametres/types_devis.pt
Normal file
@@ -0,0 +1,38 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div class="row">
|
||||
<p>
|
||||
<a href="types_devis_frm/0" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span>
|
||||
Créér un nouveau type</a>
|
||||
</p>
|
||||
<table class="table table-condensed table-striped table-bordered">
|
||||
<tr>
|
||||
<th>Type</th>
|
||||
<th>Intitulé</th>
|
||||
<th class="text-right">Montant TTC</th>
|
||||
<th class="text-right">Montant HT</th>
|
||||
<th class="text-right">Nb heures</th>
|
||||
<th class="text-center">Dispo</th>
|
||||
</tr>
|
||||
|
||||
<tr tal:repeat="ligne types">
|
||||
<td><a href="types_devis_frm/${ligne.type_devis}">${ligne.type_devis}</a></td>
|
||||
<td>${ligne.libelle}</td>
|
||||
<td class="text-right">${layout.to_euro(ligne.montantTTC)}</td>
|
||||
<td class="text-right">${layout.to_euro(ligne.montantHT)}</td>
|
||||
<td class="text-right">${ligne.nb_heures}</td>
|
||||
<td class="text-center" tal:condition="ligne.dispo">Dispo</td>
|
||||
<td class="text-center" tal:condition="ligne.dispo==0">X</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
|
||||
</metal:block>
|
||||
|
||||
98
aem_gestion/templates/parametres/types_devis_frm.pt
Normal file
98
aem_gestion/templates/parametres/types_devis_frm.pt
Normal file
@@ -0,0 +1,98 @@
|
||||
<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="types_devis_frm-form" action="${url}" method="post" class="form-horizontal">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-4" for="type_devis">Type de devis</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="type_devis" name="type_devis" value="${types.type_devis}"
|
||||
placeholder="10 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le type de devis est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="10"
|
||||
data-fv-stringlength-message="10 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-4" for="libelle">Intitulé</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="libelle" name="libelle" value="${types.libelle}"
|
||||
placeholder="40 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="L'intitule 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="montantTTC">Montant TTC</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="montantTTC" name="montantTTC" value="${types.montantTTC}"
|
||||
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="montantHT">Montant HT</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="montantHT" name="montantHT" value="${types.montantHT}"
|
||||
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="nb_heures">Nombre d'heures</label>
|
||||
<div class="col-xs-8">
|
||||
<input class="form-control" type="text" id="nb_heures" name="nb_heures" value="${types.nb_heures}"
|
||||
data-fv-numeric="true"
|
||||
data-fv-numeric-message="Le nombre d'heures est invalide" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-offset-4 col-xs-8 checkbox">
|
||||
<label><input type="checkbox" name="dispo" value="types.dispo" id="dispo"
|
||||
tal:attributes="checked types.dispo != 0 and 'checked' or None">La fiche est dispo
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<div class="form-group">
|
||||
<div class="col-sm-offset-4 col-sm-8">
|
||||
<a href="${request.application_url}/types_devis" class="btn btn-default" role="button">
|
||||
<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> Enregistrer</button>
|
||||
<button class="btn btn-danger" type="submit" name="form.deleted"
|
||||
tal:condition="type_devis != '0'">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#types_devis_frm-form').formValidation();
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
148
aem_gestion/templates/parametres/user_edit.pt
Normal file
148
aem_gestion/templates/parametres/user_edit.pt
Normal file
@@ -0,0 +1,148 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||
<br />
|
||||
<div class="row">
|
||||
<form id="user_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="form-group">
|
||||
<label class="control-label col-xs-2" for="cd_uti">Identifiant</label>
|
||||
<div class="col-xs-2">
|
||||
<input class="form-control" type="text" id="cd_uti" name="cd_uti" value="${individu.cd_uti}"
|
||||
placeholder="10 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="L'identifiant est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="3"
|
||||
data-fv-stringlength-message="3 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="intitule">Prénom Nom</label>
|
||||
<div class="col-xs-5">
|
||||
<input class="form-control" type="text" id="intitule" name="nom" value="${individu.nom}"
|
||||
placeholder="30 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="Le nom est obligatoire"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="25"
|
||||
data-fv-stringlength-message="25 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-xs-2 control-label">Email</label>
|
||||
<div class="col-xs-5">
|
||||
<input class="form-control" type="text" name="email"
|
||||
value="${individu.email}" placeholder="55 caractères maximum"
|
||||
data-fv-notempty="true"
|
||||
data-fv-notempty-message="L'adresse email est obligatoire"
|
||||
data-fv-emailaddress="true"
|
||||
data-fv-emailaddress-message="L'adresse email n'est pas valide" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="tel">Téléphone</label>
|
||||
<div class="col-xs-5">
|
||||
<input class="form-control" type="text" id="tel" name="tel" value="${individu.tel}"
|
||||
placeholder="25 caractères maximum"
|
||||
data-fv-stringlength="true"
|
||||
data-fv-stringlength-max="25"
|
||||
data-fv-stringlength-message="25 caractères maximum" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access">Accès</label>
|
||||
<div class="col-xs-3">
|
||||
<select class="form-control" id="secu" name="secu">
|
||||
<div tal:repeat="item access">
|
||||
<option value="${item}" tal:attributes="selected str(individu.secu)==item[0] and 'selected' or None">${item}</option>
|
||||
</div>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2">Code Moniteur</label>
|
||||
<div class="col-md-3">
|
||||
<select class="form-control" id="cd_mon" name="cd_mon">
|
||||
<tal:block tal:repeat="item moniteurs">
|
||||
<option value="${item.CD_MON}" tal:attributes="selected individu.cd_mon==item.CD_MON and 'selected' or None">${item.NOM} - ${item.CD_MON}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-2">Code Moniteur B78</label>
|
||||
<div class="col-md-3">
|
||||
<select class="form-control" id="cd_mon_B78" name="cd_mon_B78">
|
||||
<tal:block tal:repeat="item moniteurs">
|
||||
<option value="${item.CD_MON}" tal:attributes="selected individu.cd_mon_B78==item.CD_MON and 'selected' or None">${item.NOM} - ${item.CD_MON}</option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="agence">Agence par défaut</label>
|
||||
<div class="col-xs-3">
|
||||
<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">
|
||||
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||
<label><input type="checkbox" name="mobile" value="individu.mobile" id="mobile"
|
||||
tal:attributes="checked individu.mobile == 1 and 'checked' or None">Utilisateur est mobile
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||
<label><input type="checkbox" name="actif" value="individu.actif" id="actif"
|
||||
tal:attributes="checked individu.actif != 0 and 'checked' or None">La fiche est active
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-2" for="access">Dernière modif.</label>
|
||||
<div class="col-xs-7">
|
||||
<p class="form-control-static" tal:condition="individu.cd_uti != '0'">${individu.modif_le.strftime('%d/%m/%Y - %H:%M')}</p>
|
||||
</div>
|
||||
</div>
|
||||
<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}/users">
|
||||
<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> Enregistrer</button>
|
||||
<button class="btn btn-warning" type="submit" name="form.deleted"
|
||||
tal:condition="individu.cd_uti != '0'">
|
||||
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</div> <!-- row -->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#user_edit-form').formValidation();
|
||||
$('form input').on('keypress', function(e) {
|
||||
return e.which !== 13;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</metal:block>
|
||||
67
aem_gestion/templates/parametres/users.pt
Normal file
67
aem_gestion/templates/parametres/users.pt
Normal file
@@ -0,0 +1,67 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<p>
|
||||
<a href="${request.application_url}/parametres" class="btn btn-default" role="button">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||
<a href="${request.application_url}/user_edit/0" class="btn btn-success" role="button">
|
||||
<span class="glyphicon glyphicon-plus"></span> Nouveau utilisateur</a>
|
||||
</p>
|
||||
|
||||
<table id="users_list" class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Login</th>
|
||||
<th>Prénom Nom</th>
|
||||
<th></th>
|
||||
<th>Email</th>
|
||||
<th>Moniteur</th>
|
||||
<th>Rôle</th>
|
||||
<th>Dern cnx</th>
|
||||
<th>Etat</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD-MM-YYYY HH:mm');
|
||||
$('#users_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="/user_edit/' + data + '">' + data + '</a>';
|
||||
},
|
||||
},
|
||||
{ targets: 2,
|
||||
render: function (data, type, full, meta) {
|
||||
// ajouter un link vers le formulaire
|
||||
if (type === 'display' && data != '')
|
||||
{ data = '<a href="tel:' + data + '"> <span class="glyphicon glyphicon-earphone"></span>' + '</a>'; }
|
||||
else
|
||||
{ date = ''; }
|
||||
return data;
|
||||
},
|
||||
},
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
40
aem_gestion/templates/parametres/users_ua.pt
Normal file
40
aem_gestion/templates/parametres/users_ua.pt
Normal file
@@ -0,0 +1,40 @@
|
||||
<metal:block use-macro="main_template">
|
||||
<div metal:fill-slot="content">
|
||||
|
||||
<table id="users_list_ua" class="table table-condensed table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Dernière cnx</th>
|
||||
<th>Login</th>
|
||||
<th>Prénom Nom</th>
|
||||
<th>Rôle</th>
|
||||
<th>Appareil utilisé</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<script type="text/javascript">
|
||||
var dataSet = ${dt_data};
|
||||
|
||||
$(document).ready(function() {
|
||||
$.fn.dataTable.moment('DD-MM-YYYY HH:mm');
|
||||
$('#users_list_ua').DataTable({
|
||||
data: dataSet,
|
||||
pageLength: 100,
|
||||
bLengthChange: false,
|
||||
language: {
|
||||
url: 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
|
||||
},
|
||||
"order": [[ 0, "desc" ]]
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
</div><!-- content -->
|
||||
</metal:block>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user