Poursuite gestion lieu stockage

This commit is contained in:
Jean-Christophe Engel 2025-03-03 12:14:31 +01:00
parent 966323acdf
commit 1f38e394fc
8 changed files with 143 additions and 69 deletions

View File

@ -46,11 +46,15 @@
FROM @TABLE AS mat
WHERE mat.key = @TABLE.$$.equipment) AS 'Matériel' ;
$$.amount AS 'Quantité';
$$.comment AS 'Commentaire';
CASE WHEN $$.user NOT NULL
THEN (SELECT %s AS nom FROM users WHERE id = $$.user)
ELSE ''
END as 'Dépositaire'
END as 'Dépositaire';
CASE WHEN $$.storage NOT NULL
THEN (SELECT $$.name FROM @TABLE as storage WHERE storage.key = @TABLE.$$.storage)
ELSE ''
END as 'Stockage';
$$.comment AS 'Commentaire'
"|args:$config.user_fields.name_sql
order=1
desc=true
@ -70,8 +74,9 @@
<td class="nosort">{{$op_label}}</td>
<td>{{$col4}}</td>
<td class="num">{{$amount}}</td>
<td>{{:link href="/admin/users/details.php?id=%s"|args:$user label="%s"|args:$col6}}</td>
<td>{{$col7}}</td>
<td>{{$comment}}</td>
<td>{{:link href="/admin/users/details.php?id=%s"|args:$user label="%s"|args:$col7}}</td>
<td></td>
</tr>
{{/list}}

View File

