From 553cbdf9789bcfb41f9e91b9a68df134ecd5e427 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Mon, 28 Oct 2024 09:53:29 +0100 Subject: [PATCH] =?UTF-8?q?R=C3=A9organisation=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _calcul_dispo.html | 2 + _get_config.html | 2 + _nav.html | 3 +- categories/delete_category.html | 2 + categories/index.html | 2 + categories/list_equipment.html | 2 + categories/modify_category.html | 2 + historique.html | 103 +++++---- index.html | 8 +- inventaire.html | 262 ++++++++++++----------- modifier_materiel.html | 2 + mouvements/ajouter_entree.html | 140 ++++++++++++ mouvements/dupliquer_mouvement.html | 159 ++++++++++++++ mouvements/entrees/_temporaire.html | 24 ++- mouvements/entrees/non_repertorie.html | 2 + mouvements/entrees/retour.html | 11 +- mouvements/modifier_mouvement.html | 32 ++- mouvements/sorties/_temporaire.html | 2 + mouvements/sorties/emprunte.html | 9 +- mouvements/sorties/stock_disponible.html | 15 +- mouvements/supprimer_mouvement.html | 135 ++++++++++++ 21 files changed, 718 insertions(+), 201 deletions(-) create mode 100644 mouvements/ajouter_entree.html create mode 100644 mouvements/dupliquer_mouvement.html create mode 100644 mouvements/supprimer_mouvement.html diff --git a/_calcul_dispo.html b/_calcul_dispo.html index a1115e1..bcd6997 100644 --- a/_calcul_dispo.html +++ b/_calcul_dispo.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{* Calcul des entrées/sorties de matériels à une date donnée paramètres : diff --git a/_get_config.html b/_get_config.html index 83771df..469fabf 100644 --- a/_get_config.html +++ b/_get_config.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{* Récupérer soit la config enregistrée, soit la config par défaut résultat : config.input_nature et config.output_nature diff --git a/_nav.html b/_nav.html index 4aab958..1628ea4 100644 --- a/_nav.html +++ b/_nav.html @@ -1,9 +1,8 @@ diff --git a/categories/delete_category.html b/categories/delete_category.html index b0ab888..feab947 100644 --- a/categories/delete_category.html +++ b/categories/delete_category.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{:admin_header title="Supprimer une catégorie" current="module_equipment"}} {{#load key=$_GET.key assign="category"}} diff --git a/categories/index.html b/categories/index.html index 30591ff..97c41bc 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{:admin_header title="Gestion des matériels" current="module_equipment"}} {{* barre de navigation *}} diff --git a/categories/list_equipment.html b/categories/list_equipment.html index 90a67f3..89fcd24 100644 --- a/categories/list_equipment.html +++ b/categories/list_equipment.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{#load key=$_GET.key}} {{:assign cat_name=$name}} {{/load}} diff --git a/categories/modify_category.html b/categories/modify_category.html index 9522111..3c78235 100644 --- a/categories/modify_category.html +++ b/categories/modify_category.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{:admin_header title="Modifier une catégorie" current="module_equipment"}} {{#load key=$_GET.key assign="category"}} diff --git a/historique.html b/historique.html index 0f4f783..d4f3f30 100644 --- a/historique.html +++ b/historique.html @@ -1,5 +1,6 @@ {{* -*- brindille -*- *}} + {{:assign equipment_key=$_GET.key|trim}} {{#load key=$_GET.key assign="equipment"}} {{else}} @@ -10,7 +11,28 @@ {{else}} {{:error message="Le matériel %s n'appartient à aucune catégorie"|args:$equipment.designation}} {{/load}} -{{:admin_header title="Historique des mouvements de %s (%s)"|args:$equipment.designation:$category.name current="module_equipment"}} +{{:admin_header title="Gestion des matériels" current="module_equipment"}} + +{{if $_GET.ok}} + {{if $_GET.msg == "modification"}} +

Modification enregistrée

+ {{elseif $_GET.msg == "suppression"}} +

Mouvement supprimé

+ {{else}} +

{{$_GET.msg}}

+ {{/if}} +{{elseif $_GET.err}} + {{if $_GET.msg == "suppression"}} +

Ce mouvement ne peut être supprimé

+ {{else}} +

{{$_GET.msg}}

+ {{/if}} +{{/if}} + +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="./_nav.html" current="mouvements"}} +{{/if}} {{* récupérer la config des entrées/sorties *}} {{:include file="./_get_config.html" keep="config"}} @@ -29,6 +51,7 @@ {{/if}} {{/if}} {{/foreach}} + {{#foreach from=$config.output_nature key=mvt item=type_mvt}} {{if $_GET.prop}} {{* matériel propriété de l'asso *}} @@ -44,6 +67,8 @@ {{/foreach}} {{* lister tous les mouvements du matériel passé en paramètre *}} +

Mouvements de {{$equipment.designation}} ({{$category.name}})

+ {{#list type="movement" select="$$.date AS 'Date'; @@ -55,6 +80,11 @@ order=1 }} {{:assign var="type_mvt" from="config.%s_nature.%s"|args:$direction:$col3}} + {{if $direction == 'input'}} + {{:assign sens="entree"}} + {{else}} + {{:assign sens="sortie"}} + {{/if}} {{if $direction === "input" && $input_nature|in:$input_types || $direction === "output"&& $output_nature|in:$output_types @@ -66,61 +96,40 @@ {{$amount}} {{$comment}} - {{if $direction === "input"}} - {{* entrée *}} - {{if $type_mvt == 'temporaire'}} - {{:linkbutton + {{if $direction === "input" && $type_mvt == 'temporaire'}} + {{:linkbutton label="Retour" - href="mouvements/sorties/emprunte.html?key=%s"|args:$key + href="mouvements/sorties/emprunte.html?key=%s&prop=%s"|args:$key:$_GET.prop shape="history" target="_dialog"}} - {{elseif $type_mvt == 'définitif'}} - {{:linkbutton + {{elseif $direction === "input" && $type_mvt == 'définitif'}} + {{:linkbutton label="Sortir" - href="mouvements/sorties/stock_disponible.html?key=%s"|args:$key + href="mouvements/sorties/stock_disponible.html?key=%s&prop=%s"|args:$key:$_GET.prop shape="minus" target="_dialog"}} - {{/if}} + {{elseif $direction === "output" && $type_mvt == 'temporaire'}} {{:linkbutton - label="Dupliquer" - href="mouvements/dupliquer_mouvement.html?mvt_key=%s&direction=input"|args:$key - shape="plus" - target="_dialog"}} - {{:linkbutton - label="Modifier" - href="mouvements/modifier_mouvement.html?key=%s&direction=input"|args:$key - shape="edit" - target="_dialog"}} - {{:linkbutton - label="Supprimer" - href="mouvements/entrees/delete_entree.html?key=%s"|args:$key - shape="delete" - target="_dialog"}} - {{else}} - {{* sortie *}} - {{if $type_mvt == 'temporaire'}} - {{:linkbutton - label="Retour" - href="mouvements/entrees/retour.html?key=%s"|args:key - shape="history" - target="_dialog"}} - {{/if}} - {{:linkbutton - label="Dupliquer" - href="mouvements/dupliquer_mouvement.html?mvt_key=%s&direction=output"|args:$key - shape="plus" - target="_dialog"}} - {{:linkbutton - label="Modifier" - href="mouvements/modifier_mouvement.html?key=%s&direction=output"|args:$key - shape="edit" - target="_dialog"}} - {{:linkbutton - label="Supprimer" - href="mouvements/sorties/delete_sortie.html?key=%s"|args:$key - shape="delete" + label="Retour" + href="mouvements/entrees/retour.html?key=%s&prop=%s"|args:$key:$_GET.prop + shape="history" target="_dialog"}} {{/if}} + {{:linkbutton + label="Dupliquer" + href="mouvements/dupliquer_mouvement.html?key=%s&direction=%s&prop=%s"|args:$key:$direction:$_GET.prop + shape="plus" + target="_dialog"}} + {{:linkbutton + label="Modifier" + href="mouvements/modifier_mouvement.html?key=%s&direction=%s&prop=%s"|args:$key:$direction:$_GET.prop + shape="edit" + target="_dialog"}} + {{:linkbutton + label="Supprimer" + href="mouvements/supprimer_mouvement.html?key=%s&direction=%s&prop=%s"|args:$key:$direction:$_GET.prop + shape="delete" + target="_dialog"}} {{/if}} diff --git a/index.html b/index.html index 8616e35..84b8050 100644 --- a/index.html +++ b/index.html @@ -1,10 +1,16 @@ +{{* -*- brindille -*- *}} + {{:admin_header title="Gestion des matériels" custom_css=$custom_css current="module_equipment"}} {{* barre de navigation *}} {{:include file="_nav.html" current="index"}} {{if $_GET.ok}} -

Modification effectuée

+ {{if $_GET.msg == "ajout" }} +

Ajout effectué

+ {{else}} +

{{$_GET.msg}}

+ {{/if}} {{elseif $_GET.err}}

Modification refusée

{{/if}} diff --git a/inventaire.html b/inventaire.html index cfa28be..d4c4057 100644 --- a/inventaire.html +++ b/inventaire.html @@ -2,10 +2,15 @@ {{* inventaire des entrées/sorties des matériels des catégories de la variable category_keys *}} +
+ {{:linkbutton label="Ajouter un nouveau matériel" shape="plus" href="mouvements/ajouter_entree.html" target="_dialog"}} +
+ {{* Extraire et compiler les infos de la base *}} {{:include file="./_calcul_dispo.html" keep="cumul_mvt,category_keys,equipments"}} {{* Afficher les résultats *}} + {{if $equipments === null}}

Aucun matériel.

{{else}} @@ -13,147 +18,150 @@

Matériels dont l'association est propriétaire

+
- {{* itérer sur les catégories *}} - {{#foreach from=$cumul_mvt key="cat_key" item="cat_elem"}} + {{* itérer sur les catégories *}} + {{#foreach from=$cumul_mvt key="cat_key" item="cat_elem"}} - {{* vérifier s'il y a des matériels dans cette catégorie *}} - {{:assign present=false}} - {{if $cat_elem|keys|has:"eqpmt"}} - {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} - {{if $eqpmt.stock !== null && $eqpmt.stock !== 0}} - {{:assign present=true}} - {{:break}} - {{/if}} - {{/foreach}} - {{/if}} - - {{if $present}} - {{if $print_cat_name}} -
- -

{{$cat_elem.name}}

- {{/if}} -
- - - - - - - - - - - - - - {{* itérer sur les matériels de la catégorie *}} - {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} - {{:assign keys=$eqpmt|keys}} - {{if "stock"|in:$keys && $eqpmt.stock !== 0}} - {{if "exterieur"|in:$keys}} - {{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}} - {{:assign exterieur=$eqpmt.exterieur}} - {{else}} - {{:assign dispo=$eqpmt.stock}} - {{:assign exterieur=0}} + {{* vérifier s'il y a des matériels dans cette catégorie *}} + {{:assign present=false}} + {{if $cat_elem|keys|has:"eqpmt"}} + {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} + {{if $eqpmt.stock !== null && $eqpmt.stock !== 0}} + {{:assign present=true}} + {{:break}} {{/if}} - - - - - - - + {{/foreach}} + {{/if}} + + {{if $present}} + {{if $print_cat_name}} +
+ +

{{$cat_elem.name}}

{{/if}} - {{else}} -

Il n'y a aucun matériel dans cette catégorie.

- {{/foreach}} -
-
DésignationStockSortieDisponible
{{$eqpmt.designation}}{{$eqpmt.stock}}{{$exterieur}}{{$dispo}} - {{:linkbutton - label="Mouvements" - href="%shistorique.html?key=%s&prop=1"|args:$module.url:$eqpmt_key - shape="table" - target="_dialog"}} - {{:linkbutton - label="Modifier" - href="%smodifier_materiel.html?key=%s"|args:$module.url:$eqpmt_key - shape="edit" - target="_dialog"}} -
-
- {{/if}} - {{/foreach}} + + + + + + + + + + + + + + + {{* itérer sur les matériels de la catégorie *}} + {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} + {{:assign keys=$eqpmt|keys}} + {{if "stock"|in:$keys && $eqpmt.stock !== 0}} + {{if "exterieur"|in:$keys}} + {{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}} + {{:assign exterieur=$eqpmt.exterieur}} + {{else}} + {{:assign dispo=$eqpmt.stock}} + {{:assign exterieur=0}} + {{/if}} + + + + + + + + {{/if}} + {{else}} +

Il n'y a aucun matériel dans cette catégorie.

+ {{/foreach}} + +
DésignationStockSortieDisponible
{{$eqpmt.designation}}{{$eqpmt.stock}}{{$exterieur}}{{$dispo}} + {{:linkbutton + label="Mouvements" + href="historique.html?key=%s&prop=1"|args:$eqpmt_key + shape="table"}} + {{:linkbutton + label="Modifier" + href="modifier_materiel.html?key=%s"|args:$eqpmt_key + shape="edit" + target="_dialog"}} +
+ + {{/if}} + {{/foreach}} +

Matériels dont l'association n'est pas propriétaire

+
- {{* itérer sur les catégories *}} - {{#foreach from=$cumul_mvt key="cat_key" item="cat_elem"}} + {{* itérer sur les catégories *}} + {{#foreach from=$cumul_mvt key="cat_key" item="cat_elem"}} - {{* vérifier s'il y a des matériels dans cette catégorie *}} - {{:assign present=false}} - {{if $cat_elem|keys|has:"eqpmt"}} - {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} - {{if $eqpmt.nonproprio !== null && $eqpmt.nonproprio !== 0}} - {{:assign present=true}} - {{:break}} - {{/if}} - {{/foreach}} - {{/if}} - - {{if $present}} - {{if $print_cat_name}} -
- -

{{$cat_elem.name}}

+ {{* vérifier s'il y a des matériels dans cette catégorie *}} + {{:assign present=false}} + {{if $cat_elem|keys|has:"eqpmt"}} + {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} + {{if $eqpmt.nonproprio !== null && $eqpmt.nonproprio !== 0}} + {{:assign present=true}} + {{:break}} + {{/if}} + {{/foreach}} {{/if}} -
- - - - - - - - - - - {{* itérer sur les matériels de la catégorie *}} - {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} - {{:assign keys=$eqpmt|keys}} - {{if "nonproprio"|in:$keys && $eqpmt.nonproprio !== 0}} - {{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}} - - - - - + {{if $present}} + {{if $print_cat_name}} +
+ +

{{$cat_elem.name}}

{{/if}} - {{else}} -

Il n'y a aucun matériel dans cette catégorie.

- {{/foreach}} -
-
DésignationQuantité
{{$eqpmt.designation}}{{$eqpmt.nonproprio}} - {{:linkbutton - label="Mouvements" - href="%shistorique.html?key=%s"|args:$module.url:$eqpmt_key - shape="table" - target="_dialog"}} - {{:linkbutton - label="Modifier" - href="%smodifier_materiel.html?key=%s"|args:$module.url:$eqpmt_key - shape="edit" - target="_dialog"}} -
-
- {{/if}} - {{/foreach}} + + + + + + + + + + + + + {{* itérer sur les matériels de la catégorie *}} + {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} + {{:assign keys=$eqpmt|keys}} + {{if "nonproprio"|in:$keys && $eqpmt.nonproprio !== 0}} + {{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}} + + + + + + {{/if}} + {{else}} +

Il n'y a aucun matériel dans cette catégorie.

+ {{/foreach}} + +
DésignationQuantité
{{$eqpmt.designation}}{{$eqpmt.nonproprio}} + {{:linkbutton + label="Mouvements" + href="historique.html?key=%s"|args:$eqpmt_key + shape="table" + target="_dialog"}} + {{:linkbutton + label="Modifier" + href="modifier_materiel.html?key=%s"|args:$eqpmt_key + shape="edit" + target="_dialog"}} +
+
+ {{/if}} + {{/foreach}} + {{/if}} diff --git a/modifier_materiel.html b/modifier_materiel.html index e81099d..1861be0 100644 --- a/modifier_materiel.html +++ b/modifier_materiel.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{:admin_header title="Modifier matériel" current="module_equipment"}} {{:assign equipment_key=$_GET.key|trim}} diff --git a/mouvements/ajouter_entree.html b/mouvements/ajouter_entree.html new file mode 100644 index 0000000..9d23b66 --- /dev/null +++ b/mouvements/ajouter_entree.html @@ -0,0 +1,140 @@ +{{* -*- brindille -*- *}} + +{{:admin_header title="Entrée de matériel" current="module_equipment"}} + +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="../_nav.html" current="entrees"}} +{{/if}} + +{{* récupérer la config des entrées/sorties *}} +{{:include file="../_get_config.html" keep="config"}} + +{{* types d'entrées *}} +{{#foreach from=$config.input_nature key="label" item="type"}} + {{if $type != 'retour'}} + {{:assign var='input_labels.' value="%s"|args:$label}} + {{/if}} +{{/foreach}} + +{{* Traiter l'envoi du formulaire *}} +{{#form on="save"}} + + {{* vérifier les infos saisies *}} + {{if $_POST.equipment == null && + $_POST.category == null && $_POST.designation == null}} + {{:error message="Il faut choisir un matériel existant ou sélectionner une catégorie et indiquer le nom du nouveau matériel"}} + {{elseif $_POST.category == null && $_POST.designation != null}} + {{:error message="Vous devez aussi sélectionner une catégorie"}} + {{/if}} + + {{if $_POST.equipment != null}} + {{:assign equipment_key=$_POST.equipment}} + {{#load key=$_POST.equipment assign=equipment}} + {{/load}} + {{if $_POST.designation != null}} + {{:assign message="Vous avez choisi un matériel dans la liste (%s) et indiqué le nom d'un nouveau matériel (%s) : l'un des deux est de trop"|args:$equipment.designation:$_POST.designation}} + {{:error message=$message}} + {{/if}} + {{/if}} + + {{* infos saisies valides *}} + + {{if $_POST.equipment == null}} + {{* récupérer les infos de la catégorie *}} + {{#load type="category" key=$_POST.category assign="category"}} + {{/load}} + + {{* vérifier l'existence d'un matériel du même nom *}} + {{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}} + {{* utiliser la clé du matériel trouvé *}} + {{:assign equipment_key=$key}} + {{else}} + {{* nouveau matériel => nouvelle clé *}} + {{:assign equipment_key=""|uuid}} + + {{* enregistrer un nouveau matériel *}} + {{:save + key=$equipment_key + validate_schema="../equipment.schema.json" + type="equipment" + category=$category.key + designation=$_POST.designation|trim + }} + {{/load}} + {{/if}} + + {{* Enregistrer le mouvement *}} + {{:assign mvt_key=""|uuid}} + {{:assign var="operation" from="input_labels.%d"|args:$_POST.type_operation}} + + {{:save + key=$mvt_key + validate_schema="./movement.schema.json" + type="movement" + direction="input" + input_nature=$operation + amount=$_POST.quantite|intval + equipment=$equipment_key + date=$_POST.date|parse_date + comment=$_POST.remarques|trim + }} + + {{:assign msg="Ajout de l'entrée de « %s (%d) en date du %s » effectué"|args:$_POST.designation:$_POST.quantite:$_POST.date}} + {{:debug msg=$msg}} + {{*:redirect force="./index.html?ok=1&msg=%s"|args:$msg*}} +{{else}} + {{:form_errors}} +{{/form}} + +{{* lister les catégories disponibles *}} +{{#load type="category" assign="category" order="$$.name"}} + {{:assign nom_cat=$category.name}} + {{:assign var="categories.%s"|args:$category.key value=$category.name}} + {{#load type="equipment" where="$$.category = :key" :key=$category.key assign="equipment"}} + {{:assign var="equipments.%s.%s"|args:$nom_cat:$equipment.key value=$equipment.designation}} + {{/load}} +{{/load}} + +{{if $categories != null}} + {{* formulaire d'ajout de matériel *}} +
+ +
+ Ajouter une entrée d'un matériel non répertorié +
+ {{:input type="select" name="type_operation" label="Type" required=true options=$input_labels}} + {{:input type="date" name="date" label="Date" required=true default=$now|date_short}} + {{:input type="number" name="quantite" label="Quantité" required=true default=1}} +
+
+ +
+ Choisir un matériel dans la liste ou sélectionner une catégorie et indiquer le nom du nouveau matériel +
+ {{if $equipments != null}} +
+
+ {{:input type="select_groups" name="equipment" label="Matériel" options=$equipments}} +
+
+ {{/if}} +
+
+ {{:input type="select" name="category" label="Catégorie" options=$categories}} + {{:input type="text" name="designation" label="Désignation"}} +
+
+ {{:input type="textarea" name="remarques" label="Remarques" cols="40", rows="3" required=false}} +
+
+ +

+ {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} +

+ +
+{{else}} +

Il n'y a aucune catégorie, il faut en créer au moins une

+{{/if}} +{{:admin_footer}} diff --git a/mouvements/dupliquer_mouvement.html b/mouvements/dupliquer_mouvement.html new file mode 100644 index 0000000..7bb73d8 --- /dev/null +++ b/mouvements/dupliquer_mouvement.html @@ -0,0 +1,159 @@ +{{* -*- brindille -*- *}} + + +{{if $_GET.direction == "input"}} + {{:assign msg_direction="entrée"}} +{{else}} + {{:assign msg_direction="sortie"}} +{{/if}} +{{:admin_header title="Dupliquer une %s"|args:$msg_direction current="module_equipment"}} + +{{:assign direction=$_GET.direction}} +{{:assign mvt_key=$_GET.key}} + +{{* récupérer les infos du mouvement à dupliquer *}} +{{#load key=$mvt_key assign="mvt_copie"}} +{{else}} + {{:error message="Aucune %s avec la clé %s"|args:$msg_direction:$mvt_key}} +{{/load}} +{{if $direction == "input"}} + {{:assign input_init=$mvt_copie.input_nature}} + {{:assign url="entrees/index.html"}} +{{else}} + {{:assign output_init=$mvt_copie.output_nature}} + {{:assign url="sorties/index.html"}} +{{/if}} +{{:assign amount_init=$mvt_copie.amount}} +{{:assign date_init=$mvt_copie.date|date_short}} +{{:assign key_eqpmt_init=$mvt_copie.equipment}} + +{{* récupérer la config des entrées/sorties *}} +{{:include file="../_get_config.html" keep="config"}} + +{{if $direction == "input"}} + {{* types d'entrées *}} + {{#foreach from=$config.input_nature key="label" item="type"}} + {{:assign var="input_labels.%s"|args:$label value="%s"|args:$label}} + {{if $label == $mvt_copie.input_nature}} + {{:assign type_defaut=$label}} + {{/if}} + {{/foreach}} +{{else}} + {{* types de sorties *}} + {{#foreach from=$config.output_nature key="label" item="type"}} + {{:assign var="output_labels.%s"|args:$label value="%s"|args:$label}} + {{if $label == $mvt_copie.output_nature}} + {{:assign type_defaut=$label}} + {{/if}} + {{/foreach}} +{{/if}} + +{{* récupérer les infos du matériel associé *}} +{{#load key=$key_eqpmt_init assign="eqpmt_init"}} +{{else}} + {{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_init}} +{{/load}} + +{{* + -------------------- Traiter la saisie -------------------- +*}} +{{#form on="save"}} + {{* récupérer les infos de la catégorie *}} + {{#load type="category" key=$_POST.category assign="category"}} + {{/load}} + + {{* vérifier l'existence d'un matériel du même nom *}} + {{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}} + {{* utiliser la clé du matériel trouvé *}} + {{:assign equipment_key=$key}} + {{else}} + {{* nouveau matériel => nouvelle clé *}} + {{:assign equipment_key=""|uuid}} + + {{* enregistrer un nouveau matériel *}} + {{*:debug key=$equipment_key category=$category.key designation=$_POST.designation|trim*}} + {{:save + key=$equipment_key + validate_schema="../equipment.schema.json" + type="equipment" + category=$category.key + designation=$_POST.designation|trim + }} + {{/load}} + + {{* préparer le mouvement copié *}} + {{if $direction == "input"}} + {{:assign var="mvt_copie.input_nature" from="input_labels.%s"|args:$_POST.type_operation}} + {{else}} + {{:assign var="mvt_copie.output_nature" from="output_labels.%s"|args:$_POST.type_operation}} + {{/if}} + {{:assign var="mvt_copie.amount" value=$_POST.amount}} + {{:assign var="mvt_copie.date" value=$_POST.date|parse_date}} + {{:assign var="mvt_copie.comment" value=$_POST.comment}} + + {{* Enregistrer le mouvement *}} + {{:assign mvt_key=""|uuid}} + {{:save + key=$mvt_key + validate_schema="movement.schema.json" + type="movement" + direction=$direction + input_nature=$mvt_copie.input_nature + output_nature=$mvt_copie.output_nature + amount=$mvt_copie.amount|intval + equipment=$equipment_key + date=$mvt_copie.date + comment=$mvt_copie.comment + }} + {{:redirect force="../historique.html?ok=1&key=%s&prop=%s&msg=%s"|args:$key_eqpmt_init:$_GET.prop:$msg_direction}} +{{/form}} + +{{:form_errors}} + +{{* + -------------------- Préparer la saisie -------------------- +*}} + +{{* lister les catégories et matériels associés *}} +{{#load type="category" assign="category" order="$$.name"}} + {{:assign nom_cat=$category.name}} + {{:assign var="categories.%s"|args:$category.key value=$category.name}} + {{#load type="equipment" where="$$.category = :key" :key=$category.key assign="equipment"}} + {{:assign var="equipments.%s.%s"|args:$nom_cat:$equipment.key value=$equipment.designation}} + {{/load}} +{{/load}} + +{{* formulaire de copie du mouvement *}} +
+ +
+ {{if $direction == "input"}} + Créer une copie de l'entrée « {{$input_init}} {{$eqpmt_init.designation}} ({{$amount_init}}) en date du {{$date_init}} » +
+ {{:input type="select" name="type_operation" label="Type" required=true options=$input_labels default=$type_defaut}} + {{else}} + Créer une copie de la sortie « {{$output_init}} {{$eqpmt_init.designation}} ({{$amount_init}}) en date du {{$date_init}} » +
+ {{:input type="select" name="type_operation" label="Type" required=true options=$output_labels default=$type_defaut}} + {{/if}} + {{:input type="date" name="date" label="Date" required=true default=$mvt_copie.date}} + {{:input type="number" name="amount" label="Quantité" required=true default=$mvt_copie.amount}} +
+
+ +
+ Matériel +
+ {{:input type="select" name="category" label="Catégorie" required=true options=$categories default=$eqpmt_init.category}} + {{:input type="text" name="designation" label="Désignation" required=true default=$eqpmt_init.designation}} + {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_copie.comment}} +
+
+ +

+ {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} +

+ +
+ +{{:admin_footer}} diff --git a/mouvements/entrees/_temporaire.html b/mouvements/entrees/_temporaire.html index 236b2b0..f8d9e80 100644 --- a/mouvements/entrees/_temporaire.html +++ b/mouvements/entrees/_temporaire.html @@ -1,12 +1,14 @@ - {{* déterminer la quantité des matériels sortis temporairement *}} - {{#foreach from=$cumul_mvt key="cat_key" item="cat_elem"}} - {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} - {{:assign quantite=$eqpmt.exterieur}} - {{if $quantite != 0}} - {{:assign - var="temporaire.%s.%s"|args:$cat_elem.name:$eqpmt_key - value="%s (quantité : %d)"|args:$eqpmt.designation:$quantite - }} - {{/if}} - {{/foreach}} +{{* -*- brindille -*- *}} + +{{* déterminer la quantité des matériels sortis temporairement *}} +{{#foreach from=$cumul_mvt key="cat_key" item="cat_elem"}} + {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} + {{:assign quantite=$eqpmt.exterieur}} + {{if $quantite != 0}} + {{:assign + var="temporaire.%s.%s"|args:$cat_elem.name:$eqpmt_key + value="%s (quantité : %d)"|args:$eqpmt.designation:$quantite + }} + {{/if}} {{/foreach}} +{{/foreach}} diff --git a/mouvements/entrees/non_repertorie.html b/mouvements/entrees/non_repertorie.html index 6ca311f..26bc3a1 100644 --- a/mouvements/entrees/non_repertorie.html +++ b/mouvements/entrees/non_repertorie.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{:admin_header title="Entrée de matériel" current="module_equipment"}} {{* barre de navigation *}} diff --git a/mouvements/entrees/retour.html b/mouvements/entrees/retour.html index d0f92e4..8c9e688 100644 --- a/mouvements/entrees/retour.html +++ b/mouvements/entrees/retour.html @@ -1,3 +1,11 @@ +{{* -*- brindille -*- *}} + +{{* + paramètres : + - key : clé du mouvement à modifier + - prop : = 1 si matériel propriété +*}} + {{:admin_header title="Entrée de matériel" current="module_equipment"}} {{* barre de navigation *}} @@ -53,7 +61,8 @@ comment=$_POST.remarques|trim }} - {{:redirect force="index.html?ok=1&msg=entrée"}} + {{*:redirect force="index.html?ok=1&msg=entrée"*}} + {{:redirect force="../../historique.html?ok=1&key=%s&prop=%s&msg=retour"|args:$_POST.equipment:$_GET.prop}} {{else}} {{:form_errors}} {{/form}} diff --git a/mouvements/modifier_mouvement.html b/mouvements/modifier_mouvement.html index 6bdacc1..652d086 100644 --- a/mouvements/modifier_mouvement.html +++ b/mouvements/modifier_mouvement.html @@ -1,5 +1,12 @@ {{* -*- brindille -*- *}} +{{* + paramètres : + - direction : du mouvement à modifier + - key : clé du mouvement à modifier + - prop : = 1 si matériel propriété +*}} + {{if $_GET.direction == "input"}} {{:assign msg_direction="entrée"}} {{else}} @@ -7,7 +14,7 @@ {{/if}} {{:admin_header title="Modifier une %s"|args:$msg_direction current="module_equipment"}} -{{:assign direction=$_GET.direction}} +{{:assign direction_mvt=$_GET.direction}} {{:assign key_mvt=$_GET.key}} {{* récupérer les infos du mouvement à modifier *}} @@ -16,7 +23,7 @@ {{:error message="Aucune %s avec la clé %s"|args:$msg_direction:$key_mvt}} {{/load}} -{{if $direction == "input"}} +{{if $direction_mvt == "input"}} {{:assign input_init=$mvt_modif.input_nature}} {{:assign url="entrees/index.html"}} {{else}} @@ -37,7 +44,7 @@ {{* récupérer la config des entrées/sorties *}} {{:include file="../_get_config.html" keep="config"}} -{{if $direction == "input"}} +{{if $direction_mvt == "input"}} {{* types d'entrées *}} {{#foreach from=$config.input_nature key="label" item="type"}} {{:assign var="input_labels.%s"|args:$label value="%s"|args:$label}} @@ -60,7 +67,7 @@ *}} {{#form on="change"}} {{* préparer le mouvement modifié *}} - {{if $direction == "input"}} + {{if $direction_mvt == "input"}} {{:assign var="mvt_modif.input_nature" from="input_labels.%s"|args:$_POST.type_operation}} {{else}} {{:assign var="mvt_modif.output_nature" from="output_labels.%s"|args:$_POST.type_operation}} @@ -86,7 +93,10 @@ assign="movement" }} {{if $key != $key_mvt}} - {{if $date > $mvt_modif.date && ! $insere}} + {{if $direction_mvt == "input" && ! $insere && $date >= $mvt_modif.date}} + {{:assign var="movements_modif." from=mvt_modif}} + {{:assign insere=true}} + {{elseif $direction_mvt == "output" && ! $insere && $date > $mvt_modif.date}} {{:assign var="movements_modif." from=mvt_modif}} {{:assign insere=true}} {{/if}} @@ -119,7 +129,7 @@ {{if $erreur}}

Modification demandée impossible : - {{if $direction == "input"}} + {{if $direction_mvt == "input"}} « {{$input_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers « {{$mvt_modif.input_nature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} » {{else}} @@ -133,7 +143,7 @@ key=$key_mvt validate_schema="./movement.schema.json" type="movement" - direction=$direction + direction=$direction_mvt input_nature=$mvt_modif.input_nature output_nature=$mvt_modif.output_nature amount=$mvt_modif.amount|intval @@ -141,7 +151,11 @@ date=$mvt_modif.date comment=$mvt_modif.comment }} - {{:redirect force="%s?ok=1&msg=modification"|args:$url}} + {{if $key_eqpmt_init == $_POST.equipment}} + {{:redirect force="../historique.html?ok=1&key=%s&prop=%smsg=modification"|args:$_POST.equipment:$_GET.prop}} + {{else}} + {{:redirect force="../index.html?ok=1&msg=modification"}} + {{/if}} {{/if}} {{/form}} @@ -162,7 +176,7 @@

- {{if $direction == "input"}} + {{if $direction_mvt == "input"}} Modifier l'entrée « {{$input_init}} {{$eqpmt_init.designation}} ({{$amount_init}}) en date du {{$date_init}} »
{{:input type="select" name="type_operation" label="Type" required=true options=$input_labels default=$type_defaut}} diff --git a/mouvements/sorties/_temporaire.html b/mouvements/sorties/_temporaire.html index 51bf870..9732a2e 100644 --- a/mouvements/sorties/_temporaire.html +++ b/mouvements/sorties/_temporaire.html @@ -1,3 +1,5 @@ +{{* -*- brindille -*- *}} + {{* calculer les quantité de matériels dont l'asso n'est pas propriétaire *}} {{#foreach from=$cumul_mvt key="cat_key" item="cat_elem"}} {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} diff --git a/mouvements/sorties/emprunte.html b/mouvements/sorties/emprunte.html index f574b23..945934a 100644 --- a/mouvements/sorties/emprunte.html +++ b/mouvements/sorties/emprunte.html @@ -1,5 +1,11 @@ {{* -*- brindille -*- *}} +{{* + paramètres : + - key : clé du mouvement à modifier + - prop : = 1 si matériel propriété +*}} + {{:admin_header title="Sortie de matériel" current="module_equipment"}} {{if ! $dialog}} @@ -100,7 +106,8 @@ date=$_POST.date|parse_date comment=$_POST.remarques|trim }} - {{:redirect force="index.html?ok=1&msg=sortie"}} + {{*:redirect force="index.html?ok=1&msg=sortie"*}} + {{:redirect force="../../historique.html?ok=1&key=%s&prop=%s&msg=sortie"|args:$_POST.equipment:$_GET.prop}} {{else}} {{:form_errors}} {{/form}} diff --git a/mouvements/sorties/stock_disponible.html b/mouvements/sorties/stock_disponible.html index 0f955d3..8ccc989 100644 --- a/mouvements/sorties/stock_disponible.html +++ b/mouvements/sorties/stock_disponible.html @@ -1,5 +1,11 @@ {{* -*- brindille -*- *}} +{{* + paramètres : + - key : clé du mouvement à modifier + - prop : = 1 si matériel propriété +*}} + {{:admin_header title="Sortie de matériel" current="module_equipment"}} {{if ! $dialog}} @@ -100,7 +106,7 @@ date=$_POST.date|parse_date comment=$_POST.remarques|trim }} - {{:redirect force="index.html?ok=1&msg=sortie"}} + {{:redirect force="../../historique.html?ok=1&key=%s&prop=%s&msg=sortie"|args:$_POST.equipment:$_GET.prop}} {{else}} {{:form_errors}} {{/form}} @@ -123,6 +129,11 @@ {{/foreach}} {{if $disponibilites != null}} + {{* déterminer le matériel concerné par le mouvement *}} + {{#load key=$_GET.key}} + {{:assign eqpmt_key=$equipment}} + {{/load}} + {{* formulaire de sortie de matériel *}}
@@ -137,7 +148,7 @@ Matériel

La quantité indiquée est celle à la date du jour

- {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$disponibilites onchange="fixerValeurMax('f_equipment', 'f_quantite')"}} + {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$disponibilites default=$eqpmt_key onchange="fixerValeurMax('f_equipment', 'f_quantite')"}} {{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
diff --git a/mouvements/supprimer_mouvement.html b/mouvements/supprimer_mouvement.html new file mode 100644 index 0000000..9574ed7 --- /dev/null +++ b/mouvements/supprimer_mouvement.html @@ -0,0 +1,135 @@ +{{* -*- brindille -*-}} + +{{* + paramètres GET : + - key : clé du mouvement à supprimer +*}} + +{{:assign var="libelles.input" value="entrée"}} +{{:assign var="libelles.output" value="sortie"}} + +{{#load key=$_GET.key assign="mvt_suppr"}} +{{else}} + {{:error message="Aucun mouvement avec la clé « %s »"|args:$_GET.key}} +{{/load}} + +{{:assign var="libelle" from="libelles.%s"|args:$mvt_suppr.direction}} +{{:assign key_eqpmt_suppr=$mvt_suppr.equipment}} +{{:assign var="date_suppr" value="%s"|args:$mvt_suppr.date|date_short}} + +{{* trouver le matériel concerné par ce mouvement *}} +{{#load type="equipment" where="key = :key" :key=$mvt_suppr.equipment assign="equipment"}} +{{else}} + {{:error message="Aucun matériel avec la clé « %s »"|args:$mvt_suppr.equipment}} +{{/load}} + + +{{:admin_header title="Supprimer une %s"|args:$libelle current="module_equipment"}} + +{{#form on="delete"}} + {{* récupérer la config des entrées/sorties *}} + {{:include file="../_get_config.html" keep="config"}} + + {{* TODO vérifier s'il est possible de supprimer le mouvement *}} + {{if $mvt_suppr.direction == 'input'}} + {{:assign dispo=0}} + {{:assign nonprop=0}} + + {{#load + type="movement" + where="$$.equipment = :key" :key=$mvt_suppr.equipment + assign="mvt" + order="$$.date"}} + + {{* déterminer le type de mouvement *}} + {{:assign var="mvt_nature" from="mvt.%s_nature"|args:$mvt.direction}} + {{:assign var="type_mvt" from="config.%s_nature.%s"|args:$mvt.direction:$mvt_nature}} + + {{if $key != $_GET.key}} + {{* ce n'est pas le mouvement à supprimer : cumuler les entrées/sorties *}} + {{if $mvt.direction == 'input'}} + {{if $type_mvt == 'temporaire'}} + {{:assign nonprop="%d+%d"|math:$nonprop:$mvt.amount}} + {{else}} + {{:assign dispo="%d+%d"|math:$dispo:$mvt.amount}} + {{/if}} + {{elseif $mvt.direction == 'output'}} + {{if $type_mvt == 'retour'}} + {{:assign nonprop="%d-%d"|math:$nonprop:$mvt.amount}} + {{else}} + {{:assign dispo="%d-%d"|math:$dispo:$mvt.amount}} + {{/if}} + {{/if}} + + {{* problème ? *}} + {{if $dispo < 0 || $nonprop < 0}} + {{:redirect force="../historique.html?key=%s&prop=%s&err=1&msg=suppression"|args:$mvt_suppr.equipment:$_GET.prop}} + {{/if}} + + {{/if}} + {{/load}} + + {{else}} + {{* sortie *}} + {{:assign temporaire=false}} + {{:assign var="output_nature" from="config.output_nature.%s"|args:$mvt_suppr.output_nature}} + + {{if $output_nature == 'temporaire'}} + {{:assign exterieur=0}} + {{#load + type="movement" + where="$$.equipment = :key" :key=$mvt_suppr.equipment + assign="mvt" + order="$$.date"}} + + {{* déterminer le type de mouvement *}} + {{:assign var="mvt_nature" from="mvt.%s_nature"|args:$mvt.direction}} + {{:assign var="type_mvt" from="config.%s_nature.%s"|args:$mvt.direction:$mvt_nature}} + + {{if $key != $_GET.key}} + {{* ce n'est pas le mouvement à supprimer : cumuler les entrées/sorties *}} + {{if $mvt.direction == 'input'}} + {{if $type_mvt == 'retour'}} + {{:assign exterieur="%d-%d"|math:$exterieur:$mvt.amount}} + {{/if}} + {{elseif $mvt.direction == 'output'}} + {{if $type_mvt == 'temporaire'}} + {{:assign exterieur="%d+%d"|math:$exterieur:$mvt.amount}} + {{/if}} + {{/if}} + + {{* problème ? *}} + {{if $exterieur < 0}} + {{:redirect force="../historique.html?key=%s&prop=%s&err=1&msg=suppression"|args:$mvt_suppr.equipment:$_GET.prop}} + {{/if}} + {{/if}} + {{/load}} + {{/if}} + {{/if}} + + {{* vérification réussie : supprimer le mouvement *}} + {{:delete key=$_GET.key}} + {{:assign libelle=$libelle|ucfirst}} + {{:assign var="msg" value="%s « %s (%d) en date du %s » supprimée"|args:$libelle:$equipment.designation:$mvt_suppr.amount:$date_suppr}} + + {{* voir s'il reste des mouvements pour le matériel concerné par le mouvement supprimé *}} + {{#load type="movement" where="$$.equipment = :eqpmt_key" :eqpmt_key=$equipment.key}} + {{else}} + {{* supprimer le matériel *}} + {{:delete key=$equipment.key}} + {{:assign var="msg" value="%s - Matériel « %s » supprimé"|args:$msg:$equipment.designation}} + {{:redirect force="../index.html?ok=1&msg=%s"|args:$msg}} + {{/load}} + + {{:redirect force="../historique.html?ok=1&key=%s&prop=%s&msg=%s"|args:$mvt_suppr.equipment:$_GET.prop:$msg}} +{{/form}} + +{{:delete_form + legend="Supprimer cette %s ?"|args:$libelle + warning="Supprimer « %s (%d) en date du %s » ?"|args:$equipment.designation:$mvt_suppr.amount:$date_suppr + info="S'il ne reste aucun mouvement pour ce matériel, le matériel sera supprimé" +}} + +{{:form_errors}} + +{{:admin_footer}}