Compare commits

..

4 commits

Author SHA1 Message Date
Jean-Christophe Engel
63775189da Mise en place gestion accès aux pages 2025-12-03 10:47:43 +01:00
Jean-Christophe Engel
cefc3e824d Correction typos 2025-12-02 14:16:58 +01:00
Jean-Christophe Engel
6e09219aa1 Améliorations cosmétiques fiche détail mouvement 2025-11-29 11:38:37 +01:00
Jean-Christophe Engel
ef4870257d Ajout historique des mouvements d'un matériel d'un membre 2025-11-27 11:33:27 +01:00
32 changed files with 235 additions and 34 deletions

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{:admin_header title="Matériels archivés" current="module_equipment"}}
{{:include file="_nav.html" current="archives"}}

View file

@ -1,9 +1,6 @@
{{* -*- brindille -*- *}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="config" subcurrent="categories"}}
{{/if}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}
@ -25,6 +22,11 @@
{{/form}}
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="config" subcurrent="categories"}}
{{/if}}
{{:form_errors}}
{{* formulaire d'ajout de catégorie *}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{#load key=$_GET.key assign="category"}}
{{else}}
{{:error message="Catégorie introuvable"}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{:admin_header title="Configuration" current="module_equipment"}}
{{* barre de navigation *}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{#load key=$_GET.key assign="category"}}
{{else}}
{{:error message="Catégorie introuvable"}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{:admin_header title="Configuration" current="module_equipment"}}
{{* barre de navigation *}}

View file

@ -1,15 +1,12 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
paramètres :
- dir : input ou output
*}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="config" subcurrent="typesES"}}
{{/if}}
{{* Traiter l'envoi du formulaire *}}
{{* lecture config *}}
@ -51,6 +48,11 @@
{{/form}}
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="config" subcurrent="typesES"}}
{{/if}}
{{:form_errors}}
{{if $_GET.dir == 'input'}}

View file

@ -1,15 +1,13 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
paramètres :
- dir : input ou output
- op_key : clé du type de mouvement à supprimer
*}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="config" subcurrent="typesES"}}
{{/if}}
{{* lecture config (défaut ou enregistrée) *}}
{{:include file="../_get_config.html" keep="config, directions"}}
@ -37,6 +35,10 @@
{{/form}}
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="config" subcurrent="typesES"}}
{{/if}}
{{:form_errors}}
{{:assign var="mvt_label" from="config.%s_nature.%s.label"|args:$_GET.dir:$_GET.op_key}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{:admin_header title="Configuration" current="module_equipment"}}
{{#form on="save"}}

View file

@ -1,16 +1,13 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
paramètres :
- dir : input ou output
- op_key : clé du type de mouvement dont on veut modifier le libellé
*}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="config" subcurrent="typesES"}}
{{/if}}
{{* lecture config (défaut ou enregistrée) *}}
{{:include file="../_get_config.html" keep="config, directions"}}
@ -43,7 +40,12 @@
{{/form}}
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="config" subcurrent="typesES"}}
{{/if}}
{{:form_errors}}
{{:assign var="default_label" from="config.%s_nature.%s.label"|args:$_GET.dir:$_GET.op_key}}
<form method="post" action="" data-focus="1">
<fieldset>

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Afficher l'historique des mouvements d'un matériel
paramètres

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Afficher l'historique de tous les mouvements
*}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{:admin_header title="Gestion des matériels" custom_css="./style.css" current="module_equipment"}}
{{* barre de navigation *}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{:admin_header title="Matériels hors de l'asso" custom_css="../style.css" current="module_equipment"}}
{{:include file="./_nav.html" current="historique" subcurrent="prêts"}}
@ -106,11 +108,11 @@
{{if $nb_jours < -1}}{{:assign jour="jours"}}{{/if}}
{{"Reste %s %s"|args:$delai:$jour}}
{{else}}
{{:tag color="darkgreen" label="À rendre aujourdh'ui"}}
{{:tag color="darkgreen" label="À rendre aujourd'hui"}}
{{/if}}
{{/if}}
</td>
<td>
<td class="actions">
{{:linkbutton
label="Retour"
href="movements/output_return.html?key=%s&prop=1"|args:$mvt_key

126
member_history.html Normal file
View file

@ -0,0 +1,126 @@
{{* -*- brindille -*- *}}
{{*
Afficher l'historique des mouvements d'un matériel pour un membre
paramètres
- key : clé du matériel
- id : id du membre
*}}
{{#restrict block=true section="users" level="read"}}{{/restrict}}
{{:admin_header title="Historique membre" custom_css="./style.css" current="module_equipment"}}
{{* lecture config (défaut ou enregistrée) *}}
{{:include file="./_get_config.html" keep="config, directions"}}
{{#foreach from=$directions key="direction"}}
{{:assign var="nature" from="config.%s_nature"|args:$direction}}
{{#foreach from=$nature key=key}}
{{:assign var="types.%s.%s."|args:$direction:$type value=$key|quote_sql}}
{{/foreach}}
{{:assign var="io_types" from="types.%s"|args:$direction}}
{{#foreach from=$io_types key=key}}
{{:assign var=elem from="io_types.%s"|args:$key}}
{{:assign elem=$elem|implode:","}}
{{:assign elem="("|cat:$elem|cat:")"}}
{{:assign var="%s_types.%s"|args:$direction:$key value=$elem}}
{{/foreach}}
{{/foreach}}
{{#users id=$_GET.id}}
{{:assign user_name=$nom}}
{{else}}
{{:error message="Il n'existe aucun membre avec l'identifiant %s !"|args:$_GET.id}}
{{/users}}
{{#load key=$_GET.key|trim}}
{{:assign eqpmt_name=$name}}
{{else}}
{{:error message="Il n'existe aucun matériel avec la clé %s !"|args:$_GET.key|trim}}
{{/load}}
<h3>Historique des mouvements de « {{$eqpmt_name}} » du membre « {{$user_name}} »</h3>
{{:assign otk=null}}
{{#select
mvt.key AS mvt_key,
json_extract(mvt.document, '$.direction') as direction,
json_extract(mvt.document, '$.operation') as operation,
json_extract(mvt.document, '$.date') as date,
json_extract(mvt.document, '$.amount') as amount,
COALESCE((SELECT
json_extract(links.document, '$.temp_key')
FROM {!$module.table} AS links
WHERE json_extract(links.document, '$.temp_key') = mvt.key
OR json_extract(links.document, '$.return') = mvt.key), mvt.key)
AS out_temp_key
FROM {!$module.table} AS mvt
INNER JOIN users ON json_extract(mvt.document, '$.user') = users.id
INNER JOIN {!$module.table} AS eqpmt
ON json_extract(mvt.document, '$.equipment') = eqpmt.key
WHERE users.id = :user
AND eqpmt.key = :eqpmt_key
AND (json_extract(mvt.document, '$.operation') IN !output_types
OR json_extract(mvt.document, '$.operation') IN !input_types)
ORDER BY out_temp_key, date
;
:user = $_GET.id
:eqpmt_key = $_GET.key|trim
!output_types=$output_types.temporaire
!input_types=$input_types.retour
}}
{{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$direction:$operation}}
{{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}}
{{:assign var="total" from="reste.%s"|args:$out_temp_key}}
{{if $total == null}}
{{:assign total=0}}
{{/if}}
{{if $otk != null && $otk != $out_temp_key}}
</tbody>
</table>
{{/if}}
{{if $otk == null || $otk != $out_temp_key}}
<table class="list">
<thead>
<tr>
<td>Date</td>
<td>Opération</td>
<td>Quantité</td>
<td>Total</td>
<td class="actions"></td>
</tr>
</thead>
<tbody>
{{:assign otk=$out_temp_key}}
{{/if}}
{{if $direction == 'input' && $type_mvt == 'retour'}}
{{:assign var="reste.%s"|args:$out_temp_key value="%d-%d"|math:$total:$amount}}
{{elseif $direction == 'output' && $type_mvt == 'temporaire'}}
{{:assign var="reste.%s"|args:$out_temp_key value="%d+%d"|math:$total:$amount}}
{{/if}}
{{:assign var="total" from="reste.%s"|args:$out_temp_key}}
<tr>
<td>{{$date|date_short}}</td>
<td>{{$op_label}}</td>
<td>{{$amount}}</td>
<td>{{$total}}</td>
<td class="actions">
{{#restrict section="accounting" level="write"}}
{{if $direction == "output" && $type_mvt == "temporaire"}}
{{:linkbutton
label="Retour"
href="%smovements/output_return.html?key=%s&prop=0&user=%s"|args:$module.url:$mvt_key:$_GET.id
shape="history"
target="_dialog"}}
{{/if}}
{{/restrict}}
</td>
</tr>
{{/select}}
</tbody>
</table>

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Paramètres :
- key : clé du matériel à modifier

View file

@ -4,5 +4,7 @@ author="Jean-Christophe Engel"
author_url="https://gitea.zaclys.com/lesanges"
home_button=true
menu=true
restrict_section="accounting"
restrict_level="write"
restrict_section="users"
restrict_level="read"
restrict_details="... mais uniquement pour consulter l'historique des prêts des membres ; seuls les membres ayant accès en écriture à la comptabilité pourront utiliser l'ensemble des fonctionalités du module."
allow_user_restrict=false

View file

@ -1,9 +1,6 @@
{{* -*- brindille -*- *}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="entrees"}}
{{/if}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{* récupérer la config des entrées/sorties *}}
{{:include file="../_get_config.html" keep="config"}}
@ -120,6 +117,10 @@
{{/form}}
{{:admin_header title="Entrée de matériel" current="module_equipment"}}
{{* barre de navigation *}}
{{if ! $dialog}}
{{:include file="../_nav.html" current="entrees"}}
{{/if}}
{{:form_errors}}
{{if $categories != null}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Dupliquer un mouvement
paramètres :

View file

@ -1,4 +1,6 @@
{{* -*- brindille -*-}}
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
paramètres GET :

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Enregistrer une entrée de matériel
paramètres :

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Enregistrer un retour d'entrée temporaire
paramètres :

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Modifier un mouvement
paramètres :

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Afficher les détails d'un mouvement et donner la possibilité :
- d'associer des fichiers
@ -63,9 +65,9 @@
<dt>Opération</dt>
<dd>{{$op_label}}</dd>
<dt>Matériel</dt>
<dd>{{$equipment.name}}</dd>
<dd>{{:link href="../equipment_history.html?key=%s&prop=%s"|args:$equipment.key:$_GET.prop label=$equipment.name}}</dd>
<dt>Catégorie</dt>
<dd>{{$category.name}}</dd>
<dd>{{:link href="../index.html?cat_key=%s&prop=1"|args:$category.key label=$category.name}}</dd>
<dt>Date</dt>
<dd>{{$mvt.date|date_short}}</dd>
<dt>Quantité</dt>
@ -74,7 +76,7 @@
<dt>Membre destinataire</dt>
<dd>
{{if $mvt.user != null}}
{{$user_name}}
{{:link href="/admin/users/details.php?id=%s"|args:$mvt.user label=$user_name}}
{{else}}—
{{/if}}
</dd>
@ -95,16 +97,21 @@
{{else}}—
{{/foreach}}
</dd>
{{if $mvt.direction == "output" && $type_mvt != "retour"}}
<dt>Date de retour</dt>
<dd>
{{if $mvt.return_date != null}}
{{$mvt.return_date|date_short}}
{{else}}—
{{/if}}
</dd>
{{/if}}
<dt>Remarques</dt>
<dd>{{if $mvt.comment != null}}
{{$mvt.comment}}
{{else}}—
{{/if}}
</dd>
{{if $mvt.return_date != null}}
<dt>Date de retour</dt>
<dd>{{$mvt.return_date|date_short}}</dd>
{{/if}}
</dl>
<form method="post" action="">

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
paramètres :
- key : clé du matériel à sortir

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Enregistrer un retour de sortie temporaire
paramètres :

View file

@ -69,6 +69,7 @@
{{:assign nb_jours=0}}
{{:assign old_eqpmt_key=$eqpmt_key}}
{{:assign var="ligne.date" value=$date}}
{{:assign var="ligne.eqpmt_key" value=$eqpmt_key}}
{{:assign var="ligne.materiel" value=$eqpmt_name}}
{{:assign var="ligne.return_date" value=$return_date}}
{{:assign var="ligne.retard" value="0"}}
@ -88,6 +89,7 @@
{{:assign nb_jours=0}}
{{:assign old_eqpmt_key=$eqpmt_key}}
{{:assign var="ligne.date" value=$date}}
{{:assign var="ligne.eqpmt_key" value=$eqpmt_key}}
{{:assign var="ligne.materiel" value=$eqpmt_name}}
{{:assign var="ligne.return_date" value=$return_date}}
{{:assign var="ligne.retard" value="0"}}
@ -120,6 +122,7 @@
<th>Quantité</th>
<th>Date de retour</th>
<th>Remarque</th>
<th class="actions">
</tr>
</thead>
<tbody>
@ -139,6 +142,14 @@
{{:tag color="darkgreen" label="À rendre aujourdh'ui"}}
{{/if}}
</td>
<td class="actions">
{{:linkbutton
label="Historique"
href="%smember_history.html?key=%s&id=%s"|args:$module.url:$eqpmt_key:$user.id
shape="table"
target="_dialog"
}}
</td>
</tr>
{{/foreach}}
</tbody>

View file

@ -1,6 +1,8 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
paramètres :
- key : clé du stockage à supprimer

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Afficher les lieux de stockage
*}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{* récupérer les infos du lieu de stockage *}}
{{#load key=$_GET.key assign="storage"}}
{{else}}

View file

@ -1,5 +1,7 @@
{{* -*- brindille -*- *}}
{{#restrict block=true section="accounting" level="write"}}{{/restrict}}
{{*
Remettre le matériel en service
Paramètres :