@ -126,11 +126,15 @@
"" as 'Stock';
"" as 'Sorti';
"" as 'Disponible';
$$.comment AS 'Commentaire';
CASE WHEN $$.user NOT NULL
THEN (SELECT %s AS nom FROM users WHERE id = $$.user)
ELSE ''
END as 'Dépositaire'
END as 'Dépositaire';
CASE WHEN $$.storage NOT NULL
THEN (SELECT $$.name FROM @TABLE as storage WHERE storage.key = @TABLE.$$.storage)
ELSE ''
END as 'Stockage';
$$.comment AS 'Commentaire'
"|args:$config.user_fields.name_sql
equipment=$equipment_key
order=1
@ -152,8 +156,9 @@
<td class="num nosort">{{$stock}}</td>
<td class="num nosort">{{$exterieur}}</td>
<td class="num nosort">{{$dispo}}</td>
<td>{{:link href="/admin/users/details.php?id=%s"|args:$user label="%s"|args:$col8}}</td>
<td>{{$col9}}</td>
<td>{{$comment}}</td>
<td>{{:link href="/admin/users/details.php?id=%s"|args:$user label="%s"|args:$col9}}</td>
<td class="actions">
{{if $current != "archives"}}
{{:linkbutton
@ -185,6 +190,10 @@
$$.operation AS 'Opération';
$$.amount AS 'Quantité';
"" as 'Présent';
CASE WHEN $$.storage NOT NULL
THEN (SELECT $$.name FROM @TABLE as storage WHERE storage.key = @TABLE.$$.storage)
ELSE ''
END as 'Stockage';
$$.comment AS 'Commentaire'"
equipment=$equipment_key
order=1
@ -202,6 +211,7 @@
<td>{{$op_label}}</td>
<td class="num">{{$amount}}</td>
<td class="num nosort">{{$stock}}</td>
<td>{{$col6}}</td>
<td>{{$comment}}</td>
<td class="actions">
{{:linkbutton

View File

@ -24,7 +24,7 @@
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}
{{* vérifier la quantité saisie (UTILE ? : fait par la navigateur) *}}
{{* vérifier la quantité saisie *}}
{{if $_POST.quantite <= 0}}
{{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.quantite}}
{{/if}}
@ -35,7 +35,7 @@
{{/if}}
{{* vérifier l'existence d'un matériel de même nom *}}
{{#load type="equipment" where="$$.name = :name COLLATE U_NOCASE" :name=$_POST.name|trim limit=1}}}}
{{#load type="equipment" where="$$.name = :name COLLATE U_NOCASE" :name=$_POST.name|trim limit=1}}
{{:assign equipment_key=$key}}
{{:assign var=nom_cat from="categories.%s"|args:$category}}
{{:assign present=true}}
@ -77,6 +77,7 @@
equipment=$equipment_key
date=$_POST.date|parse_date
comment=$_POST.remarques|trim
storage=$_POST.storage
}}
{{:assign var=entree from="config.input_nature.%s"|args:$_POST.operation}}
@ -85,30 +86,29 @@
{{else}}
{{:assign prop=1}}
{{/if}}
{{:redirect force="../index.html?prop=%s&ok=1&msg=ajout"|args:$prop:$msg}}
{{:redirect force="../index.html?prop=%s&ok=1&msg=ajout"|args:$prop}}
{{/form}}
{{:admin_header title="Entrée de matériel" current="module_equipment"}}
{{:form_errors}}
{{if $categories != null}}
{{#load type="storage" order="$$.name"}}
{{:assign var="storage.%s"|args:$key value=$name}}
{{/load}}
{{* formulaire ajout matériel *}}
<form method="post" action="">
<fieldset class="entree">
<legend>Ajouter une entrée de matériel</legend>
<legend>Enregistrer une entrée de matériel</legend>
<dl>
{{:input type="select" name="operation" label="Type" required=true default_empty="— Aucun —" options=$input_labels|sort}}
{{:input type="date" name="date" label="Date" required=true default=$now|date_short}}
{{:input type="number" name="quantite" label="Quantité" min=1 required=true default=1}}
</dl>
</fieldset>
<fieldset>
<legend>Sélectionner une catégorie et indiquer le nom du nouveau matériel</legend>
<dl>
{{:input type="select" name="category" label="Catégorie" default_empty="— Aucune —" options=$categories required=true}}
{{:input type="text" name="name" label="Désignation" required=true}}
{{:input type="select" name="category" label="Catégorie" default_empty="— Aucune —" options=$categories required=true}}
{{:input type="select" name="storage" label="Lieu de stockage" default_empty="— Aucun —" options=$storage required=false}}
{{:input type="textarea" name="remarques" label="Remarques" cols="40", rows="3" required=false}}
</dl>
</fieldset>

View File

@ -171,23 +171,23 @@
{{/select}}
{{/if}}
{{#load type="storage" order="$$.name"}}
{{:assign var="storage.%s"|args:$key value=$name}}
{{/load}}
{{* formulaire de copie du mouvement *}}
<form method="post" action="">
<fieldset>
<legend>Créer une copie de « {{$op_label}} {{$eqpmt.name}} (Catégorie : {{$category.name}}) »</legend>
{{if $mvt_new.direction == "input"}}
<dl>
{{if $mvt_new.direction == "input"}}
{{:input type="select" name="operation" label="Type" required=true options=$input_labels|sort default=$mvt_new.operation}}
{{else}}
<dl>
{{:input type="select" name="operation" label="Type" required=true options=$output_labels|sort default=$mvt_new.operation}}
{{/if}}
{{:input type="date" name="date" label="Date" required=true default=$mvt_new.date}}
{{:input type="number" name="amount" label="Quantité" min=1 required=true default=$mvt_new.amount}}
{{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}}
</dl>
{{if $prop == 1}}
<dl id="user" class="">
{{if $prop == 1 && $mvt_new.direction == "output"}}
{{:input
type="list"
name="user"
@ -198,8 +198,12 @@
max=1
help="dans le cas d'une sortie temporaire, il est possible d'associer un membre bénéficiaire"
}}
</dl>
{{/if}}
{{if $mvt_new.direction == "input"}}
{{:input type="select" name="storage" label="Lieu de stockage" default_empty="— Aucun —" options=$storage required=false}}
{{/if}}
{{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}}
</dl>
</fieldset>
<p class="submit">

View File

@ -1,7 +1,7 @@
{{* -*- brindille -*- *}}
{{*
Ajouter une entrée de matériel
Enregistrer une entrée de matériel
paramètres :
- key : clé du matériel à ajouter
*}}
@ -52,6 +52,7 @@
equipment=$equipment.key
date=$_POST.date|parse_date
comment=$_POST.remarques|trim
storage=$_POST.storage
}}
{{:assign var=type_entree from="config.input_nature.%s.type"|args:$_POST.operation}}
{{if $type_entree == "temporaire"}}
@ -66,6 +67,9 @@
{{:form_errors}}
{{* formulaire de saisie d'une entrée de matériel *}}
{{#load type="storage" order="$$.name"}}
{{:assign var="storage.%s"|args:$key value=$name}}
{{/load}}
<form method="post" action="">
<fieldset class="informations">
<legend>Informations matériel</legend>
@ -77,11 +81,12 @@
</dl>
</fieldset>
<fieldset class="entree">
<legend>Ajouter une entrée de matériel</legend>
<legend>Enregistrer une entrée de matériel</legend>
<dl>
{{:input type="select" name="operation" label="Type" required=true default_empty="— Aucun —" options=$input_labels|sort}}
{{:input type="date" name="date" label="Date" required=true default=$now|date_short}}
{{:input type="number" name="quantite" label="Quantité" required=true min=1 default=1}}
{{:input type="select" name="storage" label="Lieu de stockage" default_empty="— Aucun —" options=$storage required=false}}
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
</dl>
</fieldset>

View File

@ -56,17 +56,23 @@
{{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.amount}}
{{/if}}
{{* interdire date dans le futur *}}
{{* vérifier validité des données *}}
{{if $_POST.date|parse_date|strtotime > $now}}
{{:error message="Impossible de saisir une date dans le futur (%s)"|args:$_POST.date}}
{{/if}}
{{if $mvt_new.direction != "output" || $type_mvt != "temporaire" && $_POST.user != null}}
{{:error message="Un membre ne peut être associé qu'à une sortie temporaire"}}
{{/if}}
{{if $_POST.user|count > 1}}
{{:error message="Un membre au plus peut être associé à une sortie"}}
{{/if}}
{{if $_POST.user != null}}
{{if $mvt_new.direction == "input"}}
{{:error message="Un membre ne peut être associé qu'à une sortie temporaire"}}
{{elseif $type_mvt != "temporaire"}}
{{:error message="Un membre ne peut être associé qu'à une sortie temporaire"}}
{{/if}}
{{/if}}
{{#foreach from=$_POST.user key="id" item="name"}}
{{:assign var="user.id" value=$id}}
{{:assign var="user.name" value=$name}}
@ -138,6 +144,7 @@
date=$mvt_new.date
comment=$mvt_new.comment
user=$user.id
storage=$_POST.storage
}}
{{:redirect force="../historique.html?ok=1&key=%s&prop=%s&msg=modification"|args:$eqpmt_key:$prop}}
{{/if}}
@ -160,22 +167,22 @@
{{/if}}
{{* formulaire de modification du mouvement *}}
{{#load type="storage" order="$$.name"}}
{{:assign var="storage.%s"|args:$key value=$name}}
{{/load}}
<form method="post" action="">
<fieldset>
<legend>Modifier « {{$op_label}} {{$eqpmt.name}} (Catégorie : {{$category.name}}) »</legend>
{{if $mvt_new.direction == "input"}}
<dl>
{{if $mvt_new.direction == "input"}}
{{:input type="select" name="operation" label="Type" required=true options=$input_labels|sort default=$mvt_new.operation}}
{{else}}
<dl>
{{:input type="select" name="operation" label="Type" required=true options=$output_labels|sort default=$mvt_new.operation}}
{{/if}}
{{:input type="date" name="date" label="Date" required=true default=$mvt_new.date}}
{{:input type="number" name="amount" label="Quantité" min=1 required=true default=$mvt_new.amount}}
{{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}}
</dl>
{{if $prop == 1}}
<dl id="user" class="">
{{if $prop == 1 && $mvt_new.direction == "output"}}
{{:input
type="list"
name="user"
@ -186,8 +193,12 @@
max=1
help="dans le cas d'une sortie temporaire, il est possible d'associer un membre bénéficiaire"
}}
</dl>
{{/if}}
{{if $mvt_new.direction == "input"}}
{{:input type="select" name="storage" label="Lieu de stockage" default=$mvt_new.storage default_empty="— Aucun —" options=$storage required=false}}
{{/if}}
{{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}}
</dl>
</fieldset>
<p class="submit">

View File

@ -36,6 +36,10 @@
"user": {
"description": "identifiant membre dépositaire",
"type": ["integer", "null"]
},
"storage": {
"description": "clé du lieu de stockage",
"type": ["string", "null"]
}
},
"required": ["type", "direction", "operation", "amount", "equipment", "date", "comment"]

View File

@ -0,0 +1,35 @@
{{#restrict section="users" level="read"}}
<div>
<h3>Matériel en prêt - {{$user._name}}</h3>
<table class="list">
<thead>
<tr>
<td>Matériel</td>
<td>Date</td>
<td>Quantité</td>
</tr>
</thead>
<tbody>
{{#select
json_extract(eqpmt.document, '$.name') as mat,
json_extract(mvt.document, '$.date') as date,
json_extract(mvt.document, '$.amount') as qte
FROM module_data_equipment AS mvt
INNER JOIN users ON json_extract(mvt.document, '$.user') = users.id
INNER JOIN module_data_equipment AS eqpmt
ON json_extract(mvt.document, '$.equipment') = eqpmt.key
WHERE users.id = :user
ORDER BY mat
;
:user = $user.id
}}
<tr>
<td>{{$mat}}</td>
<td>{{$date|date_short}}</td>
<td>{{$qte}}</td>
</tr>
{{/select}}
</tbody>
</table>
</div>
{{/restrict}}