initial upload

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

View File

@@ -0,0 +1,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">&times;</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>

View 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>

View 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>&nbsp;${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>

View 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>

View 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>

View 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>

View 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>

View 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>&nbsp;Enregistrer</button>
<a href="${request.application_url}/faq_view/${faq_id}" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span>&nbsp;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>&nbsp;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>

View 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>&nbsp;
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>

View 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>&nbsp;Modifier</a>
<a href="${request.application_url}/faq_list" class="btn btn-default" role="button">
<span class="glyphicon glyphicon-chevron-left"></span>&nbsp;Fermer</a>
<br />
<hr>
<div tal:replace="structure texte">
Page text goes here.
</div>
<hr>
<br />
<br />
<br />
<br />
</div>
</metal:block>

View 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>

View 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>

View 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>

View 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>&nbsp;Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
<button class="btn btn-danger" type="submit" name="form.deleted"
tal:condition="justif.CODE != '0'">
<span class="glyphicon glyphicon-remove"></span>&nbsp;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>

View 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>&nbsp;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>

View 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>&nbsp;Générer les rappels</button>
<button class="btn btn-primary" type="submit" name="form.email_rappels">
<span class="glyphicon glyphicon-send"></span>&nbsp;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>&nbsp;Confirmer les résa</button>
<button class="btn btn-primary" type="submit" name="form.email_resa">
<span class="glyphicon glyphicon-send"></span>&nbsp;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>

View 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">&times;</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>

View 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">&times;</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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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">&times;</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>

View 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>&nbsp;Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
<button class="btn btn-danger" type="submit" name="form.deleted">
<span class="glyphicon glyphicon-remove"></span>&nbsp;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>

View 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">&times;</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">&times;</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">&times;</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>

View 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">&times;</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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>&nbsp;
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>

View 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>&nbsp;Annuler</a>
<button class="btn btn-primary" type="submit" name="form.submitted">
<span class="glyphicon glyphicon-ok"></span>&nbsp;Enregistrer</button>
<button class="btn btn-danger" type="submit" name="form.deleted"
tal:condition="type_devis != '0'">
<span class="glyphicon glyphicon-remove"></span>&nbsp;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>

View 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>

View 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>

View 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>