Files

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