215 lines
9.2 KiB
HTML
215 lines
9.2 KiB
HTML
{{* -*- brindille -*- *}}
|
|
{{*
|
|
Paramètres :
|
|
- $_GET.output_type : "resa" affichage en mode liste ou "resacal" en mode calendrier ou "resadel" en mode suppression (seulement admin)
|
|
- $_GET.st_key : filtre par status (-1 tous, 0 en attente, 1 acceptée, 2 refusée, 3 archivée, 4 supprimée)
|
|
*}}
|
|
|
|
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
|
|
|
|
{{if $_GET.output_type == "resa" || $_GET.output_type == "resacal" || $_GET.output_type == "resadel"}}
|
|
{{:assign label="réservation"}}
|
|
{{else}}
|
|
{{:error message="Cette page n'existe pas !"}}
|
|
{{/if}}
|
|
|
|
{{:admin_header title="%ss en cours"|args:$label|ucfirst custom_css="./style.css" current="module_%s"|args:$module.name}}
|
|
{{if $_GET.output_type == "resacal"}}
|
|
{{:include file="./_nav.html" current="%s"|args:$label subcurrent="calendrier"}}
|
|
{{elseif $_GET.output_type == "resadel"}}
|
|
{{:include file="./_nav.html" current="%s"|args:$label subcurrent="suppression"}}
|
|
{{*:include file="./reservation/delete_reservation.html" current="%s"|args:$label subcurrent="suppression" keep="_GET.output_type,_GET.st_key"*}}
|
|
{{else}}
|
|
{{:include file="./_nav.html" current="%s"|args:$label subcurrent="encours"}}
|
|
{{/if}}
|
|
|
|
{{* lecture config *}}
|
|
{{:include file="./_get_config.html" keep="config"}}
|
|
|
|
{{* filtrer selon le status de la réservation *}}
|
|
{{*:assign saved_filters=$module.config.states*}}
|
|
{{:assign saved_filters="en attente,acceptée,refusée,en cours,archivée,supprimée"|explode:","}}
|
|
{{*:assign var="user_filters" from="saved_filters.%s"|args:$logged_user.id*}}
|
|
|
|
{{if $_GET.st_key == null}}
|
|
{{*:assign var="selected_status" from="user_filters.%s_hist_st_key"|args:$_GET.output_type*}}
|
|
{{:assign selected_status=null}}
|
|
{{else}}
|
|
{{if $_GET.st_key == -1}}
|
|
{{:assign selected_status=""}}
|
|
{{else}}
|
|
{{:assign selected_status=$_GET.st_key}}
|
|
{{/if}}
|
|
{{*:assign var="user_filters.%s_hist_st_key"|args:$_GET.output_type value=$selected_status*}}
|
|
{{*:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters*}}
|
|
{{*:save key="config" filters=$saved_filters*}}
|
|
{{/if}}
|
|
|
|
{{* condition de filtrage WHERE *}}
|
|
{{if $selected_status != null}}
|
|
{{:assign var=_st_value from="saved_filters.%d"|args:$_GET.st_key}}
|
|
{{if $_GET.st_key == 0}}
|
|
{{:assign st_condition="WHERE (w_status = '%s' AND e_status IS NULL)"|args:$_st_value}}
|
|
{{:assign st_condition_cal="$$.status = '%s'"|args:$_st_value}}
|
|
{{elseif $_GET.st_key > 0}}
|
|
{{:assign st_condition="WHERE (e_status = '%s')"|args:$_st_value}}
|
|
{{:assign st_condition_cal="$$.status = '%s'"|args:$_st_value}}
|
|
{{/if}}
|
|
{{else}}
|
|
{{:assign st_condition="WHERE 1 = 1"}}
|
|
{{:assign st_condition_cal="1"}}
|
|
{{/if}}
|
|
|
|
{{* sélecteur de status *}}
|
|
{{:assign var="st_options." value="" label="Tous les status" href="?output_type=%s&st_key=-1"|args:$_GET.output_type}}
|
|
{{#foreach from=$saved_filters key="key" item="value"}}
|
|
{{:assign var="st_options." value=$key|strval label=$value href="?output_type=%s&st_key=%s"|args:$_GET.output_type:$key}}
|
|
{{/foreach}}
|
|
{{*:debug st_options=$st_options saved_filters=$saved_filters selected_status=$selected_status st_condition=$st_condition st_condition_cal=$st_condition_cal user_filters=$user_filters logged_user=$logged_user.id _st_value=$_st_value*}}
|
|
|
|
<div class="shortFormLeft">
|
|
<p class="help">Inventaire des réservations effectuées</p>
|
|
</div>
|
|
|
|
<fieldset class="shortFormRight">
|
|
<legend>Filtrer par status</legend>
|
|
{{:dropdown
|
|
title="Filtrer par status"
|
|
options=$st_options
|
|
value="%s"|args:$selected_status|strval
|
|
}}
|
|
</fieldset>
|
|
|
|
{{* ------------------ Affichage en mode liste : suppression ----------------- *}}
|
|
{{if $_GET.output_type == "resadel" || $_POST.ids}}
|
|
{{:include file="./reservation/delete_reservation.html" current="%s"|args:$label subcurrent="suppression"}}
|
|
{{/if}}
|
|
|
|
{{* ------------------ Affichage en mode liste : traitement ----------------- *}}
|
|
{{if $_GET.output_type == "resa"}}
|
|
<p class="help">Légende : <br/>
|
|
{{:icon shape="globe"}} : réservation issue de la page publique<br/>
|
|
{{:icon shape="print"}} : réservation issue de la page membre<br/>
|
|
{{:icon shape="alert"}} : signature du contrat requise lors du retrait du matériel
|
|
</p>
|
|
{{* Liste des réservations *}}
|
|
{{:include file="_resa_load.html" keep="_resa_lignes"}}
|
|
{{*:debug lignes=$_resa_lignes*}}
|
|
<table class="list">
|
|
<thead class="userOrder">
|
|
<tr>
|
|
<td></td>
|
|
<td class="num">N° de membre</td>
|
|
<td>Nom</td>
|
|
<td>Téléphone</td>
|
|
<td>Matériel</td>
|
|
<td>Quantité souhaitée</td>
|
|
<td>Date souhaitée</td>
|
|
<td>Retour prévu/réel</td>
|
|
<td>Commentaire additionnel</td>
|
|
<td>Statut de la demande</td>
|
|
<td class="actions"></td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{{#foreach from=$_resa_lignes}}
|
|
<tr>
|
|
<td><span class="tag" style="--tag-color:darkblue; color:white; white-space:nowrap;">{{:icon shape="%s"|args:$shape}} {{if !$signed}} {{:icon shape="alert"}}{{/if}}</span></td>
|
|
<td>{{$member}}</td>
|
|
<td>{{$name}}</td>
|
|
<td>{{$contact}}</td>
|
|
{{#load key="%s"|args:$equipment}}{{:assign var="equipment.name" value=$name}}{{/load}}
|
|
<td>{{$equipment.name}}</td>
|
|
<td>{{$amount}}</td>
|
|
<td>{{* Si acceptée et date de retrait aujourd'hui *}}
|
|
{{if $status == "acceptée" && $loan_date|parse_date == $now|date:'Y-m-d'}}
|
|
<span class="tag" style="--tag-color:lightgreen; color:black;">{{$loan_date|date_short}}</span>
|
|
{{else}}
|
|
{{$loan_date|date_short}}
|
|
{{/if}}
|
|
</td>
|
|
<td>{{* Si an cours et date de retour aujourd'hui *}}
|
|
{{if $status == "en cours" && $return_date|parse_date == $now|date:'Y-m-d'}}
|
|
<span class="tag" style="--tag-color:lightblue; color:black;">{{$return_date|date_short}}</td></span>
|
|
{{else}}
|
|
{{$return_date|date_short}}</td>
|
|
{{/if}}
|
|
<td>{{$comment}}</td>
|
|
<td>{{:include file="./_resa_status_color.html" status='%s'|args:$status|or:null}}</td>
|
|
<td class="actions">
|
|
{{if $status == "acceptée" || $status == "refusée"}}
|
|
{{* Ne pas permettre d'archiver des réservations au status acceptée/refusée si la date n'est pas passée *}}
|
|
{{if $return_date|parse_date < $now|date:'Y-m-d'}}
|
|
{{:linkbutton label="Archiver" href="reservation/resa_details.html?key=%s"|args:$wres_key shape="lock"}}
|
|
{{else}}
|
|
{{:linkbutton label="Détails" href="reservation/resa_details.html?key=%s"|args:$wres_key shape="eye"}}
|
|
{{/if}}
|
|
{{elseif $status == "en cours"}}
|
|
{{:linkbutton label="Détails" href="reservation/resa_details.html?key=%s"|args:$wres_key shape="eye"}}
|
|
{{elseif $status == "archivée"}}
|
|
{{:linkbutton label="Détails" href="reservation/resa_details.html?key=%s"|args:$wres_key shape="eye"}}
|
|
{{elseif $status == null}}
|
|
{{else}}
|
|
{{:linkbutton label="Traiter" href="reservation/resa_details.html?key=%s"|args:$wres_key shape="edit"}}
|
|
{{/if}}
|
|
</td>
|
|
</tr>
|
|
{{/foreach}}
|
|
</tbody>
|
|
</table>
|
|
{{/if}}
|
|
|
|
{{* ------------------ Affichage en mode Calendrier ----------------- *}}
|
|
{{if $_GET.output_type == "resacal"}}
|
|
{{:include file="./_web_calendar.html"}}
|
|
{{* Charge les réservations dans le calendrier *}}
|
|
{{:include file="_resa_load.html" keep="_resa_lignes"}}
|
|
{{#foreach from=$_resa_lignes}}
|
|
{{*#load key="%s"|args:$equipment assign="_equi"}}{{:debug equi=$_equi.name}}{{/load}}
|
|
{{:assign var="equipment_resa" value=null*}}
|
|
{{#load key="%s"|args:$equipment}}{{:assign var="equipment.name" value=$name}}{{/load}}
|
|
{{:include file="_resa_status_color.html" color_only=true keep="_tag_color,_text_color"}}
|
|
{{:assign var="_title" value="%s %s (%s)"|args:$equipment.name:$name:$status}}
|
|
{{* Voir https://fullcalendar.io/docs/event-parsing
|
|
This value is exclusive. For example, if you have an all-day event that has an end of 2018-09-03,
|
|
then it will span through 2018-09-02 and end before the start of 2018-09-03
|
|
*}}
|
|
{{:assign _return=$return_date|parse_date|strtotime}}
|
|
{{:assign _return_timestamp="(%d+86400)"|math:$_return}}
|
|
{{:assign _return_date="%s"|args:$_return_timestamp|date:'Y-m-d'}}
|
|
{{*:debug _return_timestamp=$_return_timestamp _return_date=$_return_date*}}
|
|
{{:assign var="_events" value="%s{title: '%s', start: '%s', end: '%s', backgroundColor:'%s', textColor:'%s', url:'reservation/resa_details.html?key=%s&output_type=%s'},"|args:$_events:$_title:$loan_date:$_return_date:$_tag_color:$_text_color:$wres_key:$_GET.output_type}}
|
|
{{/foreach}}
|
|
{{*:debug _events=$_events*}}
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
var initialLocaleCode = 'fr'
|
|
const calendarEl = document.getElementById('calendar')
|
|
const calendar = new FullCalendar.Calendar(calendarEl, {
|
|
headerToolbar: {
|
|
left: 'prev,next today',
|
|
center: 'title',
|
|
right: 'dayGridMonth,dayGridWeek,dayGridDay,listMonth'
|
|
},
|
|
aspectRatio: 2,
|
|
locale: initialLocaleCode,
|
|
buttonIcons: false, // show the prev/next text
|
|
weekNumbers: true,
|
|
navLinks: true, // can click day/week names to navigate views
|
|
editable: false,
|
|
dayMaxEvents: true, // allow "more" link when too many events
|
|
events: [
|
|
{{$_events|raw}}
|
|
]
|
|
})
|
|
calendar.render()
|
|
})
|
|
</script>
|
|
<fieldset>
|
|
<legend>Calendrier des réservations</legend>
|
|
<div id='calendar'></div>
|
|
</fieldset>
|
|
{{/if}}
|
|
|
|
{{:admin_footer}} |