diff --git a/README.md b/README.md index 8c1cce5..386bccf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Module de gestion de matériels pour Paheko -Ce module permet de gérer les matériels de l'association: stock, entrées, sorties. +Ce module permet de gérer les matériels de l'association: stock, +entrées, sorties, classés par catégorie. ## Configuration - Il y a plusieurs types d'entrée et de sorties prédéfinies (Achat, @@ -9,23 +10,45 @@ Ce module permet de gérer les matériels de l'association: stock, entrées, sor ## Démarrage - Il faut commencer par créer des catégories de matériel (ex: Audiovisuel, Informatique, Mobilier, ...). -- On peut ensuite ajouter des entrées puis des sorties. +- On peut ensuite ajouter des matériels à l'aide du bouton « Ajouter + un nouveau matériel ». -### Entrées -Il y a trois boutons pour ajouter une entrée : -- Matériel répertorié : ajouter une entrée pour du matériel déjà - répertorié dans l'inventaire -- Matériel non répertorié : ajouter une entrée pour du matériel qui - n'est pas encore répertorié dans l'inventaire -- Retour de sortie temporaire : ajouter une entrée pour du matériel - qui revient après une sortie temporaire (location, prêt) +## Matériels permanents +- Inventaire des matériels propriété de l'association (achat, don reçu, ...). -### Sorties -Il y a deux boutons pour ajouter une sortie : -- Matériel en stock disponible : ajouter une sortie pour du matériel - propriété de l'association -- Matériel emprunté : ajouter une sortie pour du matériel qui n'est - pas propriété de l'association, suite à un emprunt ou une location +Pour chaque matériel appartenant à l'association on trouve plusieurs +boutons : +- « Modifier » permet de changer la catégorie ou de corriger le + libellé du matériel. +- « Mouvements » affiche l'historique des mouvement d'un matériel. +- « Entrée » permet de saisir une nouvelle entrée d'un matériel +- « Sortie » permet de saisir une nouvelle sortie d'un matériel ; ce +bouton n'est visible que si la quantité disponible dans l'association +est positive. +- « Retour » permet de saisir un retour de matériel sorti + temporairement de l'association ; ce bouton n'est visible que si la + quantité de matériel sorti temporairement est positive. + +## Matériels temporaires +- Inventaire des matériels présents temporairement dans l'association + (location, emprunt, ...). + +Pour chaque matériel présent dans l'association on trouve plusieurs +boutons : +- « Modifier » permet de changer la catégorie ou de corriger le + libellé du matériel. +- « Mouvements » affiche l'historique des mouvement d'un matériel. +- « Entrée » permet de saisir une nouvelle entrée d'un matériel +- « Retour » permet de saisir un retour de matériel entré + temporairement dans l'association. + +## Historique des mouvements +- Historique des mouvement d'un matériel +Pour chaque mouvement, on trouve 3 boutons : +- « Supprimer » le mouvement. +- « Modifier » certains informations du mouvement. +- « Dupliquer » permet de faire une copie d'un mouvement en modifiant + certains éléments. ## Droits d'accès Le module est accessible uniquement pour les membres ayant au moins le diff --git a/_calcul_dispo.html b/_calcul_dispo.html index a1115e1..7a0fbcb 100644 --- a/_calcul_dispo.html +++ b/_calcul_dispo.html @@ -1,35 +1,40 @@ +{{* -*- brindille -*- *}} + {{* Calcul des entrées/sorties de matériels à une date donnée paramètres : - - liste de clés de catégories + - key : clé du matériel concerné + - cat_key : clé de la catégorie des matériels concernés - date - résultat : cumul_mvt + résultat : + - categories : tableau clé => nom + - equipments : tableau clé => { clé cat, libellé mat, stock, exter, nonproprio } *}} -{{* liste des catégories *}} -{{if $category_keys === null}} - {{#load type="category"}} - {{:assign var="cumul_mvt.%s.name"|args:$key value=$name}} +{{* liste des matériels *}} +{{:assign equipments=null}} +{{if $_GET.key}} + {{* le matériel paramètre *}} + {{#load key=$_GET.key}} + {{:assign var="equipments.%s.category"|args:$key value=$category}} + {{:assign var="equipments.%s.designation"|args:$key value=$designation}} + {{:assign var="in_equipments." value="'%s'"|args:$key}} + {{/load}} +{{elseif $_GET.cat_key}} + {{* matériels de la catégorie paramètre *}} + {{#load type="equipment" where="$$.category = :category_key" :category_key=$_GET.cat_key}} + {{:assign var="equipments.%s.category"|args:$key value=$category}} + {{:assign var="equipments.%s.designation"|args:$key value=$designation}} + {{:assign var="in_equipments." value="'%s'"|args:$key}} {{/load}} {{else}} - {{#load type="category" where="key"|sql_where:'IN':$category_keys}} - {{:assign var="cumul_mvt.%s.name"|args:$key value=$name}} + {{* tous les matériels *}} + {{#load type="equipment"}} + {{:assign var="equipments.%s.category"|args:$key value=$category}} + {{:assign var="equipments.%s.designation"|args:$key value=$designation}} + {{:assign var="in_equipments." value="'%s'"|args:$key}} {{/load}} {{/if}} - -{{#foreach from=$cumul_mvt key="cat_key" item="elem"}} - {{:assign var="in_categories." value="'%s'"|args:$cat_key}} -{{/foreach}} - -{{:assign in_categories=$in_categories|implode:","}} -{{:assign in_categories="("|cat:$in_categories|cat:")"}} - -{{* liste des matériels dans les catégories passées en paramètre *}} -{{#load type="equipment" where="$$.category IN %s"|args:$in_categories}} - {{:assign var="equipments.%s.category"|args:$key value=$category}} - {{:assign var="equipments.%s.designation"|args:$key value=$designation}} - {{:assign var="in_equipments." value="'%s'"|args:$key}} -{{/load}} {{:assign in_equipments=$in_equipments|implode:","}} {{:assign in_equipments="("|cat:$in_equipments|cat:")"}} @@ -107,12 +112,9 @@ from=nonproprio}} {{/if}} {{/if}} - {{/load}} -{{* grouper les résultats par catégorie *}} -{{#foreach from=$equipments key="eqpmt_key" item="eqpmt"}} - {{:assign - var="cumul_mvt.%s.eqpmt.%s"|args:$eqpmt.category:$eqpmt_key - value=$eqpmt}} -{{/foreach}} +{{* catégories *}} +{{#load type="category" order="$$.name"}} + {{:assign var="categories.%s"|args:$key value=$name}} +{{/load}} diff --git a/_get_config.html b/_get_config.html index 83771df..5c819b9 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 @@ -24,7 +26,6 @@ {{#foreach from=$module.config.output_nature item="elem"}} {{:assign var="config.output_nature.%s"|args:$elem.label value=$elem.type}} {{/foreach}} - {{* :assign var=config.output_nature value=$module.config.output_nature *}} {{else}} {{* pas de config enregistrée : utiliser la config par défaut *}} {{#foreach from=$config_defaut.outputs item="elem"}} diff --git a/_nav.html b/_nav.html index 4aab958..007a7a8 100644 --- a/_nav.html +++ b/_nav.html @@ -1,9 +1,46 @@ +{{* -*- brindille -*- *}} + diff --git a/categories/add_category.html b/categories/add_category.html new file mode 100644 index 0000000..a951a43 --- /dev/null +++ b/categories/add_category.html @@ -0,0 +1,44 @@ +{{* -*- brindille -*- *}} + +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="../_nav.html" current="config" subcurrent="categories"}} +{{/if}} + +{{* Traiter l'envoi du formulaire *}} +{{#form on="save"}} + + {{* Vérifier s'il existe déjà une catégorie avec le même nom *}} + {{#load type="category" where="$$.name = :name COLLATE U_NOCASE" :name=$_POST.name|trim limit=1}} + {{:error message="Impossible d'ajouter la catégorie « %s » car elle existe déjà !"|args:$name|trim}} + {{/load}} + + {{:assign key=""|uuid}} + {{:assign cat_name=$_POST.name|trim|tolower|ucfirst}} + {{:save + key=$key + validate_schema="./category.schema.json" + type="category" + name=$cat_name + }} + {{:assign msg="Catégorie « %s » enregistrée"|args:$cat_name}} + {{:redirect force="./index.html?ok=1&msg=%s"|args:$msg}} +{{/form}} + +{{:admin_header title="Gestion des matériels" current="module_equipment"}} +{{:form_errors}} + +{{* formulaire d'ajout de catégorie *}} +
+
+ Ajouter une catégorie +
+ {{:input type="text" name="name" label="Nom" autofocus=true required=true maxlength="100"}} +
+

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

