diff --git a/README.md b/README.md index 591a199..d6e356b 100644 --- a/README.md +++ b/README.md @@ -3,23 +3,16 @@ Ce module permet de gérer les matériels de l'association: stock, entrées, sorties, classés par catégorie. -Un matériel peut entrer dans l'association : -- temporairement (location, emprunt, ...) -- définitivement (achat, ...) - -Dans les deux cas, il est possible de lui associer une écriture de la -compta ou un fichier. +Un matériel peut entrer temporairement (location, emprunt, ...) ou +définitivement dans l'association (achat, ...). Un matériel appartenant à l'association peut sortir : - temporairement (prêt, ...) : il est possible de lui associer un lieu - de stockage ainsi qu'un membre dépositaire du matériel et une date - de retour ; il peut ensuite revenir dans l'association. + de stockage ainsi qu'un membre dépositaire du matériel ; il peut + ensuite revenir dans l'association. - définitivement (vente, ...) : il est possible de lui associer un membre bénéficiaire du matériel. -Il est possible de suivre les matériels prêtés ou loués et de savoir -si la date de retour est proche ou dépassée. - Un matériel présent temporairement dans l'association peut être retourné à son propriétaire. diff --git a/_get_config.html b/_get_config.html index 0ebc002..8f36df8 100644 --- a/_get_config.html +++ b/_get_config.html @@ -1,8 +1,9 @@ {{* -*- brindille -*- *}} {{* - Récupérer la config - résultat : config_defaut, directions, config.input_nature et config.output_nature + Récupérer soit la config enregistrée, soit la config par défaut + @param : default = true si config par défaut + résultat : config.input_nature et config.output_nature *}} {{* config par défaut *}} @@ -14,15 +15,17 @@ {{#foreach from=$directions key="direction"}} {{:assign var="nature" from="module.config.%s_nature"|args:$direction}} - {{if $nature != null}} + {{if $nature != null && ! $default}} {{#foreach from=$nature item="elem"}} - {{:assign var="config.%s_nature.%s"|args:$direction:$key value=$elem}} + {{:assign var="item" label=$label type=$type}} + {{:assign var="config.%s_nature.%s"|args:$direction:$key value=$item}} {{/foreach}} {{else}} {{* pas de config enregistrée : utiliser la config par défaut *}} {{:assign var="nature" from="config_defaut.%ss"|args:$direction}} {{#foreach from=$nature item="elem"}} - {{:assign var="config.%s_nature.%s"|args:$direction:$key value=$elem}} + {{:assign var="item" label=$label type=$type}} + {{:assign var="config.%s_nature.%s"|args:$direction:$key value=$item}} {{/foreach}} {{/if}} {{/foreach}} diff --git a/_inventory.html b/_inventory.html index ce8cffc..326070c 100644 --- a/_inventory.html +++ b/_inventory.html @@ -1,65 +1,18 @@ {{* -*- brindille -*- *}} {{* - Inventaire des matériels en stock dans l'association + inventaire des entrées/sorties des matériels permanents *}} -{{* filtrer selon la catégorie *}} -{{:assign saved_filters=$module.config.filters}} -{{:assign var="user_filters" from="saved_filters.%s"|args:$logged_user.id}} - -{{if $_GET.cat_key == null}} - {{:assign selected_category=$user_filters.stock_cat_key}} -{{else}} - {{if $_GET.cat_key == -1}} - {{:assign selected_category=null}} - {{else}} - {{:assign selected_category=$_GET.cat_key}} - {{/if}} - {{:assign var="user_filters.stock_cat_key" value=$selected_category}} - {{:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters}} - {{:save key="config" filters=$saved_filters}} -{{/if}} - -{{* condition de filtrage *}} -{{if $selected_category != null}} - {{:assign cat_key=$selected_category|quote_sql}} - {{:assign cat_condition="$$.category = %s"|args:$cat_key}} -{{else}} - {{:assign cat_condition="1"}} -{{/if}} - -{{* filtrer selon appartenance *}} -{{if $_GET.prop == null}} - {{:assign selected_prop=$user_filters.stock_prop}} -{{else}} - {{if $_GET.prop == -1}} - {{:assign selected_prop=null}} - {{else}} - {{:assign selected_prop=$_GET.prop}} - {{/if}} - {{:assign var="user_filters.stock_prop" value=$selected_prop}} - {{:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters}} - {{:save key="config" filters=$saved_filters}} -{{/if}} - -{{if $selected_prop == null}} - {{:assign prop_condition="1"}} -{{elseif $selected_prop == 1}} - {{:assign prop_condition="$$.stock NOT NULL"}} -{{else}} - {{:assign prop_condition="$$.notowned != 0"}} -{{/if}} - -{{* sélecteurs de catégorie et d'appartenance *}} -{{:assign var="cat_options." value="" label="Toutes les catégories" href="?cat_key=-1"}} +{{* Sélecteur catégories *}} +{{:assign var="options." value="" label="Toutes les catégories" href="?prop=1"}} {{#load type="category" order="$$.name"}} {{:assign var="categories.%s"|args:$key value=$name}} {{:assign - var="cat_options." + var="options." value=$key label=$name - href="?cat_key=%s"|args:$key + href="?cat_key=%s&prop=1"|args:$key }} {{/load}} @@ -67,28 +20,23 @@ Filtrer par catégorie {{:dropdown title="Filtrer par catégorie" - options=$cat_options - value="%s"|args:$selected_category - }} - - -{{:assign var="prop_options." value="" label="Tous les matériels" href="?prop=-1"}} -{{:assign var="prop_options." value="1" label="Matériels propriété de l'association" href="?prop=1"}} -{{:assign var="prop_options." value="0" label="Matériels NON propriété de l'association" href="?prop=0"}} - -
- Filtrer par appartenance - {{:dropdown - title="Filtrer par appartenance" - options=$prop_options - value="%s"|args:$selected_prop + options=$options + value="%s"|args:$_GET.cat_key }}
-

Inventaire des matériels présents dans l'association

+

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

+{{* filtrer selon la catégorie *}} +{{if $_GET.cat_key == null}} + {{:assign condition="1"}} +{{else}} + {{:assign cat_key=$_GET.cat_key|quote_sql}} + {{:assign condition="$$.category = %s"|args:$cat_key}} +{{/if}} + {{#list select=" $$.name AS 'Matériel' ; @@ -96,34 +44,33 @@ FROM @TABLE as cat WHERE cat.key = @TABLE.$$.category) AS 'Catégorie' ; $$.stock AS 'Stock' ; - (SELECT COALESCE($$.notowned, 0)) AS 'Temp' ; - (SELECT $$.stock + COALESCE($$.notowned, 0)) AS 'Total' ; $$.out AS 'Sorti' ; (SELECT $$.stock - $$.out) AS 'Disponible' " type="equipment" - where="$$.status <> 'archived' AND %s AND %s"|args:$cat_condition:$prop_condition + where="$$.status <> 'archived' AND $$.stock NOT NULL AND %s"|args:$condition order=1 }} {{:assign var=cat_name from=categories.%s|args:$category}} - {{if $selected_prop == null}} - {{:assign prop=""}} - {{else}} - {{:assign prop="&prop=%s"|args:$selected_prop}} - {{/if}} - {{:link href="equipment_history.html?key=%s&prop=%s"|args:$key:$selected_prop label=$name}} + {{:link href="equipment_history.html?key=%s&prop=1"|args:$key" label=$name}} {{$cat_name}} {{$stock}} - {{$col4}} - {{$col5}} {{$out}} - {{$col7}} + {{$col5}} - {{:linkbutton - label="Mouvements" - href="equipment_history.html?key=%s&prop=1"|args:$key - shape="table"}} + {{if $col5 > 0}} + {{:linkbutton + label="Sortie" + shape="minus" + href="movements/output_equipment.html?key=%s"|args:$key + target="_dialog"}} + {{/if}} + {{:linkbutton + label="Entrée" + shape="plus" + href="movements/input_equipment.html?key=%s"|args:$key + target="_dialog"}} {{:linkbutton label="Modifier" href="modify_equipment.html?key=%s&prop=1"|args:$key @@ -137,10 +84,7 @@ diff --git a/_nav.html b/_nav.html index c615e3d..4e69986 100644 --- a/_nav.html +++ b/_nav.html @@ -3,72 +3,57 @@ diff --git a/_temp_inventory.html b/_temp_inventory.html index d4b29d4..f1fd997 100644 --- a/_temp_inventory.html +++ b/_temp_inventory.html @@ -4,34 +4,12 @@ inventaire des entrées/sorties des matériels temporaires *}} -{{* filtrer selon la catégorie *}} -{{if $_GET.cat_key == null}} - {{:assign selected_category=$module.config.temp_cat_key}} - {{if $module.config.temp_cat_key != null}} - {{:assign cat_key=$selected_category|quote_sql}} - {{/if}} -{{elseif $_GET.cat_key == -1}} - {{:assign selected_category=null}} - {{:save key="config" temp_cat_key=null}} -{{else}} - {{:assign selected_category=$_GET.cat_key}} - {{:assign cat_key=$selected_category|quote_sql}} - {{:save key="config" temp_cat_key=$selected_category}} -{{/if}} - -{{* condition de filtrage *}} -{{if $selected_category != null}} - {{:assign cat_condition="$$.category = %s"|args:$cat_key}} -{{else}} - {{:assign cat_condition="1"}} -{{/if}} - {{* Sélecteur catégories *}} -{{:assign var="cat_options." value="" label="Toutes les catégories" href="?cat_key=-1&prop=0"}} +{{:assign var="options." value="" label="Toutes les catégories" href="?prop=0"}} {{#load type="category" order="$$.name"}} {{:assign var="categories.%s"|args:$key value=$name}} {{:assign - var="cat_options." + var="options." value=$key label=$name href="?cat_key=%s&prop=0"|args:$key @@ -42,8 +20,8 @@ Filtrer par catégorie {{:dropdown title="Filtrer par catégorie" - options=$cat_options - value="%s"|args:$selected_category + options=$options + value="%s"|args:$_GET.cat_key }} @@ -51,6 +29,14 @@

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

+{{* filtrer selon la catégorie *}} +{{if $_GET.cat_key == null}} + {{:assign condition="1"}} +{{else}} + {{:assign cat_key=$_GET.cat_key|quote_sql}} + {{:assign condition="$$.category = %s"|args:$cat_key}} +{{/if}} + {{#list select=" $$.name AS 'Matériel' ; @@ -60,7 +46,7 @@ $$.notowned AS 'Quantité' " type="equipment" - where="$$.status <> 'archived' AND $$.notowned != 0 AND %s"|args:$cat_condition + where="$$.status <> 'archived' AND $$.notowned != 0 AND %s"|args:$condition order=1 }} {{:assign var=cat_name from=categories.%s|args:$category}} @@ -74,10 +60,6 @@ shape="plus" href="movements/input_equipment.html?key=%s"|args:$key target="_dialog"}} - {{:linkbutton - label="Historique" - href="equipment_history.html?key=%s&prop=0"|args:$key - shape="table"}} {{:linkbutton label="Modifier" href="modify_equipment.html?key=%s&prop=0"|args:$key diff --git a/archives.html b/archives.html index 5525aab..087ac1c 100644 --- a/archives.html +++ b/archives.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{:admin_header title="Matériels archivés" current="module_equipment"}} {{:include file="_nav.html" current="archives"}} @@ -9,30 +7,11 @@

Matériel remis en service

{{/if}} -{{* filtrer selon la catégorie *}} -{{if $_GET.cat_key == null}} - {{:assign selected_category=$module.config.archive_cat_key}} -{{elseif $_GET.cat_key == -1}} - {{:assign selected_category=null}} - {{:save key="config" archive_cat_key=null}} -{{else}} - {{:assign selected_category=$_GET.cat_key}} - {{:save key="config" archive_cat_key=$selected_category}} -{{/if}} - -{{* condition de filtrage *}} -{{if $selected_category == null}} - {{:assign cat_condition="1"}} -{{else}} - {{:assign cat_key=$selected_category|quote_sql}} - {{:assign cat_condition="$$.category == %s"|args:$cat_key}} -{{/if}} - {{* Sélecteur catégories *}} -{{:assign var="cat_options." value="" label="Toutes les catégories" href="?cat_key=-1"}} +{{:assign var="options." value="" label="Toutes les catégories" href="?prop=1"}} {{#load type="category" order="$$.name"}} {{:assign - var="cat_options." + var="options." value=$key label=$name href="?cat_key=%s"|args:$key @@ -43,14 +22,18 @@ Filtrer par catégorie {{:dropdown title="Filtrer par catégorie" - options=$cat_options - value="%s"|args:$selected_category + options=$options + value="%s"|args:$_GET.cat_key }} -
-

Matériels qui ne sont plus dans l'association

-
+{{* filtrer selon la catégorie *}} +{{if $_GET.cat_key == null}} + {{:assign condition="1"}} +{{else}} + {{:assign cat_key=$_GET.cat_key|quote_sql}} + {{:assign condition="$$.category == %s"|args:$cat_key}} +{{/if}} {{* Liste des matériels archivés *}} {{#list @@ -61,16 +44,16 @@ WHERE cat.key = @TABLE.$$.category) AS "Catégorie" " type="equipment" - where="$$.status='archived' AND %s"|args:$cat_condition + where="$$.status='archived' AND %s"|args:$condition order=1 }} - {{:link href="equipment_history.html?key=%s&prop=1¤t=archives"|args:$key label=$name}} + {{$name}} {{$col2}} {{:linkbutton - label="Mouvements" + label="Historique" href="equipment_history.html?key=%s&prop=1¤t=archives"|args:$key shape="table"}} {{:linkbutton diff --git a/categories/add_category.html b/categories/add_category.html index 0fe45c8..20691ae 100644 --- a/categories/add_category.html +++ b/categories/add_category.html @@ -1,6 +1,9 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="../_nav.html" current="config" subcurrent="categories"}} +{{/if}} {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} @@ -22,11 +25,6 @@ {{/form}} {{:admin_header title="Gestion des matériels" current="module_equipment"}} -{{* barre de navigation *}} -{{if ! $dialog}} - {{:include file="../_nav.html" current="config" subcurrent="categories"}} -{{/if}} - {{:form_errors}} {{* formulaire d'ajout de catégorie *}} diff --git a/categories/delete_category.html b/categories/delete_category.html index 7838f41..203bb60 100644 --- a/categories/delete_category.html +++ b/categories/delete_category.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{#load key=$_GET.key assign="category"}} {{else}} {{:error message="Catégorie introuvable"}} @@ -9,7 +7,7 @@ {{#form on="delete"}} {{* Vérifier s'il reste des matériels dans cette catégorie *}} - {{#load type="equipment" category=$_GET.key limit="1"}} + {{#load type="equipment" category=$_GET.key assign="equipment"}} {{:redirect force="./index.html?err=1&msg=suppression"}} {{else}} {{* supprimer la catégorie sélectionnée*}} diff --git a/categories/index.html b/categories/index.html index d021953..aac2a00 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{:admin_header title="Configuration" current="module_equipment"}} {{* barre de navigation *}} @@ -29,17 +27,15 @@ {{: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 limit=1}} + {{#load type="equipment" where="$$.category = :category_key" :category_key=$category_key}} {{else}} {{:assign materiel_present=false}} {{/load}} {{$name}} - {{if ! $materiel_present}} - {{:linkbutton label="Supprimer" href="delete_category.html?key=%s"|args:$key shape="delete" target="_dialog"}} - {{/if}} {{: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"}} {{else}} diff --git a/categories/modify_category.html b/categories/modify_category.html index 0819a78..9d2d315 100644 --- a/categories/modify_category.html +++ b/categories/modify_category.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{#load key=$_GET.key assign="category"}} {{else}} {{:error message="Catégorie introuvable"}} diff --git a/config.html b/config.html index f4bab4a..d7661ab 100644 --- a/config.html +++ b/config.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{:admin_header title="Configuration" current="module_equipment"}} {{* barre de navigation *}} @@ -11,22 +9,15 @@

Configuration enregistrée.

{{/if}} -{{* lecture config *}} -{{:include file="./_get_config.html" keep="config_defaut, config, directions"}} - -{{* interdire la modification et la suppression des types de mouvement prédéfinis *}} -{{#foreach from=$directions key="direction"}} - {{:assign var="nature" from="config_defaut.%ss"|args:$direction}} - {{#foreach from=$nature item="elem"}} - {{:assign var="default_keys." value=$key}} - {{/foreach}} -{{/foreach}} +{{* lecture config (défaut ou enregistrée) *}} +{{:include file="./_get_config.html" keep="config, directions"}} {{#foreach from=$directions key="direction" item="item"}} {{* types de mouvements qui ne peuvent être supprimés *}} {{#load type="movement" where="$$.direction='%s'"|args:$direction group="$$.operation"}} - {{:assign var="locked." value=$operation}} + {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} + {{:assign var="locked_%ss."|args:$direction value=$op_label}} {{/load}}

{{$item|ucfirst}}s

@@ -41,23 +32,15 @@ {{:assign var="nature" from="config.%s_nature"|args:$direction}} {{#foreach from=$nature key=key}} - {{:assign sortie_temp=false}} - {{if $direction == 'output'}} - {{:assign var="type" from="nature.%s.type"|args:$key}} - {{if $type == 'temporaire'}} - {{:assign sortie_temp=true}} - {{/if}} - {{/if}} {{$label}} {{$type}} - {{if ! $default_keys|has:$key && ! $locked|has:$key}} + {{:assign var="locked" from="locked_%ss"|args:$direction}} + {{if ! $locked|has:$label}} {{:linkbutton label="Supprimer" shape="delete" href="config/delete_movement_type.html?dir=%s&op_key=%s"|args:$direction:$key target="_dialog"}} {{/if}} - {{if ! $default_keys|has:$key || $sortie_temp}} {{:linkbutton label="Modifier" shape="edit" href="config/modify_movement_type.html?dir=%s&op_key=%s"|args:$direction:$key target="_dialog"}} - {{/if}} {{/foreach}} diff --git a/config.schema.json b/config.schema.json index 1f9213c..8395b2f 100644 --- a/config.schema.json +++ b/config.schema.json @@ -36,11 +36,6 @@ "type" : { "type" : "string", "enum" : ["définitif", "temporaire", "retour"] - }, - "fee" : { - "description" : "tarif sortie temporaire", - "type" : ["string", "null"], - "enum" : ["gratuit", "payant"] } } } diff --git a/config/add_movement_type.html b/config/add_movement_type.html index ecf6866..bb7d64b 100644 --- a/config/add_movement_type.html +++ b/config/add_movement_type.html @@ -1,39 +1,32 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* paramètres : - dir : input ou output *}} -{{* Traiter l'envoi du formulaire *}} - -{{* lecture config *}} -{{:include file="../_get_config.html" keep="config, directions, config_defaut"}} - -{{if ! $directions|has_key:$_GET.dir}} - {{:error message="Direction « %s » inconnue !"|args:$_GET.dir}} +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="../_nav.html" current="config" subcurrent="typesES"}} {{/if}} -{{#form on="save"}} - {{if $_POST.output_fields.type == "temporaire"}} - {{* vérifier si le tarif a été choisi *}} - {{if $_POST.tarif == null}} - {{:error message="Vous n'avez pas choisi le tarif"}} - {{/if}} - {{/if}} +{{* Traiter l'envoi du formulaire *}} - {{* vérifier s'il existe un libellé de même nom dans la même direction *}} +{{* lecture config par défaut *}} +{{:include file="../_get_config.html" keep="config, directions" default=true}} + +{{#form on="save"}} + {{* vérifier s'il existe un type de mouvement de même nom *}} {{#foreach from=$directions key="direction"}} {{:assign var="nature" from="config.%s_nature"|args:$direction}} - {{#foreach from=$nature key="key" item="elem"}} + {{#foreach from=$nature key="key"}} {{:assign var="fields" from="_POST.%s_fields"|args:$_GET.dir}} - {{if $_GET.dir == $direction && $fields.label|trim|tolower == $elem.label|trim|tolower}} - {{:error message="Le libellé « %s » est déjà présent"|args:$fields.label}} + {{if $label|trim|tolower == $fields.label|trim|tolower}} + {{:error message="Ce libellé est déjà présent"}} {{/if}} - {{:assign var="%s_nature"|args:$direction value=$elem}} {{:assign var="%s_nature.key"|args:$direction value=$key}} + {{:assign var="%s_nature.label"|args:$direction value=$label}} + {{:assign var="%s_nature.type"|args:$direction value=$type}} {{:assign var="%s_natures."|args:$direction from="%s_nature"|args:$direction}} {{/foreach}} @@ -44,15 +37,9 @@ {{:assign var="%s_nature.key"|args:$direction value=""|uuid}} {{:assign var="%s_nature.label"|args:$direction value=$newlabel}} {{:assign var="%s_nature.type"|args:$direction from="_POST.%s_fields.type"|args:$direction}} - {{if $_POST.output_fields != null}} - {{if $_POST.output_fields.type == "temporaire"}} - {{:assign var="output_nature.fee" value=$_POST.tarif}} - {{else}} - {{:assign var="output_nature.fee" value=null}} - {{/if}} - {{/if}} {{:assign var="%s_natures."|args:$direction from="%s_nature"|args:$direction}} {{/if}} + {{/foreach}} {{:save @@ -65,16 +52,11 @@ {{/form}} {{:admin_header title="Gestion des matériels" current="module_equipment"}} -{{* barre de navigation *}} -{{if ! $dialog}} - {{:include file="../_nav.html" current="config" subcurrent="typesES"}} -{{/if}} - {{:form_errors}} {{if $_GET.dir == 'input'}} {{* types d'entrées *}} - {{#foreach from=$config_defaut.inputs}} + {{#foreach from=$config.input_nature}} {{:assign var='input_types.%s'|args:$type value=$type}} {{/foreach}}
@@ -113,7 +95,7 @@
{{else}} {{* types de sorties *}} - {{#foreach from=$config_defaut.outputs}} + {{#foreach from=$config.output_nature}} {{:assign var='output_types.%s'|args:$type value=$type}} {{/foreach}} @@ -121,63 +103,34 @@
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]" + + {{: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}} -
- {{:input type="radio-btn" name="tarif" value="gratuit" label="Gratuit" required=true prefix_title="Tarification"}} - {{:input type="radio-btn" name="tarif" value="payant" label="Payant" required=true}} -
+

Signification du type de sortie

-
-

Tarification

- -

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

{{/if}} - - diff --git a/config/delete_movement_type.html b/config/delete_movement_type.html index 801f821..9e889ab 100644 --- a/config/delete_movement_type.html +++ b/config/delete_movement_type.html @@ -1,37 +1,27 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* paramètres : - dir : input ou output - op_key : clé du type de mouvement à supprimer *}} +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="../_nav.html" current="config" subcurrent="typesES"}} +{{/if}} {{* lecture config (défaut ou enregistrée) *}} -{{:include file="../_get_config.html" keep="config_defaut, config, directions"}} - -{{if ! $directions|has_key:$_GET.dir}} - {{:error message="Direction « %s » inconnue !"|args:$_GET.dir}} -{{/if}} - -{{* interdire la suppression des types de mouvement prédéfinis *}} -{{:assign var="nature" from="config_defaut.%ss"|args:$_GET.dir}} -{{#foreach from=$nature item="elem"}} - {{:assign var="default_keys." value=$key}} -{{/foreach}} -{{if $default_keys|has:$_GET.op_key}} - {{:error message="Ce type de mouvement ne peut être supprimé"}} -{{/if}} +{{:include file="../_get_config.html" keep="config, directions"}} {{#form on="delete"}} {{#foreach from=$directions key="direction"}} {{:assign var="nature" from="config.%s_nature"|args:$direction}} - {{#foreach from=$nature key="key" item="elem"}} + {{#foreach from=$nature key="key"}} {{if $_GET.dir == $direction && $key != $_GET.op_key || $_GET.dir != $direction}} - {{:assign var="%s_nature"|args:$direction value=$elem}} {{:assign var="%s_nature.key"|args:$direction value=$key}} + {{:assign var="%s_nature.label"|args:$direction value=$label}} + {{:assign var="%s_nature.type"|args:$direction value=$type}} {{:assign var="%s_natures."|args:$direction from="%s_nature"|args:$direction}} {{/if}} {{/foreach}} @@ -47,10 +37,6 @@ {{/form}} {{:admin_header title="Gestion des matériels" current="module_equipment"}} -{{* barre de navigation *}} -{{if ! $dialog}} - {{:include file="../_nav.html" current="config" subcurrent="typesES"}} -{{/if}} {{:form_errors}} {{:assign var="mvt_label" from="config.%s_nature.%s.label"|args:$_GET.dir:$_GET.op_key}} diff --git a/config/misc.html b/config/misc.html deleted file mode 100644 index 7034c04..0000000 --- a/config/misc.html +++ /dev/null @@ -1,40 +0,0 @@ -{{* -*- brindille -*- *}} - -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - -{{#form on="save"}} - {{* vérifier la validité de la durée saisie *}} - {{if $_POST.loan_duration < 0}} - {{:error message="Durée (%s) erronée ; doit être >= 0"|args:$_POST.loan_duration}} - {{/if}} - - {{:save - key="config" - loan_duration=$_POST.loan_duration - }} - -{{/form}} - -{{:admin_header title="Configuration" current="module_equipment"}} -{{:include file="../_nav.html" current="config" subcurrent="divers"}} -{{:form_errors}} - -{{if $_GET.ok}} -

Configuration enregistrée.

-{{/if}} - -{{* lecture config *}} -{{:include file="../_get_config.html" keep="loan_duration"}} - -
-
- Autres paramètres -
- {{:input type="number" name="loan_duration" label="Durée de prêt par défaut" min=0 default=$module.config.loan_duration help="Durée en nombre de jours ; mettre 0 pour supprimer la durée par défaut"}} -
-
-

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

-
-{{:admin_footer}} diff --git a/config/modify_movement_type.html b/config/modify_movement_type.html index 0f7a9f7..b5210c3 100644 --- a/config/modify_movement_type.html +++ b/config/modify_movement_type.html @@ -1,42 +1,34 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* paramètres : - dir : input ou output - - op_key : clé du type de mouvement dont on veut modifier le libellé ou le tarif + - op_key : clé du type de mouvement dont on veut modifier le libellé *}} +{{* barre de navigation *}} +{{if ! $dialog}} + {{:include file="../_nav.html" current="config" subcurrent="typesES"}} +{{/if}} + {{* lecture config (défaut ou enregistrée) *}} -{{:include file="../_get_config.html" keep="config_defaut, config, directions"}} +{{:include file="../_get_config.html" keep="config, directions"}} {{#form on="save"}} - {{if $_POST.tarif == null && $_POST.name == null}} - {{:redirect to="./config.html"}} - {{/if}} {{#foreach from=$directions key="direction"}} {{:assign var="nature" from="config.%s_nature"|args:$direction}} - {{#foreach from=$nature key="key" item="elem"}} - {{if $_POST.name == null}} - {{:assign label=$elem.label}} - {{else}} - {{if $_GET.dir == $direction && $key != $_GET.op_key && - $_POST.name|trim|tolower == $elem.label|trim|tolower}} - {{:error message="Le libellé « %s » est déjà présent"|args:$_POST.name}} - {{/if}} - {{if $_GET.dir == $direction && $key == $_GET.op_key}} - {{:assign label=$_POST.name|trim}} - {{else}} - {{:assign label=$elem.label}} - {{/if}} - {{/if}} - {{:assign var="%s_nature"|args:$direction value=$elem}} - {{:assign var="%s_nature.label"|args:$direction value=$label}} + {{#foreach from=$nature key="key"}} {{:assign var="%s_nature.key"|args:$direction value=$key}} - {{if $_POST.tarif != null && $key == $_GET.op_key}} - {{:assign var="%s_nature.fee"|args:$direction value=$_POST.tarif}} + {{if $_GET.dir == $direction}} + {{if $key == $_GET.op_key}} + {{:assign var="%s_nature.label"|args:$direction value=$_POST.name|trim}} + {{else}} + {{:assign var="%s_nature.label"|args:$direction value=$label}} + {{/if}} + {{else}} + {{:assign var="%s_nature.label"|args:$direction value=$label}} {{/if}} + {{:assign var="%s_nature.type"|args:$direction value=$type}} {{:assign var="%s_natures."|args:$direction from="%s_nature"|args:$direction}} {{/foreach}} {{/foreach}} @@ -51,71 +43,14 @@ {{/form}} {{:admin_header title="Gestion des matériels" current="module_equipment"}} -{{if ! $dialog}} - {{:include file="../_nav.html" current="config" subcurrent="typesES"}} -{{/if}} {{:form_errors}} - -{{* vérifier que $_GET.dir est bien une direction connue *}} -{{if ! $directions|has_key:$_GET.dir}} - {{:error message="Direction « %s » inconnue !"|args:$_GET.dir}} -{{/if}} - -{{* vérifier que $_GET.op_key est bien dans la liste des opérations *}} -{{:assign var="config_nature" from="config.%s_nature"|args:$_GET.dir}} -{{if ! $config_nature|keys|has:$_GET.op_key}} - {{:error message="Type de mouvement inconnu !"}} -{{/if}} - -{{* sortie temporaire ? *}} -{{:assign sortie_temp=false}} -{{if $_GET.dir == 'output'}} - {{:assign var="elem" from="config_nature.%s"|args:$_GET.op_key}} - {{if $elem.type == 'temporaire'}} - {{:assign sortie_temp=true}} - {{:assign fee=$elem.fee}} - {{/if}} -{{/if}} - -{{* mouvement prédéfini ? *}} -{{:assign var="default_nature" from="config_defaut.%ss"|args:$_GET.dir}} -{{#foreach from=$default_nature item="elem"}} - {{:assign var="default_keys." value=$key}} -{{/foreach}} - -{{:assign label_mod=true}} -{{if $default_keys|has:$_GET.op_key}} - {{:assign label_mod=false}} -{{/if}} - -{{if ! $label_mod && ! $sortie_temp}} - {{:error message="Ce type de mouvement ne peut être modifié"}} -{{/if}} - {{:assign var="default_label" from="config.%s_nature.%s.label"|args:$_GET.dir:$_GET.op_key}}
- Paramètres + Modifier le libellé
- {{if $label_mod}} - {{:input type="text" name="name" label="Libellé" default=$default_label required=true maxlength="100"}} - {{/if}} - {{if $sortie_temp}} -
- {{:input type="radio-btn" name="tarif" value="gratuit" label="Gratuit" required=true default=$fee prefix_title=Tarif}} - {{:input type="radio-btn" name="tarif" value="payant" label="Payant" required=true default=$fee}} -
- {{/if}} + {{:input type="text" name="name" label="Libellé" default=$default_label required=true maxlength="100"}}
- {{if $sortie_temp}} -
-

Tarification

-
    -
  • Une sortie temporaire gratuite sera classée dans l'onglet Prêt
  • -
  • Une sortie temporaire payante sera classée dans l'onglet Locations
  • -
-
- {{/if}}

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

diff --git a/default.json b/default.json index ab06a2c..07a9c10 100644 --- a/default.json +++ b/default.json @@ -26,14 +26,7 @@ { "key" : "c9ba00d9-26ee-448b-9f02-73e479ec2980", "label" : "Prêt", - "type" : "temporaire", - "fee" : "gratuit" - }, - { - "key" : "5c6c20bf-53e9-49dc-bcd6-e3cac23a6786", - "label" : "Location", - "type" : "temporaire", - "fee" : "payant" + "type" : "temporaire" }, { "key" : "fefefa51-1a85-46ca-ab78-b594b10390ff", diff --git a/equipment_history.html b/equipment_history.html index 5db0fb6..ecf5a97 100644 --- a/equipment_history.html +++ b/equipment_history.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Afficher l'historique des mouvements d'un matériel paramètres @@ -12,6 +10,14 @@ - 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=$equipment_key assign="equipment"}} {{else}} @@ -22,88 +28,64 @@ {{else}} {{:error message="Le matériel %s n'appartient à aucune catégorie"|args:$equipment.name}} {{/load}} - {{:admin_header title="Gestion des matériels" custom_css="./style.css" current="module_equipment"}} -{{* barre de navigation *}} {{if $_GET.current != null}} {{:assign current=$_GET.current}} {{else}} {{:assign current="inventaire"}} {{/if}} +{{:include file="./_nav.html" current=$current subcurrent=$proprio subsubcurrent="historique" eqpmt=$equipment.name category=$category.name}} + +{{if $_GET.ok}} + {{if $_GET.msg == "modification"}} +

Modification enregistrée

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

Mouvement copié

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

Retour enregistré

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

Mouvement supprimé

+ {{else}} +

Mouvement enregistré

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

Ce mouvement ne peut être supprimé

+ {{/if}} +{{/if}} {{* récupérer la config des entrées/sorties *}} {{:include file="./_get_config.html" keep="config"}} -{{* filtrer selon appartenance *}} -{{:assign saved_filters=$module.config.filters}} -{{:assign var="user_filters" from="saved_filters.%s"|args:$logged_user.id}} - -{{if $_GET.prop == null}} - {{:assign selected_prop=$user_filters.eqpmt_hist_prop}} -{{else}} - {{if $_GET.prop == -1}} - {{:assign selected_prop=null}} - {{else}} - {{:assign selected_prop=$_GET.prop}} - {{/if}} - {{:assign var="user_filters.eqpmt_hist_prop value=$selected_prop}} - {{:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters}} - {{:save key="config" filters=$saved_filters}} -{{/if}} - -{{* déterminer les types de mouvements selon l'appartenance du matériel *}} -{{#foreach from=$config.input_nature key="key"}} - {{if $selected_prop == null}} - {{* les deux sortes de matériel *}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{if $type == 'temporaire'}} - {{:assign var="temp_inputs." value=$key|quote_sql}} - {{/if}} - {{elseif $selected_prop == 1}} +{{* déterminer les types de mouvements selon l'affection du matériel *}} +{{#foreach from=$config.input_nature}} + {{if $_GET.prop}} {{* matériel propriété de l'asso *}} {{if $type != 'temporaire'}} - {{:assign var="mvt_keys." value=$key|quote_sql}} + {{:assign var="input_types." value=$label}} {{/if}} {{else}} {{* matériel non propriété de l'asso *}} {{if $type == 'temporaire'}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{:assign var="temp_inputs." value=$key|quote_sql}} + {{:assign var="input_types." value=$label}} {{/if}} {{/if}} {{/foreach}} -{{#foreach from=$config.output_nature key="key"}} - {{if $selected_prop == null}} - {{* les deux sortes de matériel *}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{if $type == "temporaire"}} - {{:assign var="temp_outputs." value=$key|quote_sql}} - {{/if}} - {{elseif $selected_prop == 1}} +{{#foreach from=$config.output_nature}} + {{if $_GET.prop}} {{* matériel propriété de l'asso *}} {{if $type != 'retour'}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{if $type == "temporaire"}} - {{:assign var="temp_outputs." value=$key|quote_sql}} - {{/if}} + {{:assign var="output_types." value=$label}} {{/if}} {{else}} {{* matériel non propriété de l'asso *}} {{if $type == 'retour'}} - {{:assign var="mvt_keys." value=$key|quote_sql}} + {{:assign var="output_types." value=$label}} {{/if}} {{/if}} {{/foreach}} -{{:assign key_cond=$mvt_keys|implode:","}} -{{:assign key_cond="("|cat:$key_cond|cat:")"}} - -{{if $selected_prop == null}} - {{:assign prop_condition="1"}} -{{else}} - {{:assign prop_condition="$$.operation in %s"|args:$key_cond}} -{{/if}} {{* calculer et mémoriser les quantités pour que le tri de la liste affiche les valeurs correctes *}} {{:assign stock=0}} @@ -130,237 +112,232 @@ {{:assign nonproprio="%d-%d"|math:$nonproprio:$amount}} {{/if}} {{/if}} - {{:assign dispo_final="%d-%d"|math:$stock:$exterieur}} + {{: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_final}} + {{:assign var="quantites.%s.dispo"|args:$id value=$dispo}} {{:assign var="quantites.%s.nonproprio"|args:$id value=$nonproprio}} {{/load}} -{{if $selected_prop == null || $selected_prop}} - {{* calculer la quantité sortie temporairement de chaque matériel *}} - {{:assign output_ops=$temp_outputs|implode:","}} - {{:assign output_ops="("|cat:$output_ops|cat:")"}} +{{if $current != "archives"}} + +{{/if}} + +{{* lister tous les mouvements du matériel passé en paramètre *}} +{{if $_GET.prop}} + {{* calculer la quantité temporairement l'extérieur de chaque matériel *}} + {{#foreach from=$config.output_nature key=key}} + {{if $type == "temporaire"}} + {{:assign var="temp_outputs." value=$key|quote_sql}} + {{/if}} + {{/foreach}} + {{:assign operations=$temp_outputs|implode:","}} + {{:assign operations="("|cat:$operations|cat:")"}} {{#select mvt.key AS mvt_key, json_extract(mvt.document, '$.amount') - IFNULL(SUM(json_extract(mvt2.document, '$.amount')), 0) AS reste - FROM !table AS mvt - LEFT JOIN !table AS link ON mvt.key = json_extract(link.document, '$.temp_key') - LEFT JOIN !table AS mvt2 ON mvt2.key = json_extract(link.document, '$.return') + FROM module_data_equipment AS mvt + LEFT JOIN module_data_equipment AS link ON mvt.key = json_extract(link.document, '$.temp_key') + LEFT JOIN module_data_equipment AS mvt2 ON mvt2.key = json_extract(link.document, '$.return') WHERE json_extract(mvt.document, '$.operation') IN !op AND json_extract(mvt.document, '$.equipment') = :eqpmt_key GROUP by mvt.key ; - !table=$module.table - !op = $output_ops + !op = $operations :eqpmt_key = $_GET.key }} {{:assign var="reste.%s"|args:$mvt_key value=$reste}} {{/select}} -{{/if}} -{{if $selected_prop == null || ! $selected_prop}} + {{#list + type="movement" + select=" + ($$.date || '_' || substr('000000' || id, -6, 6)) AS 'Date'; + CASE $$.direction WHEN 'input' THEN 'Entrée' WHEN 'output' THEN 'Sortie' END AS 'Mouvement'; + $$.operation AS 'Opération'; + $$.amount AS 'Quantité'; + '' AS 'Stock'; + '' AS 'Sorti'; + '' AS 'Disponible'; + CASE WHEN $$.user NOT NULL + THEN (SELECT %s AS nom FROM users WHERE id = $$.user) + ELSE '' + END AS 'Dépositaire'; + CASE WHEN $$.storage NOT NULL + THEN (SELECT $$.name FROM @TABLE as storage WHERE storage.key = @TABLE.$$.storage) + ELSE '' + END AS 'Stockage'; + $$.comment AS 'Commentaire' + "|args:$config.user_fields.name_sql + equipment=$equipment_key + order=1 + }} + {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$direction:$operation}} + {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} + + {{if $direction === "input" && $op_label|in:$input_types || + $direction === "output"&& $op_label|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}} + {{$op_label}} + {{$amount}} + {{$stock}} + {{$exterieur}} + {{$dispo}} + {{:link href="/admin/users/details.php?id=%s"|args:$user label="%s"|args:$col8}} + {{$col9}} + {{$comment}} + + {{if $current != "archives"}} + {{if $direction == "output" && $type_mvt == "temporaire"}} + {{:assign var="temp_ext" from="reste.%s"|args:$key}} + {{if $temp_ext != null && $temp_ext > 0}} + {{:linkbutton + label="Retour" + title="Enregistrer un retour de sortie temporaire" + href="movements/output_return.html?key=%s&prop=%s"|args:$key:$_GET.prop + shape="reset" + target="_dialog"}} + {{/if}} + {{/if}} + {{if $direction == "input" && $type_mvt == "retour"}} + {{* interdire dupliquer *}} + {{else}} + {{:linkbutton + label="Dupliquer" + href="movements/copy_movement.html?key=%s&prop=%s"|args:$key:$_GET.prop + shape="plus" + target="_dialog"}} + {{/if}} + {{:linkbutton + label="Modifier" + href="movements/modify_movement.html?key=%s"|args:$key + shape="edit" + target="_dialog"}} + {{:linkbutton + label="Supprimer" + href="movements/delete_movement.html?key=%s&prop=%s"|args:$key:$_GET.prop + shape="delete" + target="_dialog"}} + {{/if}} + + + {{/if}} + {{/list}} + +{{else}} {{* calculer la quantité présente temporairement de chaque matériel *}} - {{:assign input_ops=$temp_inputs|implode:","}} - {{:assign input_ops="("|cat:$input_ops|cat:")"}} + {{#foreach from=$config.input_nature key=key}} + {{if $type == "temporaire"}} + {{:assign var="temp_inputs." value=$key|quote_sql}} + {{/if}} + {{/foreach}} + {{:assign operations=$temp_inputs|implode:","}} + {{:assign operations="("|cat:$operations|cat:")"}} {{#select mvt.key AS mvt_key, json_extract(mvt.document, '$.amount') - IFNULL(SUM(json_extract(mvt2.document, '$.amount')), 0) AS present - FROM !table AS mvt - LEFT JOIN !table AS link ON mvt.key = json_extract(link.document, '$.temp_key') - LEFT JOIN !table AS mvt2 ON mvt2.key = json_extract(link.document, '$.return') + FROM module_data_equipment AS mvt + LEFT JOIN module_data_equipment AS link ON mvt.key = json_extract(link.document, '$.temp_key') + LEFT JOIN module_data_equipment AS mvt2 ON mvt2.key = json_extract(link.document, '$.return') WHERE json_extract(mvt.document, '$.operation') IN !op AND json_extract(mvt.document, '$.equipment') = :eqpmt_key GROUP by mvt.key ; - !table=$module.table - !op = $input_ops + !op = $operations :eqpmt_key = $_GET.key }} {{:assign var="present.%s"|args:$mvt_key value=$present}} {{/select}} -{{/if}} -{{:assign - select_debut=" - ($$.date || '_' || substr('000000' || id, -6, 6)) AS 'Date'; - CASE $$.direction WHEN 'input' THEN 'Entrée' WHEN 'output' THEN 'Sortie' END AS 'Mouvement'; - $$.operation AS 'Opération'; - $$.amount AS 'Quantité';" -}} -{{:assign - select_prop="'' AS 'Stock'; - '' AS 'Sorti'; - '' AS 'Disponible';" -}} -{{:assign - select_depositaire="CASE WHEN $$.user NOT NULL - THEN (SELECT %s AS nom FROM users WHERE id = $$.user) - ELSE '' - END AS 'Dépositaire'; - "|args:$config.user_fields.name_sql -}} -{{:assign - select_non_prop="'' as 'Temporaire';" -}} -{{:assign select_final=" - CASE WHEN $$.storage NOT NULL - THEN (SELECT $$.name FROM @TABLE as storage WHERE storage.key = @TABLE.$$.storage) - ELSE '' - END AS 'Stockage'; - '' AS 'Documents'; - $$.transactions AS 'Écritures' - " -}} - -{{if $selected_prop == null}} - {{:assign select_clause=$select_debut|cat:$select_prop|cat:$select_non_prop|cat:$select_depositaire|cat:$select_final}} -{{elseif $selected_prop}} - {{:assign select_clause=$select_debut|cat:$select_prop|cat:$select_depositaire|cat:$select_final}} -{{else}} - {{:assign select_clause=$select_debut|cat:$select_non_prop|cat:$select_final}} -{{/if}} - -{{:assign var="prop_options." value="" label="Tous les matériels" href="?key=%s&prop=-1"|args:$_GET.key}} -{{:assign var="prop_options." value="1" label="Matériels propriété de l'association" href="?key=%s&prop=1"|args:$_GET.key}} -{{:assign var="prop_options." value="0" label="Matériels NON propriété de l'association" href="?key=%s&prop=0"|args:$_GET.key}} - -{{if $dispo_final > 0 && $selected_prop == null || $selected_prop}} - {{:assign sortie="sortie"}} -{{/if}} -{{:include file="./_nav.html" current=$current subcurrent="mouvements" eqpmt=$equipment.name category=$category.name sortie=$sortie key=$_GET.key}} - -{{if $_GET.ok}} - {{if $_GET.msg == "modification"}} -

Modification enregistrée

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

Mouvement copié

- {{elseif $_GET.msg == "retour"}} -

Retour enregistré

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

Mouvement supprimé

- {{else}} -

Mouvement enregistré

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

Ce mouvement ne peut être supprimé

- {{/if}} -{{/if}} - -
- Filtrer par appartenance - {{:dropdown - title="Filtrer par appartenance" - options=$prop_options - value="%s"|args:$selected_prop + {{#list + type="movement" + select="($$.date || '_' || substr('000000' || id, -6, 6)) AS 'Date'; + CASE $$.direction WHEN 'input' THEN 'Entrée' WHEN 'output' THEN 'Sortie' END AS 'Mouvement'; + $$.operation AS 'Opération'; + $$.amount AS 'Quantité'; + "" as 'Présent'; + CASE WHEN $$.storage NOT NULL + THEN (SELECT $$.name FROM @TABLE as storage WHERE storage.key = @TABLE.$$.storage) + ELSE '' + END as 'Stockage'; + $$.comment AS 'Commentaire'" + equipment=$equipment_key + order=1 }} -
+ {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$direction:$col3}} + {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} -{{* lister les mouvements du matériel passé en paramètre *}} -{{#list - type="movement" - select="%s"|args:$select_clause - where="%s"|args:$prop_condition - equipment=$equipment_key - order=1 - desc=true -}} - {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$direction:$operation}} - {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} - - {{:assign var="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}} - {{:assign var="tempo" from="quantites.%s.nonproprio"|args:$id}} - - {{:assign file_path="%s/%s/"|args:$module.storage_root:$key}} - {{:assign file_path=$file_path|cat:"%"}} - {{#select count(*) AS nb FROM files WHERE path LIKE :file_path ; :file_path=$file_path}} - {{:assign nb_files=$nb}} - {{/select}} - - {{if $selected_prop == null}} - {{:assign user_details=$col9}} - {{:assign storage=$col10}} - {{elseif $selected_prop}} - {{:assign user_details=$col8}} - {{:assign storage=$col9}} - {{else}} - {{:assign user_details=$col6}} - {{:assign storage=$col6}} - {{/if}} - - - {{$date|date_short}} - {{$col2}} - {{$op_label}} - {{$amount}} - {{if $selected_prop == null || $selected_prop}} - {{$stock}} - {{$exterieur}} - {{$dispo}} - {{/if}} - {{if $selected_prop == null || ! $selected_prop}} - {{$tempo}} - {{/if}} - {{if $selected_prop == null || $selected_prop}} - {{:link href="/admin/users/details.php?id=%s"|args:$user label="%s"|args:$user_details}} - {{/if}} - {{$storage}} - {{if $nb_files > 0}}{{$nb_files}}{{/if}} - {{if $transactions|count > 0}}{{"Oui"}}{{/if}} - - {{if $current != "archives"}} - {{if $direction == "output" && $type_mvt == "retour"}} - {{:assign prop = 0}} - {{elseif $direction == "input" && $type_mvt == "temporaire"}} - {{:assign prop = 0}} - {{else}} - {{:assign prop = 1}} - {{/if}} - {{if $direction == "output" && $type_mvt == "temporaire"}} - {{:assign var="temp_ext" from="reste.%s"|args:$key}} - {{if $temp_ext != null && $temp_ext > 0}} - {{:linkbutton - label="Retour" - href="movements/output_return.html?key=%s&prop=%s"|args:$key:$prop - shape="reset" - target="_dialog"}} + {{if $direction === "input" && $op_label|in:$input_types || + $direction === "output"&& $op_label|in:$output_types + }} + {{:assign var="stock" from="quantites.%s.nonproprio"|args:$id}} + + {{$date|date_short}} + {{$col2}} + {{$op_label}} + {{$amount}} + {{$stock}} + {{$col6}} + {{$comment}} + + {{if $direction == "input" && $type_mvt == "temporaire"}} + {{:assign var="temp_in" from="present.%s"|args:$key}} + {{if $temp_in != null && $temp_in > 0}} + {{:linkbutton + label="Retour" + title="Enregistrer un retour d'entrée temporaire" + href="movements/input_return.html?key=%s&prop=%s"|args:$key:$_GET.prop + shape="reset" + target="_dialog"}} + {{/if}} {{/if}} - {{/if}} - {{if $direction == "input" && $type_mvt == "temporaire"}} - {{:assign var="temp_in" from="present.%s"|args:$key}} - {{if $temp_in != null && $temp_in > 0}} + {{if $direction == "output" && $type_mvt == "retour"}} + {{* interdire dupliquer *}} + {{else}} {{:linkbutton - label="Retour" - href="movements/input_return.html?key=%s&prop=%s"|args:$key:$prop - shape="reset" - target="_dialog"}} + label="Dupliquer" + href="movements/copy_movement.html?key=%s&prop=%s"|args:$key:$_GET.prop + shape="plus" + target="_dialog"}} {{/if}} - {{/if}} - {{:linkbutton - label="Détails" - href="movements/movement_details.html?key=%s&prop=%s&from=eh"|args:$key:$prop - shape="eye" - }} - {{/if}} - - -{{/list}} + {{:linkbutton + label="Modifier" + href="movements/modify_movement.html?key=%s"|args:$key + shape="edit" + target="_dialog"}} + {{:linkbutton + label="Supprimer" + href="movements/delete_movement.html?key=%s&prop=%s"|args:$key:$_GET.prop + shape="delete" + target="_dialog"}} + + + {{/if}} + {{/list}} +{{/if}} {{:admin_footer}} diff --git a/global_history.html b/global_history.html index 47a01ba..726075e 100644 --- a/global_history.html +++ b/global_history.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Afficher l'historique de tous les mouvements *}} @@ -13,97 +11,12 @@ {{* récupérer la config des entrées/sorties *}} {{:include file="./_get_config.html" keep="config"}} -{{* filtrer selon la catégorie *}} -{{:assign saved_filters=$module.config.filters}} -{{:assign var="user_filters" from="saved_filters.%s"|args:$logged_user.id}} - -{{if $_GET.cat_key == null}} - {{:assign selected_category=$user_filters.hist_cat_key}} -{{else}} - {{if $_GET.cat_key == -1}} - {{:assign selected_category=null}} - {{else}} - {{:assign selected_category=$_GET.cat_key}} - {{/if}} - {{:assign var="user_filters.hist_cat_key" value=$selected_category}} - {{:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters}} - {{:save key="config" filters=$saved_filters}} -{{/if}} - -{{* condition de filtrage *}} -{{if $selected_category != null}} - {{:assign cat_condition="(SELECT key - FROM @TABLE AS cat - WHERE cat.key = (SELECT $$.category - FROM @TABLE AS mat - WHERE mat.key = @TABLE.$$.equipment)) = '%s'"|args:$selected_category}} -{{else}} - {{:assign cat_condition=1}} -{{/if}} - -{{* filtrer selon appartenance *}} -{{if $_GET.prop == null}} - {{:assign selected_prop=$user_filters.hist_prop}} -{{else}} - {{if $_GET.prop == -1}} - {{:assign selected_prop=null}} - {{else}} - {{:assign selected_prop=$_GET.prop}} - {{/if}} - {{:assign var="user_filters.hist_prop" value=$selected_prop}} - {{:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters}} - {{:save key="config" filters=$saved_filters}} -{{/if}} - -{{* déterminer les types de mouvements selon l'appartenance du matériel *}} -{{#foreach from=$config.input_nature key="key"}} - {{if $selected_prop == null}} - {{* les deux sortes de matériel *}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{elseif $selected_prop == 1}} - {{* matériel propriété de l'asso *}} - {{if $type != 'temporaire'}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{/if}} - {{else}} - {{* matériel non propriété de l'asso *}} - {{if $type == 'temporaire'}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{/if}} - {{/if}} -{{/foreach}} - -{{#foreach from=$config.output_nature key="key"}} - {{if $selected_prop == null}} - {{* les deux sortes de matériel *}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{elseif $selected_prop == 1}} - {{* matériel propriété de l'asso *}} - {{if $type != 'retour'}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{/if}} - {{else}} - {{* matériel non propriété de l'asso *}} - {{if $type == 'retour'}} - {{:assign var="mvt_keys." value=$key|quote_sql}} - {{/if}} - {{/if}} -{{/foreach}} -{{:assign key_cond=$mvt_keys|implode:","}} -{{:assign key_cond="("|cat:$key_cond|cat:")"}} - -{{if $selected_prop == null}} - {{:assign prop_condition="1"}} -{{else}} - {{:assign prop_condition="$$.operation in %s"|args:$key_cond}} -{{/if}} - -{{* sélecteurs de catégorie et d'appartenance *}} -{{:assign var="cat_options." value="" label="Toutes les catégories" href="?cat_key=-1"}} +{{* Sélecteur catégories *}} +{{:assign var="options." value="" label="Toutes les catégories" href="?"}} {{#load type="category" order="$$.name"}} {{:assign var="categories.%s"|args:$key value=$name}} {{:assign - var="cat_options." + var="options." value=$key label=$name href="?cat_key=%s"|args:$key @@ -114,29 +27,23 @@ Filtrer par catégorie {{:dropdown title="Filtrer par catégorie" - options=$cat_options - value="%s"|args:$selected_category + options=$options + value="%s"|args:$_GET.cat_key }}
-{{:assign var="prop_options." value="" label="Tous les matériels" href="?prop=-1"}} -{{:assign var="prop_options." value="1" label="Matériels propriété de l'association" href="?prop=1"}} -{{:assign var="prop_options." value="0" label="Matériels NON propriété de l'association" href="?prop=0"}} +{{* condition de filtrage *}} +{{if $_GET.cat_key != null}} + {{:assign condition="(SELECT key + FROM @TABLE AS cat + WHERE cat.key = (SELECT $$.category + FROM @TABLE AS mat + WHERE mat.key = @TABLE.$$.equipment)) = '%s'"|args:$_GET.cat_key}} +{{else}} + {{:assign condition=1}} +{{/if}} -
- Filtrer par appartenance - {{:dropdown - title="Filtrer par appartenance" - options=$prop_options - value="%s"|args:$selected_prop - }} -
- -
-

Historique de tous les mouvements de matériel

-
- -{{* lister les mouvements *}} +{{* lister tous les mouvements *}} {{#list type="movement" select="($$.date || '_' || substr('000000' || id, -6, 6)) AS 'Date'; @@ -154,9 +61,9 @@ THEN (SELECT $$.name FROM @TABLE as storage WHERE storage.key = @TABLE.$$.storage) ELSE '' END as 'Stockage'; - $$.comment AS 'Remarque' + $$.comment AS 'Commentaire' "|args:$config.user_fields.name_sql - where="%s AND %s"|args:$cat_condition:$prop_condition + where="%s"|args:$condition order=1 max=50 desc=true @@ -181,10 +88,7 @@ diff --git a/index.html b/index.html index d05fab9..92538c8 100644 --- a/index.html +++ b/index.html @@ -1,41 +1,39 @@ {{* -*- brindille -*- *}} -{{#restrict section="accounting" level="write"}} - {{:assign is_admin=true}} -{{else}} - {{:assign is_admin=false}} -{{/restrict}} - {{:admin_header title="Gestion des matériels" custom_css="./style.css" current="module_equipment"}} -{{if ! $is_admin}} - {{:assign var="user.id" value=$logged_user.id}} - {{:include file="snippets/my_details.html"}} +{{* barre de navigation *}} +{{if $_GET.prop == null || $_GET.prop}} + {{:assign proprio="proprio"}} {{else}} - {{#restrict block=true section="accounting" level="write"}}{{/restrict}} - - {{#load type="category" count=true limit=1 assign="result"}}{{/load}} - {{:include file="_nav.html" current="inventaire" cat="%d"|args:$result.count subcurrent="stock"}} - - {{if $_GET.ok}} - {{if $_GET.msg == "ajout" }} -

Ajout effectué

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

Modification effectuée

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

Suppression effectuée

- {{elseif $_GET.msg == "supprmvtmat" }} -

Mouvement supprimé - Matériel supprimé

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

Modification refusée

- {{/if}} - - {{if $result.count == 0}} -

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

- {{else}} - {{:include file="./_inventory.html"}} - {{/if}} - - {{:admin_footer}} + {{: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}} + {{if $_GET.msg == "ajout" }} +

Ajout effectué

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

Modification effectuée

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

Suppression effectuée

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

Mouvement supprimé - Matériel supprimé

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

Modification refusée

+{{/if}} + +{{if $result.count == 0}} +

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

+{{else}} + {{if $_GET.prop == null || $_GET.prop == "1"}} + {{:include file="./_inventory.html"}} + {{else}} + {{:include file="./_temp_inventory.html"}} + {{/if}} +{{/if}} + +{{:admin_footer}} diff --git a/loan_history.html b/loan_history.html deleted file mode 100644 index 92c4ee1..0000000 --- a/loan_history.html +++ /dev/null @@ -1,199 +0,0 @@ -{{* -*- brindille -*- *}} - -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - -{{if $_GET.output_type == "loan"}} - {{:assign label="prêt"}} -{{elseif $_GET.output_type == "rent"}} - {{:assign label="location"}} -{{else}} - {{:error message="Cette page n'existe pas !"}} -{{/if}} - -{{:admin_header title="%ss en cours"|args:$label|ucfirst custom_css="../style.css" current="module_equipment"}} -{{:include file="./_nav.html" current="%s"|args:$label subcurrent="encours"}} - -{{* - vérifier l'existence de la table du module - eh oui, il se peut qu'elle ne soit pas encore créée si aucune donnée n'a été ajoutée dedans -*}} -{{#load limit="1"}} - {{:assign table_presente=true}} -{{else}} - {{:assign table_presente=false}} -{{/load}} - -{{if $table_presente}} -{{if $_GET.ok}} - {{if $_GET.msg == "modification"}} -

Modification enregistrée

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

Mouvement copié

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

Mouvement supprimé

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

Ce mouvement ne peut être supprimé

- {{/if}} -{{/if}} - -{{* lecture config *}} -{{:include file="./_get_config.html" keep="config"}} - -{{* filtrer selon la catégorie *}} -{{:assign saved_filters=$module.config.filters}} -{{:assign var="user_filters" from="saved_filters.%s"|args:$logged_user.id}} - -{{if $_GET.cat_key == null}} - {{:assign var="selected_category" from="user_filters.%s_hist_cat_key"|args:$_GET.output_type}} -{{else}} - {{if $_GET.cat_key == -1}} - {{:assign selected_category=null}} - {{else}} - {{:assign selected_category=$_GET.cat_key}} - {{/if}} - {{:assign var="user_filters.%s_hist_cat_key"|args:$_GET.output_type value=$selected_category}} - {{:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters}} - {{:save key="config" filters=$saved_filters}} -{{/if}} - -{{* condition de filtrage *}} -{{if $selected_category != null}} - {{:assign cat_key=$selected_category|quote_sql}} - {{:assign cat_condition="json_extract(mat.document, '$.category') = %s"|args:$cat_key}} -{{else}} - {{:assign cat_condition=1}} -{{/if}} - -{{#foreach from=$config.output_nature key="key"}} - {{if $type != 'temporaire'}} - {{:continue}} - {{/if}} - {{if $_GET.output_type == "loan" && $fee != 'payant'}} - {{:assign var="out_keys." value=$key|quote_sql}} - {{elseif $_GET.output_type == "rent" && $fee == 'payant'}} - {{:assign var="out_keys." value=$key|quote_sql}} - {{/if}} -{{/foreach}} -{{:assign out_keys=$out_keys|implode:","}} -{{:assign out_keys="("|cat:$out_keys|cat:")"}} - -{{* sélecteur de catégorie *}} -{{:assign var="cat_options." value="" label="Toutes les catégories" href="?output_type=%s&cat_key=-1"|args:$_GET.output_type}} -{{#load type="category" order="$$.name"}} - {{:assign - var="cat_options." - value=$key - label=$name - href="?output_type=%s&cat_key=%s"|args:$_GET.output_type:$key - }} -{{/load}} - -
- Filtrer par catégorie - {{:dropdown - title="Filtrer par catégorie" - options=$cat_options - value="%s"|args:$selected_category - }} -
- -{{:assign premier=true}} -{{#select - users.nom AS nom, - users.id AS user, - mvt.key AS mvt_key, - json_extract(mat.document, '$.name') AS mat_name, - json_extract(mvt.document, '$.date') AS out_date, - json_extract(mvt.document, '$.amount') AS out_amount, - json_extract(mvt.document, '$.return_date') AS return_date, - json_extract(mvt.document, '$.amount') - IFNULL(SUM(json_extract(retour.document, '$.amount')), 0) AS remain - FROM !table AS mvt - LEFT JOIN users ON json_extract(mvt.document, '$.user') = users.id - LEFT JOIN !table AS links ON mvt.key = json_extract(links.document, '$.temp_key') - LEFT JOIN !table AS retour ON retour.key = json_extract(links.document, '$.return') - INNER JOIN !table AS mat ON mat.key = json_extract(mvt.document, '$.equipment') - WHERE json_extract(mvt.document, '$.type') = 'movement' - AND json_extract(mvt.document, '$.operation') IN !op - AND !cat_condition - GROUP BY mvt.key - HAVING remain != 0 - ORDER BY out_date DESC, nom - ; - !table=$module.table - !op = $out_keys - !cat_condition=$cat_condition -}} - {{if $premier}} - - - - - - - - - - - - - - - {{:assign premier=false}} - {{/if}} - - {{if $return_date != null}} - {{:assign ts_retour=$return_date|strtotime}} - {{:assign nb_jours="floor((%d-%d)/(60*60*24))"|math:$now:$ts_retour}} - {{/if}} - - - - - - - - - - -{{else}} -

Aucun mouvement.

-{{/select}} - -
MatérielDate prêtQuantitéMembreDate retourReste à rendreRemarque
{{$mat_name}}{{$out_date|date_short}}{{$out_amount}}{{:link href="/admin/users/details.php?id=%s"|args:$user label="%s"|args:$nom}}{{$return_date|date_short}}{{$remain}} - {{if $return_date != null}} - {{:assign jour="jour}} - {{if $nb_jours > 0}} - {{if $nb_jours > 1}}{{:assign jour="jours"}}{{/if}} - {{:tag color="darkred" label="Retard %s %s"|args:$nb_jours:$jour}} - {{elseif $nb_jours < 0}} - {{:assign delai="abs(%d)"|math:$nb_jours}} - {{if $nb_jours < -1}}{{:assign jour="jours"}}{{/if}} - {{"Reste %s %s"|args:$delai:$jour}} - {{else}} - {{:tag color="darkgreen" label="À rendre aujourd'hui"}} - {{/if}} - {{/if}} - - {{:linkbutton - label="Retour" - href="movements/output_return.html?key=%s&prop=1"|args:$mvt_key - shape="reset" - target="_dialog"}} - {{if $_GET.output_type == "loan"}} - {{:assign from="lh"}} - {{elseif $_GET.output_type == "rent"}} - {{:assign from="rh"}} - {{/if}} - {{:linkbutton - label="Détails" - href="movements/movement_details.html?key=%s&prop=1&from=%s"|args:$mvt_key:$from - shape="eye" - }} -
-{{else}} -

Aucun mouvement.

-{{/if}} - -{{:admin_footer}} diff --git a/loan_movements.html b/loan_movements.html deleted file mode 100644 index cf9fcda..0000000 --- a/loan_movements.html +++ /dev/null @@ -1,228 +0,0 @@ -{{* -*- brindille -*- *}} - -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - -{{* - Afficher l'historique des prêts ou locations -*}} - -{{if $_GET.output_type == "loan"}} - {{:assign label="prêt"}} -{{elseif $_GET.output_type == "rent"}} - {{:assign label="location"}} -{{else}} - {{:error message="Cette page n'existe pas !"}} -{{/if}} - -{{:admin_header title="Historique des %ss"|args:$label custom_css="./style.css" current="module_equipment"}} -{{:include file="./_nav.html" current="%s"|args:$label subcurrent="historique"}} - -{{* - vérifier l'existence de la table du module - eh oui, il se peut qu'elle ne soit pas encore créée si aucune donnée n'a été ajoutée dedans -*}} -{{#load limit="1"}} - {{:assign table_presente=true}} -{{else}} - {{:assign table_presente=false}} -{{/load}} - -{{if $table_presente}} -{{if $_GET.ok}} - {{if $_GET.msg == "modification"}} -

Modification enregistrée

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

Mouvement copié

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

Mouvement supprimé

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

Ce mouvement ne peut être supprimé

- {{/if}} -{{/if}} - -{{* récupérer la config des entrées/sorties *}} -{{:include file="./_get_config.html" keep="config"}} - -{{* filtrer selon la catégorie *}} -{{:assign saved_filters=$module.config.filters}} -{{:assign var="user_filters" from="saved_filters.%s"|args:$logged_user.id}} - -{{if $_GET.cat_key == null}} - {{:assign var="selected_category" from="user_filters.%s_cat_key"|args:$_GET.output_type}} -{{else}} - {{if $_GET.cat_key == -1}} - {{:assign selected_category=null}} - {{else}} - {{:assign selected_category=$_GET.cat_key}} - {{/if}} - {{:assign var="user_filters.%s_cat_key"|args:$_GET.output_type value=$selected_category}} - {{:assign var="saved_filters.%s"|args:$logged_user.id value=$user_filters}} - {{:save key="config" filters=$saved_filters}} -{{/if}} - -{{* condition de filtrage *}} -{{if $selected_category != null}} - {{:assign cat_key=$selected_category|quote_sql}} - {{:assign cat_condition="category = %s"|args:$cat_key}} -{{else}} - {{:assign cat_condition=1}} -{{/if}} - -{{* déterminer les types de mouvements *}} -{{#foreach from=$config.output_nature key="key"}} - {{if $type != 'temporaire'}} - {{:continue}} - {{/if}} - {{if $_GET.output_type == "loan" && $fee != 'payant'}} - {{:assign var="out_keys." value=$key|quote_sql}} - {{elseif $_GET.output_type == "rent" && $fee == 'payant'}} - {{:assign var="out_keys." value=$key|quote_sql}} - {{/if}} -{{/foreach}} -{{:assign out_keys=$out_keys|implode:","}} -{{:assign out_keys="("|cat:$out_keys|cat:")"}} - -{{* sélecteur de catégorie *}} -{{:assign var="cat_options." value="" label="Toutes les catégories" href="?output_type=%s&cat_key=-1"|args:$_GET.output_type}} -{{#load type="category" order="$$.name"}} - {{:assign - var="cat_options." - value=$key - label=$name - href="?output_type=%s&cat_key=%s"|args:$_GET.output_type:$key - }} -{{/load}} - -
- Filtrer par catégorie - {{:dropdown - title="Filtrer par catégorie" - options=$cat_options - value="%s"|args:$selected_category - }} -
- -{{* lister les mouvements *}} -{{:assign premier=true}} -{{#select * FROM - (WITH - sorties AS - (SELECT - mvt.key, - json_extract(mvt.document, '$.date') AS date, - json_extract(mvt.document, '$.direction') AS direction, - json_extract(mvt.document, '$.operation') AS operation, - json_extract(mat.document, '$.name') AS materiel, - json_extract(mat.document, '$.category') AS category, - json_extract(mvt.document, '$.amount') AS amount, - users.id AS user_id, - users.nom AS user, - json_extract(storage.document, '$.name') AS stockage, - json_extract(mvt.document, '$.transactions') AS transactions, - json_extract(mvt.document, '$.comment') AS comment, - json_extract(mvt.document, '$.return_date') AS return_date - FROM !table AS mvt - INNER JOIN !table AS mat ON mat.key = json_extract(mvt.document, '$.equipment') - LEFT JOIN users ON users.id = json_extract(mvt.document, '$.user') - LEFT JOIN !table AS storage ON storage.key = json_extract(mvt.document, '$.storage') - WHERE json_extract(mvt.document, '$.type') = 'movement' - AND json_extract(mvt.document, '$.operation') IN !op - AND !cat_condition - ), - entrees AS - (SELECT - mvt.key, - json_extract(mvt.document, '$.date') AS date, - json_extract(mvt.document, '$.direction') AS direction, - json_extract(mvt.document, '$.operation') AS operation, - json_extract(mat.document, '$.name') AS materiel, - json_extract(mat.document, '$.category') AS category, - json_extract(mvt.document, '$.amount') AS amount, - users.id AS user_id, - users.nom AS user, - json_extract(storage.document, '$.name') AS stockage, - json_extract(mvt.document, '$.transactions') AS transactions, - json_extract(mvt.document, '$.comment') AS comment, - json_extract(mvt.document, '$.return_date') AS return_date - FROM !table AS mvt - INNER JOIN !table AS mat ON mat.key = json_extract(mvt.document, '$.equipment') - LEFT JOIN users ON users.id = json_extract(mvt.document, '$.user') - LEFT JOIN !table AS storage ON storage.key = json_extract(mvt.document, '$.storage') - INNER JOIN ( - SELECT json_extract(links.document, '$.return') AS return_key - FROM !table AS links - INNER JOIN sorties ON json_extract(links.document, '$.temp_key') = sorties.key - ) AS filtered_links ON filtered_links.return_key = mvt.key - WHERE !cat_condition - ) - SELECT * FROM sorties UNION SELECT * FROM entrees - ) - ORDER BY date DESC, user - ; - !table=$module.table - !op = $out_keys - !cat_condition=$cat_condition -}} - {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} - {{:assign file_path="%s/%s/"|args:$module.storage_root:$key}} - {{:assign file_path=$file_path|cat:"%"}} - {{#select count(*) AS nb FROM files WHERE path LIKE :file_path ; :file_path=$file_path}} - {{:assign nb_files=$nb}} - {{/select}} - - {{if $premier}} - - - - - - - - - - - - - - - - - - {{:assign premier=false}} - {{/if}} - - - - - - - - - - - - - - -{{else}} -

Aucun mouvement.

-{{/select}} - -
DateMouvementOpérationMatérielQuantitéDépositaireStockageDocumentsÉcrituresRemarque
{{$date|date_short}}{{if $direction == "input"}}Entrée{{else}}Sortie{{/if}}{{$op_label}}{{$materiel}}{{$amount}}{{:link href="/admin/users/details.php?id=%s"|args:$user_id label="%s"|args:$user}}{{$stockage}}{{if $nb_files > 0}}{{$nb_files}}{{/if}}{{if $transactions != null}}{{"Oui"}}{{/if}}{{$comment}} - {{if $_GET.output_type == "loan"}} - {{:assign from="lm"}} - {{elseif $_GET.output_type == "rent"}} - {{:assign from="rm"}} - {{/if}} - {{:linkbutton - label="Détails" - href="movements/movement_details.html?key=%s&prop=1&from=%s"|args:$key:$from - shape="eye" - }} -
-{{else}} -

Aucun mouvement.

-{{/if}} -{{:admin_footer}} diff --git a/member_history.html b/member_history.html deleted file mode 100644 index cf47264..0000000 --- a/member_history.html +++ /dev/null @@ -1,127 +0,0 @@ -{{* -*- brindille -*- *}} - -{{* - Afficher l'historique des mouvements d'un matériel pour un membre - paramètres - - key : clé du matériel - - id : id du membre -*}} - -{{#restrict}}{{/restrict}} - -{{:admin_header title="Historique membre" custom_css="./style.css" current="module_equipment"}} - -{{* lecture config (défaut ou enregistrée) *}} -{{:include file="./_get_config.html" keep="config, directions"}} - -{{#foreach from=$directions key="direction"}} - {{:assign var="nature" from="config.%s_nature"|args:$direction}} - {{#foreach from=$nature key=key}} - {{:assign var="types.%s.%s."|args:$direction:$type value=$key|quote_sql}} - {{/foreach}} - {{:assign var="io_types" from="types.%s"|args:$direction}} - {{#foreach from=$io_types key=key}} - {{:assign var=elem from="io_types.%s"|args:$key}} - {{:assign elem=$elem|implode:","}} - {{:assign elem="("|cat:$elem|cat:")"}} - {{:assign var="%s_types.%s"|args:$direction:$key value=$elem}} - {{/foreach}} -{{/foreach}} - -{{#users id=$_GET.id}} - {{:assign user_name=$nom}} -{{else}} - {{:error message="Il n'existe aucun membre avec l'identifiant %s !"|args:$_GET.id}} -{{/users}} - -{{#load key=$_GET.key|trim}} - {{:assign eqpmt_name=$name}} -{{else}} - {{:error message="Il n'existe aucun matériel avec la clé %s !"|args:$_GET.key|trim}} -{{/load}} - -

Historique des mouvements de « {{$eqpmt_name}} » du membre « {{$user_name}} »

- -{{:assign otk=null}} -{{#select - mvt.key AS mvt_key, - json_extract(mvt.document, '$.direction') as direction, - json_extract(mvt.document, '$.operation') as operation, - json_extract(mvt.document, '$.date') as date, - json_extract(mvt.document, '$.amount') as amount, - COALESCE((SELECT - json_extract(links.document, '$.temp_key') - FROM !table AS links - WHERE json_extract(links.document, '$.temp_key') = mvt.key - OR json_extract(links.document, '$.return') = mvt.key), mvt.key) - AS out_temp_key - FROM !table AS mvt - INNER JOIN users ON json_extract(mvt.document, '$.user') = users.id - INNER JOIN !table AS eqpmt - ON json_extract(mvt.document, '$.equipment') = eqpmt.key - WHERE users.id = :user - AND eqpmt.key = :eqpmt_key - AND (json_extract(mvt.document, '$.operation') IN !output_types - OR json_extract(mvt.document, '$.operation') IN !input_types) - ORDER BY out_temp_key, date - ; - !table=$module.table - :user = $_GET.id - :eqpmt_key = $_GET.key|trim - !output_types=$output_types.temporaire - !input_types=$input_types.retour -}} - - {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$direction:$operation}} - {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} - {{:assign var="total" from="reste.%s"|args:$out_temp_key}} - {{if $total == null}} - {{:assign total=0}} - {{/if}} - - {{if $otk != null && $otk != $out_temp_key}} - - - {{/if}} - {{if $otk == null || $otk != $out_temp_key}} - - - - - - - - - - - - {{:assign otk=$out_temp_key}} - {{/if}} - - {{if $direction == 'input' && $type_mvt == 'retour'}} - {{:assign var="reste.%s"|args:$out_temp_key value="%d-%d"|math:$total:$amount}} - {{elseif $direction == 'output' && $type_mvt == 'temporaire'}} - {{:assign var="reste.%s"|args:$out_temp_key value="%d+%d"|math:$total:$amount}} - {{/if}} - {{:assign var="total" from="reste.%s"|args:$out_temp_key}} - - - - - - - - -{{/select}} - -
DateOpérationQuantitéTotal
{{$date|date_short}}{{$op_label}}{{$amount}}{{$total}} - {{#restrict section="accounting" level="write"}} - {{if $direction == "output" && $type_mvt == "temporaire"}} - {{:linkbutton - label="Retour" - href="%smovements/output_return.html?key=%s&prop=0&user=%s"|args:$module.url:$mvt_key:$_GET.id - shape="history" - target="_dialog"}} - {{/if}} - {{/restrict}} -
diff --git a/member_loan.html b/member_loan.html deleted file mode 100644 index 28f7278..0000000 --- a/member_loan.html +++ /dev/null @@ -1,105 +0,0 @@ -{{* -*- brindille -*- *}} - -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - -{{* - paramètres : - - id : id membre -*}} - -{{if $_GET.output_type == "loan"}} - {{:assign label="prêt"}} -{{elseif $_GET.output_type == "rent"}} - {{:assign label="location"}} -{{else}} - {{:error message="Cette page n'existe pas !"}} -{{/if}} - -{{:admin_header title="%ss aux membres"|args:$label|ucfirst custom_css="./style.css" current="module_equipment"}} -{{:include file="./_nav.html" current="%s"|args:$label subcurrent="membres"}} - -{{* vérifier l'existence de la table du module *}} -{{#load limit="1"}} - {{:assign table_presente=true}} -{{else}} - {{:assign table_presente=false}} -{{/load}} - -{{if $table_presente}} -{{:include file="./_get_config.html" keep="config"}} - -{{* déterminer les types de mouvements *}} -{{#foreach from=$config.output_nature key="key"}} - {{if $type != 'temporaire'}} - {{:continue}} - {{/if}} - {{if $_GET.output_type == "loan" && $fee != 'payant'}} - {{:assign var="out_keys." value=$key|quote_sql}} - {{elseif $_GET.output_type == "rent" && $fee == 'payant'}} - {{:assign var="out_keys." value=$key|quote_sql}} - {{/if}} -{{/foreach}} -{{:assign out_keys=$out_keys|implode:","}} -{{:assign out_keys="("|cat:$out_keys|cat:")"}} - -{{:assign premier=true}} -{{#select - nom, user, GROUP_CONCAT(mat_name, ", ") AS materiel, SUM(remain) AS quantite - FROM - (SELECT users.nom AS nom, - users.id AS user, - json_extract(mat.document, '$.name') AS mat_name, - json_extract(mvt.document, '$.amount') - IFNULL(SUM(json_extract(retour.document, '$.amount')), 0) AS remain - FROM !table AS mvt - INNER JOIN users ON json_extract(mvt.document, '$.user') = users.id - LEFT JOIN !table AS links ON mvt.key = json_extract(links.document, '$.temp_key') - LEFT JOIN !table AS retour ON retour.key = json_extract(links.document, '$.return') - INNER JOIN !table AS mat ON mat.key = json_extract(mvt.document, '$.equipment') - WHERE json_extract(mvt.document, '$.type') = 'movement' - AND json_extract(mvt.document, '$.operation') IN !op - GROUP BY mvt.key - HAVING remain != 0 - ) - GROUP BY user - ORDER BY nom - ; - !table=$module.table - !op = $out_keys - }} - - {{if $premier}} - - - - - - - - - - {{:assign premier=false}} - {{/if}} - - - - - - -{{else}} - {{if $label == "prêt"}} -

Aucun {{$label}} en cours.

- {{elseif $label == "location"}} -

Aucune {{$label}} en cours.

- {{/if}} -{{/select}} - -
MembreQuantitéMatériels
{{:link href="/admin/users/details.php?id=%s"|args:$user label="%s"|args:$nom}}{{$quantite}}{{$materiel}}
-{{else}} - {{if $label == "prêt"}} -

Aucun {{$label}} en cours.

- {{elseif $label == "location"}} -

Aucune {{$label}} en cours.

- {{/if}} -{{/if}} - -{{:admin_footer}} diff --git a/modify_equipment.html b/modify_equipment.html index 6236ef7..d36c78b 100644 --- a/modify_equipment.html +++ b/modify_equipment.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Paramètres : - key : clé du matériel à modifier diff --git a/module.ini b/module.ini index b64a48c..b1374a7 100644 --- a/module.ini +++ b/module.ini @@ -1,10 +1,8 @@ name="Gestion des matériels" -description="Permet de gérer un inventaire de matériels, ainsi que de suivre les prêts.\nversion 0.7" +description="Permet de gérer un inventaire de matériels, ainsi que de suivre les prêts (en test)." author="Jean-Christophe Engel" author_url="https://gitea.zaclys.com/lesanges" home_button=true menu=true -restrict_section="connect" -restrict_level="read" -restrict_details="Les membres connectés peuvent consulter l'historique de leurs prêts ; les membres ayant accès en lecture aux membres peuvent consulter l'historique des prêts des autres membres ; seuls les membres ayant accès en écriture à la comptabilité peuvent utiliser l'ensemble des fonctionnalités du module." -allow_user_restrict=false +restrict_section="accounting" +restrict_level="write" diff --git a/movements/add_new_equipment.html b/movements/add_new_equipment.html index 456cfdd..af91337 100644 --- a/movements/add_new_equipment.html +++ b/movements/add_new_equipment.html @@ -1,6 +1,9 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} +{{* 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"}} @@ -117,10 +120,6 @@ {{/form}} {{:admin_header title="Entrée de matériel" current="module_equipment"}} -{{* barre de navigation *}} -{{if ! $dialog}} - {{:include file="../_nav.html" current="entrees"}} -{{/if}} {{:form_errors}} {{if $categories != null}} @@ -134,23 +133,23 @@
Informations obligatoires
- {{:input type="date" name="date" label="Date" required=true default=$now|date_short}} - {{:input type="number" name="amount" label="Quantité" min=1 required=true default=1}} - {{:input type="text" name="name" label="Désignation" required=true}} {{if $input_labels|count == 1}} {{:input type="select" name="operation" label="Type" required=true options=$input_labels}} {{else}} {{:input type="select" name="operation" label="Type" required=true default_empty="— Aucun —" options=$input_labels|sort}} {{/if}} + {{:input type="date" name="date" label="Date" required=true default=$now|date_short}} + {{:input type="number" name="amount" label="Quantité" min=1 required=true default=1}} {{if $categories|count == 1}} {{:input type="select" name="category" label="Catégorie" options=$categories required=true}} {{else}} {{:input type="select" name="category" label="Catégorie" default_empty="— Aucune —" options=$categories required=true}} {{/if}} + {{:input type="text" name="name" label="Désignation" required=true}}
- Autres informations + Informations facultatives
{{if $storage != null}} {{:input type="select" name="storage" label="Lieu de stockage" default_empty="— Aucun —" options=$storage required=false}} diff --git a/movements/copy_movement.html b/movements/copy_movement.html index 6814d88..17f2fa1 100644 --- a/movements/copy_movement.html +++ b/movements/copy_movement.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Dupliquer un mouvement paramètres : @@ -96,15 +94,6 @@ {{:assign var="mvt_new.date" value=$_POST.date|parse_date}} {{:assign var="mvt_new.comment" value=$_POST.comment}} - {{if $_POST.return_date != null}} - {{:assign return_date=$_POST.return_date|parse_date}} - {{if $return_date < $_POST.date|parse_date}} - {{:error message="La date de retour doit être postérieure à la date de sortie !"}} - {{/if}} - {{else}} - {{:assign return_date=null}} - {{/if}} - {{* lister les mouvements - insérer le mvt copié à sa place par date croissante @@ -209,41 +198,18 @@ user=$user.id storage=$_POST.storage transactions=$transactions - return_date=$return_date }} - - {{if $_GET.from|substr:0:1 == "l"}} - {{:assign output_type="loan"}} - {{elseif $_GET.from|substr:0:1 == "r"}} - {{:assign output_type="rent"}} - {{/if}} - {{if $_GET.from|substr:1:1 == "h"}} - {{:assign suffix="history"}} - {{elseif $_GET.from|substr:1:1 == "m"}} - {{:assign suffix="movements"}} - {{/if}} - - {{if $_GET.from == "eh"}} - {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=copie"|args:$eqpmt_key:$prop}} - {{elseif $suffix == null}} - {{:redirect force="../index.html"}} - {{else}} - {{:redirect force="../loan_%s.html?output_type=%s&ok=1&key=%s&prop=%s&msg=copie"|args:$suffix:$output_type:$eqpmt_key:$prop}} - {{/if}} + {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=copie"|args:$eqpmt_key:$prop}} {{/form}} -{{if $mvt_new.direction == "input"}} - {{:assign mvt_label="entrée"}} -{{else}} - {{:assign mvt_label="sortie"}} -{{/if}} -{{:admin_header title="Dupliquer une %s"|args:$mvt_label custom_css="./../style.css" current="module_equipment"}} +{{:admin_header title="Dupliquer un mouvement" custom_css="./../style.css" current="module_equipment"}} {{:form_errors}} {{* -------------------- Préparer la saisie -------------------- *}} +{{* récupérer les infos de la catégorie *}} {{#load key=$equipment.category assign="category"}}{{/load}} {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$mvt_new.direction:$mvt_new.operation}} @@ -271,18 +237,17 @@
Informations obligatoires
- {{: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}} {{if $mvt_new.direction == "input"}} {{:input type="select" name="operation" label="Type" required=true options=$input_labels|sort default=$mvt_new.operation}} {{else}} {{:input type="select" name="operation" label="Type" required=true options=$output_labels|sort default=$mvt_new.operation}} {{/if}} + {{:input type="date" name="date" label="Date" required=true default=$mvt_new.date}} + {{:input type="number" name="amount" label="Quantité" min=1 required=true default=$mvt_new.amount}}
-
- Autres informations + Informations facultatives
{{if $prop == 1 && $mvt_new.direction == "output"}} {{:input @@ -295,28 +260,15 @@ max=1 }} {{/if}} - {{if $mvt_new.direction == "input" && $storage != null}} - {{:input type="select" name="storage" label="Lieu de stockage" default=$mvt_new.storage default_empty="— Aucun —" options=$storage required=false}} - {{/if}} - {{if $type_mvt != "retour"}} - {{:input type="list" name="transactions" label="Écritures liées" target="!acc/transactions/selector.php" multiple=true help="par exemple écriture avec facture"}} - {{/if}} - {{:input type="textarea" name="comment" label="Remarques" cols="40" rows="3" required=false default=$mvt_new.comment}} - {{if $mvt_new.direction == "output"}} - {{if $mvt_new.return_date != null}} - {{:assign return_date=$mvt_new.return_date}} - {{else}} - {{if $module.config.loan_duration != null && $module.config.loan_duration > 0}} - {{:assign ts_sortie=$mvt_new.date|strtotime}} - {{:assign ts_retour="%d+%d*(60*60*24)"|math:$ts_sortie:$module.config.loan_duration}} - {{:assign return_date=$ts_retour|date_short}} - {{/if}} + {{if $mvt_new.direction == "input"}} + {{if $storage != null}} + {{:input type="select" name="storage" label="Lieu de stockage" default_empty="— Aucun —" options=$storage required=false}} + {{/if}} + {{if $type_mvt != "retour"}} + {{:input type="list" name="transactions" label="Écritures liées" target="!acc/transactions/selector.php" multiple=true help="par exemple écriture avec facture"}} {{/if}} -
- {{:input type="date" name="return_date" label="Date de retour" default=$return_date}} - -
{{/if}} + {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}}
@@ -327,29 +279,3 @@ {{:admin_footer}} - - - - diff --git a/movements/delete_movement.html b/movements/delete_movement.html index ce9e4c3..aea6243 100644 --- a/movements/delete_movement.html +++ b/movements/delete_movement.html @@ -1,6 +1,4 @@ -{{* -*- brindille -*- *}} - -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} +{{* -*- brindille -*-}} {{* paramètres GET : @@ -23,25 +21,6 @@ {{:include file="../_get_config.html" keep="config"}} {{#form on="delete"}} - {{if $_GET.from|substr:0:1 == "l"}} - {{:assign output_type="loan"}} - {{elseif $_GET.from|substr:0:1 == "r"}} - {{:assign output_type="rent"}} - {{/if}} - {{if $_GET.from|substr:1:1 == "h"}} - {{:assign suffix="history"}} - {{elseif $_GET.from|substr:1:1 == "m"}} - {{:assign suffix="movements"}} - {{/if}} - {{if $_GET.from == "eh"}} - {{:assign from="../equipment_history.html"}} - {{elseif $suffix == null}} - {{:assign from="../index.html"}} - {{else}} - {{:assign from="../loan_%s.html"|args:$suffix}} - {{:assign param="&output_type=%s"|args:$output_type}} - {{/if}} - {{* vérifier s'il est possible de supprimer le mouvement *}} {{if $mvt_suppr.direction == 'input'}} {{:assign var="type_operation" from="config.input_nature.%s.type"|args:$mvt_suppr.operation}} @@ -50,7 +29,7 @@ {{:assign link_key=$key}} {{/load}} {{if $link_key != null}} - {{:redirect force="%s?key=%s&prop=%s&err=1&msg=suppression%s"|args:$from:$mvt_suppr.equipment:$_GET.prop:$param}} + {{:redirect force="../equipment_history.html?key=%s&prop=%s&err=1&msg=suppression"|args:$mvt_suppr.equipment:$_GET.prop}} {{/if}} {{else}} {{:assign dispo=0}} @@ -83,7 +62,7 @@ {{* problème ? *}} {{if $dispo < 0 || $nonprop < 0}} - {{:redirect force="%s?key=%s&prop=%s&err=1&msg=suppression%s"|args:$from:$mvt_suppr.equipment:$_GET.prop:$param}} + {{:redirect force="../equipment_history.html?key=%s&prop=%s&err=1&msg=suppression"|args:$mvt_suppr.equipment:$_GET.prop}} {{/if}} {{/if}} {{/load}} @@ -104,7 +83,7 @@ {{:assign link_key=$key}} {{/load}} {{if $link_key != null}} - {{:redirect force="%s?key=%s&prop=%s&err=1&msg=suppression%s"|args:$from:$mvt_suppr.equipment:$_GET.prop:$param}} + {{:redirect force="../equipment_history.html?key=%s&prop=%s&err=1&msg=suppression"|args:$mvt_suppr.equipment:$_GET.prop}} {{/if}} {{elseif $type_operation == 'retour'}} {{#load type="link" where="$$.return = :key" :key=$_GET.key}} @@ -169,11 +148,11 @@ out=$curr_eqpmt.out notowned=$curr_eqpmt.notowned }} - {{:redirect force="%s?ok=1&key=%s&prop=%s&msg=suppression%s"|args:$from:$mvt_suppr.equipment:$_GET.prop:$param}} + {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=suppression"|args:$mvt_suppr.equipment:$_GET.prop}} {{else}} {{* supprimer le matériel *}} {{:delete key=$curr_eqpmt.key}} - {{:redirect force="../index.html?ok=1&msg=supprmvtmat"|args}} + {{:redirect force="../index.html?ok=1&msg=supprmvtmat"}} {{/if}} {{/form}} diff --git a/movements/input_equipment.html b/movements/input_equipment.html index 502580e..deff4cc 100644 --- a/movements/input_equipment.html +++ b/movements/input_equipment.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Enregistrer une entrée de matériel paramètres : @@ -44,7 +42,7 @@ {{:assign var="equipment.notowned" value="%d+%d"|math:$equipment.notowned:$_POST.amount|intval}} {{/if}} - {{* écritures liées *}} + {{* documents liés *}} {{#foreach from=$_POST.transactions item="value"}} {{:assign var="transactions." value=$value|intval}} {{/foreach}} @@ -106,17 +104,17 @@
Informations obligatoires
+ {{if $input_labels|count == 1}} + {{:input type="select" name="operation" label="Type" required=true options=$input_labels}} + {{else}} + {{:input type="select" name="operation" label="Type" required=true default_empty="— Aucun —" options=$input_labels|sort}} + {{/if}} {{:input type="date" name="date" label="Date" required=true default=$now|date_short}} {{:input type="number" name="amount" label="Quantité" required=true min=1 default=1}} - {{if $input_labels|count == 1}} - {{:input type="select" name="operation" label="Type d'entrée" required=true options=$input_labels}} - {{else}} - {{:input type="select" name="operation" label="Type d'entrée" required=true default_empty="— Aucun —" options=$input_labels|sort}} - {{/if}}
- Autres informations + Informations facultatives
{{if $storage != null}} {{:input type="select" name="storage" label="Lieu de stockage" default_empty="— Aucun —" options=$storage required=false}} diff --git a/movements/input_return.html b/movements/input_return.html index 3b984b3..03e567b 100644 --- a/movements/input_return.html +++ b/movements/input_return.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Enregistrer un retour d'entrée temporaire paramètres : @@ -34,15 +32,14 @@ {{#select json_extract(mvt.document, '$.amount') - IFNULL(SUM(json_extract(mvt2.document, '$.amount')), 0) AS present - FROM !table AS mvt - LEFT JOIN !table AS link ON mvt.key = json_extract(link.document, '$.temp_key') - LEFT JOIN !table AS mvt2 ON mvt2.key = json_extract(link.document, '$.return') + FROM module_data_equipment AS mvt + LEFT JOIN module_data_equipment AS link ON mvt.key = json_extract(link.document, '$.temp_key') + LEFT JOIN module_data_equipment AS mvt2 ON mvt2.key = json_extract(link.document, '$.return') WHERE json_extract(mvt.document, '$.operation') IN !op AND mvt.key = :mvt_key GROUP by mvt.key ; - !table=$module.table !op = $operations :mvt_key = $_GET.key }} @@ -204,9 +201,9 @@
Retour de matériel
+ {{:input type="select" name="operation" label="Type" required=true options=$return_label}} {{:input type="date" name="date" label="Date" required=true default=$now|date_short}} {{:input type="number" name="amount" label="Quantité" min=1 max=$present required=true default=1}} - {{:input type="select" name="operation" label="Type de mouvement" required=true options=$return_label}} {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false}}
diff --git a/movements/modify_movement.html b/movements/modify_movement.html index 7dd87d0..bc50aa8 100644 --- a/movements/modify_movement.html +++ b/movements/modify_movement.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Modifier un mouvement paramètres : @@ -16,6 +14,21 @@ {{* récupérer la config des entrées/sorties *}} {{:include file="../_get_config.html" keep="config, directions"}} +{{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$mvt_new.operation}} + +{{if $mvt_new.direction == "input"}} + {{if $type_mvt == "temporaire"}} + {{:assign prop=0}} + {{else}} + {{:assign prop=1}} + {{/if}} +{{else}} + {{if $type_mvt == "retour"}} + {{:assign prop=0}} + {{else}} + {{:assign prop=1}} + {{/if}} +{{/if}} {{* infos pour affichage *}} {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$mvt_new.direction:$mvt_new.operation}} @@ -30,15 +43,25 @@ {{:error message="Aucun matériel avec la clé « %s »"|args:$eqpmt_key}} {{/load}} +{{#foreach from=$directions key="direction"}} + {{:assign var="nature" from="config.%s_nature"|args:$direction}} + {{#foreach from=$nature key="key"}} + {{if $type_mvt != "retour" && $type != "retour" || + $type_mvt == "retour" && $type == "retour"}} + {{:assign var="%s_labels.%s"|args:$direction:$key value=$label}} + {{/if}} + {{/foreach}} +{{/foreach}} + {{* -------------------- Traiter la saisie -------------------- *}} {{#form on="save"}} - {{* vérifier la validité de la saisie *}} {{if $_POST.amount <= 0}} {{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.amount}} {{/if}} + {{* vérifier validité des données *}} {{if $_POST.date|parse_date|strtotime > $now}} {{:error message="Impossible de saisir une date dans le futur (%s)"|args:$_POST.date}} {{/if}} @@ -61,16 +84,6 @@ {{: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}} - {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$mvt_new.operation}} - - {{if $_POST.return_date != null}} - {{:assign return_date=$_POST.return_date|parse_date}} - {{if $return_date < $_POST.date|parse_date}} - {{:error message="La date de retour doit être postérieure à la date de sortie !"}} - {{/if}} - {{else}} - {{:assign return_date=null}} - {{/if}} {{* lister les mouvements @@ -79,7 +92,10 @@ *}} {{:assign insere=false}} {{#load - where="$$.type = 'movement' AND $$.equipment = :eqpmt_key" + where=" + $$.type = 'movement' + AND + $$.equipment = :eqpmt_key" :eqpmt_key=$eqpmt_key order="$$.date" assign="movement" @@ -181,7 +197,7 @@ {{* enregistrer le mouvement modifié *}} {{if $user == null}} - {{:assign user_id=null}} + {{:assign user_id=$mvt_new.user}} {{else}} {{:assign user_id=$user.id}} {{/if}} @@ -199,49 +215,11 @@ user=$user_id storage=$_POST.storage transactions=$transactions - return_date=$return_date }} - - {{if $_GET.from|substr:0:1 == "l"}} - {{:assign output_type="loan"}} - {{elseif $_GET.from|substr:0:1 == "r"}} - {{:assign output_type="rent"}} - {{/if}} - {{if $_GET.from|substr:1:1 == "h"}} - {{:assign suffix="history"}} - {{elseif $_GET.from|substr:1:1 == "m"}} - {{:assign suffix="movements"}} - {{/if}} - - {{if $mvt_new.direction == "input"}} - {{if $type_mvt == "temporaire"}} - {{:assign prop=0}} - {{else}} - {{:assign prop=1}} - {{/if}} - {{else}} - {{if $type_mvt == "retour"}} - {{:assign prop=0}} - {{else}} - {{:assign prop=1}} - {{/if}} - {{/if}} - - {{if $_GET.from == "eh"}} - {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=modification"|args:$eqpmt_key:$prop}} - {{elseif $suffix == null}} - {{:redirect force="../index.html"}} - {{else}} - {{:redirect force="../loan_%s.html?output_type=%s&ok=1&key=%s&prop=%s&msg=modification"|args:$suffix:$output_type:$eqpmt_key:$prop}} - {{/if}} + {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=%s&msg=modification"|args:$eqpmt_key:$prop}} {{/form}} -{{if $mvt_new.direction == "input"}} - {{:assign mvt_label="entrée"}} -{{else}} - {{:assign mvt_label="sortie"}} -{{/if}} -{{:admin_header title="Modifier une %s"|args:$mvt_label custom_css="./../style.css" current="module_equipment"}} +{{:admin_header title="Modifier un mouvement" custom_css="./../style.css" current="module_equipment"}} {{:form_errors}} {{* @@ -250,22 +228,15 @@ {{#load key=$equipment.category assign="category"}}{{/load}} -{{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$mvt_new.operation}} -{{#foreach from=$directions key="direction"}} - {{:assign var="nature" from="config.%s_nature"|args:$direction}} - {{#foreach from=$nature key="key"}} - {{if $type_mvt != "retour" && $type != "retour" || - $type_mvt == "retour" && $type == "retour"}} - {{:assign var="%s_labels.%s"|args:$direction:$key value=$label}} - {{/if}} - {{/foreach}} -{{/foreach}} - - {{if $mvt_new.user != null}} {{#select id, !name as nom FROM users WHERE id=:id; !name=$config.user_fields.name_sql :id=$mvt_new.user}} {{:assign var="user.%s"|args:$id value=$nom}} {{/select}} + {{#load type="link" where="$$.direction="output" AND $$.temp_key = :mvt_key" :mvt_key=$mvt_new.key limit=1}} + {{:assign retour=true}} + {{else}} + {{:assign retour=false}} + {{/load}} {{/if}} {{#load type="storage" order="$$.name"}} @@ -294,20 +265,19 @@
Informations obligatoires
- {{: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}} {{if $mvt_new.direction == "input"}} {{:input type="select" name="operation" label="Type" required=true options=$input_labels|sort default=$mvt_new.operation}} {{else}} {{:input type="select" name="operation" label="Type" required=true options=$output_labels|sort default=$mvt_new.operation}} {{/if}} + {{:input type="date" name="date" label="Date" required=true default=$mvt_new.date}} + {{:input type="number" name="amount" label="Quantité" min=1 required=true default=$mvt_new.amount}}
-
- Autres informations + Informations facultatives
- {{if $mvt_new.direction == "output" && $type_mvt != "retour"}} + {{if $prop == 1 && $mvt_new.direction == "output" && ! $retour}} {{:input type="list" name="user" @@ -318,28 +288,15 @@ max=1 }} {{/if}} - {{if $mvt_new.direction == "input" && $storage != null}} - {{:input type="select" name="storage" label="Lieu de stockage" default=$mvt_new.storage default_empty="— Aucun —" options=$storage required=false}} - {{/if}} - {{if $type_mvt != "retour"}} - {{:input type="list" name="transactions" label="Écritures liées" default=$mvt_new.transactions target="!acc/transactions/selector.php" multiple=true help="par exemple écriture avec facture"}} + {{if $mvt_new.direction == "input"}} + {{if $storage != null}} + {{:input type="select" name="storage" label="Lieu de stockage" default=$mvt_new.storage default_empty="— Aucun —" options=$storage required=false}} + {{/if}} + {{if $type_mvt != "retour"}} + {{:input type="list" name="transactions" default=$mvt_new.transactions label="Écritures liées" target="!acc/transactions/selector.php" multiple=true help="par exemple écriture avec facture"}} + {{/if}} {{/if}} {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_new.comment}} - {{if $mvt_new.direction == "output"}} - {{if $mvt_new.return_date != null}} - {{:assign return_date=$mvt_new.return_date}} - {{else}} - {{if $module.config.loan_duration != null && $module.config.loan_duration > 0}} - {{:assign ts_sortie=$mvt_new.date|strtotime}} - {{:assign ts_retour="%d+%d*(60*60*24)"|math:$ts_sortie:$module.config.loan_duration}} - {{:assign return_date=$ts_retour|date_short}} - {{/if}} - {{/if}} -
- {{:input type="date" name="return_date" label="Date de retour" default=$return_date}} - -
- {{/if}}
@@ -350,29 +307,3 @@ {{:admin_footer}} - - - - diff --git a/movements/movement.schema.json b/movements/movement.schema.json index eaebdb3..bd27c1c 100644 --- a/movements/movement.schema.json +++ b/movements/movement.schema.json @@ -46,11 +46,6 @@ "items": { "type": "integer" } - }, - "return_date" : { - "description": "Date de retour du matériel", - "type" : ["null", "string"], - "format" : "date" } }, "required": ["type", "direction", "operation", "amount", "equipment", "date", "comment"] diff --git a/movements/movement_details.html b/movements/movement_details.html deleted file mode 100644 index 7011d81..0000000 --- a/movements/movement_details.html +++ /dev/null @@ -1,119 +0,0 @@ -{{* -*- brindille -*- *}} - -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - -{{* - Afficher les détails d'un mouvement et donner la possibilité : - - d'associer des fichiers - - de modifier, supprimer ou dupliquer le mouvement - paramètres : - - key : clé du mouvement - - prop = 1 si matériel appartient à l'asso - - from = page d'appel -*}} - -{{:admin_header title="Détails du mouvement" custom_css="../style.css" current="module_equipment"}} -{{:form_errors}} - -{{* récupérer les infos du mouvement *}} -{{#load key=$_GET.key assign="mvt"}} -{{else}} - {{:error message="Aucun mouvement avec la clé %s"|args:$_GET.key}} -{{/load}} - -{{* récupérer la config des entrées/sorties *}} -{{:include file="../_get_config.html" keep="config, directions"}} -{{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt.direction:$mvt.operation}} - -{{* récupérer les infos du matériel associé *}} -{{#load key=$mvt.equipment assign="equipment"}} -{{else}} - {{:error message="Aucun matériel avec la clé « %s »"|args:$mvt.equipment}} -{{/load}} - -{{* - -------------------- Afficher les informations du mouvement -------------------- -*}} - -{{:assign var="op_label" from="config.%s_nature.%s.label"|args:$mvt.direction:$mvt.operation}} -{{#load key=$equipment.category assign="category"}}{{/load}} -{{#load key=$mvt.storage assign="storage"}}{{/load}} -{{#select !name as nom FROM users WHERE id=:id; !name=$config.user_fields.name_sql :id=$mvt.user}} - {{:assign user_name=$nom}} -{{/select}} - - - -
-
Opération
-
{{$op_label}}
-
Matériel
-
{{:link href="../equipment_history.html?key=%s&prop=%s"|args:$equipment.key:$_GET.prop label=$equipment.name}}
-
Catégorie
-
{{:link href="../index.html?cat_key=%s&prop=1"|args:$category.key label=$category.name}}
-
Date
-
{{$mvt.date|date_short}}
-
Quantité
-
{{$mvt.amount}}
- {{if $mvt.direction == "output" && $type_mvt != "retour"}} -
Membre destinataire
-
- {{if $mvt.user != null}} - {{:link href="/admin/users/details.php?id=%s"|args:$mvt.user label=$user_name}} - {{else}}— - {{/if}} -
- {{/if}} - {{if $mvt.direction == "input"}} -
Lieu de stockage
-
- {{if $storage != null}} - {{$storage.name}} - {{else}}— - {{/if}} -
- {{/if}} -
Écritures liées
-
- {{#foreach from=$mvt.transactions item="trans"}} - {{:link class="num" href="!acc/transactions/details.php?id=%d"|args:$trans label=$trans}} - {{else}}— - {{/foreach}} -
- {{if $mvt.direction == "output" && $type_mvt != "retour"}} -
Date de retour
-
- {{if $mvt.return_date != null}} - {{$mvt.return_date|date_short}} - {{else}}— - {{/if}} -
- {{/if}} -
Remarques
-
{{if $mvt.comment != null}} - {{$mvt.comment}} - {{else}}— - {{/if}} -
-
- -{{:admin_files path=$mvt.key upload=true edit=true use_trash=false}} -{{:admin_footer}} diff --git a/movements/output_equipment.html b/movements/output_equipment.html index 7a1958a..9993f78 100644 --- a/movements/output_equipment.html +++ b/movements/output_equipment.html @@ -1,11 +1,8 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* paramètres : - key : clé du matériel à sortir - - output_type : loan (prêt), rent (location), rien (cas général) *}} {{* récupérer la config des entrées/sorties *}} @@ -13,17 +10,7 @@ {{* types de sorties *}} {{#foreach from=$config.output_nature key=key}} - {{if $type == 'retour'}} - {{:continue}} - {{/if}} - {{if $type == 'temporaire' && $fee == 'payant'}} - {{:assign var="paid_keys." value=$key}} - {{/if}} - {{if $_GET.output_type == null}} - {{:assign var="output_labels.%s"|args:$key value=$label}} - {{elseif $type == 'temporaire' && $_GET.output_type == "loan" && $fee != 'payant'}} - {{:assign var="output_labels.%s"|args:$key value=$label}} - {{elseif $type == 'temporaire' && $_GET.output_type == "rent" && $fee == 'payant'}} + {{if $type != 'retour'}} {{:assign var="output_labels.%s"|args:$key value=$label}} {{/if}} {{/foreach}} @@ -33,31 +20,17 @@ {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} - {{* vérifier la validité de la saisie *}} - {{* interdire date dans le futur *}} {{if $_POST.date|parse_date|strtotime > $now}} {{:error message="Impossible de saisir une date dans le futur (%s)"|args:$_POST.date}} {{/if}} + {{* vérifier les infos saisies *}} {{if $_POST.operation == ""}} {{:error message="Vous devez choisir un type de sortie"}} {{/if}} {{:assign var="type_mvt" from="config.output_nature.%s.type"|args:$_POST.operation}} - {{if $type_mvt != "temporaire" && $_POST.return_date != null}} - {{:error message="On ne peut associer une date de retour qu'à une sortie temporaire"}} - {{/if}} - - {{if $_POST.return_date != null}} - {{:assign return_date=$_POST.return_date|parse_date}} - {{if $return_date < $_POST.date|parse_date}} - {{:error message="La date de retour doit être postérieure à la date de sortie !"}} - {{/if}} - {{else}} - {{:assign return_date=null}} - {{/if}} - {{if $_POST.user|count > 1}} {{:error message="Un membre au plus peut être associé à une sortie"}} {{/if}} @@ -144,11 +117,6 @@ {{:assign var="equipment.out" value="%d+%d"|math:$equipment.out:$_POST.amount|intval}} {{/if}} - {{* écritures liées *}} - {{#foreach from=$_POST.transactions item="value"}} - {{:assign var="transactions." value=$value|intval}} - {{/foreach}} - {{:save key=$equipment.key validate_schema="../equipment.schema.json" @@ -174,8 +142,6 @@ date=$_POST.date|parse_date comment=$_POST.remarques|trim user=$user.id - return_date=$return_date - transactions=$transactions }} {{:redirect force="../equipment_history.html?ok=1&key=%s&prop=1&msg=sortie"|args:$_GET.key}} {{/form}} @@ -185,16 +151,11 @@ {{* barre de navigation *}} {{:include file="../_nav.html" current="sorties"}} {{/if}} -{{:form_errors}} {{#load key=$equipment.category assign="category"}}{{/load}} {{:assign dispo="%d-%d"|math:$equipment.stock:$equipment.out}} {{if $dispo > 0}} - {{if $module.config.loan_duration != null && $module.config.loan_duration > 0}} - {{:assign ts_retour="%d+%d*(60*60*24)"|math:$now:$module.config.loan_duration}} - {{:assign date_retour=$ts_retour|date_short}} - {{/if}} {{* formulaire de sortie de matériel *}}
@@ -212,17 +173,17 @@
Informations obligatoires
+ {{if $output_labels|count == 1}} + {{:input type="select" name="operation" label="Type" required=true options=$output_labels}} + {{else}} + {{:input type="select" name="operation" label="Type" required=true default_empty="— Aucun —" options=$output_labels|sort}} + {{/if}} {{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}} {{:input type="number" name="amount" label="Quantité" required=true default=1 min=1 max=$dispo}} - {{if $output_labels|count == 1}} - {{:input type="select" name="operation" label="Type de sortie" required=true options=$output_labels}} - {{else}} - {{:input type="select" name="operation" label="Type de sortie" required=true default_empty="— Aucun —" options=$output_labels|sort}} - {{/if}}
- Autres informations + Informations facultatives
{{:input type="list" @@ -232,12 +193,7 @@ multiple=true max=1 }} - {{:input type="list" name="transactions" label="Écritures liées" target="!acc/transactions/selector.php" multiple=true help="par exemple écriture avec facture"}} {{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}} -
- {{:input type="date" id="return_date" name="return_date" label="Date de retour" default=$date_retour}} - -

@@ -248,30 +204,5 @@

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

{{/if}} +{{:form_errors}} {{:admin_footer}} - - - - diff --git a/movements/output_return.html b/movements/output_return.html index b5c5e9c..679de12 100644 --- a/movements/output_return.html +++ b/movements/output_return.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Enregistrer un retour de sortie temporaire paramètres : @@ -34,15 +32,14 @@ {{#select json_extract(mvt.document, '$.amount') - IFNULL(SUM(json_extract(mvt2.document, '$.amount')), 0) AS exterieur - FROM !table AS mvt - LEFT JOIN !table AS link ON mvt.key = json_extract(link.document, '$.temp_key') - LEFT JOIN !table AS mvt2 ON mvt2.key = json_extract(link.document, '$.return') + FROM module_data_equipment AS mvt + LEFT JOIN module_data_equipment AS link ON mvt.key = json_extract(link.document, '$.temp_key') + LEFT JOIN module_data_equipment AS mvt2 ON mvt2.key = json_extract(link.document, '$.return') WHERE json_extract(mvt.document, '$.operation') IN !op AND mvt.key = :mvt_key GROUP by mvt.key ; - !table=$module.table !op = $operations :mvt_key = $_GET.key }} @@ -214,13 +211,13 @@
Informations obligatoires
+ {{:input type="select" name="operation" label="Type" required=true options=$return_label}} {{:input type="date" name="date" label="Date" required=true default=$now|date_short}} {{:input type="number" name="amount" label="Quantité" min=1 max=$exterieur required=true default=1}} - {{:input type="select" name="operation" label="Type de mouvement" required=true options=$return_label}}
- Autres informations + Informations facultatives
{{if $storage != null}} {{:input type="select" name="storage" label="Lieu de stockage" default_empty="— Aucun —" options=$storage required=false}} diff --git a/scripts.js b/scripts.js index c913078..299b7e4 100644 --- a/scripts.js +++ b/scripts.js @@ -25,51 +25,3 @@ function disableColumSort(liste) { } } } - -/** - * renvoyer la valeur en secondes d'une date au format j/m/a - * @param {string} date - */ -function str2sec(date) { - const jma = date.split('/'); - const dd = new Date(jma[2], jma[1]-1, jma[0]); - return dd.getTime()/1000; -} - -// renvoyer la valeur en secondes d'un champ date -function getDate(idelem) { - return str2sec(document.getElementById(idelem).value); -} - -/** - * modifier la date de retour en fonction de la date de sortie et de la durée du prêt - */ -function setReturnDate(id_date, id_return_date, id_loan_duration) -{ - const loan_duration = document.getElementById(id_loan_duration).value; - if (loan_duration !== undefined && loan_duration > 0) { - let nbsec = getDate(id_date) + loan_duration*24*60*60; - const date_retour = new Date(nbsec * 1000); - document.getElementById(id_return_date).value = date_retour.toLocaleDateString(); - } -} - -/** - * changer la visibilité de la date de retour - */ -function toggleVisibility(id_date, id_type, div, id_return_date) -{ - const key = document.getElementById(id_type).value; - let type_sortie; - if (key !== undefined && key != '') { - type_sortie = output_nature[key].type; - } - const div_date = document.getElementById(div); - if (type_sortie == 'temporaire') { - div_date.style.visibility = "visible"; - document.getElementById(id_date).onchange(); - } else { - div_date.style.visibility = "hidden"; - document.getElementById(id_return_date).value = null; - } -} diff --git a/snippets/_details.html b/snippets/_details.html deleted file mode 100644 index 10a1fe1..0000000 --- a/snippets/_details.html +++ /dev/null @@ -1,210 +0,0 @@ -{{* -*- brindille -*- *}} - -{{* lecture config (défaut ou enregistrée) *}} -{{:include file="../_get_config.html" keep="config, directions"}} - -{{#foreach from=$directions key="direction"}} - {{:assign var="nature" from="config.%s_nature"|args:$direction}} - {{#foreach from=$nature key=key}} - {{:assign var="types.%s.%s."|args:$direction:$type value=$key|quote_sql}} - {{/foreach}} - {{:assign var="io_types" from="types.%s"|args:$direction}} - {{#foreach from=$io_types key=key}} - {{:assign var=elem from="io_types.%s"|args:$key}} - {{:assign elem=$elem|implode:","}} - {{:assign elem="("|cat:$elem|cat:")"}} - {{:assign var="%s_types.%s"|args:$direction:$key value=$elem}} - {{/foreach}} -{{/foreach}} - -{{* - vérifier l'existence de la table du module - eh oui, il se peut qu'elle ne soit pas encore créée si aucune donnée n'a été ajoutée dedans -*}} -{{#load limit="1"}} - {{:assign table_presente=true}} -{{else}} - {{:assign table_presente=false}} -{{/load}} - -{{if $table_presente}} - {{* Matériels attribués temporairement *}} - {{* vérifier la présence des types d'entrées et de sorties requis *}} - {{if $output_types|has_key:"temporaire" && $input_types|has_key:"retour"}} - - {{* - Calculer les quantités de matériel en prêt - *}} - {{:assign premier=true}} - {{#select - json_extract(mvt.document, '$.direction') AS direction, - json_extract(mvt.document, '$.date') AS date, - eqpmt.key as eqpmt_key, - json_extract(eqpmt.document, '$.name') AS eqpmt_name, - json_extract(mvt.document, '$.amount') AS qte, - json_extract(mvt.document, '$.return_date') AS return_date, - json_extract(mvt.document, '$.operation') AS operation - FROM !table AS mvt - INNER JOIN users ON json_extract(mvt.document, '$.user') = users.id - INNER JOIN !table AS eqpmt ON json_extract(mvt.document, '$.equipment') = eqpmt.key - WHERE - users.id = :user - AND - json_extract(mvt.document, '$.type') = 'movement' - AND - (json_extract(mvt.document, '$.operation') IN !output_types - OR - json_extract(mvt.document, '$.operation') IN !input_types) - ORDER BY eqpmt_name, date - ; - !table=$module.table - :user = $user.id - !output_types=$output_types.temporaire - !input_types=$input_types.retour - }} - {{if $premier}} - {{:assign premier=false}} - {{:assign total=0}} - {{:assign nb_jours=0}} - {{:assign old_eqpmt_key=$eqpmt_key}} - {{:assign var="ligne.date" value=$date}} - {{:assign var="ligne.eqpmt_key" value=$eqpmt_key}} - {{:assign var="ligne.materiel" value=$eqpmt_name}} - {{:assign var="ligne.return_date" value=$return_date}} - {{:assign var="ligne.retard" value="0"}} - {{if $return_date != null}} - {{:assign ts_retour=$return_date|strtotime}} - {{:assign nb_jours="floor((%d-%d)/(60*60*24))"|math:$now:$ts_retour}} - {{:assign var="ligne.retard" value=$nb_jours}} - {{/if}} - {{/if}} - - {{if $eqpmt_key != $old_eqpmt_key}} - {{if $total > 0}} - {{:assign var="ligne.qte" value=$total}} - {{:assign var="lignes." value=$ligne}} - {{/if}} - {{:assign total=0}} - {{:assign nb_jours=0}} - {{:assign old_eqpmt_key=$eqpmt_key}} - {{:assign var="ligne.date" value=$date}} - {{:assign var="ligne.eqpmt_key" value=$eqpmt_key}} - {{:assign var="ligne.materiel" value=$eqpmt_name}} - {{:assign var="ligne.return_date" value=$return_date}} - {{:assign var="ligne.retard" value="0"}} - {{if $return_date != null}} - {{:assign ts_retour=$return_date|strtotime}} - {{:assign nb_jours="floor((%d-%d)/(60*60*24))"|math:$now:$ts_retour}} - {{:assign var="ligne.retard" value=$nb_jours}} - {{/if}} - {{/if}} - - {{if $direction == "output"}} - {{:assign total="%d+%d"|math:$total:$qte}} - {{else}} - {{:assign total="%d-%d"|math:$total:$qte}} - {{/if}} - {{/select}} - - {{if $total > 0}} - {{:assign var="ligne.qte" value=$total}} - {{:assign var="lignes." value=$ligne}} - {{/if}} - - {{if $lignes|count > 0}} -

Matériels attribués temporairement

- - - - - - - - - - - - {{#foreach from=$lignes}} - - - - - - - - - {{/foreach}} - -
DateMatérielQuantitéDate de retourRemarque -
{{$date|date_short}}{{$materiel}}{{$qte}}{{$return_date|date_short}} - {{if $retard < 0}} - {{:assign delai="abs(%d)"|math:$retard}} - {{"Reste %s jours"|args:$delai}} - {{elseif $retard > 0 }} - {{:tag color="darkred" label="Retard %s jours"|args:$retard}} - {{elseif $return_date != null}} - {{:tag color="darkgreen" label="À rendre aujourdh'ui"}} - {{/if}} - - {{:linkbutton - label="Historique" - href="%smember_history.html?key=%s&id=%s"|args:$module.url:$eqpmt_key:$user.id - shape="table" - target="_dialog" - }} -
- {{/if}} - {{/if}} - - {{* Matériels attribués définitivement *}} - {{* vérifier la présence des types de sorties requis *}} - {{if $output_types|has_key:"définitif"}} - {{#select - eqpmt.key as eqpmt_key, - json_extract(eqpmt.document, '$.name') as eqpmt_name, - json_extract(mvt.document, '$.direction') as direction, - json_extract(mvt.document, '$.operation') as operation, - MIN(json_extract(mvt.document, '$.date')) as date, - SUM(json_extract(mvt.document, '$.amount')) as amount - FROM !table AS mvt - INNER JOIN users ON json_extract(mvt.document, '$.user') = users.id - INNER JOIN !table AS eqpmt - ON json_extract(mvt.document, '$.equipment') = eqpmt.key - WHERE users.id = :user - AND json_extract(mvt.document, '$.operation') IN !output_types - GROUP BY eqpmt_key, operation - ORDER BY eqpmt_name, date - ; - !table=$module.table - :user = $user.id - !output_types=$output_types.définitif - assign="def_mat." - }} - {{/select}} - {{/if}} - - {{if $def_mat|count != 0}} -

Matériels attribués définitivement

- - - - - - - - - - - {{#foreach from=$def_mat}} - {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} - - - - - - - {{/foreach}} - -
DateMatérielOpérationQuantité
{{$date|date_short}}{{$eqpmt_name}}{{$op_label}}{{$amount}}
- {{/if}} -{{/if}} diff --git a/snippets/my_details.html b/snippets/my_details.html deleted file mode 100644 index de06ba9..0000000 --- a/snippets/my_details.html +++ /dev/null @@ -1,3 +0,0 @@ -{{* -*- brindille -*- *}} - -{{:include file="./_details.html"}} diff --git a/snippets/user_details.html b/snippets/user_details.html index 5702542..b288eb2 100644 --- a/snippets/user_details.html +++ b/snippets/user_details.html @@ -1,4 +1,167 @@ {{* -*- brindille -*- *}} {{#restrict section="users" level="read"}}{{/restrict}} -{{:include file="./_details.html"}} + +{{* lecture config (défaut ou enregistrée) *}} +{{:include file="../_get_config.html" keep="config, directions"}} + +{{#foreach from=$directions key="direction"}} + {{:assign var="nature" from="config.%s_nature"|args:$direction}} + {{#foreach from=$nature key=key}} + {{:assign var="types.%s.%s."|args:$direction:$type value=$key|quote_sql}} + {{/foreach}} + {{:assign var="io_types" from="types.%s"|args:$direction}} + {{#foreach from=$io_types key=key}} + {{:assign var=elem from="io_types.%s"|args:$key}} + {{:assign elem=$elem|implode:","}} + {{:assign elem="("|cat:$elem|cat:")"}} + {{:assign var="%s_types.%s"|args:$direction:$key value=$elem}} + {{/foreach}} +{{/foreach}} + +{{* + vérifier l'existence de la table du module + eh oui, il se peut qu'elle ne soit pas encore créée si aucune donnée n'a été ajoutée dedans +*}} +{{#load limit="1"}} + {{:assign table_presente=true}} +{{else}} + {{:assign table_presente=false}} +{{/load}} + +{{if $table_presente}} + {{* vérifier la présence des types d'entrées et de sorties requis *}} + {{if $output_types|has_key:"temporaire" && $input_types|has_key:"retour"}} + {{#select + eqpmt.key as eqpmt_key, + json_extract(eqpmt.document, '$.name') as eqpmt_name, + mvt.key AS mvt_key, + json_extract(mvt.document, '$.direction') as direction, + json_extract(mvt.document, '$.operation') as operation, + json_extract(mvt.document, '$.date') as date, + json_extract(mvt.document, '$.amount') as amount + FROM module_data_equipment AS mvt + INNER JOIN users ON json_extract(mvt.document, '$.user') = users.id + INNER JOIN module_data_equipment AS eqpmt + ON json_extract(mvt.document, '$.equipment') = eqpmt.key + WHERE users.id = :user + AND (json_extract(mvt.document, '$.operation') IN !output_types + OR json_extract(mvt.document, '$.operation') IN !input_types) + ORDER BY date + ; + :user = $user.id + !output_types=$output_types.temporaire + !input_types=$input_types.retour + assign="temp_mat." + }} + {{/select}} + {{/if}} + + {{if $temp_mat|count != 0}} +

Matériels attribués temporairement

+ + + + + + + + + + + + + {{#foreach from=$temp_mat}} + {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$direction:$operation}} + {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} + {{:assign var="total" from="reste.%s"|args:$eqpmt_key}} + {{if $total == null}} + {{:assign total=0}} + {{/if}} + {{if $direction == 'input' && $type_mvt == 'retour'}} + {{:assign var="reste.%s"|args:$eqpmt_key value="%d-%d"|math:$total:$amount}} + {{elseif $direction == 'output' && $type_mvt == 'temporaire'}} + {{:assign var="reste.%s"|args:$eqpmt_key value="%d+%d"|math:$total:$amount}} + {{/if}} + {{:assign var="total" from="reste.%s"|args:$eqpmt_key}} + + + + + + + + + {{/foreach}} + +
DateOpérationMatérielQuantitéTotal
{{$date|date_short}}{{$op_label}}{{$eqpmt_name}}{{$amount}}{{$total}} + {{if $direction == "output" && $type_mvt == "temporaire"}} + {{:linkbutton + label="Retour" + href="%smovements/output_return.html?key=%s&prop=0&user=%s"|args:$module.url:$mvt_key:$user.id + shape="history" + target="_dialog"}} + {{/if}} +
+ {{/if}} + + {{* vérifier la présence des types d'entrées et de sorties requis *}} + {{ if $output_types|has_key:"définitif"}} + {{#select + eqpmt.key as eqpmt_key, + json_extract(eqpmt.document, '$.name') as eqpmt_name, + json_extract(mvt.document, '$.direction') as direction, + json_extract(mvt.document, '$.operation') as operation, + json_extract(mvt.document, '$.date') as date, + json_extract(mvt.document, '$.amount') as amount + FROM module_data_equipment AS mvt + INNER JOIN users ON json_extract(mvt.document, '$.user') = users.id + INNER JOIN module_data_equipment AS eqpmt + ON json_extract(mvt.document, '$.equipment') = eqpmt.key + WHERE users.id = :user + AND json_extract(mvt.document, '$.operation') IN !output_types + ORDER BY date DESC + ; + :user = $user.id + !output_types=$output_types.définitif + assign="def_mat." + }} + {{/select}} + {{/if}} + + {{if $def_mat|count != 0}} +

Matériels attribués définitivement

+ + + + + + + + + + + + {{#foreach from=$def_mat}} + {{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$direction:$operation}} + {{:assign var="op_label" from="config.%s_nature.%s.label"|args:$direction:$operation}} + {{:assign var="total" from="reste.%s"|args:$eqpmt_key}} + {{if $total == null}} + {{:assign total=0}} + {{/if}} + {{if $direction == 'output' && $type_mvt == 'définitif'}} + {{:assign var="reste.%s"|args:$eqpmt_key value="%d+%d"|math:$total:$amount}} + {{/if}} + {{:assign var="total" from="reste.%s"|args:$eqpmt_key}} + + + + + + + + {{/foreach}} + +
DateOpérationMatérielQuantitéTotal
{{$date|date_short}}{{$op_label}}{{$eqpmt_name}}{{$amount}}{{$total}}
+ {{/if}} +{{/if}} diff --git a/storage/add_storage.html b/storage/add_storage.html index 628ae44..71e6464 100644 --- a/storage/add_storage.html +++ b/storage/add_storage.html @@ -1,8 +1,6 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Traiter l'envoi du formulaire *}} {{#form on="save"}} diff --git a/storage/delete_storage.html b/storage/delete_storage.html index eb031e8..03facb6 100644 --- a/storage/delete_storage.html +++ b/storage/delete_storage.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* paramètres : - key : clé du stockage à supprimer diff --git a/storage/index.html b/storage/index.html index 0464432..62ae527 100644 --- a/storage/index.html +++ b/storage/index.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Afficher les lieux de stockage *}} diff --git a/storage/modify_storage.html b/storage/modify_storage.html index e647c4a..8d6878b 100644 --- a/storage/modify_storage.html +++ b/storage/modify_storage.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* récupérer les infos du lieu de stockage *}} {{#load key=$_GET.key assign="storage"}} {{else}} diff --git a/style.css b/style.css index 9b112b6..2193b11 100644 --- a/style.css +++ b/style.css @@ -21,10 +21,6 @@ } /* désactiver rétroaction pour colonnes non triables */ -table.list > thead th[class~=nosort] a:hover { +table.list > thead td[class~=nosort] a:hover { background-color : rgba(var(--gSecondColor), 0.); } - -.nombre { - text-align: right !important; -} diff --git a/unarchive_equipment.html b/unarchive_equipment.html index bdea710..4b86bcd 100644 --- a/unarchive_equipment.html +++ b/unarchive_equipment.html @@ -1,7 +1,5 @@ {{* -*- brindille -*- *}} -{{#restrict block=true section="accounting" level="write"}}{{/restrict}} - {{* Remettre le matériel en service Paramètres :