+
+
+ +{{:admin_footer}} diff --git a/categories/delete_category.html b/categories/delete_category.html index b0ab888..2e9c977 100644 --- a/categories/delete_category.html +++ b/categories/delete_category.html @@ -1,4 +1,4 @@ -{{:admin_header title="Supprimer une catégorie" current="module_equipment"}} +{{* -*- brindille -*- *}} {{#load key=$_GET.key assign="category"}} {{else}} @@ -12,10 +12,14 @@ {{else}} {{* supprimer la catégorie sélectionnée*}} {{:delete where="key = :key" :key=$category.key}} - {{:redirect force="./index.html?ok=1&msg=suppression"}} + {{:assign msg="Catégorie « %s » supprimée"|args:$category.name}} + {{:redirect force="./index.html?ok=1&msg=%s"|args:$msg}} {{/load}} {{/form}} +{{:admin_header title="Supprimer une catégorie" current="module_equipment"}} +{{:form_errors}} + {{:delete_form legend="Supprimer une catégorie" warning="Supprimer la catégorie « %s » ?"|args:$category.name diff --git a/categories/index.html b/categories/index.html index 30591ff..e6c3869 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,13 +1,17 @@ +{{* -*- brindille -*- *}} + {{:admin_header title="Gestion des matériels" current="module_equipment"}} {{* barre de navigation *}} -{{:include file="../_nav.html" current="categories"}} +{{:include file="../_nav.html" current="config" subcurrent="categories"}} {{if $_GET.ok}} {{if $_GET.msg == "modification"}}

Modification enregistrée

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

Catégorie supprimée

+ {{else}} +

{{$_GET.msg}}

{{/if}} {{elseif $_GET.err}} {{if $_GET.msg == "modification"}} @@ -22,10 +26,16 @@ {{* afficher les catégories déjà enregistrées *}}
{{#list select="$$.name AS 'Catégorie'" order="1" where="$$.type = 'category'"}} + {{:assign category_key=$key}} + {{* voir s'il y a des matériels dans cette catégorie *}} + {{:assign materiel_present=true}} + {{#load type="equipment" where="$$.category = :category_key" :category_key=$category_key}} + {{else}} + {{:assign materiel_present=false}} + {{/load}} {{$name}} - {{:linkbutton label="Liste des matériels" href="list_equipment.html?key=%s&dialog"|args:$key shape="search" target="_dialog"}} {{:linkbutton label="Modifier" href="modify_category.html?key=%s"|args:$key shape="edit" target="_dialog"}} {{:linkbutton label="Supprimer" href="delete_category.html?key=%s"|args:$key shape="delete" target="_dialog"}} @@ -35,37 +45,4 @@ {{/list}}
-{{* Traiter l'envoi du formulaire *}} -{{#form on="save"}} - - {{* Vérifier s'il existe déjà une catégorie avec le même nom *}} - {{#load type="category" where="lower($$.name) = :name" :name=$_POST.name|trim|tolower}} - {{:error message="Impossible d'ajouter la catégorie « %s » car elle existe déjà !"|args:$name|trim}} - {{/load}} - - {{:assign key=""|uuid}} - {{:save - key=$key - validate_schema="./category.schema.json" - type="category" - name=$_POST.name|trim - }} - {{:redirect to="./index.html?ok=1&msg=Catégorie enregistrée"}} -{{/form}} - -{{:form_errors}} - -{{* formulaire d'ajout de catégorie *}} -
-
- Ajouter une catégorie -
- {{:input type="text" name="name" label="Nom" autofocus=true required=true maxlength="100"}} -
-

- {{:button type="submit" name="save" label="Ajouter" shape="right" class="main"}} -

-
-
- {{:admin_footer}} diff --git a/categories/list_equipment.html b/categories/list_equipment.html deleted file mode 100644 index 90a67f3..0000000 --- a/categories/list_equipment.html +++ /dev/null @@ -1,15 +0,0 @@ -{{#load key=$_GET.key}} - {{:assign cat_name=$name}} -{{/load}} - -{{:admin_header title="Matériels de la catégorie « %s »"|args:$cat_name current="module_equipment"}} - -{{* barre de navigation *}} -{{if ! $dialog}} - {{:include file="../_nav.html" current="entrees"}} -{{/if}} - -{{:assign var="category_keys." value=$_GET.key}} -{{:include file="../inventaire.html"}} - -{{:admin_footer}} diff --git a/categories/modify_category.html b/categories/modify_category.html index 9522111..7d5fbcb 100644 --- a/categories/modify_category.html +++ b/categories/modify_category.html @@ -1,4 +1,4 @@ -{{:admin_header title="Modifier une catégorie" current="module_equipment"}} +{{* -*- brindille -*- *}} {{#load key=$_GET.key assign="category"}} {{else}} @@ -7,19 +7,25 @@ {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} + {{* Vérifier s'il existe déjà une catégorie avec le même nom *}} + {{#load type="category" where="$$.name = :name" :name=$_POST.name|trim|tolower|ucfirst limit=1}} + {{:error message="Modification impossible car ce nom de catégorie (« %s ») existe déjà !"|args:$name|trim}} + {{/load}} + {{:save key=$category.key validate_schema="./category.schema.json" type="category" - name=$_POST.name|trim + name=$_POST.name|trim|tolower|ucfirst }} {{:redirect force="./index.html?ok=1&msg=modification"}} {{/form}} +{{:admin_header title="Modifier une catégorie" current="module_equipment"}} {{:form_errors}} {{* formulaire de modification de catégorie *}} -
+
Modifier la catégorie « {{$category.name}} »
diff --git a/config.html b/config.html index 4d395eb..cff708a 100644 --- a/config.html +++ b/config.html @@ -1,23 +1,14 @@ +{{* -*- brindille -*- *}} + {{:admin_header title="Configuration" current="module_equipment"}} {{* barre de navigation *}} -{{:include file="_nav.html" current="config"}} +{{:include file="_nav.html" current="config" subcurrent="typesES"}} {{if $_GET.ok}}

Configuration enregistrée.

{{/if}} -{{* Traiter l'envoi du formulaire *}} -{{#form on="save"}} - - {{:save key="config" - validate_schema="./config.schema.json" - input_nature=$_POST.input_fields|array_transpose - output_nature=$_POST.output_fields|array_transpose - }} - {{:redirect to="./config.html?ok=1"}} -{{/form}} - {{* lecture config (défaut ou enregistrée) *}} {{:include file="./_get_config.html" keep="config"}} @@ -26,7 +17,7 @@ {{:assign var='input_types.%s'|args:$type value=$type}} {{/foreach}} -{{* Natures d'entrées qui ne peuvent être supprimées *}} +{{* types d'entrées qui ne peuvent être supprimées *}} {{#load type="movement" where="$$.direction='input'" group="$$.input_nature"}} {{:assign var="locked_inputs." value=$input_nature}} {{/load}} @@ -36,127 +27,59 @@ {{:assign var='output_types.%s'|args:$type value=$type}} {{/foreach}} -{{* Natures de sorties qui ne peuvent être supprimées *}} +{{* types de sorties qui ne peuvent être supprimées *}} {{#load type="movement" where="$$.direction='output'" group="$$.output_nature"}} {{:assign var="locked_outputs." value=$output_nature}} {{/load}} - -
- Entrées - - - - - - - - - - {{#foreach from=$config.input_nature key="label" item="type"}} - - - - - - {{/foreach}} - -
Nature de l'entréeTypeAction
{{:input type="text" name="input_fields[label][]" default=$label}}{{:input type="select" - name="input_fields[type][]" - options=$input_types - default=$type - required=true - default_empty="— Choisir un type —"}} - - {{:button - label="Supprimer" shape="minus" - disabled=$locked_inputs|has:$label - onclick="this.parentNode.parentNode.remove();"}} -
-

- {{:button shape="plus" label="Ajouter un champ" onclick="addLine('#input_body')"}} -

-
-

Signification du type d'entrée

-
    -
  • définitif : l'asso devient propriétaire du matériel (ex : achat, don)
  • -
  • temporaire : l'asso ne devient pas propriétaire du matériel (ex : location, emprunt)
  • -
  • retour : matériel qui revient après une sortie temporaire (ex : retour de location ou de prêt)
  • -
-
-
+

Types d'entrées

+ + + + + + + + + + {{#foreach from=$config.input_nature key="label" item="type"}} + + + + + + {{/foreach}} + +
LibelléType
{{$label}}{{$type}} + {{if ! $locked_inputs|has:$label}} + {{:linkbutton label="Supprimer" shape="delete" href="config/supprimer_type_mouvement.html?dir=input&mvt=%s"|args:$label target="_dialog"}} + {{/if}} + {{:linkbutton label="Modifier" shape="edit" href="config/modifier_type_mouvement.html?dir=output&mvt=%s"|args:$label target="_dialog"}} +
-
- Sorties - - - - - - - - - - {{#foreach from=$config.output_nature key="label" item="type"}} - - - - - - {{/foreach}} - -
Nature de la sortieTypeAction
{{:input type="text" name="output_fields[label][]" default=$label}}{{:input - type="select" - name="output_fields[type][]" - options=$output_types - default=$type - required=true - default_empty="— Choisir un type —"}} - - {{:button - label="Supprimer" shape="minus" - disabled=$locked_outputs|has:$label - onclick="this.parentNode.parentNode.remove();"}} -
-

- {{:button shape="plus" - label="Ajouter un champ" - onclick="addLine('#output_body')"}} -

-
-

Signification du type de sortie

-
    -
  • définitif : le matériel n'appartient plus à l'asso (ex : vente, casse, perte, vol, ...)
  • -
  • temporaire : le matériel sort temporairement de l'asso qui en reste propriétaire (ex : location, prêt)
  • -
  • retour : le matériel non propriété de l'asso est rendu à son propriétaire (ex : retour de location ou d'emprunt)
  • -
- -
+

Types de sorties

+ + + + + + + + + + {{#foreach from=$config.output_nature key="label" item="type"}} + + + + + + {{/foreach}} + +
LibelléType
{{$label}}{{$type}} + {{if ! $locked_outputs|has:$label}} + {{:linkbutton label="Supprimer" shape="delete" href="config/supprimer_type_mouvement.html?dir=output&mvt=%s"|args:$label target="_dialog"}} + {{/if}} + {{:linkbutton label="Modifier" shape="edit" href="config/modifier_type_mouvement.html?dir=output&mvt=%s"|args:$label target="_dialog"}} +
-

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

-
- - {{:admin_footer}} diff --git a/config/ajouter_type_mouvement.html b/config/ajouter_type_mouvement.html new file mode 100644 index 0000000..f4a55b6 --- /dev/null +++ b/config/ajouter_type_mouvement.html @@ -0,0 +1,143 @@ +{{* -*- brindille -*- *}} + +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="../_nav.html" current="config" subcurrent="typesES"}} +{{/if}} + +{{* Traiter l'envoi du formulaire *}} + +{{* lecture config (défaut ou enregistrée) *}} +{{:include file="../_get_config.html" keep="config"}} + +{{#form on="save"}} + + {{* vérifier l'existence d'une entrée de même nom et générer le résultat *}} + {{#foreach from=$config.input_nature key="label" item="type"}} + {{if $label|trim|tolower == $_POST.input_fields.label|trim|tolower}} + {{:error message="Ce libellé d'entrée est déjà présent"}} + {{/if}} + {{:assign var="input_nature.label" value=$label}} + {{:assign var="input_nature.type" value=$type}} + {{:assign var="input_natures." from=input_nature}} + {{/foreach}} + + {{* ajouter la nouvelle entrée *}} + {{if $_GET.dir == 'input'}} + {{:assign input_label=$_POST.input_fields.label|trim|tolower|ucfirst}} + {{:assign var="input_nature.label" value=$_POST.input_fields.label|trim|tolower|ucfirst}} + {{:assign var="input_nature.type" value=$_POST.input_fields.type}} + {{:assign var="input_natures." from=input_nature}} + {{/if}} + + {{* vérifier l'existence d'une sortie de même nom et générer le résultat *}} + {{#foreach from=$config.output_nature key="label" item="type"}} + {{if $label|trim|tolower == $_POST.output_fields.label|trim|tolower}} + {{:error message="Ce libellé de sortie est déjà présent"}} + {{/if}} + {{:assign var="output_nature.label" value=$label}} + {{:assign var="output_nature.type" value=$type}} + {{:assign var="output_natures." from=output_nature}} + {{/foreach}} + + {{* ajouter la nouvelle sortie *}} + {{if $_GET.dir == 'output'}} + {{:assign output_label=$_POST.output_fields.label|trim|tolower|ucfirst}} + {{:assign var="output_nature.label" value=$_POST.output_fields.label|trim|tolower|ucfirst}} + {{:assign var="output_nature.type" value=$_POST.output_fields.type}} + {{:assign var="output_natures." from=output_nature}} + {{/if}} + + {{:save + key="config" + validate_schema="../config.schema.json" + input_nature=$input_natures + output_nature=$output_natures + }} +{{:redirect to="./config.html?ok=1"}} +{{/form}} + +{{:admin_header title="Gestion des matériels" current="module_equipment"}} +{{:form_errors}} + +{{if $_GET.dir == 'input'}} + {{* types d'entrées *}} + {{#foreach from=$config.input_nature key="label" item="type"}} + {{:assign var='input_types.%s'|args:$type value=$type}} + {{/foreach}} + +
+
+ Type d'entrée +
+ + {{:input type="select" + label="Type d'entrée" + name="input_fields[type]" + options=$input_types + default=$type + required=true + default_empty="— Choisir un type —"}} + + + {{:input + type="text" + label="Libellé de l'entrée" + name="input_fields[label]" + required=true}} + +
+
+

Signification du type d'entrée

+
    +
  • définitif : l'asso devient propriétaire du matériel (ex : achat, don)
  • +
  • temporaire : l'asso ne devient pas propriétaire du matériel (ex : location, emprunt)
  • +
  • retour : matériel qui revient après une sortie temporaire (ex : retour de location ou de prêt)
  • +
+
+
+

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

+
+{{else}} + {{* types de sorties *}} + {{#foreach from=$config.output_nature key="label" item="type"}} + {{:assign var='output_types.%s'|args:$type value=$type}} + {{/foreach}} + +
+
+ Type de sortie +
+ + {{:input type="select" + label="Type de sortie" + name="output_fields[type]" + options=$output_types + default=$type + required=true + default_empty="— Choisir un type —"}} + + + {{:input + type="text" + label="Libellé de la sortie" + name="output_fields[label]" + required=true}} + +
+
+

Signification du type de sortie

+
    +
  • définitif : le matériel n'appartient plus à l'asso (ex : vente, casse, perte, vol, ...)
  • +
  • temporaire : le matériel sort temporairement de l'asso qui en reste propriétaire (ex : location, prêt)
  • +
  • retour : le matériel non propriété de l'asso est rendu à son propriétaire (ex : retour de location ou d'emprunt)
  • +
+
+
+

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

+
+{{/if}} diff --git a/config/modifier_type_mouvement.html b/config/modifier_type_mouvement.html new file mode 100644 index 0000000..c4b61f4 --- /dev/null +++ b/config/modifier_type_mouvement.html @@ -0,0 +1,66 @@ +{{* -*- brindille -*- *}} + +{{* + paramètres : + - dir : input ou output + - mvt : libellé du type de mouvement à modifier +*}} + +{{* 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"}} + +{{:debug config.input_nature=$config.input_nature config.input_nature=$config.input_nature}} +{{:debug mvt=$_GET.mvt}} +{{#form on="save"}} + {{#foreach from=$config.input_nature key="label" item="type"}} + {{:debug key=$label item=$type}} + {{if $_GET.dir == 'input' + && $label|trim|tolower == $_GET.mvt|trim|tolower}} + {{:assign var="input_nature.label" value=$_POST.name|trim|tolower|ucfirst}} + {{else} + {{:assign var="input_nature.label" value=$label}} + {{/if}} + {{:assign var="input_nature.type" value=$type}} + {{:assign var="input_natures." from=input_nature}} + {{/foreach}} + + {{#foreach from=$config.output_nature key="label" item="type"}} + {{if $_GET.dir == 'output' && $label|trim|tolower == $_GET.mvt|trim|tolower}} + {{:assign var="output_nature.label" value=$_POST.name|trim|tolower|ucfirst}} + {{else}} + {{:assign var="output_nature.label" value=$label}} + {{/if}} + {{:assign var="output_nature.type" value=$type}} + {{:assign var="output_natures." from=output_nature}} + {{/foreach}} +{{:debug input_natures=$input_natures output_natures=$output_natures}} +{{* + {{:save + key="config" + validate_schema="../config.schema.json" + input_nature=$input_natures + output_nature=$output_natures + }} + {{:redirect to="./config.html?ok=1"}} +*}} +{{/form}} + +{{:admin_header title="Gestion des matériels" current="module_equipment"}} +{{:form_errors}} + +
+
+ Modifier le libellé +
+ {{:input type="text" name="name" label="Libellé" default=$_GET.mvt required=true maxlength="100"}} +
+

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

+
+
diff --git a/config/supprimer_type_mouvement.html b/config/supprimer_type_mouvement.html new file mode 100644 index 0000000..eba02c7 --- /dev/null +++ b/config/supprimer_type_mouvement.html @@ -0,0 +1,61 @@ +{{* -*- brindille -*- *}} + +{{* + paramètres : + - dir : input ou output + - mvt : libellé 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"}} + +{{#form on="delete"}} + {{#foreach from=$config.input_nature key="label" item="type"}} + {{if $_GET.dir == 'input' && $label|trim|tolower != $_GET.mvt|trim|tolower || + $_GET.dir == 'output'}} + {{:assign var="input_nature.label" value=$label}} + {{:assign var="input_nature.type" value=$type}} + {{:assign var="input_natures." from=input_nature}} + {{/if}} + {{/foreach}} + + {{#foreach from=$config.output_nature key="label" item="type"}} + {{if $_GET.dir == 'output' && $label|trim|tolower != $_GET.mvt|trim|tolower || + $_GET.dir == 'input'}} + {{:assign var="output_nature.label" value=$label}} + {{:assign var="output_nature.type" value=$type}} + {{:assign var="output_natures." from=output_nature}} + {{/if}} + {{/foreach}} + + {{:save + key="config" + validate_schema="../config.schema.json" + input_nature=$input_natures + output_nature=$output_natures + }} + {{:redirect to="./config.html?ok=1"}} + +{{/form}} + +{{:admin_header title="Gestion des matériels" current="module_equipment"}} +{{:form_errors}} + +{{if $_GET.dir == 'input'}} + {{:delete_form + legend="Supprimer cette entrée ?" + warning="Supprimer l'entrée « %s » ?"|args:$_GET.mvt + }} +{{else}} + {{:delete_form + legend="Supprimer cette sortie ?" + warning="Supprimer la sortie « %s » ?"|args:$_GET.mvt + }} +{{/if}} + +{{:admin_footer}} diff --git a/historique.html b/historique.html index d716b0f..3187fd0 100644 --- a/historique.html +++ b/historique.html @@ -1,5 +1,25 @@ +{{* -*- brindille -*- *}} + +{{* + Afficher l'historique des mouvements d'un matériel + paramètres + - key : clé du matériel + - prop : = 1 si matériel appartient à l'asso + - ok : vrai si opération terminée avec succès + - err : vrai si opération terminée en erreur (ça fait doublon avec ok, non ?) + - msg : message de retour +*}} + + +{{* barre de navigation *}} +{{if $_GET.prop == 1}} + {{:assign proprio="proprio"}} +{{else}} + {{:assign proprio="nonproprio"}} +{{/if}} + {{:assign equipment_key=$_GET.key|trim}} -{{#load key=$_GET.key assign="equipment"}} +{{#load key=$equipment_key assign="equipment"}} {{else}} {{:error message="Pas de matériel avec la clé %s"|args:$equipment_key}} {{/load}} @@ -8,12 +28,32 @@ {{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"}} + +{{:include file="./_nav.html" current="inventaire" subcurrent=$proprio subsubcurrent="mouvements" eqpmt=$equipment.designation category=$category.name}} + +{{if $_GET.ok}} + {{if $_GET.msg == "modification"}} +

Modification enregistrée

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

Mouvement copié

+ {{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}} {{* récupérer la config des entrées/sorties *}} {{:include file="./_get_config.html" keep="config"}} -{{* déterminer les type de mouvements selon l'affection du matériel *}} +{{* déterminer les types de mouvements selon l'affection du matériel *}} {{#foreach from=$config.input_nature key=mvt item=type_mvt}} {{if $_GET.prop}} {{* matériel propriété de l'asso *}} @@ -27,6 +67,7 @@ {{/if}} {{/if}} {{/foreach}} + {{#foreach from=$config.output_nature key=mvt item=type_mvt}} {{if $_GET.prop}} {{* matériel propriété de l'asso *}} @@ -41,29 +82,136 @@ {{/if}} {{/foreach}} -{{* lister tous les mouvements du matériel passé en paramètre *}} -{{#list - type="movement" - select="$$.date AS 'Date'; - CASE $$.direction WHEN 'input' THEN 'Entrée' WHEN 'output' THEN 'Sortie' END AS 'Mvt'; - CASE $$.direction WHEN 'input' THEN $$.input_nature WHEN 'output' THEN $$.output_nature END AS 'Type'; - $$.amount AS 'Nombre'; - $$.comment AS 'Commentaire'" - equipment=$equipment_key - order=1 -}} - {{if $direction === "input" && $input_nature|in:$input_types || - $direction === "output" && $output_nature|in:$output_types - }} - - {{$date|date_short}} - {{$col2}} - {{$col3}} - {{$amount}} - {{$comment}} - - +{{* calculer et mémoriser les quantités pour que le tri de la liste affiche les valeurs correctes *}} +{{:assign stock=0}} +{{:assign exterieur=0}} +{{:assign nonproprio=0}} + +{{#load type="movement" where="$$.equipment = :key" :key=$equipment_key order="$$.date"}} + {{if $direction == 'input'}} + {{:assign var="type_mvt" from="config.input_nature.%s"|args:$input_nature}} + {{if $type_mvt == 'définitif'}} + {{:assign stock="%d+%d"|math:$stock:$amount}} + {{elseif $type_mvt == 'retour'}} + {{:assign exterieur="%d-%d"|math:$exterieur:$amount}} + {{elseif $type_mvt == 'temporaire'}} + {{:assign nonproprio="%d+%d"|math:$nonproprio:$amount}} + {{/if}} + {{else}} + {{:assign var="type_mvt" from="config.output_nature.%s"|args:$output_nature}} + {{if $type_mvt == 'définitif'}} + {{:assign stock="%d-%d"|math:$stock:$amount}} + {{elseif $type_mvt == 'temporaire'}} + {{:assign exterieur="%d+%d"|math:$exterieur:$amount}} + {{elseif $type_mvt == 'retour'}} + {{:assign nonproprio="%d-%d"|math:$nonproprio:$amount}} + {{/if}} {{/if}} -{{/list}} + {{:assign dispo="%d-%d"|math:$stock:$exterieur}} + {{:assign var="quantites.%s.stock"|args:$id value=$stock}} + {{:assign var="quantites.%s.exterieur"|args:$id value=$exterieur}} + {{:assign var="quantites.%s.dispo"|args:$id value=$dispo}} + {{:assign var="quantites.%s.nonproprio"|args:$id value=$nonproprio}} +{{/load}} + +{{* lister tous les mouvements du matériel passé en paramètre *}} +{{if $_GET.prop}} + {{#list + type="movement" + select="$$.date AS 'Date'; + CASE $$.direction WHEN 'input' THEN 'Entrée' WHEN 'output' THEN 'Sortie' END AS 'Mouvement'; + CASE $$.direction WHEN 'input' THEN $$.input_nature WHEN 'output' THEN $$.output_nature END AS 'Opération'; + $$.amount AS 'Quantité'; + "" as 'Stock'; + "" as 'Sorti'; + "" as 'Disponible'; + $$.comment AS 'Commentaire'" + equipment=$equipment_key + order=1 + }} + {{:assign var="type_mvt" from="config.%s_nature.%s"|args:$direction:$col3}} + + {{if $direction === "input" && $input_nature|in:$input_types || + $direction === "output"&& $output_nature|in:$output_types + }} + {{:assign var="stock" from="quantites.%s.stock"|args:$id}} + {{:assign var="exterieur" from="quantites.%s.exterieur"|args:$id}} + {{:assign var="dispo" from="quantites.%s.dispo"|args:$id}} + + {{$date|date_short}} + {{$col2}} + {{$col3}} + {{$amount}} + {{$stock}} + {{$exterieur}} + {{$dispo}} + {{$comment}} + + {{: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"|args:$key:$direction + 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}} + {{/list}} + +{{else}} + {{#list + type="movement" + select="$$.date AS 'Date'; + CASE $$.direction WHEN 'input' THEN 'Entrée' WHEN 'output' THEN 'Sortie' END AS 'Mouvement'; + CASE $$.direction WHEN 'input' THEN $$.input_nature WHEN 'output' THEN $$.output_nature END AS 'Opération'; + $$.amount AS 'Quantité'; + "" as 'Présent'; + $$.comment AS 'Commentaire'" + equipment=$equipment_key + order=1 + }} + {{:assign var="type_mvt" from="config.%s_nature.%s"|args:$direction:$col3}} + + {{if $direction === "input" && $input_nature|in:$input_types || + $direction === "output"&& $output_nature|in:$output_types + }} + {{:assign var="stock" from="quantites.%s.nonproprio"|args:$id}} + + {{$date|date_short}} + {{$col2}} + {{$col3}} + {{$amount}} + {{$stock}} + {{$comment}} + + {{: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"|args:$key:$direction + 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}} + {{/list}} +{{/if}} {{:admin_footer}} diff --git a/index.html b/index.html index 8616e35..799aa05 100644 --- a/index.html +++ b/index.html @@ -1,22 +1,37 @@ +{{* -*- 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.prop == null || $_GET.prop}} + {{:assign proprio="proprio"}} +{{else}} + {{:assign proprio="nonproprio"}} +{{/if}} + +{{#load type="category" count=true assign="result"}}{{/load}} +{{:include file="_nav.html" current="inventaire" cat="%d"|args:$result.count subcurrent="%s"|args:$proprio}} {{if $_GET.ok}} -

Modification effectuée

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

Ajout effectué

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

Modification effectuée

+ {{else}} +

{{$_GET.msg}}

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

Modification refusée

{{/if}} -{{#load type="category"}} - {{:assign var="category_keys." value=$key}} -{{/load}} - -{{if $category_keys|count == 0}} +{{if $result.count == 0}}

Il n'y a aucune catégorie : vous devez en ajouter.

{{else}} - {{:include file="./inventaire.html" print_cat_name=true}} + {{if $_GET.prop == null || $_GET.prop}} + {{:include file="./inventaire.html"}} + {{else}} + {{:include file="./inventaire_nonprop.html"}} + {{/if}} {{/if}} {{:admin_footer}} diff --git a/inventaire.html b/inventaire.html index 8014583..7d253e7 100644 --- a/inventaire.html +++ b/inventaire.html @@ -1,145 +1,109 @@ {{* -*- brindille -*- *}} -{{* inventaire des entrées/sorties des matériels des catégories de la variable category_keys *}} +{{* + inventaire des entrées/sorties des matériels permanents +*}} {{* Extraire et compiler les infos de la base *}} -{{:include file="./_calcul_dispo.html" keep="cumul_mvt,category_keys,equipments"}} +{{:include file="./_calcul_dispo.html" keep="categories,equipments"}} -{{* Afficher les résultats *}} -{{if $equipments === null}} -

Aucun matériel.

+{{* Sélecteur catégories *}} +
+ Filtrer par catégorie + +
+ +
+

Inventaire des matériels propriété de l'association

+
+ +{{* Vérifier s'il y a au moins un matériel propriété de l'asso *}} +{{:assign mat_present=false}} +{{#foreach from=$equipments key=key item=eqpmt}} + {{if $eqpmt|has_key:"stock"}} + {{:assign mat_present=true}} + {{:break}} + {{/if}} +{{/foreach}} + +{{if $mat_present}} + {{#list + select=" + $$.designation AS 'Matériel' ; + "" AS 'Catégorie' ; + "" AS 'Stock' ; + "" AS 'Sorti' ; + "" AS 'Dispo' + " + type="equipment" + order=1 + }} + {{:assign var=eqpmt_key value=$key}} + {{:assign var=cat_key value=$category}} + {{:assign var=cat_name from=categories.%s|args:$cat_key}} + + {{if $_GET.cat_key != null && $_GET.cat_key != $cat_key}} + {{:continue}} + {{/if}} + + {{:assign var=stock from="equipments.%s.stock"|args:$eqpmt_key}} + {{:assign var=exterieur from="equipments.%s.exterieur"|args:$eqpmt_key}} + {{:assign dispo="%d-%d"|math:$stock:$exterieur}} + + {{if $stock == null}} + {{:continue}} + {{/if}} + + + {{$designation}} + {{$cat_name}} + {{$stock}} + {{if $exterieur == null}}0{{else}}{{$exterieur}}{{/if}} + {{$dispo}} + + {{if $exterieur > 0}} + {{:linkbutton + label="Retour" + href="mouvements/entrees/retour.html?key=%s"|args:$eqpmt_key + shape="history" + target="_dialog"}} + {{/if}} + {{if $dispo > 0}} + {{:linkbutton + label="Sortie" + shape="minus" + href="mouvements/sorties/stock_disponible.html?key=%s"|args:$eqpmt_key + target="_dialog"}} + {{/if}} + {{:linkbutton + label="Entrée" + shape="plus" + href="mouvements/entrees/repertorie.html?key=%s"|args:$eqpmt_key + target="_dialog"}} + {{:linkbutton + label="Mouvements" + href="historique.html?key=%s&prop=1"|args:$eqpmt_key + shape="table"}} + {{:linkbutton + label="Modifier" + href="modifier_materiel.html?key=%s&prop=1"|args:$eqpmt_key + shape="edit" + target="_dialog"}} + + + {{/list}} {{else}} -
-

Matériels dont l'association est propriétaire

- - {{* 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}} - {{/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="Historique des 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}} - -

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"}} - - {{* 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}}

- {{/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}} - {{else}} -

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

- {{/foreach}} - -
DésignationQuantité
{{$eqpmt.designation}}{{$eqpmt.nonproprio}} - {{:linkbutton - label="Historique des 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}} -
+

Aucun matériel.

{{/if}} diff --git a/inventaire_nonprop.html b/inventaire_nonprop.html new file mode 100644 index 0000000..391b243 --- /dev/null +++ b/inventaire_nonprop.html @@ -0,0 +1,96 @@ +{{* -*- brindille -*- *}} + +{{* + inventaire des entrées/sorties des matériels temporaires +*}} + +{{* Extraire et compiler les infos de la base *}} +{{:include file="./_calcul_dispo.html" keep="categories,equipments"}} + +{{* Sélecteur catégories *}} +
+ Filtrer par catégorie + +
+ +
+

Inventaire des matériels empruntés ou loués

+
+ +{{* Vérifier s'il y a au moins un matériel non propriété de l'asso *}} +{{:assign mat_present=false}} +{{#foreach from=$equipments key=key item=eqpmt}} + {{if $eqpmt|has_key:"nonproprio"}} + {{:assign mat_present=true}} + {{:break}} + {{/if}} +{{/foreach}} + +{{if $mat_present}} + {{#list + select=" + $$.designation AS 'Matériel' ; + "" AS 'Catégorie' ; + "" AS 'Quantité' + " + type="equipment" + order=1 + }} + {{:assign var=eqpmt_key value=$key}} + {{:assign var=cat_key value=$category}} + {{:assign var=cat_name from=categories.%s|args:$cat_key}} + + {{if $_GET.cat_key != null && $_GET.cat_key != $cat_key}} + {{:continue}} + {{/if}} + + {{:assign var=qte from="equipments.%s.nonproprio"|args:$eqpmt_key}} + + {{if $qte == null}} + {{:continue}} + {{/if}} + + + {{$designation}} + {{$cat_name}} + {{$qte}} + + {{if $qte > 0}} + {{:linkbutton + label="Retour" + href="mouvements/sorties/emprunte.html?key=%s"|args:$eqpmt_key + shape="history" + target="_dialog"}} + {{/if}} + {{:linkbutton + label="Entrée" + shape="plus" + href="mouvements/entrees/repertorie.html?key=%s"|args:$eqpmt_key + target="_dialog"}} + {{:linkbutton + label="Mouvements" + href="historique.html?key=%s&prop=0"|args:$eqpmt_key + shape="table"}} + {{:linkbutton + label="Modifier" + href="modifier_materiel.html?key=%s&prop=0"|args:$eqpmt_key + shape="edit" + target="_dialog"}} + + + {{/list}} +{{else}} +

Aucun matériel.

+{{/if}} diff --git a/modifier_materiel.html b/modifier_materiel.html index e81099d..e711a59 100644 --- a/modifier_materiel.html +++ b/modifier_materiel.html @@ -1,4 +1,10 @@ -{{:admin_header title="Modifier matériel" current="module_equipment"}} +{{* -*- brindille -*- *}} + +{{* + Paramètres : + - key : clé du matériel à modifier + - prop : =1 si matériel propriété de l'association +*}} {{:assign equipment_key=$_GET.key|trim}} {{#load key=$_GET.key assign="equipment"}} @@ -22,7 +28,7 @@ {{#load key=$equipment_key}} {{if $designation|trim|tolower != $_POST.designation|trim|tolower}} {{* le nom change => vérifier l'existence d'un matériel du même nom *}} - {{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}} + {{#load type="equipment" where="$$.designation = :name" :name=$_POST.designation|trim|tolower|ucfirst limit=1}} {{:assign chgt_ok=false}} {{/load}} {{else}} @@ -31,8 +37,8 @@ {{/load}} {{else}} - {{* catégorie ne change pas => vérifier le nom*}} - {{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}} + {{* catégorie ne change pas => vérifier le nom *}} + {{#load type="equipment" where="$$.designation = :name" :name=$_POST.designation|trim|tolower|ucfirst limit=1}} {{:assign chgt_ok=false}} {{/load}} {{/if}} @@ -45,14 +51,14 @@ {{:save key=$equipment_key category=$category.key - designation=$_POST.designation|trim + designation=$_POST.designation|trim|tolower|ucfirst }} - {{:redirect force="index.html?ok=1"}} - -{{else}} - {{:form_errors}} + {{:redirect force="index.html?ok=1&msg=modification&prop=%s"|args:$_GET.prop}} {{/form}} +{{:admin_header title="Modifier matériel" current="module_equipment"}} +{{:form_errors}} + {{* lister les catégories disponibles *}} {{#load type="category" assign="category" order="$$.name"}} {{:assign var="categories.%s"|args:$category.key value=$category.name}} diff --git a/mouvements/ajouter_entree.html b/mouvements/ajouter_entree.html new file mode 100644 index 0000000..60836ae --- /dev/null +++ b/mouvements/ajouter_entree.html @@ -0,0 +1,121 @@ +{{* -*- brindille -*- *}} + +{{* 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}} + +{{* lister les catégories et les matériels disponibles *}} +{{#load type="category" assign="category" order="$$.name"}} + {{*:assign nom_cat=$category.name*}} + {{:assign var="categories.%s"|args:$category.key value=$category.name}} +{{/load}} + +{{* Traiter l'envoi du formulaire *}} +{{#form on="save"}} + + {{* vérifier la quantité saisie (UTILE ? : fait par la navigateur) *}} + {{if $_POST.quantite <= 0}} + {{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.quantite}} + {{/if}} + + {{:assign post_mat=$_POST.designation|trim|tolower|ucfirst}} + + {{* vérifier l'existence d'un matériel de même nom *}} + {{#load type="equipment" where="$$.designation = :name COLLATE U_NOCASE" :name=$_POST.designation|trim limit=1}}}} + {{:assign equipment_key=$key}} + {{:assign var=nom_cat from="categories.%s"|args:$category}} + {{:assign present=true}} + {{/load}} + {{:assign var=post_cat from="categories.%s"|args:$_POST.category}} + + {{if $present}} + {{* voir si le matériel existe dans une autre catégorie *}} + {{if $nom_cat != $post_cat}} + {{:error message="Le matériel « %s » est déjà présent dans la catégorie « %s » ..."|args:$post_mat:$nom_cat}} + {{/if}} + {{* utiliser la clé du matériel trouvé *}} + + {{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=$_POST.category + designation=$post_mat + }} + {{/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 « %s (%d) en date du %s » effectué"|args:$post_mat:$_POST.quantite:$_POST.date}} + {{:assign var=type_entree from="config.input_nature.%s"|args:$operation}} + {{if $type_entree == "temporaire"}} + {{:assign prop=0}} + {{else}} + {{:assign prop=1}} + {{/if}} + {{:redirect force="../index.html?prop=%s&ok=1&msg=%s"|args:$prop:$msg}} +{{/form}} + +{{:admin_header title="Entrée de matériel" current="module_equipment"}} +{{:form_errors}} + +{{if $categories != null}} + {{* formulaire ajout matériel *}} +
+ +
+ Ajouter une entrée de matériel +
+ {{: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é" min=1 required=true default=1}} +
+
+ +
+ Sélectionner une catégorie et indiquer le nom du nouveau matériel +
+ {{:input type="select" name="category" label="Catégorie" options=$categories required=true}} + {{:input type="text" name="designation" label="Désignation" required=true}} + {{: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..0d75690 --- /dev/null +++ b/mouvements/dupliquer_mouvement.html @@ -0,0 +1,198 @@ +{{* -*- brindille -*- *}} + +{{* + Dupliquer un mouvement + paramètres : + - key : clé du mouvement à dupliquer + - direction du mouvement à dupliquer + - prop = 1 si matériel appartient à l'asso +*}} + +{{if $_GET.direction == "input"}} + {{:assign msg_direction="entrée"}} +{{else}} + {{:assign msg_direction="sortie"}} +{{/if}} + +{{* récupérer les infos du mouvement à dupliquer *}} +{{#load key=$_GET.key assign="mvt_new"}} +{{else}} + {{:error message="Aucune %s avec la clé %s"|args:$msg_direction:$_GET.key}} +{{/load}} + +{{* infos pour affichage *}} +{{if $_GET.direction == "input"}} + {{:assign mvt_nature=$mvt_new.input_nature}} +{{else}} + {{:assign mvt_nature=$mvt_new.output_nature}} +{{/if}} +{{:assign amount_init=$mvt_new.amount}} +{{:assign date_init=$mvt_new.date|date_short}} +{{:assign eqpmt_key=$mvt_new.equipment}} + +{{* récupérer les infos du matériel associé *}} +{{#load key=$eqpmt_key assign="eqpmt"}} +{{else}} + {{:error message="Aucun matériel avec la clé « %s »"|args:$eqpmt_key}} +{{/load}} + +{{* récupérer la config des entrées/sorties *}} +{{:include file="../_get_config.html" keep="config"}} + +{{* limiter les opérations possibles *}} +{{if $_GET.direction == "input"}} + {{* types d'entrées *}} + {{#foreach from=$config.input_nature key="label" item="type"}} + {{if $_GET.prop && $type != "temporaire" || + ! $_GET.prop && $type == "temporaire" + }} + {{:assign var="input_labels.%s"|args:$label value="%s"|args:$label}} + {{/if}} + {{if $label == $mvt_new.input_nature}} + {{:assign nature_defaut=$label}} + {{/if}} + {{/foreach}} +{{else}} + {{* types de sorties *}} + {{#foreach from=$config.output_nature key="label" item="type"}} + {{if $_GET.prop && $type != "retour" || + ! $_GET.prop && $type == "retour" + }} + {{:assign var="output_labels.%s"|args:$label value="%s"|args:$label}} + {{/if}} + {{if $label == $mvt_new.output_nature}} + {{:assign nature_defaut=$label}} + {{/if}} + {{/foreach}} +{{/if}} + +{{* + -------------------- Traiter la saisie -------------------- +*}} +{{#form on="save"}} + {{if $_POST.amount <= 0}} + {{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.amount}} + {{/if}} + + {{* préparer le mouvement copié *}} + {{if $_GET.direction == "input"}} + {{:assign var="mvt_new.input_nature" value=$_POST.nature_operation}} + {{:assign var="type_mvt" from="config.input_nature.%s"|args:$mvt_new.input_nature}} + {{if $type_mvt == "temporaire"}} + {{:assign prop=0}} + {{else}} + {{:assign prop=1}} + {{/if}} + {{else}} + {{:assign var="mvt_new.output_nature" value=$_POST.nature_operation}} + {{:assign var="type_mvt" from="config.output_nature.%s"|args:$mvt_new.output_nature}} + {{if $type_mvt == "retour"}} + {{:assign prop=0}} + {{else}} + {{:assign prop=1}} + {{/if}} + {{/if}} + + {{:assign var="mvt_new.amount" value=$_POST.amount}} + {{:assign var="mvt_new.date" value=$_POST.date|parse_date}} + {{:assign var="mvt_new.comment" value=$_POST.comment}} + + {{* + lister les mouvements + - insérer le mvt copié à sa place par date croissante + *}} + {{:assign insere=false}} + {{#load + where=" + $$.type = 'movement' + AND + $$.equipment = :eqpmt_key" + :eqpmt_key=$eqpmt_key + order="$$.date" + assign="movement" + }} + {{if! $insere}} + {{if + $_GET.direction == "input" && $date >= $mvt_new.date || + $_GET.direction == "output" && $date > $mvt_new.date + }} + {{:assign var="movements_new." from=mvt_new}} + {{:assign insere=true}} + {{/if}} + {{/if}} + {{:assign var="movements_new." from=movement}} + {{/load}} + {{if ! $insere}} + {{:assign var="movements_new." from=mvt_new}} + {{/if}} + + {{* Vérifier la cohérence des mouvements du matériel *}} + {{:include + file="./valider_modification.html" + keep="erreur" + movements=$movements_new + }} + + {{if $erreur}} +

+ Impossible d'enregistrer ce mouvement : + {{if $_GET.direction == "input"}} + « {{$mvt_new.input_nature}} + {{else}} + « {{$mvt_new.output_nature}} + {{/if}} + de {{$eqpmt.designation}} (qté : {{$mvt_new.amount}}) à la date du {{$mvt_new.date|date_short}} » +

+ {{else}} + {{* vérification réussie : enregistrer le mouvement modifié *}} + {{:assign mvt_key=""|uuid}} + {{:save + key=$mvt_key + validate_schema="movement.schema.json" + type="movement" + direction=$_GET.direction + input_nature=$mvt_new.input_nature + output_nature=$mvt_new.output_nature + amount=$mvt_new.amount|intval + equipment=$eqpmt_key + date=$mvt_new.date + comment=$mvt_new.comment + }} + {{:redirect force="../historique.html?ok=1&key=%s&prop=%s&msg=copie"|args:$eqpmt_key:$prop}} + {{/if}} +{{/form}} + +{{:admin_header title="Dupliquer une %s"|args:$msg_direction current="module_equipment"}} +{{:form_errors}} + +{{* + -------------------- Préparer la saisie -------------------- +*}} + +{{* récupérer les infos de la catégorie *}} +{{#load key=$eqpmt.category assign="category"}}{{/load}} + +{{* formulaire de copie du mouvement *}} +
+
+ Créer une copie de « {{$mvt_nature}} {{$eqpmt.designation}} (Catégorie : {{$category.name}}) » + {{if $_GET.direction == "input"}} +
+ {{:input type="select" name="nature_operation" label="Type" required=true options=$input_labels|sort default=$nature_defaut}} + {{else}} +
+ {{:input type="select" name="nature_operation" label="Type" required=true options=$output_labels|sort default=$nature_defaut}} + {{/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}} +
+
+ +

+ {{: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/delete_entree.html b/mouvements/entrees/delete_entree.html deleted file mode 100644 index b098cae..0000000 --- a/mouvements/entrees/delete_entree.html +++ /dev/null @@ -1,85 +0,0 @@ -{{:admin_header title="Supprimer une entrée" current="module_equipment"}} - -{{* récupérer les infos du mouvement à supprimer et du matériel associé *}} -{{#load key=$_GET.key assign="mvt_suppr"}} -{{else}} - {{:error message="Aucune entrée avec la clé « %s »"|args:$_GET.key}} -{{/load}} - -{{:assign amount_suppr=$mvt_suppr.amount}} -{{:assign date_suppr=$mvt_suppr.date|date_short}} -{{:assign key_eqpmt_suppr=$mvt_suppr.equipment}} - -{{#load key=$key_eqpmt_suppr assign="eqpmt_suppr"}} -{{else}} - {{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_suppr}} -{{/load}} - -{{#form on="delete"}} - - {{* récupérer la config des entrées/sorties *}} - {{:include file="../../_get_config.html" keep="config"}} - - {{* vérifier s'il est possible de supprimer l'entrée *}} - {{:assign dispo=0}} - {{:assign nonprop=0}} - {{* parcourir la liste des mouvements du matériel *}} - - {{#load - type="movement" - where="$$.equipment = :key" :key=$key_eqpmt_suppr - 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="./index.html?err=1&msg=suppression"}} - {{/if}} - - {{/if}} - {{/load}} - - {{* vérification réussie : supprimer l'entrée *}} - {{:delete key=$_GET.key}} - {{:assign var="msg" value="suppression"}} - - {{* voir s'il reste des mouvements pour le matériel concerné par le mouvement supprimé *}} - {{#load type="movement" where="$$.equipment = :eqpmt_key" :eqpmt_key=$key_eqpmt_suppr}} - {{else}} - {{* supprimer le matériel *}} - {{:delete key=$key_eqpmt_suppr}} - {{:assign var="msg" value="%s - matériel"|args:$msg}} - {{/load}} - - {{:redirect force="./index.html?ok=1&msg=%s"|args:$msg}} -{{/form}} - -{{:delete_form - legend="Supprimer cette entrée ?" - warning="Supprimer l'entrée « %s %s (%d) en date du %s » ?"|args:$mvt_suppr.input_nature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr - info="S'il ne reste aucun mouvement pour ce matériel, le matériel sera supprimé" -}} - -{{:form_errors}} - -{{:admin_footer}} diff --git a/mouvements/entrees/index.html b/mouvements/entrees/index.html deleted file mode 100644 index a824cf3..0000000 --- a/mouvements/entrees/index.html +++ /dev/null @@ -1,103 +0,0 @@ -{{:admin_header title="Gestion des matériels" current="module_equipment"}} - -{{* barre de navigation *}} -{{:include file="../../_nav.html" current="entrees"}} - -{{if $_GET.ok}} - {{if $_GET.msg|match:"suppression"}} - {{:assign msg="Entrée supprimée"}} - {{if $_GET.msg|match:"matériel"}} - {{:assign var="msg" value="%s - Matériel supprimé"|args:$msg}} - {{/if}} - {{elseif $_GET.msg == "entrée"}} - {{:assign msg="Entrée enregistrée"}} - {{elseif $_GET.msg == "modification"}} - {{:assign msg="Entrée modifiée"}} - {{/if}} -

{{$msg}}

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

Impossible de supprimer l'entrée

- {{/if}} -{{/if}} - -{{* vérifier s'il existe des catégories *}} -{{#load type="category"}} - {{:assign categories_exist=true}} -{{else}} -

Il n'y a aucune catégorie : vous devez en ajouter.

-{{/load}} - -{{if $categories_exist}} - - {{#load type="equipment"}} - {{:assign disabled=false}} - {{else}} - {{:assign disabled=true}} - {{/load}} - - {{* vérifier s'il y a des sorties temporaires *}} - {{if ! $disabled}} - {{:include file="../../_calcul_dispo.html" keep="cumul_mvt"}} - {{:include file="_temporaire.html" keep="temporaire"}} - {{/if}} - -
-
- Ajouter une entrée -
- {{if ! $disabled}} - {{:linkbutton label="Matériel répertorié" shape="plus" href="repertorie.html" target="_dialog"}} - {{/if}} - {{:linkbutton label="Matériel non répertorié" shape="plus" href="non_repertorie.html" target="_dialog"}} - {{if ! $disabled && $temporaire != null}} - {{:linkbutton label="Retour de sortie temporaire" shape="plus" href="retour.html" target="_dialog"}} - {{/if}} -
-
-
- - {{* lister les entrées *}} -
-

Liste des entrées

- - {{#list - select=" - $$.date AS 'Date' ; - $$.input_nature AS 'Type' ; - $$.amount AS 'Nombre' ; - (SELECT $$.designation - FROM @TABLE AS b - WHERE b.key = @TABLE.$$.equipment) AS 'Matériel' ; - $$.comment AS 'Remarques'" - type="movement" - direction="input" - order=1}} - - {{:assign var='mvt_key' value=$key}} - - {{$date|date_short}} - {{$input_nature}} - {{$amount}} - {{$col4}} - {{$comment}} - - {{:linkbutton - label="Supprimer" - href="delete_entree.html?key=%s"|args:$mvt_key - shape="delete" - target="_dialog"}} - {{:linkbutton - label="Modifier" - href="../modifier_mouvement.html?key=%s&direction=input"|args:$mvt_key - shape="edit" - target="_dialog"}} - - - {{else}} -

Il n'y a aucune entrée.

- {{/list}} -
-{{/if}} - -{{:admin_footer}} diff --git a/mouvements/entrees/non_repertorie.html b/mouvements/entrees/non_repertorie.html deleted file mode 100644 index 6ca311f..0000000 --- a/mouvements/entrees/non_repertorie.html +++ /dev/null @@ -1,99 +0,0 @@ -{{: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"}} - - {{* 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}} - - {{* 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 - }} - - {{:redirect force="index.html?ok=1&msg=entrée"}} -{{else}} - {{:form_errors}} -{{/form}} - -{{* lister les catégories disponibles *}} -{{#load type="category" assign="category" order="$$.name"}} -{{:assign var="categories.%s"|args:$category.key value=$category.name}} -{{/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}} -
-
- -
- Matériel -
- {{:input type="select" name="category" label="Catégorie" required=true options=$categories}} - {{:input type="text" name="designation" label="Désignation" required=true}} - {{: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/entrees/repertorie.html b/mouvements/entrees/repertorie.html index 484d5cb..9733fdf 100644 --- a/mouvements/entrees/repertorie.html +++ b/mouvements/entrees/repertorie.html @@ -1,4 +1,10 @@ -{{:admin_header title="Entrée de matériel" current="module_equipment"}} +{{* -*- brindille -*- *}} + +{{* + Ajouter une entrée de matériel + paramètres : + - key : clé du matériel à ajouter +*}} {{* barre de navigation *}} {{if ! $dialog}} @@ -15,16 +21,23 @@ {{/if}} {{/foreach}} +{{* récupérer les informations du matériel et de sa catégorie *}} +{{#load key=$_GET.key assign="equipment"}} +{{/load}} +{{#load where="key = :key" :key=$equipment.category assign="category"}} +{{/load}} + {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} - {{* récupérer les infos du matériel *}} - {{#load type="equipment" key=$_POST.equipment assign="equipment"}} - {{/load}} + {{* vérifier la quantité saisie *}} + {{if $_POST.quantite <= 0}} + {{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.quantite}} + {{/if}} {{* Enregistrer le mouvement *}} {{:assign mvt_key=""|uuid}} - {{:assign var="operation" from="input_labels.%d|args:$_POST.type_operation}} + {{:assign var="operation" from="input_labels.%d|args:$_POST.nature_operation}} {{:save key=$mvt_key @@ -37,47 +50,38 @@ date=$_POST.date|parse_date comment=$_POST.remarques|trim }} - - {{:redirect force="index.html?ok=1&msg=entrée"}} -{{else}} - {{:form_errors}} + {{:assign var=type_entree from="config.input_nature.%s"|args:$operation}} + {{if $type_entree == "temporaire"}} + {{:assign prop=0}} + {{else}} + {{:assign prop=1}} + {{/if}} + {{:redirect force="../../index.html?ok=1&msg=entrée&prop=%s"|args:$prop}} {{/form}} -{{* lister les catégories et matériels associés *}} -{{#load type="category" assign="category" order="$$.name"}} - {{:assign nom_cat=$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}} +{{:admin_header title="Entrée de matériel" current="module_equipment"}} +{{:form_errors}} -{{* Vérifier s'il y a au moins un matériel enregistré *}} -{{if $equipments != null}} - - {{* formulaire d'entrée de matériel *}} - -
-
- Ajouter une entrée d'un matériel répertorié -
- {{:input type="select" name="type_operation" label="Type" required=true options=$input_labels}} +{{* formulaire de saisie d'une entrée de matériel *}} + +
+
+
Matériel : {{$equipment.designation}}
+
Catégorie : {{$category.name}}
+
+
+
+ Ajouter une entrée de matériel +
+ {{:input type="select" name="nature_operation" label="Type" required=true 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 default=1}} -
-
-
- Matériel -
- {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$equipments}} + {{:input type="number" name="quantite" label="Quantité" required=true min=1 default=1}} {{: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 aucun matériel déjà répertorié

-{{/if}} +
+
+

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

+ {{:admin_footer}} diff --git a/mouvements/entrees/retour.html b/mouvements/entrees/retour.html index d0f92e4..d42de25 100644 --- a/mouvements/entrees/retour.html +++ b/mouvements/entrees/retour.html @@ -1,4 +1,9 @@ -{{:admin_header title="Entrée de matériel" current="module_equipment"}} +{{* -*- brindille -*- *}} + +{{* + paramètres : + - key : clé du matériel qui revient +*}} {{* barre de navigation *}} {{if ! $dialog}} @@ -18,20 +23,19 @@ {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} {{* récupérer les infos du matériel *}} - {{#load type="equipment" key=$_POST.equipment assign="equipment"}} + {{#load type="equipment" key=$_GET.key assign="equipment"}} {{:assign designation=$equipment.designation}} - {{:assign var="categories." value=$equipment.category}} {{/load}} {{* Extraire et compiler les infos de la base *}} {{:include file="../../_calcul_dispo.html" - keep="cumul_mvt" + keep="equipments" date=$_POST.date|parse_date }} - {{* déterminer la quantité sortie temporairement de ce matriel à la date donnée *}} - {{:assign var=sorti from="cumul_mvt.%s.eqpmt.%s.exterieur"|args:$equipment.category:$_POST.equipment}} + {{* déterminer la quantité sortie temporairement de ce matériel à la date donnée *}} + {{:assign var=sorti from="equipments.%s.exterieur"|args:$_GET.key}} {{if $_POST.quantite|intval > $sorti}} {{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle sortie (%d) à la date du %s"|args:$_POST.quantite:$sorti:$_POST.date}} @@ -53,47 +57,63 @@ comment=$_POST.remarques|trim }} - {{:redirect force="index.html?ok=1&msg=entrée"}} -{{else}} - {{:form_errors}} + {{:redirect force="../../historique.html?ok=1&key=%s&prop=1&msg=retour"|args:$_GET.key}} {{/form}} +{{:admin_header title="Retour de matériel" current="module_equipment"}} +{{:form_errors}} + {{* Extraire et compiler les infos de la base *}} -{{:include file="../../_calcul_dispo.html" keep="cumul_mvt"}} +{{:include file="../../_calcul_dispo.html" keep="categories, equipments"}} +{{:assign var=sorti from="equipments.%s.exterieur"|args:$_GET.key}} -{{if $cumul_mvt !== null}} +{{if $sorti > 0}} - {{* déterminer la quantité des matériels sortis temporairement *}} - {{:include file="_temporaire.html" keep="temporaire"}} + {{* déterminer le matériel concerné par le mouvement *}} + {{#load key=$_GET.key assign="equipment"}} + {{/load}} + {{:assign var=cat_name from=categories.%s|args:$equipment.category}} - {{if $temporaire != null}} - - {{* formulaire d'entrée de matériel *}} -
-
- Ajouter une entrée pour un retour de matériel -
- {{:input type="select" name="type_operation" label="Type" required=true options=$input_labels}} + {{* formulaire d'entrée de matériel *}} + +
+
+
Matériel : {{$equipment.designation}}
+
Catégorie : {{$cat_name}}
+
Quantité sortie : {{$sorti}}
+
+

La quantité sortie est celle à la date du jour

+
+
+ Ajouter un retour de matériel +
+ {{:input type="select" name="type_operation" label="Type" required=true 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 default=1}} -
-
-
- Matériel -
- {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$temporaire}} + {{:input type="number" name="quantite" label="Quantité" min=1 required=true default=$sorti max=$sorti}} {{: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 aucun matériel sorti temporairement

- {{/if}} +
+

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

+ {{else}}

Il n'y a aucun matériel

{{/if}} + + {{:admin_footer}} diff --git a/mouvements/modifier_mouvement.html b/mouvements/modifier_mouvement.html index 3a8a409..be6187a 100644 --- a/mouvements/modifier_mouvement.html +++ b/mouvements/modifier_mouvement.html @@ -1,56 +1,57 @@ {{* -*- brindille -*- *}} +{{* + Modifier un mouvement + paramètres : + - key : clé du mouvement à modifier + - direction : du mouvement à modifier +*}} + {{if $_GET.direction == "input"}} {{:assign msg_direction="entrée"}} {{else}} {{:assign msg_direction="sortie"}} {{/if}} -{{:admin_header title="Modifier une %s"|args:$msg_direction current="module_equipment"}} - -{{:assign direction_mvt=$_GET.direction}} -{{:assign key_mvt=$_GET.key}} {{* récupérer les infos du mouvement à modifier *}} -{{#load key=$key_mvt assign="mvt_modif"}} +{{#load key=$_GET.key assign="mvt_new"}} {{else}} - {{:error message="Aucune %s avec la clé %s"|args:$msg_direction:$key_mvt}} + {{:error message="Aucune %s avec la clé %s"|args:$msg_direction:$_GET.key}} {{/load}} -{{if $direction_mvt == "input"}} - {{:assign input_init=$mvt_modif.input_nature}} - {{:assign url="entrees/index.html"}} +{{* infos pour affichage *}} +{{if $_GET.direction == "input"}} + {{:assign mvt_nature=$mvt_new.input_nature}} {{else}} - {{:assign output_init=$mvt_modif.output_nature}} - {{:assign url="sorties/index.html"}} + {{:assign mvt_nature=$mvt_new.output_nature}} {{/if}} - -{{:assign amount_init=$mvt_modif.amount}} -{{:assign date_init=$mvt_modif.date|date_short}} -{{:assign key_eqpmt_init=$mvt_modif.equipment}} +{{:assign amount_init=$mvt_new.amount}} +{{:assign date_init=$mvt_new.date|date_short}} +{{:assign eqpmt_key=$mvt_new.equipment}} {{* récupérer les infos du matériel associé *}} -{{#load key=$key_eqpmt_init assign="eqpmt_init"}} +{{#load key=$eqpmt_key assign="eqpmt"}} {{else}} - {{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_init}} + {{:error message="Aucun matériel avec la clé « %s »"|args:$eqpmt_key}} {{/load}} {{* récupérer la config des entrées/sorties *}} {{:include file="../_get_config.html" keep="config"}} -{{if $direction_mvt == "input"}} +{{if $_GET.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_modif.input_nature}} - {{:assign type_defaut=$label}} + {{if $label == $mvt_new.input_nature}} + {{:assign nature_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_modif.output_nature}} - {{:assign type_defaut=$label}} + {{if $label == $mvt_new.output_nature}} + {{:assign nature_defaut=$label}} {{/if}} {{/foreach}} {{/if}} @@ -58,137 +59,131 @@ {{* -------------------- Traiter la saisie -------------------- *}} -{{#form on="change"}} - {{* préparer le mouvement modifié *}} - {{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}} +{{#form on="save"}} + {{if $_POST.amount <= 0}} + {{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.amount}} {{/if}} - {{:assign var="mvt_modif.amount" value=$_POST.amount}} - {{:assign var="mvt_modif.equipment" value=$_POST.equipment}} - {{:assign var="mvt_modif.date" value=$_POST.date|parse_date}} - {{:assign var="mvt_modif.comment" value=$_POST.comment}} + + {{* préparer le mouvement modifié *}} + {{if $_GET.direction == "input"}} + {{:assign var="mvt_new.input_nature" value=$_POST.nature_operation}} + {{:assign var="type_mvt" from="config.input_nature.%s"|args:$mvt_new.input_nature}} + {{if $type_mvt == "temporaire"}} + {{:assign prop=0}} + {{else}} + {{:assign prop=1}} + {{/if}} + {{else}} + {{:assign var="mvt_new.output_nature" value=$_POST.nature_operation}} + {{:assign var="type_mvt" from="config.output_nature.%s"|args:$mvt_new.output_nature}} + {{if $type_mvt == "retour"}} + {{:assign prop=0}} + {{else}} + {{:assign prop=1}} + {{/if}} + {{/if}} + + {{:assign var="mvt_new.amount" value=$_POST.amount}} + {{:assign var="mvt_new.date" value=$_POST.date|parse_date}} + {{:assign var="mvt_new.comment" value=$_POST.comment}} {{* - lister les mouvements et remplacer le mouvement sélectionné par sa version modifiée - en l'insérant à sa place par date croissante + lister les mouvements + - ignorer le mouvement à modifier + - insérer le mvt modifié à sa place par date croissante *}} {{:assign insere=false}} {{#load where=" $$.type = 'movement' AND - ($$.equipment = :old_eqpmt_key OR $$.equipment = :new_eqpmt_key)" - :old_eqpmt_key=$key_eqpmt_init - :new_eqpmt_key=$_POST.equipment + $$.equipment = :eqpmt_key" + :eqpmt_key=$eqpmt_key order="$$.date" assign="movement" }} - {{if $key != $key_mvt}} - {{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 $key != $_GET.key}} + {{if! $insere}} + {{if + $_GET.direction == "input" && $date >= $mvt_new.date || + $_GET.direction == "output" && $date > $mvt_new.date + }} + {{:assign var="movements_new." from=mvt_new}} + {{:assign insere=true}} + {{/if}} {{/if}} - {{:assign var="movements_modif." from=movement}} + {{:assign var="movements_new." from=movement}} {{/if}} {{/load}} {{if ! $insere}} - {{:assign var="movements_modif." from=mvt_modif}} + {{:assign var="movements_new." from=mvt_new}} {{/if}} - {{* Vérifier la cohérence des opérations de l'ancien matériel *}} + {{* Vérifier la cohérence des mouvements du matériel *}} {{:include file="./valider_modification.html" keep="erreur" - movements=$movements_modif - eqpmt_key=$key_eqpmt_init + movements=$movements_new }} - {{* Si le matériel a changé, vérifier la cohérence des opérations du nouveau matériel *}} - {{if ! $erreur && $key_eqpmt_init != $_POST.equipment}} - {{:include - file="./valider_modification.html" - keep="erreur" - movements=$movements_modif - eqpmt_key=$_POST.equipment - }} - {{/if}} - - {{#load key=$mvt_modif.equipment assign="eqpmt"}}{{/load}} {{if $erreur}}

Modification demandée impossible : - {{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}} - « {{$output_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers - « {{$mvt_modif.output_nature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} » - {{/if}} + « {{$mvt_nature}} de {{$eqpmt.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers + {{if $_GET.direction == "input"}} + « {{$mvt_new.input_nature}} + {{else}} + « {{$mvt_new.output_nature}} + {{/if}} + de {{$eqpmt.designation}} (qté : {{$mvt_new.amount}}) à la date du {{$mvt_new.date|date_short}} »

{{else}} - {{* vérification réussie : modifier le mouvement *}} + {{* vérification réussie : enregistrer le mouvement modifié *}} {{:save - key=$key_mvt - validate_schema="./movement.schema.json" + key=$_GET.key + validate_schema="movement.schema.json" type="movement" - direction=$direction_mvt - input_nature=$mvt_modif.input_nature - output_nature=$mvt_modif.output_nature - amount=$mvt_modif.amount|intval - equipment=$mvt_modif.equipment - date=$mvt_modif.date - comment=$mvt_modif.comment + direction=$_GET.direction + input_nature=$mvt_new.input_nature + output_nature=$mvt_new.output_nature + amount=$mvt_new.amount|intval + equipment=$eqpmt_key + date=$mvt_new.date + comment=$mvt_new.comment }} - {{:redirect force="%s?ok=1&msg=modification"|args:$url}} + {{:redirect force="../historique.html?ok=1&key=%s&prop=%s&msg=modification"|args:$eqpmt_key:$prop}} {{/if}} - {{/form}} +{{:admin_header title="Modifier une %s"|args:$msg_direction current="module_equipment"}} +{{: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}} - {{#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}} +{{* récupérer les infos de la catégorie *}} +{{#load key=$eqpmt.category assign="category"}}{{/load}} {{* formulaire de modification du mouvement *}}
- -
- {{if $direction_mvt == "input"}} - Modifier l'entrée « {{$input_init}} {{$eqpmt_init.designation}} ({{$amount_init}}) en date du {{$date_init}} » +
+ Modifier « {{$mvt_nature}} {{$eqpmt.designation}} (Catégorie : {{$category.name}}) » + {{if $_GET.direction == "input"}}
- {{:input type="select" name="type_operation" label="Type" required=true options=$input_labels default=$type_defaut}} + {{:input type="select" name="nature_operation" label="Type" required=true options=$input_labels|sort default=$nature_defaut}} {{else}} - Modifier 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}} + {{:input type="select" name="nature_operation" label="Type" required=true options=$output_labels|sort default=$nature_defaut}} {{/if}} - {{:input type="date" name="date" label="Date" required=true default=$mvt_modif.date}} - {{:input type="number" name="amount" label="Quantité" required=true default=$mvt_modif.amount}} + {{: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}}
-
- Matériel -
- {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$equipments default=$key_eqpmt_init}} - {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_modif.comment}} -
-
-

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

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/delete_sortie.html b/mouvements/sorties/delete_sortie.html deleted file mode 100644 index 37e316a..0000000 --- a/mouvements/sorties/delete_sortie.html +++ /dev/null @@ -1,87 +0,0 @@ -{{:admin_header title="Supprimer une sortie" current="module_equipment"}} - -{{* récupérer les infos du mouvement à supprimer et du matériel associé *}} -{{#load key=$_GET.key assign="mvt_suppr"}} -{{else}} - {{:error message="Aucune sortie avec la clé « %s »"|args:$_GET.key}} -{{/load}} - -{{:assign amount_suppr=$mvt_suppr.amount}} -{{:assign date_suppr=$mvt_suppr.date|date_short}} -{{:assign key_eqpmt_suppr=$mvt_suppr.equipment}} - -{{#load key=$key_eqpmt_suppr assign="eqpmt_suppr"}} -{{else}} - {{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_suppr}} -{{/load}} - -{{#form on="delete"}} - - {{* récupérer la config des entrées/sorties *}} - {{:include file="../../_get_config.html" keep="config"}} - - {{* déterminer s'il s'agit d'une sortie temporaire *}} - {{:assign temporaire=false}} - {{:assign var="output_nature" from="config.output_nature.%s"|args:$mvt_suppr.output_nature}} - - {{if $output_nature == 'temporaire'}} - {{:assign temporaire=true}} - {{/if}} - - {{* dans le cas d'une sortie temporaire, vérifier s'il est possible de la supprimer *}} - {{if $temporaire}} - {{:assign exterieur=0}} - {{#load - type="movement" - where="$$.equipment = :key" :key=$key_eqpmt_suppr - 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="./index.html?err=1&msg=suppression"}} - {{/if}} - {{/if}} - {{/load}} - {{/if}} - - {{* vérification réussie : supprimer la sortie *}} - {{:delete key=$_GET.key}} - {{:assign var="msg" value="suppression"}} - - {{* voir s'il reste des mouvements pour le matériel concerné par le mouvement supprimé *}} - {{#load type="movement" where="$$.equipment = :eqpmt_key" :eqpmt_key=$key_eqpmt_suppr}} - {{else}} - {{* supprimer le matériel *}} - {{:delete key=$key_eqpmt_suppr}} - {{:assign var="msg" value="%s - matériel"|args:$msg}} - {{/load}} - - {{:redirect force="./index.html?ok=1&msg=%s"|args:$msg}} -{{/form}} - -{{:delete_form - legend="Supprimer cette sortie ?" - warning="Supprimer la sortie « %s %s (%d) en date du %s » ?"|args:$mvt_suppr.output_nature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr - info="S'il ne reste aucun mouvement pour ce matériel, le matériel sera supprimé" -}} - -{{:form_errors}} - -{{:admin_footer}} diff --git a/mouvements/sorties/emprunte.html b/mouvements/sorties/emprunte.html index f574b23..e499426 100644 --- a/mouvements/sorties/emprunte.html +++ b/mouvements/sorties/emprunte.html @@ -1,6 +1,9 @@ {{* -*- brindille -*- *}} -{{:admin_header title="Sortie de matériel" current="module_equipment"}} +{{* + paramètres : + - key : clé du matériel à rendre +*}} {{if ! $dialog}} {{* barre de navigation *}} @@ -20,9 +23,7 @@ {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} {{* récupérer les infos du matériel *}} - {{#load type="equipment" key=$_POST.equipment assign="equipment"}} - {{:assign designation=$equipment.designation}} - {{:assign var="category_keys." value=$equipment.category}} + {{#load type="equipment" key=$_GET.key assign="equipment"}} {{/load}} {{:assign stock=0}} @@ -31,26 +32,15 @@ {{:assign insere=false}} {{* lister tous les mouvements du matériel *}} - {{#load type="movement" where="$$.equipment = '%s'"|args:$_POST.equipment assign="mvt" order="$$.date ASC"}} + {{#load type="movement" where="$$.equipment = '%s'"|args:$_GET.key assign="mvt" order="$$.date ASC"}} {{* traiter le nouveau mouvement *}} {{if ! $insere && $mvt.date > $_POST.date|parse_date}} - {{:assign var="operation" from="output_labels.%s|args:$_POST.type_operation}} - {{:assign var="type_mvt" from="config.output_nature.%s"|args:$operation}} - {{:assign dispo_old=$nonproprio}} - - {{if $type_mvt == 'définitif'}} - {{:assign stock="%d-%d"|math:$stock:$_POST.quantite}} - {{elseif $type_mvt == 'temporaire'}} - {{:assign exterieur="%d+%d"|math:$exterieur:$_POST.quantite}} - {{elseif $type_mvt == 'retour'}} - {{:assign nonproprio="%d-%d"|math:$nonproprio:$_POST.quantite}} - {{/if}} - {{:assign insere=true}} - {{:assign dispo="%d-%d"|math:$stock:$exterieur}} + {{:assign dispo_old=$nonproprio}} + {{:assign nonproprio="%d-%d"|math:$nonproprio:$_POST.quantite}} - {{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonproprio < 0}} + {{if $nonproprio < 0}} {{:assign date_err=$_POST.date|date:"d/m/Y"}} {{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo_old:$date_err}} {{/if}} @@ -79,14 +69,22 @@ {{/if}} {{:assign dispo="%d-%d"|math:$stock:$exterieur}} + {{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonproprio < 0}} {{:assign date_err=$mvt.date|date:"d/m/Y"}} - {{:error message="Erreur : la quantité indiquée (%s) est incompatible avec la sortie « %s : %s » à la date du %s"|args:$_POST.quantite:$designation:$mvt.amount:$date_err}} + {{:error message="Erreur : la quantité indiquée (%s) est incompatible avec la sortie de %s unités à la date du %s"|args:$_POST.quantite:$mvt.amount:$date_err}} {{/if}} {{/load}} + {{if ! $insere}} + {{:assign dispo_old=$nonproprio}} + {{:assign nonproprio="%d-%d"|math:$nonproprio:$_POST.quantite}} + {{if $nonproprio < 0}} + {{:assign date_err=$_POST.date|date:"d/m/Y"}} + {{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo_old:$date_err}} + {{/if}} + {{/if}} {{* Enregistrer le mouvement *}} - {{:assign mvt_key=""|uuid}} {{:assign var="operation" from="output_labels.%d|args:$_POST.type_operation}} {{:save @@ -100,34 +98,37 @@ date=$_POST.date|parse_date comment=$_POST.remarques|trim }} - {{:redirect force="index.html?ok=1&msg=sortie"}} -{{else}} - {{:form_errors}} + {{:redirect force="../../historique.html?ok=1&key=%s&prop=0&msg=sortie"|args:$_GET.key}} {{/form}} +{{:admin_header title="Sortie de matériel" current="module_equipment"}} +{{:form_errors}} + {{* Extraire et compiler les infos de la base *}} -{{:include file="../../_calcul_dispo.html" keep="cumul_mvt"}} +{{:include file="../../_calcul_dispo.html" keep="categories,equipments"}} +{{:assign var=present from="equipments.%s.nonproprio"|args:$_GET.key}} -{{if $cumul_mvt !== null}} - {{* calculer les quantité de matériels dont l'asso n'est pas propriétaire *}} - {{:include file="_temporaire.html" keep="temporaire"}} +{{if $present > 0}} + {{* déterminer le matériel concerné par le mouvement *}} + {{#load key=$_GET.key assign="equipment"}}{{/load}} + {{:assign var=cat_name from=categories.%s|args:$equipment.category}} - {{if $temporaire != null}} {{* formulaire de sortie de matériel *}}
+
+
+
Matériel : {{$equipment.designation}}
+
Catégorie : {{$cat_name}}
+
Quantité présente : {{$present}}
+
+

La quantité présente est celle à la date du jour

+
Ajouter une sortie d'un matériel présent temporairement
- {{:input type="select" name="type_operation" label="Type" required=true options=$output_labels}} + {{:input type="select" name="type_operation" label="Type" required=true options=$output_labels|sort}} {{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}} - {{:input type="number" name="quantite" label="Quantité" required=true default=1 min=1}} -
-
-
- Matériel -

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

-
- {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$temporaire onchange="fixerValeurMax('f_equipment', 'f_quantite')"}} + {{:input type="number" name="quantite" label="Quantité" required=true default=$present min=1 max=$present}} {{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
@@ -135,10 +136,6 @@ {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}

- {{else}} - {{:assign date_err=$now|date:'d/m/Y'}} -

Il n'y a aucun matériel présent temporairement à la date du {{$date_err}}

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

Il n'y a aucun matériel en stock

{{/if}} @@ -146,14 +143,16 @@ {{:admin_footer}} diff --git a/mouvements/sorties/index.html b/mouvements/sorties/index.html deleted file mode 100644 index 513dfc1..0000000 --- a/mouvements/sorties/index.html +++ /dev/null @@ -1,101 +0,0 @@ -{{:admin_header title="Gestion des matériels" current="module_equipment"}} - -{{* barre de navigation *}} -{{:include file="../../_nav.html" current="sorties"}} - -{{if $_GET.ok}} - {{if $_GET.msg|match:"suppression"}} - {{:assign msg="Sortie supprimée"}} - {{if $_GET.msg|match:"matériel"}} - {{:assign var="msg" value="%s - Matériel supprimé"|args:$msg}} - {{/if}} - {{elseif $_GET.msg == "sortie"}} - {{:assign msg="Sortie enregistrée"}} - {{elseif $_GET.msg == "modification"}} - {{:assign msg="Sortie modifiée"}} - {{/if}} -

{{$msg}}

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

Impossible de supprimer la sortie

- {{/if}} -{{/if}} - -{{* vérifier s'il existe des catégories *}} -{{#load type="category"}} - {{:assign categories_exist=true}} -{{else}} -

Il n'y a aucune catégorie : vous devez en ajouter.

-{{/load}} - -{{if $categories_exist}} - - {{* vérifier s'il y a eu des entrées de matériel *}} - {{#load type="equipment"}} - {{:assign disabled=false}} - {{else}} - {{:assign disabled=true}} - {{/load}} - - {{* vérifier s'il y a des entrées temporaires *}} - {{if ! $disabled}} - {{:include file="../../_calcul_dispo.html" keep="cumul_mvt"}} - {{:include file="_temporaire.html" keep="temporaire"}} - -
-
- Ajouter une sortie -
- {{:linkbutton label="Matériel en stock disponible" shape="plus" href="stock_disponible.html" target="_dialog"}} - {{if $temporaire != null}} - {{:linkbutton label="Matériel emprunté" shape="plus" href="emprunte.html" target="_dialog"}} - {{/if}} -
-
-
- {{/if}} - - {{* lister les sorties *}} -
-

Liste des sorties

- - {{#list - select=" - $$.date AS 'Date' ; - $$.output_nature AS 'Type' ; - $$.amount AS 'Nombre' ; - (SELECT $$.designation - FROM @TABLE AS b - WHERE b.key = @TABLE.$$.equipment) AS 'Matériel' ; - $$.comment AS 'Remarques'" - type="movement" - direction="output" - order=1}} - - {{:assign var='mvt_key' value=$key}} - - {{$date|date_short}} - {{$output_nature}} - {{$amount}} - {{$col4}} - {{$comment}} - - {{:linkbutton - label="Supprimer" - href="delete_sortie.html?key=%s"|args:$mvt_key - shape="delete" - target="_dialog"}} - {{:linkbutton - label="Modifier" - href="../modifier_mouvement.html?key=%s&direction=output"|args:$mvt_key - shape="edit" - target="_dialog"}} - - - {{else}} -

Il n'y a aucune sortie.

- {{/list}} -
-{{/if}} - -{{:admin_footer}} diff --git a/mouvements/sorties/stock_disponible.html b/mouvements/sorties/stock_disponible.html index 0f955d3..00199d5 100644 --- a/mouvements/sorties/stock_disponible.html +++ b/mouvements/sorties/stock_disponible.html @@ -1,6 +1,9 @@ {{* -*- brindille -*- *}} -{{:admin_header title="Sortie de matériel" current="module_equipment"}} +{{* + paramètres : + - key : clé du matériel à sortir +*}} {{if ! $dialog}} {{* barre de navigation *}} @@ -20,9 +23,7 @@ {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} {{* récupérer les infos du matériel *}} - {{#load type="equipment" key=$_POST.equipment assign="equipment"}} - {{:assign designation=$equipment.designation}} - {{:assign var="category_keys." value=$equipment.category}} + {{#load type="equipment" key=$_GET.key assign="equipment"}} {{/load}} {{:assign stock=0}} @@ -31,26 +32,23 @@ {{:assign insere=false}} {{* lister tous les mouvements du matériel *}} - {{#load type="movement" where="$$.equipment = '%s'"|args:$_POST.equipment assign="mvt" order="$$.date ASC"}} + {{#load type="movement" where="$$.equipment = '%s'"|args:$_GET.key assign="mvt" order="$$.date ASC"}} {{* traiter le nouveau mouvement *}} {{if ! $insere && $mvt.date > $_POST.date|parse_date}} + {{:assign insere=true}} + {{:assign dispo_old="%d-%d"|math:$stock:$exterieur}} {{:assign var="operation" from="output_labels.%s|args:$_POST.type_operation}} {{:assign var="type_mvt" from="config.output_nature.%s"|args:$operation}} - {{:assign dispo_old="%d-%d"|math:$stock:$exterieur}} {{if $type_mvt == 'définitif'}} {{:assign stock="%d-%d"|math:$stock:$_POST.quantite}} {{elseif $type_mvt == 'temporaire'}} {{:assign exterieur="%d+%d"|math:$exterieur:$_POST.quantite}} - {{elseif $type_mvt == 'retour'}} - {{:assign nonproprio="%d-%d"|math:$nonproprio:$_POST.quantite}} {{/if}} - {{:assign insere=true}} {{:assign dispo="%d-%d"|math:$stock:$exterieur}} - - {{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonproprio < 0}} + {{if $dispo < 0 || $stock < 0 || $exterieur < 0}} {{:assign date_err=$_POST.date|date:"d/m/Y"}} {{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo_old:$date_err}} {{/if}} @@ -79,14 +77,31 @@ {{/if}} {{:assign dispo="%d-%d"|math:$stock:$exterieur}} + {{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonproprio < 0}} {{:assign date_err=$mvt.date|date:"d/m/Y"}} - {{:error message="Erreur : la quantité indiquée (%s) est incompatible avec la sortie « %s : %s » à la date du %s"|args:$_POST.quantite:$designation:$mvt.amount:$date_err}} + {{:error message="Erreur : la quantité indiquée (%s) est incompatible avec la sortie de %s unités à la date du %s"|args:$_POST.quantite:$mvt.amount:$date_err}} {{/if}} {{/load}} + {{if ! $insere}} + {{:assign dispo_old="%d-%d"|math:$stock:$exterieur}} + {{:assign var="operation" from="output_labels.%s|args:$_POST.type_operation}} + {{:assign var="type_mvt" from="config.output_nature.%s"|args:$operation}} + + {{if $type_mvt == 'définitif'}} + {{:assign stock="%d-%d"|math:$stock:$_POST.quantite}} + {{elseif $type_mvt == 'temporaire'}} + {{:assign exterieur="%d+%d"|math:$exterieur:$_POST.quantite}} + {{/if}} + + {{:assign dispo="%d-%d"|math:$stock:$exterieur}} + {{if $dispo < 0 || $stock < 0 || $exterieur < 0}} + {{:assign date_err=$_POST.date|date:"d/m/Y"}} + {{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo_old:$date_err}} + {{/if}} + {{/if}} {{* Enregistrer le mouvement *}} - {{:assign mvt_key=""|uuid}} {{:assign var="operation" from="output_labels.%d|args:$_POST.type_operation}} {{:save @@ -100,70 +115,64 @@ date=$_POST.date|parse_date comment=$_POST.remarques|trim }} - {{:redirect force="index.html?ok=1&msg=sortie"}} -{{else}} - {{:form_errors}} + {{:redirect force="../../historique.html?ok=1&key=%s&prop=1&msg=sortie"|args:$_GET.key}} {{/form}} +{{:admin_header title="Sortie de matériel" current="module_equipment"}} +{{:form_errors}} + {{* Extraire et compiler les infos de la base *}} -{{:include file="../../_calcul_dispo.html" keep="cumul_mvt"}} +{{:include file="../../_calcul_dispo.html" keep="categories,equipments"}} +{{:assign var=stock from="equipments.%s.stock"|args:$_GET.key}} +{{:assign var=exterieur from="equipments.%s.exterieur"|args:$_GET.key}} +{{:assign dispo="%d-%d"|math:$stock:$exterieur}} -{{if $cumul_mvt !== null}} - {{* calculer les disponibilités *}} - {{#foreach from=$cumul_mvt key="cat_key" item="cat_elem"}} - {{#foreach from=$cat_elem.eqpmt key="eqpmt_key" item="eqpmt"}} - {{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}} - {{if $dispo != 0}} - {{:assign - var="disponibilites.%s.%s"|args:$cat_elem.name:$eqpmt_key - value="%s (dispo : %d)"|args:$eqpmt.designation:$dispo - }} - {{/if}} - {{/foreach}} - {{/foreach}} +{{if $dispo > 0}} - {{if $disponibilites != null}} - {{* formulaire de sortie de matériel *}} -
-
- Ajouter une sortie d'un matériel disponible en stock -
- {{:input type="select" name="type_operation" label="Type" required=true options=$output_labels}} + {{* déterminer le matériel concerné par le mouvement *}} + {{#load key=$_GET.key assign="equipment"}}{{/load}} + {{:assign var=cat_name from=categories.%s|args:$equipment.category}} + + {{* formulaire de sortie de matériel *}} + +
+
+
Matériel : {{$equipment.designation}}
+
Catégorie : {{$cat_name}}
+
Quantité disponible : {{$dispo}}
+
+

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

+
+
+ Ajouter une sortie +
+ {{:input type="select" name="type_operation" label="Type" required=true options=$output_labels|sort}} {{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}} - {{:input type="number" name="quantite" label="Quantité" required=true default=1 min=1}} -
-
-
- 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="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}} -
-
-

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

- - {{else}} - {{:assign date_err=$now|date:'d/m/Y'}} -

Il n'y a aucun matériel disponible à la date du {{$date_err}}

- {{/if}} + {{:input type="number" name="quantite" label="Quantité" required=true default=$dispo min=1 max=$dispo}} + {{: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 aucun matériel en stock

+

Il y a 0 unité de ce matériel disponible à la date du {{$now|date_short}}

{{/if}} {{:admin_footer}} diff --git a/mouvements/supprimer_mouvement.html b/mouvements/supprimer_mouvement.html new file mode 100644 index 0000000..fe30d9f --- /dev/null +++ b/mouvements/supprimer_mouvement.html @@ -0,0 +1,135 @@ +{{* -*- brindille -*-}} + +{{* + paramètres GET : + - key : clé du mouvement à supprimer + - prop : = 1 si matériel propriété de l'asso +*}} + +{{: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}} + +{{#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}} + +{{:admin_header title="Supprimer une %s"|args:$libelle current="module_equipment"}} +{{:form_errors}} + +{{: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é" +}} + + +{{:admin_footer}} diff --git a/mouvements/valider_modification.html b/mouvements/valider_modification.html index c2b87e1..950dad2 100644 --- a/mouvements/valider_modification.html +++ b/mouvements/valider_modification.html @@ -2,8 +2,7 @@ Vérifier la cohérence des E/S d'un matériel - paramètres : - - movements : liste de mouvements - - eqpmt_key : clé du matériel à vérifier + - movements : liste de mouvements d'un matériel *}} {{* récupérer la config des entrées/sorties *}} @@ -13,33 +12,33 @@ {{:assign stock=0}} {{:assign exterieur=0}} {{:assign nonprop=0}} + {{#foreach from=$movements item="mvt"}} {{* 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 $mvt.equipment == $eqpmt_key}} - {{if $mvt.direction == 'input'}} - {{if $type_mvt == 'définitif'}} - {{:assign stock="%d+%d"|math:$stock:$mvt.amount}} - {{elseif $type_mvt == 'retour'}} - {{:assign exterieur="%d-%d"|math:$exterieur:$mvt.amount}} - {{elseif $type_mvt == 'temporaire'}} - {{:assign nonprop="%d+%d"|math:$nonprop:$mvt.amount}} - {{/if}} - {{elseif $mvt.direction == 'output'}} - {{if $type_mvt == 'définitif'}} - {{:assign stock="%d-%d"|math:$stock:$mvt.amount}} - {{elseif $type_mvt == 'temporaire'}} - {{:assign exterieur="%d+%d"|math:$exterieur:$mvt.amount}} - {{elseif $type_mvt == 'retour'}} - {{:assign nonprop="%d-%d"|math:$nonprop:$mvt.amount}} - {{/if}} + {{if $mvt.direction == 'input'}} + {{if $type_mvt == 'définitif'}} + {{:assign stock="%d+%d"|math:$stock:$mvt.amount}} + {{elseif $type_mvt == 'retour'}} + {{:assign exterieur="%d-%d"|math:$exterieur:$mvt.amount}} + {{elseif $type_mvt == 'temporaire'}} + {{:assign nonprop="%d+%d"|math:$nonprop:$mvt.amount}} {{/if}} - {{:assign dispo="%d-%d"|math:$stock:$exterieur}} - {{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonprop < 0}} - {{:assign erreur=true}} - {{:break}} + {{elseif $mvt.direction == 'output'}} + {{if $type_mvt == 'définitif'}} + {{:assign stock="%d-%d"|math:$stock:$mvt.amount}} + {{elseif $type_mvt == 'temporaire'}} + {{:assign exterieur="%d+%d"|math:$exterieur:$mvt.amount}} + {{elseif $type_mvt == 'retour'}} + {{:assign nonprop="%d-%d"|math:$nonprop:$mvt.amount}} {{/if}} {{/if}} + + {{:assign dispo="%d-%d"|math:$stock:$exterieur}} + {{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonprop < 0}} + {{:assign erreur=true}} + {{:break}} + {{/if}} {{/foreach}}