Correction indentation

This commit is contained in:
Jean-Christophe Engel 2023-12-06 09:59:11 +01:00
parent 0e669a7c21
commit 3a9424de78
28 changed files with 1479 additions and 1502 deletions

View File

@ -1,134 +1,134 @@
{{* {{*
Calcul des entrées/sorties de matériels à une date donnée Calcul des entrées/sorties de matériels à une date donnée
paramètres : paramètres :
- liste de catégories - liste de catégories
- date - date
*}} *}}
{{* liste des catégories *}} {{* liste des catégories *}}
{{if $categories === null}} {{if $categories === null}}
{{#load type="category"}} {{#load type="category"}}
{{:assign var="categories." value=$key}} {{:assign var="categories." value=$key}}
{{/load}} {{/load}}
{{/if}} {{/if}}
{{* date *}} {{* date *}}
{{if $date === null}} {{if $date === null}}
{{* :assign date=$now|date:"Y-m-d" *}} {{* :assign date=$now|date:"Y-m-d" *}}
{{:assign date="31/12/9999"|parse_date}} {{:assign date="31/12/9999"|parse_date}}
{{* si on veut aussi lister les mouvements du futur :-) *}} {{* si on veut aussi lister les mouvements du futur :-) *}}
{{/if}} {{/if}}
{{* Extraire et compiler les infos de la base *}} {{* Extraire et compiler les infos de la base *}}
{{#select {{#select
json_extract(mvt.document, '$.date') as 'date', json_extract(mvt.document, '$.date') as 'date',
eqpmt.key as 'eqpmt_key', eqpmt.key as 'eqpmt_key',
json_extract(eqpmt.document, '$.designation') as 'designation', json_extract(eqpmt.document, '$.designation') as 'designation',
cat.key as 'cat_key', cat.key as 'cat_key',
json_extract(cat.document, '$.name') as 'category', json_extract(cat.document, '$.name') as 'category',
mvt.key as 'mvt_key', mvt.key as 'mvt_key',
json_extract(mvt.document, '$.direction') as 'direction', json_extract(mvt.document, '$.direction') as 'direction',
CASE json_extract(mvt.document, '$.direction') CASE json_extract(mvt.document, '$.direction')
WHEN 'input' THEN json_extract(mvt.document, '$.input_nature') WHEN 'input' THEN json_extract(mvt.document, '$.input_nature')
WHEN 'output' THEN json_extract(mvt.document, '$.output_nature') WHEN 'output' THEN json_extract(mvt.document, '$.output_nature')
END END
AS 'operation', AS 'operation',
json_extract(mvt.document, '$.amount') AS 'nombre' json_extract(mvt.document, '$.amount') AS 'nombre'
FROM module_data_equipment as eqpmt FROM module_data_equipment as eqpmt
INNER JOIN module_data_equipment as cat INNER JOIN module_data_equipment as cat
ON json_extract(eqpmt.document, '$.category') = cat.key ON json_extract(eqpmt.document, '$.category') = cat.key
INNER JOIN module_data_equipment as mvt INNER JOIN module_data_equipment as mvt
ON json_extract(mvt.document, '$.equipment') = eqpmt.key ON json_extract(mvt.document, '$.equipment') = eqpmt.key
WHERE json_extract(eqpmt.document, '$.type') = "equipment" WHERE json_extract(eqpmt.document, '$.type') = "equipment"
AND !categories AND !categories
AND json_extract(mvt.document, '$.date') <= :date AND json_extract(mvt.document, '$.date') <= :date
ORDER BY ORDER BY
json_extract(cat.document, '$.name'), json_extract(cat.document, '$.name'),
json_extract(eqpmt.document, '$.designation'), json_extract(eqpmt.document, '$.designation'),
json_extract(mvt.document, '$.date'); json_extract(mvt.document, '$.date');
!categories='cat_key'|sql_where:'IN':$categories !categories='cat_key'|sql_where:'IN':$categories
:date=$date :date=$date
}} }}
{{:assign {{:assign
var="equipments.%s.name"|args:$cat_key var="equipments.%s.name"|args:$cat_key
value=$category}} value=$category}}
{{:assign {{:assign
var="equipments.%s.eqpmt.%s.designation"|args:$cat_key:$eqpmt_key var="equipments.%s.eqpmt.%s.designation"|args:$cat_key:$eqpmt_key
value=$designation}} value=$designation}}
{{* matériel propriété de l'asso en stock *}} {{* matériel propriété de l'asso en stock *}}
{{:assign {{:assign
var="stock" var="stock"
from="equipments.%s.eqpmt.%s.stock"|args:$cat_key:$eqpmt_key}} from="equipments.%s.eqpmt.%s.stock"|args:$cat_key:$eqpmt_key}}
{{if $stock === null}} {{if $stock === null}}
{{:assign stock=0}} {{:assign stock=0}}
{{/if}} {{/if}}
{{* matériel propriété de l'asso à l'extérieur *}} {{* matériel propriété de l'asso à l'extérieur *}}
{{:assign {{:assign
var="exterieur" var="exterieur"
from="equipments.%s.eqpmt.%s.exterieur"|args:$cat_key:$eqpmt_key}} from="equipments.%s.eqpmt.%s.exterieur"|args:$cat_key:$eqpmt_key}}
{{if $exterieur === null}} {{if $exterieur === null}}
{{:assign exterieur=0}} {{:assign exterieur=0}}
{{/if}} {{/if}}
{{* matériel non propriété de l'asso *}} {{* matériel non propriété de l'asso *}}
{{:assign {{:assign
var="nonproprio" var="nonproprio"
from="equipments.%s.eqpmt.%s.nonproprio"|args:$cat_key:$eqpmt_key}} from="equipments.%s.eqpmt.%s.nonproprio"|args:$cat_key:$eqpmt_key}}
{{if $nonproprio === null}} {{if $nonproprio === null}}
{{:assign nonproprio=0}} {{:assign nonproprio=0}}
{{/if}} {{/if}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
{{:include file="./_get_config.html" keep="config"}} {{:include file="./_get_config.html" keep="config"}}
{{if $direction === 'input'}} {{if $direction === 'input'}}
{{* chercher le type d'entrée parmi les types de la config *}} {{* chercher le type d'entrée parmi les types de la config *}}
{{#foreach from=$config.input_nature item="elem"}} {{#foreach from=$config.input_nature item="elem"}}
{{if $operation == $elem.label}} {{if $operation == $elem.label}}
{{if $elem.type == 'définitif'}} {{if $elem.type == 'définitif'}}
{{:assign stock="%d+%d"|math:$stock:$nombre}} {{:assign stock="%d+%d"|math:$stock:$nombre}}
{{:assign {{:assign
var="equipments.%s.eqpmt.%s.stock"|args:$cat_key:$eqpmt_key var="equipments.%s.eqpmt.%s.stock"|args:$cat_key:$eqpmt_key
from=stock}} from=stock}}
{{elseif $elem.type == 'retour'}} {{elseif $elem.type == 'retour'}}
{{:assign exterieur="%d-%d"|math:$exterieur:$nombre}} {{:assign exterieur="%d-%d"|math:$exterieur:$nombre}}
{{:assign {{:assign
var="equipments.%s.eqpmt.%s.exterieur"|args:$cat_key:$eqpmt_key var="equipments.%s.eqpmt.%s.exterieur"|args:$cat_key:$eqpmt_key
from=exterieur}} from=exterieur}}
{{elseif $elem.type == 'temporaire'}} {{elseif $elem.type == 'temporaire'}}
{{:assign nonproprio="%d+%d"|math:$nonproprio:$nombre}} {{:assign nonproprio="%d+%d"|math:$nonproprio:$nombre}}
{{:assign {{:assign
var="equipments.%s.eqpmt.%s.nonproprio"|args:$cat_key:$eqpmt_key var="equipments.%s.eqpmt.%s.nonproprio"|args:$cat_key:$eqpmt_key
from=nonproprio}} from=nonproprio}}
{{/if}} {{/if}}
{{:break}} {{:break}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{elseif $direction === 'output'}} {{elseif $direction === 'output'}}
{{* chercher le type de sortie parmi les types de la config *}} {{* chercher le type de sortie parmi les types de la config *}}
{{#foreach from=$config.output_nature item="elem"}} {{#foreach from=$config.output_nature item="elem"}}
{{if $operation == $elem.label}} {{if $operation == $elem.label}}
{{if $elem.type == 'définitif'}} {{if $elem.type == 'définitif'}}
{{:assign stock="%d-%d"|math:$stock:$nombre}} {{:assign stock="%d-%d"|math:$stock:$nombre}}
{{:assign {{:assign
var="equipments.%s.eqpmt.%s.stock"|args:$cat_key:$eqpmt_key var="equipments.%s.eqpmt.%s.stock"|args:$cat_key:$eqpmt_key
from=stock}} from=stock}}
{{elseif $elem.type == 'temporaire'}} {{elseif $elem.type == 'temporaire'}}
{{:assign exterieur="%d+%d"|math:$exterieur:$nombre}} {{:assign exterieur="%d+%d"|math:$exterieur:$nombre}}
{{:assign {{:assign
var="equipments.%s.eqpmt.%s.exterieur"|args:$cat_key:$eqpmt_key var="equipments.%s.eqpmt.%s.exterieur"|args:$cat_key:$eqpmt_key
from=exterieur}} from=exterieur}}
{{elseif $elem.type == 'retour'}} {{elseif $elem.type == 'retour'}}
{{:assign nonproprio="%d-%d"|math:$nonproprio:$nombre}} {{:assign nonproprio="%d-%d"|math:$nonproprio:$nombre}}
{{:assign {{:assign
var="equipments.%s.eqpmt.%s.nonproprio"|args:$cat_key:$eqpmt_key var="equipments.%s.eqpmt.%s.nonproprio"|args:$cat_key:$eqpmt_key
from=nonproprio}} from=nonproprio}}
{{/if}} {{/if}}
{{:break}} {{:break}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{/select}} {{/select}}

View File

@ -1,6 +1,6 @@
{{* {{*
Récupérer soit la config enregistrée, soit la config par défaut Récupérer soit la config enregistrée, soit la config par défaut
résultat : config.input_nature et config.output_nature résultat : config.input_nature et config.output_nature
*}} *}}
{{* config par défaut *}} {{* config par défaut *}}
@ -8,29 +8,27 @@
{{:assign config_defaut=$config_defaut|json_decode}} {{:assign config_defaut=$config_defaut|json_decode}}
{{if $module.config.input_nature != null}} {{if $module.config.input_nature != null}}
{{:assign var=config.input_nature value=$module.config.input_nature}} {{:assign var=config.input_nature value=$module.config.input_nature}}
{{else}} {{else}}
{{* pas de config enregistrée : utiliser la config par défaut *}} {{* pas de config enregistrée : utiliser la config par défaut *}}
{{#foreach from=$config_defaut.inputs item="elem"}} {{#foreach from=$config_defaut.inputs item="elem"}}
{{#foreach from=$elem key=label item=value}} {{#foreach from=$elem key=label item=value}}
{{:assign var="item.label" value=$label}} {{:assign var="item.label" value=$label}}
{{:assign var="item.type" value=$value}} {{:assign var="item.type" value=$value}}
{{:assign var="config.input_nature." value=$item}} {{:assign var="config.input_nature." value=$item}}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{if $module.config.output_nature != null}} {{if $module.config.output_nature != null}}
{{:assign var=config.output_nature value=$module.config.output_nature}} {{:assign var=config.output_nature value=$module.config.output_nature}}
{{else}} {{else}}
{{* pas de config enregistrée : utiliser la config par défaut *}} {{* pas de config enregistrée : utiliser la config par défaut *}}
{{#foreach from=$config_defaut.outputs item="elem"}} {{#foreach from=$config_defaut.outputs item="elem"}}
{{#foreach from=$elem key=label item=value}} {{#foreach from=$elem key=label item=value}}
{{:assign var="item.label" value=$label}} {{:assign var="item.label" value=$label}}
{{:assign var="item.type" value=$value}} {{:assign var="item.type" value=$value}}
{{:assign var="config.output_nature." value=$item}} {{:assign var="config.output_nature." value=$item}}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}

View File

@ -1,9 +1,9 @@
<nav class="tabs"> <nav class="tabs">
<ul> <ul>
<li {{if $current == 'index'}} class="current"{{/if}}><a href="{{$module.url}}index.html">Inventaire</a></li> <li {{if $current == 'index'}} class="current"{{/if}}><a href="{{$module.url}}index.html">Inventaire</a></li>
<li {{if $current == 'categories'}} class="current"{{/if}}><a href="{{$module.url}}categories/index.html">Catégories</a></li> <li {{if $current == 'categories'}} class="current"{{/if}}><a href="{{$module.url}}categories/index.html">Catégories</a></li>
<li {{if $current == 'entrees'}} class="current"{{/if}}><a href="{{$module.url}}mouvements/entrees/index.html">Entrées</a></li> <li {{if $current == 'entrees'}} class="current"{{/if}}><a href="{{$module.url}}mouvements/entrees/index.html">Entrées</a></li>
<li {{if $current == 'sorties'}} class="current"{{/if}}><a href="{{$module.url}}mouvements/sorties/index.html">Sorties</a></li> <li {{if $current == 'sorties'}} class="current"{{/if}}><a href="{{$module.url}}mouvements/sorties/index.html">Sorties</a></li>
<li {{if $current == 'config'}} class="current"{{/if}}><a href="{{$module.url}}config.html">Configuration</a></li> <li {{if $current == 'config'}} class="current"{{/if}}><a href="{{$module.url}}config.html">Configuration</a></li>
</ul> </ul>
</nav> </nav>

View File

@ -1,14 +1,14 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object", "type": "object",
"properties": { "properties": {
"type": { "type": {
"type": "string", "type": "string",
"enum": ["category"] "enum": ["category"]
}, },
"name": { "name": {
"type": "string" "type": "string"
} }
}, },
"required": ["type", "name"] "required": ["type", "name"]
} }

View File

@ -7,19 +7,18 @@
{{/load}} {{/load}}
{{#form on="delete"}} {{#form on="delete"}}
{{* Vérifier s'il reste des matériels dans cette catégorie *}} {{* Vérifier s'il reste des matériels dans cette catégorie *}}
{{#load type="equipment" category=$_GET.key assign="equipment"}} {{#load type="equipment" category=$_GET.key assign="equipment"}}
{{:redirect force="./index.html?err=1&msg=suppression"}} {{:redirect force="./index.html?err=1&msg=suppression"}}
{{else}} {{else}}
{{* supprimer la catégorie sélectionnée*}} {{* supprimer la catégorie sélectionnée*}}
{{:delete where="key = :key" :key=$category.key}} {{:delete where="key = :key" :key=$category.key}}
{{:redirect force="./index.html?ok=1&msg=suppression"}} {{:redirect force="./index.html?ok=1&msg=suppression"}}
{{/load}} {{/load}}
{{/form}} {{/form}}
{{:delete_form {{:delete_form
legend="Supprimer une catégorie" legend="Supprimer une catégorie"
warning="Supprimer la catégorie « %s » ?"|args:$category.name warning="Supprimer la catégorie « %s » ?"|args:$category.name
info="La suppression n'est possible que si la catégorie ne possède plus de matériel" info="La suppression n'est possible que si la catégorie ne possède plus de matériel"
}} }}

View File

@ -5,68 +5,68 @@
{{:include file="../_nav.html" current="categories"}} {{:include file="../_nav.html" current="categories"}}
{{if $_GET.ok}} {{if $_GET.ok}}
{{if $_GET.msg == "modification"}} {{if $_GET.msg == "modification"}}
<p class="block confirm">Modification enregistrée</p> <p class="block confirm">Modification enregistrée</p>
{{elseif $_GET.msg == "suppression"}} {{elseif $_GET.msg == "suppression"}}
<p class="block confirm">Catégorie supprimée</p> <p class="block confirm">Catégorie supprimée</p>
{{/if}} {{/if}}
{{elseif $_GET.err}} {{elseif $_GET.err}}
{{if $_GET.msg == "modification"}} {{if $_GET.msg == "modification"}}
<p class="block error">{{$_GET.msg}}</p> <p class="block error">{{$_GET.msg}}</p>
{{elseif $_GET.msg == "suppression"}} {{elseif $_GET.msg == "suppression"}}
<p class="block error"> <p class="block error">
Cette catégorie ne peut être supprimée car elle contient encore des matériels Cette catégorie ne peut être supprimée car elle contient encore des matériels
</p> </p>
{{/if}} {{/if}}
{{/if}} {{/if}}
{{* afficher les catégories déjà enregistrées *}} {{* afficher les catégories déjà enregistrées *}}
<section class="categories"> <section class="categories">
{{#list select="$$.name AS 'Catégorie'" order="1" where="$$.type = 'category'"}} {{#list select="$$.name AS 'Catégorie'" order="1" where="$$.type = 'category'"}}
<tr> <tr>
<th>{{$name}}</th> <th>{{$name}}</th>
<td class="actions"> <td class="actions">
{{:linkbutton label="Liste des matériels" href="list_equipment.html?key=%s&dialog"|args:$key shape="search" target="_dialog"}} {{:linkbutton label="Liste des matériels" href="list_equipment.html?key=%s&dialog"|args:$key shape="search" target="_dialog"}}
{{:linkbutton label="Modifier" href="modify_category.html?key=%s"|args:$key shape="edit" target="_dialog"}} {{:linkbutton label="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"}} {{:linkbutton label="Supprimer" href="delete_category.html?key=%s"|args:$key shape="delete" target="_dialog"}}
</td> </td>
</tr> </tr>
{{else}} {{else}}
<p class="block alert">Il n'y a aucune catégorie : vous devez en ajouter.</p> <p class="block alert">Il n'y a aucune catégorie : vous devez en ajouter.</p>
{{/list}} {{/list}}
</section> </section>
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{* Vérifier s'il existe déjà une catégorie avec le même nom *}} {{* Vérifier s'il existe déjà une catégorie avec le même nom *}}
{{#load type="category" where="lower($$.name) = :name" :name=$_POST.name|trim|tolower}} {{#load type="category" where="lower($$.name) = :name" :name=$_POST.name|trim|tolower}}
{{:error message="Impossible d'ajouter la catégorie « %s » car elle existe déjà !"|args:$name|trim}} {{:error message="Impossible d'ajouter la catégorie « %s » car elle existe déjà !"|args:$name|trim}}
{{/load}} {{/load}}
{{:assign key=""|uuid}} {{:assign key=""|uuid}}
{{:save {{:save
key=$key key=$key
validate_schema="./category.schema.json" validate_schema="./category.schema.json"
type="category" type="category"
name=$_POST.name|trim name=$_POST.name|trim
}} }}
{{:redirect to="./index.html?ok=1&msg=Catégorie enregistrée"}} {{:redirect to="./index.html?ok=1&msg=Catégorie enregistrée"}}
{{/form}} {{/form}}
{{:form_errors}} {{:form_errors}}
{{* formulaire d'ajout de catégorie *}} {{* formulaire d'ajout de catégorie *}}
<form method="post" action="{{$self_url}}"> <form method="post" action="{{$self_url}}">
<fieldset class="ajout_categorie"> <fieldset class="ajout_categorie">
<legend>Ajouter une catégorie</legend> <legend>Ajouter une catégorie</legend>
<dl> <dl>
{{:input type="text" name="name" label="Nom" required=true maxlength="100"}} {{:input type="text" name="name" label="Nom" required=true maxlength="100"}}
</dl> </dl>
<p class="submit"> <p class="submit">
{{:button type="submit" name="save" label="Ajouter" shape="right" class="main"}} {{:button type="submit" name="save" label="Ajouter" shape="right" class="main"}}
</p> </p>
</fieldset> </fieldset>
</form> </form>
{{:admin_footer}} {{:admin_footer}}

View File

@ -1,18 +1,18 @@
{{#restrict section="accounting" level="read" block=true}}{{/restrict}} {{#restrict section="accounting" level="read" block=true}}{{/restrict}}
{{#load key=$_GET.key}} {{#load key=$_GET.key}}
{{:assign cat_name=$name}} {{:assign cat_name=$name}}
{{/load}} {{/load}}
{{:admin_header title="Matériels de la catégorie « %s »"|args:$cat_name current="module_equipment"}} {{:admin_header title="Matériels de la catégorie « %s »"|args:$cat_name current="module_equipment"}}
{{if $_GET.dialog === null}} {{if $_GET.dialog === null}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{:include file="../_nav.html" current="categories"}} {{:include file="../_nav.html" current="categories"}}
{{else}} {{else}}
<header class="header"> <header class="header">
<h1>Matériels de la catégorie « {{$cat_name}} »</h1> <h1>Matériels de la catégorie « {{$cat_name}} »</h1>
</header> </header>
{{/if}} {{/if}}
{{:assign var="categories." value=$_GET.key}} {{:assign var="categories." value=$_GET.key}}

View File

@ -8,26 +8,26 @@
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{:save {{:save
key=$category.key key=$category.key
validate_schema="./category.schema.json" validate_schema="./category.schema.json"
type="category" type="category"
name=$_POST.name|trim name=$_POST.name|trim
}} }}
{{:redirect force="./index.html?ok=1&msg=modification"}} {{:redirect force="./index.html?ok=1&msg=modification"}}
{{/form}} {{/form}}
{{:form_errors}} {{:form_errors}}
{{* formulaire de modification de catégorie *}} {{* formulaire de modification de catégorie *}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="modif_categorie"> <fieldset class="modif_categorie">
<legend>Modifier la catégorie « {{$category.name}} »</legend> <legend>Modifier la catégorie « {{$category.name}} »</legend>
<dl> <dl>
{{:input type="text" name="name" label="Nom" default=$category.name required=true maxlength="100"}} {{:input type="text" name="name" label="Nom" default=$category.name required=true maxlength="100"}}
</dl> </dl>
<p class="submit"> <p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p> </p>
</fieldset> </fieldset>
</form> </form>

View File

@ -5,18 +5,18 @@
{{:include file="_nav.html" current="config"}} {{:include file="_nav.html" current="config"}}
{{if $_GET.ok}} {{if $_GET.ok}}
<p class="block confirm">Configuration enregistrée.</p> <p class="block confirm">Configuration enregistrée.</p>
{{/if}} {{/if}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{:save key="config" {{:save key="config"
validate_schema="./config.schema.json" validate_schema="./config.schema.json"
input_nature=$_POST.input_fields|array_transpose input_nature=$_POST.input_fields|array_transpose
output_nature=$_POST.output_fields|array_transpose output_nature=$_POST.output_fields|array_transpose
}} }}
{{:redirect to="./config.html?ok=1"}} {{:redirect to="./config.html?ok=1"}}
{{/form}} {{/form}}
{{* config par défaut *}} {{* config par défaut *}}
@ -25,214 +25,212 @@
{{* types d'entrées *}} {{* types d'entrées *}}
{{#foreach from=$config_defaut.inputs item="elem"}} {{#foreach from=$config_defaut.inputs item="elem"}}
{{#foreach from=$elem key=label item=value}} {{#foreach from=$elem key=label item=value}}
{{:assign var='input_types.%s'|args:$value value=$value}} {{:assign var='input_types.%s'|args:$value value=$value}}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
{{* types de sorties *}} {{* types de sorties *}}
{{#foreach from=$config_defaut.outputs item="elem"}} {{#foreach from=$config_defaut.outputs item="elem"}}
{{#foreach from=$elem key=label item=value}} {{#foreach from=$elem key=label item=value}}
{{:assign var='output_typess.%s'|args:$value value=$value}} {{:assign var='output_typess.%s'|args:$value value=$value}}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
<form method="post" action=""> <form method="post" action="">
<fieldset> <fieldset>
<legend>Entrées</legend> <legend>Entrées</legend>
<table class="list input_fields"> <table class="list input_fields">
<thead> <thead>
<tr> <tr>
<th>Nature de l'entrée</th> <th>Nature de l'entrée</th>
<th>Type</th> <th>Type</th>
<th>Action</th> <th>Action</th>
</tr> </tr>
</thead> </thead>
<tbody id="input_body"> <tbody id="input_body">
{{#foreach from=$module.config.input_nature item="input_field"}} {{#foreach from=$module.config.input_nature item="input_field"}}
{{* Vérifier si la suppression de ce type d'entrée est possible *}} {{* Vérifier si la suppression de ce type d'entrée est possible *}}
{{:assign suppr=true}} {{:assign suppr=true}}
{{#load type="movement" where="$$.input_nature = :libelle" :libelle=$input_field.label}} {{#load type="movement" where="$$.input_nature = :libelle" :libelle=$input_field.label}}
{{:assign suppr=false}} {{:assign suppr=false}}
{{/load}} {{/load}}
<tr> <tr>
<td>{{:input type="text" name="input_fields[label][]" default=$input_field.label}}</td> <td>{{:input type="text" name="input_fields[label][]" default=$input_field.label}}</td>
<td>{{:input type="select" <td>{{:input type="select"
name="input_fields[type][]" name="input_fields[type][]"
options=$input_types options=$input_types
default=$input_field.type default=$input_field.type
required=true required=true
default_empty="— Choisir un type —"}} default_empty="— Choisir un type —"}}
</td> </td>
<td class="action"> <td class="action">
{{if $suppr}} {{if $suppr}}
{{:button label="Supprimer" shape="minus" onclick="this.parentNode.parentNode.remove();"}} {{:button label="Supprimer" shape="minus" onclick="this.parentNode.parentNode.remove();"}}
{{else}} {{else}}
{{:button label="Supprimer" shape="minus" disabled=true}} {{:button label="Supprimer" shape="minus" disabled=true}}
{{/if}} {{/if}}
</td> </td>
</tr> </tr>
{{else}} {{else}}
{{* pas de config enregistrée : utiliser les valeurs par défaut *}} {{* pas de config enregistrée : utiliser les valeurs par défaut *}}
{{#foreach from=$config_defaut.inputs item="elem"}} {{#foreach from=$config_defaut.inputs item="elem"}}
{{#foreach from=$elem key=label item=value}} {{#foreach from=$elem key=label item=value}}
{{* Vérifier si la suppression de ce type d'entrée est possible *}} {{* Vérifier si la suppression de ce type d'entrée est possible *}}
{{:assign suppr=true}} {{:assign suppr=true}}
{{#load type="movement" where="$$.input_nature = :libelle" :libelle=$label}} {{#load type="movement" where="$$.input_nature = :libelle" :libelle=$label}}
{{:assign suppr=false}} {{:assign suppr=false}}
{{/load}} {{/load}}
<tr> <tr>
<td>{{:input type="text" name="input_fields[label][]" default=$label}}</td> <td>{{:input type="text" name="input_fields[label][]" default=$label}}</td>
<td>{{:input <td>{{:input
type="select" type="select"
name="input_fields[type][]" name="input_fields[type][]"
options=$input_types options=$input_types
required=true required=true
default=$value default=$value
default_empty="— Choisir un type —"}} default_empty="— Choisir un type —"}}
</td> </td>
<td class="action"> <td class="action">
{{if $suppr}} {{if $suppr}}
{{:button label="Supprimer" shape="minus" onclick="this.parentNode.parentNode.remove();"}} {{:button label="Supprimer" shape="minus" onclick="this.parentNode.parentNode.remove();"}}
{{else}} {{else}}
{{:button label="Supprimer" shape="minus" disabled=true}} {{:button label="Supprimer" shape="minus" disabled=true}}
{{/if}} {{/if}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
</tbody> </tbody>
</table> </table>
<p class="actions"> <p class="actions">
{{:button shape="plus" {{:button shape="plus" label="Ajouter un champ" onclick="addLine('#input_body')"}}
label="Ajouter un champ" </p>
onclick="addLine('#input_body')"}} <div class="help block">
</p> <h3>Signification du type d'entrée</h3>
<div class="help block"> <ul>
<h3>Signification du type d'entrée</h3> <li><b>définitif</b> : l'asso devient propriétaire du matériel (ex : achat, don)</li>
<ul> <li><b>temporaire</b> : l'asso ne devient <strong>pas</strong> propriétaire du matériel (ex : location, emprunt)</li>
<li><b>définitif</b> : l'asso devient propriétaire du matériel (ex : achat, don)</li> <li><b>retour</b> : matériel qui revient après une sortie temporaire (ex : retour de location ou de prêt)</li>
<li><b>temporaire</b> : l'asso ne devient <strong>pas</strong> propriétaire du matériel (ex : location, emprunt)</li> </ul>
<li><b>retour</b> : matériel qui revient après une sortie temporaire (ex : retour de location ou de prêt)</li> </div>
</ul> </fieldset>
</div>
</fieldset>
<fieldset> <fieldset>
<legend>Sorties</legend> <legend>Sorties</legend>
<table class="list output_fields"> <table class="list output_fields">
<thead> <thead>
<tr> <tr>
<th>Nature de la sortie</th> <th>Nature de la sortie</th>
<th>Type</th> <th>Type</th>
<th>Action</th> <th>Action</th>
</tr> </tr>
</thead> </thead>
<tbody id="output_body"> <tbody id="output_body">
{{#foreach from=$module.config.output_nature item="output_field"}} {{#foreach from=$module.config.output_nature item="output_field"}}
{{* Vérifier si la suppression de ce type de sortie est possible *}} {{* Vérifier si la suppression de ce type de sortie est possible *}}
{{:assign suppr=true}} {{:assign suppr=true}}
{{#load type="movement" where="$$.output_nature = :libelle" :libelle=$output_field.label}} {{#load type="movement" where="$$.output_nature = :libelle" :libelle=$output_field.label}}
{{:assign suppr=false}} {{:assign suppr=false}}
{{/load}} {{/load}}
<tr> <tr>
<td>{{:input type="text" name="output_fields[label][]" default=$output_field.label}}</td> <td>{{:input type="text" name="output_fields[label][]" default=$output_field.label}}</td>
<td>{{:input <td>{{:input
type="select" type="select"
name="output_fields[type][]" name="output_fields[type][]"
options=$output_typess options=$output_typess
default=$output_field.type default=$output_field.type
required=true required=true
default_empty="— Choisir un type —"}} default_empty="— Choisir un type —"}}
</td> </td>
<td class="action"> <td class="action">
{{if $suppr}} {{if $suppr}}
{{:button label="Supprimer" shape="minus" onclick="this.parentNode.parentNode.remove();"}} {{:button label="Supprimer" shape="minus" onclick="this.parentNode.parentNode.remove();"}}
{{else}} {{else}}
{{:button label="Supprimer" shape="minus" disabled=true}} {{:button label="Supprimer" shape="minus" disabled=true}}
{{/if}} {{/if}}
</td> </td>
</tr> </tr>
{{else}} {{else}}
{{* pas de config enregistrée : utiliser les valeurs par défaut *}} {{* pas de config enregistrée : utiliser les valeurs par défaut *}}
{{#foreach from=$config_defaut.outputs item="elem"}} {{#foreach from=$config_defaut.outputs item="elem"}}
{{#foreach from=$elem key=label item=value}} {{#foreach from=$elem key=label item=value}}
{{* Vérifier si la suppression de ce type de sortie est possible *}} {{* Vérifier si la suppression de ce type de sortie est possible *}}
{{:assign suppr=true}} {{:assign suppr=true}}
{{#load type="movement" where="$$.input_nature = :libelle" :libelle=$label}} {{#load type="movement" where="$$.input_nature = :libelle" :libelle=$label}}
{{:assign suppr=false}} {{:assign suppr=false}}
{{/load}} {{/load}}
<tr> <tr>
<td>{{:input type="text" name="output_fields[label][]" default=$label}}</td> <td>{{:input type="text" name="output_fields[label][]" default=$label}}</td>
<td>{{:input <td>{{:input
type="select" type="select"
name="output_fields[type][]" name="output_fields[type][]"
options=$output_typess options=$output_typess
required=true required=true
default=$value default=$value
default_empty="— Choisir un type —"}} default_empty="— Choisir un type —"}}
</td> </td>
<td class="action"> <td class="action">
{{if $suppr}} {{if $suppr}}
{{:button label="Supprimer" shape="minus" onclick="this.parentNode.parentNode.remove();"}} {{:button label="Supprimer" shape="minus" onclick="this.parentNode.parentNode.remove();"}}
{{else}} {{else}}
{{:button label="Supprimer" shape="minus" disabled=true}} {{:button label="Supprimer" shape="minus" disabled=true}}
{{/if}} {{/if}}
</td> </td>
</tr> </tr>
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
</tbody> </tbody>
</table> </table>
<p class="actions"> <p class="actions">
{{:button shape="plus" {{:button shape="plus"
label="Ajouter un champ" label="Ajouter un champ"
onclick="addLine('#output_body')"}} onclick="addLine('#output_body')"}}
</p> </p>
<div class="help block"> <div class="help block">
<h3>Signification du type de sortie</h3> <h3>Signification du type de sortie</h3>
<ul> <ul>
<li><b>définitif</b> : le matériel n'appartient plus à l'asso (ex : vente, casse, perte, vol, ...)</li> <li><b>définitif</b> : le matériel n'appartient plus à l'asso (ex : vente, casse, perte, vol, ...)</li>
<li><b>temporaire</b> : le matériel sort temporairement de l'asso qui en reste propriétaire (ex : location, prêt)</li> <li><b>temporaire</b> : le matériel sort temporairement de l'asso qui en reste propriétaire (ex : location, prêt)</li>
<li><b>retour</b> : le matériel <strong>non propriété de l'asso</strong> est rendu à son propriétaire (ex : retour de location ou d'emprunt)</li> <li><b>retour</b> : le matériel <strong>non propriété de l'asso</strong> est rendu à son propriétaire (ex : retour de location ou d'emprunt)</li>
</dl> </dl>
</div> </div>
</fieldset> </fieldset>
<p class="submit"> <p class="submit">
{{:button {{:button
type="submit" type="submit"
name="save" name="save"
label="Enregistrer" label="Enregistrer"
shape="right" shape="right"
class="main" class="main"
}} }}
</p> </p>
</form> </form>
<script type="text/javascript"> <script type="text/javascript">
// dupliquer la dernière ligne d'une table // dupliquer la dernière ligne d'une table
function addLine(id_body) { function addLine(id_body) {
var ligne = document.querySelector(id_body).lastElementChild; var ligne = document.querySelector(id_body).lastElementChild;
var nelle = ligne.cloneNode(true); var nelle = ligne.cloneNode(true);
let text = nelle.querySelector('input[type="text"]'); let text = nelle.querySelector('input[type="text"]');
text.value = null; text.value = null;
let menu = nelle.querySelector('select') let menu = nelle.querySelector('select')
if (menu != null) { if (menu != null) {
menu[0].selected = 'selected'; menu[0].selected = 'selected';
} }
ligne.parentNode.appendChild(nelle); ligne.parentNode.appendChild(nelle);
text.focus(); text.focus();
} }
</script> </script>
{{:admin_footer}} {{:admin_footer}}

View File

@ -1,38 +1,38 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object", "type": "object",
"properties": { "properties": {
"input_nature": { "input_nature": {
"description": "Nature des entrées", "description": "Nature des entrées",
"type": ["array", "null"], "type": ["array", "null"],
"items": { "items": {
"type": "object", "type": "object",
"properties": { "properties": {
"label" : { "label" : {
"type" : "string" "type" : "string"
}, },
"type" : { "type" : {
"type" : "string", "type" : "string",
"enum" : ["définitif", "temporaire", "retour"] "enum" : ["définitif", "temporaire", "retour"]
} }
} }
} }
}, },
"output_nature": { "output_nature": {
"description": "Nature des sorties", "description": "Nature des sorties",
"type": ["array", "null"], "type": ["array", "null"],
"items": { "items": {
"type": "object", "type": "object",
"properties": { "properties": {
"label" : { "label" : {
"type" : "string" "type" : "string"
}, },
"type" : { "type" : {
"type" : "string", "type" : "string",
"enum" : ["définitif", "temporaire", "retour"] "enum" : ["définitif", "temporaire", "retour"]
} }
} }
} }
} }
} }
} }

View File

@ -1,12 +1,12 @@
{ {
"inputs" : [ "inputs" : [
{ "Achat" : "définitif" }, { "Achat" : "définitif" },
{ "Location" : "temporaire" }, { "Location" : "temporaire" },
{ "Retour de Location/Prêt" : "retour" } { "Retour de Location/Prêt" : "retour" }
], ],
"outputs" : [ "outputs" : [
{ "Vente" : "définitif" }, { "Vente" : "définitif" },
{ "Prêt" : "temporaire" }, { "Prêt" : "temporaire" },
{ "Retour de Location/Emprunt" : "retour" } { "Retour de Location/Emprunt" : "retour" }
] ]
} }

View File

@ -1,19 +1,19 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object", "type": "object",
"properties": { "properties": {
"type": { "type": {
"type": "string", "type": "string",
"enum": ["equipment"] "enum": ["equipment"]
},
"category" : {
"description": "Clé de la catégorie",
"type": "string"
},
"designation": {
"description": "Désignation du matériel",
"type": "string"
}
}, },
"category" : { "required": ["type", "category", "designation"]
"description": "Clé de la catégorie",
"type": "string"
},
"designation": {
"description": "Désignation du matériel",
"type": "string"
}
},
"required": ["type", "category", "designation"]
} }

View File

@ -4,37 +4,37 @@
{{:assign equipment_key=$_GET.key|trim}} {{:assign equipment_key=$_GET.key|trim}}
{{#load key=$_GET.key assign="equipment"}} {{#load key=$_GET.key assign="equipment"}}
{{else}} {{else}}
{{:error message="Pas de matériel avec la clé %s"|args:$equipment_key}} {{:error message="Pas de matériel avec la clé %s"|args:$equipment_key}}
{{/load}} {{/load}}
{{#load type="category" where="key = :cle" :cle=$equipment.category assign="category"}} {{#load type="category" where="key = :cle" :cle=$equipment.category assign="category"}}
{{else}} {{else}}
{{:error message="Le matériel %s n'appartient à aucune catégorie"|args:$equipment.designation}} {{:error message="Le matériel %s n'appartient à aucune catégorie"|args:$equipment.designation}}
{{/load}} {{/load}}
<header class="header"> <header class="header">
<h1>Historique des mouvements de {{$equipment.designation}} ({{$category.name}})</h1> <h1>Historique des mouvements de {{$equipment.designation}} ({{$category.name}})</h1>
</header> </header>
{{* lister tous les mouvements du matériel passé en paramètre *}} {{* lister tous les mouvements du matériel passé en paramètre *}}
{{#list {{#list
type="movement" type="movement"
select="$$.date AS 'Date'; select="$$.date AS 'Date';
CASE $$.direction WHEN 'input' THEN 'Entrée' WHEN 'output' THEN 'Sortie' END AS 'Mvt'; CASE $$.direction WHEN 'input' THEN 'Entrée' WHEN 'output' THEN 'Sortie' END AS 'Mvt';
CASE $$.direction WHEN 'input' THEN $$.input_nature WHEN 'output' THEN $$.output_nature END AS 'Type'; CASE $$.direction WHEN 'input' THEN $$.input_nature WHEN 'output' THEN $$.output_nature END AS 'Type';
$$.amount AS 'Nombre'; $$.amount AS 'Nombre';
$$.comment AS 'Commentaire'" $$.comment AS 'Commentaire'"
equipment=$equipment_key equipment=$equipment_key
order=1 order=1
}} }}
<tr> <tr>
<td>{{$date|date_short}}</td> <td>{{$date|date_short}}</td>
<td>{{$col2}}</td> <td>{{$col2}}</td>
<td>{{$col3}}</td> <td>{{$col3}}</td>
<td>{{$amount}}</td> <td>{{$amount}}</td>
<td>{{$comment}}</td> <td>{{$comment}}</td>
<td></td> <td></td>
</tr> </tr>
{{/list}} {{/list}}
{{:admin_footer}} {{:admin_footer}}

View File

@ -4,19 +4,19 @@
{{:include file="_nav.html" current="index"}} {{:include file="_nav.html" current="index"}}
{{if $_GET.ok}} {{if $_GET.ok}}
<p class="block confirm">Modification effectuée</p> <p class="block confirm">Modification effectuée</p>
{{elseif $_GET.err}} {{elseif $_GET.err}}
<p class="block error">Modification refusée</p> <p class="block error">Modification refusée</p>
{{/if}} {{/if}}
{{#load type="category"}} {{#load type="category"}}
{{:assign var="categories." value=$key}} {{:assign var="categories." value=$key}}
{{/load}} {{/load}}
{{if $categories|count == 0}} {{if $categories|count == 0}}
<p class="block alert">Il n'y a aucune catégorie : vous devez en ajouter.</p> <p class="block alert">Il n'y a aucune catégorie : vous devez en ajouter.</p>
{{else}} {{else}}
{{:include file="./inventaire.html" print_cat_name=true}} {{:include file="./inventaire.html" print_cat_name=true}}
{{/if}} {{/if}}
{{:admin_footer}} {{:admin_footer}}

View File

@ -6,140 +6,139 @@
{{* Afficher les résultats *}} {{* Afficher les résultats *}}
{{if $equipments === null}} {{if $equipments === null}}
{{if $categories|count == 1}} {{if $categories|count == 1}}
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p> <p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
{{else}} {{else}}
<p class="block alert">Il n'y a aucun matériel dans ces catégories.</p> <p class="block alert">Il n'y a aucun matériel dans ces catégories.</p>
{{/if}} {{/if}}
{{else}} {{else}}
<section class="inventaire">
<h2 class="ruler">Matériels dont l'association est propriétaire</h2>
<section class="inventaire"> {{* itérer sur les catégories *}}
<h2 class="ruler">Matériels dont l'association est propriétaire</h2> {{#foreach from=$equipments key="cat_key" item="category"}}
{{* itérer sur les catégories *}} {{* vérifier s'il y a des matériels dans cette catégorie *}}
{{#foreach from=$equipments key="cat_key" item="category"}} {{:assign present=false}}
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
{{if $eqpmt.stock !== null && $eqpmt.stock !== 0}}
{{:assign present=true}}
{{:break}}
{{/if}}
{{/foreach}}
{{* vérifier s'il y a des matériels dans cette catégorie *}} {{if $print_cat_name}}
{{:assign present=false}} <h3>{{$category.name}}</h3>
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}} {{/if}}
{{if $eqpmt.stock !== null && $eqpmt.stock !== 0}}
{{:assign present=true}}
{{:break}}
{{/if}}
{{/foreach}}
{{if $print_cat_name}} {{if $present}}
<h3>{{$category.name}}</h3> <table class="list">
{{/if}} <thead>
<tr>
<th>Désignation</th>
<th>Stock</th>
<th>Sortie</th>
<th>Disponible</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
{{if $present}} {{* itérer sur les matériels de la catégorie *}}
<table class="list"> {{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
<thead>
<tr>
<th>Désignation</th>
<th>Stock</th>
<th>Sortie</th>
<th>Disponible</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
{{* itérer sur les matériels de la catégorie *}} {{:assign keys=$eqpmt|keys}}
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}} {{if "stock"|in:$keys && $eqpmt.stock !== 0}}
{{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}}
<tr>
<td>{{$eqpmt.designation}}</td>
<td>{{$eqpmt.stock}}</td>
<td>{{if $eqpmt.exterieur == null}}0{{else}}{{$eqpmt.exterieur}}{{/if}}</td>
<td>{{$dispo}}</td>
<td class="actions">
{{:linkbutton
label="Historique des mouvements"
href="%shistorique.html?key=%s"|args:$module.url:$eqpmt_key
shape="table"
target="_dialog"}}
{{:linkbutton
label="Modifier"
href="%smodifier_materiel.html?key=%s"|args:$module.url:$eqpmt_key
shape="edit"
target="_dialog"}}
</td>
</tr>
{{/if}}
{{else}}
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
{{/foreach}}
</tbody>
</table>
{{else}}
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
{{/if}}
{{/foreach}}
{{:assign keys=$eqpmt|keys}} <h2 class="ruler">Matériels dont l'association n'est pas propriétaire</h2>
{{if "stock"|in:$keys && $eqpmt.stock !== 0}}
{{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}}
<tr>
<td>{{$eqpmt.designation}}</td>
<td>{{$eqpmt.stock}}</td>
<td>{{if $eqpmt.exterieur == null}}0{{else}}{{$eqpmt.exterieur}}{{/if}}</td>
<td>{{$dispo}}</td>
<td class="actions">
{{:linkbutton
label="Historique des mouvements"
href="%shistorique.html?key=%s"|args:$module.url:$eqpmt_key
shape="table"
target="_dialog"}}
{{:linkbutton
label="Modifier"
href="%smodifier_materiel.html?key=%s"|args:$module.url:$eqpmt_key
shape="edit"
target="_dialog"}}
</td>
</tr>
{{/if}}
{{else}}
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
{{/foreach}}
</tbody>
</table>
{{else}}
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
{{/if}}
{{/foreach}}
<h2 class="ruler">Matériels dont l'association n'est pas propriétaire</h2> {{* itérer sur les catégories *}}
{{#foreach from=$equipments key="cat_key" item="category"}}
{{* itérer sur les catégories *}} {{* vérifier s'il y a des matériels dans cette catégorie *}}
{{#foreach from=$equipments key="cat_key" item="category"}} {{:assign present=false}}
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
{{if $eqpmt.nonproprio !== null && $eqpmt.nonproprio !== 0}}
{{:assign present=true}}
{{:break}}
{{/if}}
{{/foreach}}
{{* vérifier s'il y a des matériels dans cette catégorie *}} {{if $print_cat_name}}
{{:assign present=false}} <h3>{{$category.name}}</h3>
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}} {{/if}}
{{if $eqpmt.nonproprio !== null && $eqpmt.nonproprio !== 0}}
{{:assign present=true}}
{{:break}}
{{/if}}
{{/foreach}}
{{if $print_cat_name}} {{if $present}}
<h3>{{$category.name}}</h3> <table class="list">
{{/if}} <thead>
<tr>
<th>Désignation</th>
<th>Quantité</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
{{if $present}} {{* itérer sur les matériels de la catégorie *}}
<table class="list"> {{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
<thead>
<tr>
<th>Désignation</th>
<th>Quantité</th>
<th class="actions"></th>
</tr>
</thead>
<tbody>
{{* itérer sur les matériels de la catégorie *}} {{:assign keys=$eqpmt|keys}}
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}} {{if "nonproprio"|in:$keys && $eqpmt.nonproprio !== 0}}
{{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}}
{{:assign keys=$eqpmt|keys}} <tr>
{{if "nonproprio"|in:$keys && $eqpmt.nonproprio !== 0}} <td>{{$eqpmt.designation}}</td>
{{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}} <td>{{$eqpmt.nonproprio}}</td>
<tr> <td class="actions">
<td>{{$eqpmt.designation}}</td> {{:linkbutton
<td>{{$eqpmt.nonproprio}}</td> label="Historique des mouvements"
<td class="actions"> href="%shistorique.html?key=%s"|args:$module.url:$eqpmt_key
{{:linkbutton shape="table"
label="Historique des mouvements" target="_dialog"}}
href="%shistorique.html?key=%s"|args:$module.url:$eqpmt_key {{:linkbutton
shape="table" label="Modifier"
target="_dialog"}} href="%smodifier_materiel.html?key=%s"|args:$module.url:$eqpmt_key
{{:linkbutton shape="edit"
label="Modifier" target="_dialog"}}
href="%smodifier_materiel.html?key=%s"|args:$module.url:$eqpmt_key </td>
shape="edit" </tr>
target="_dialog"}} {{/if}}
</td> {{else}}
</tr> <p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
{{/if}} {{/foreach}}
{{else}} </tbody>
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p> </table>
{{/foreach}} {{else}}
</tbody> <p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
</table> {{/if}}
{{else}} {{/foreach}}
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p> </section>
{{/if}}
{{/foreach}}
</section>
{{/if}} {{/if}}

View File

@ -3,72 +3,72 @@
{{:assign equipment_key=$_GET.key|trim}} {{:assign equipment_key=$_GET.key|trim}}
{{#load key=$_GET.key assign="equipment"}} {{#load key=$_GET.key assign="equipment"}}
{{:assign default_category=$equipment.category}} {{:assign default_category=$equipment.category}}
{{else}} {{else}}
{{:error message="Pas de matériel avec la clé %s"|args:$equipment_key}} {{:error message="Pas de matériel avec la clé %s"|args:$equipment_key}}
{{/load}} {{/load}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{* récupérer les infos de la catégorie *}} {{* récupérer les infos de la catégorie *}}
{{#load type="category" key=$_POST.category assign="category"}} {{#load type="category" key=$_POST.category assign="category"}}
{{/load}} {{/load}}
{{* vérifier la validité des changements demandés *}} {{* vérifier la validité des changements demandés *}}
{{:assign chgt_ok=true}} {{:assign chgt_ok=true}}
{{if $_POST.category != $default_category}} {{if $_POST.category != $default_category}}
{{* catégorie change : vérifier le nom *}} {{* catégorie change : vérifier le nom *}}
{{#load key=$equipment_key}} {{#load key=$equipment_key}}
{{if $designation|trim|tolower != $_POST.designation|trim|tolower}} {{if $designation|trim|tolower != $_POST.designation|trim|tolower}}
{{* le nom change => vérifier l'existence d'un matériel du même nom *}} {{* le nom change => vérifier l'existence d'un matériel du même nom *}}
{{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}} {{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}}
{{:assign chgt_ok=false}} {{:assign chgt_ok=false}}
{{/load}} {{/load}}
{{else}} {{else}}
{* le nom ne change pas : ok *}} {* le nom ne change pas : ok *}}
{{/if}} {{/if}}
{{/load}} {{/load}}
{{else}} {{else}}
{{* catégorie ne change pas => vérifier le nom*}} {{* catégorie ne change pas => vérifier le nom*}}
{{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}} {{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}}
{{:assign chgt_ok=false}} {{:assign chgt_ok=false}}
{{/load}} {{/load}}
{{/if}} {{/if}}
{{if !$chgt_ok}} {{if !$chgt_ok}}
{{:error message="Erreur : il existe déjà un matériel avec cette désignation"}} {{:error message="Erreur : il existe déjà un matériel avec cette désignation"}}
{{/if}} {{/if}}
{{* enregistrer les modifications *}} {{* enregistrer les modifications *}}
{{:save {{:save
key=$equipment_key key=$equipment_key
category=$category.key category=$category.key
designation=$_POST.designation|trim designation=$_POST.designation|trim
}} }}
{{:redirect force="index.html?ok=1"}} {{:redirect force="index.html?ok=1"}}
{{else}} {{else}}
{{:form_errors}} {{:form_errors}}
{{/form}} {{/form}}
{{* lister les catégories disponibles *}} {{* lister les catégories disponibles *}}
{{#load type="category" assign="category" order="$$.name"}} {{#load type="category" assign="category" order="$$.name"}}
{{:assign var="categories.%s"|args:$category.key value=$category.name}} {{:assign var="categories.%s"|args:$category.key value=$category.name}}
{{/load}} {{/load}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="modification"> <fieldset class="modification">
<legend>Modifier un matériel</legend> <legend>Modifier un matériel</legend>
<dl> <dl>
{{:input type="select" name="category" label="Catégorie" default=$default_category required=true options=$categories}} {{:input type="select" name="category" label="Catégorie" default=$default_category required=true options=$categories}}
{{:input type="text" name="designation" label="Désignation" default=$equipment.designation required=true}} {{:input type="text" name="designation" label="Désignation" default=$equipment.designation required=true}}
</dl> </dl>
</fieldset> </fieldset>
<p class="submit"> <p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p> </p>
</form> </form>

View File

@ -4,7 +4,7 @@
{{* récupérer les infos du mouvement à supprimer et du matériel associé *}} {{* récupérer les infos du mouvement à supprimer et du matériel associé *}}
{{#load key=$_GET.key assign="mvt_suppr"}} {{#load key=$_GET.key assign="mvt_suppr"}}
{{else}} {{else}}
{{:error message="Aucune entrée avec la clé « %s »"|args:$_GET.key}} {{:error message="Aucune entrée avec la clé « %s »"|args:$_GET.key}}
{{/load}} {{/load}}
{{:assign amount_suppr=$mvt_suppr.amount}} {{:assign amount_suppr=$mvt_suppr.amount}}
@ -13,78 +13,78 @@
{{#load key=$key_eqpmt_suppr assign="eqpmt_suppr"}} {{#load key=$key_eqpmt_suppr assign="eqpmt_suppr"}}
{{else}} {{else}}
{{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_suppr}} {{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_suppr}}
{{/load}} {{/load}}
{{#form on="delete"}} {{#form on="delete"}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
{{:include file="../../_get_config.html" keep="config"}} {{:include file="../../_get_config.html" keep="config"}}
{{* vérifier s'il est possible de supprimer l'entrée *}} {{* vérifier s'il est possible de supprimer l'entrée *}}
{{:assign dispo=0}} {{:assign dispo=0}}
{{:assign nonprop=0}} {{:assign nonprop=0}}
{{* parcourir la liste des mouvements du matériel *}} {{* parcourir la liste des mouvements du matériel *}}
{{#load {{#load
type="movement" type="movement"
where="$$.equipment = :key" :key=$key_eqpmt_suppr where="$$.equipment = :key" :key=$key_eqpmt_suppr
assign="movement" assign="movement"
order="$$.date"}} order="$$.date"}}
{{if $key != $_GET.key}} {{if $key != $_GET.key}}
{{* ce n'est pas le mouvement à supprimer : cumuler les entrées/sorties *}} {{* ce n'est pas le mouvement à supprimer : cumuler les entrées/sorties *}}
{{if $movement.direction == 'input'}} {{if $movement.direction == 'input'}}
{{* chercher le type d'entrée parmi les types de la config *}} {{* chercher le type d'entrée parmi les types de la config *}}
{{#foreach from=$config.input_nature item="elem"}} {{#foreach from=$config.input_nature item="elem"}}
{{if $movement.input_nature == $elem.label}} {{if $movement.input_nature == $elem.label}}
{{if $elem.type == 'temporaire'}} {{if $elem.type == 'temporaire'}}
{{:assign nonprop="%d+%d"|math:$nonprop:$movement.amount}} {{:assign nonprop="%d+%d"|math:$nonprop:$movement.amount}}
{{else}} {{else}}
{{:assign dispo="%d+%d"|math:$dispo:$movement.amount}} {{:assign dispo="%d+%d"|math:$dispo:$movement.amount}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{elseif $movement.direction == 'output'}} {{elseif $movement.direction == 'output'}}
{{* chercher le type de sortie parmi les types de la config *}} {{* chercher le type de sortie parmi les types de la config *}}
{{#foreach from=$config.output_nature item="elem"}} {{#foreach from=$config.output_nature item="elem"}}
{{if $movement.output_nature == $elem.label}} {{if $movement.output_nature == $elem.label}}
{{if $elem.type == 'retour'}} {{if $elem.type == 'retour'}}
{{:assign nonprop="%d-%d"|math:$nonprop:$movement.amount}} {{:assign nonprop="%d-%d"|math:$nonprop:$movement.amount}}
{{else}} {{else}}
{{:assign dispo="%d-%d"|math:$dispo:$movement.amount}} {{:assign dispo="%d-%d"|math:$dispo:$movement.amount}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{* problème ? *}} {{* problème ? *}}
{{if $dispo < 0 || $nonprop < 0}} {{if $dispo < 0 || $nonprop < 0}}
{{:redirect force="./index.html?err=1&msg=suppression"}} {{:redirect force="./index.html?err=1&msg=suppression"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/load}} {{/load}}
{{* vérification réussie : supprimer l'entrée *}} {{* vérification réussie : supprimer l'entrée *}}
{{:delete key=$_GET.key}} {{:delete key=$_GET.key}}
{{:assign var="msg" value="suppression"}} {{:assign var="msg" value="suppression"}}
{{* voir s'il reste des mouvements pour le matériel concerné par le mouvement supprimé *}} {{* voir s'il reste des mouvements pour le matériel concerné par le mouvement supprimé *}}
{{#load type="movement" where="$$.equipment = :eqpmt_key" :eqpmt_key=$key_eqpmt_suppr}} {{#load type="movement" where="$$.equipment = :eqpmt_key" :eqpmt_key=$key_eqpmt_suppr}}
{{else}} {{else}}
{{* supprimer le matériel *}} {{* supprimer le matériel *}}
{{:delete key=$key_eqpmt_suppr}} {{:delete key=$key_eqpmt_suppr}}
{{:assign var="msg" value="%s - matériel"|args:$msg}} {{:assign var="msg" value="%s - matériel"|args:$msg}}
{{/load}} {{/load}}
{{:redirect force="./index.html?ok=1&msg=%s"|args:$msg}} {{:redirect force="./index.html?ok=1&msg=%s"|args:$msg}}
{{/form}} {{/form}}
{{:delete_form {{:delete_form
legend="Supprimer cette entrée ?" legend="Supprimer cette entrée ?"
warning="Supprimer l'entrée « %s %s (%d) en date du %s » ?"|args:$mvt_suppr.input_nature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr warning="Supprimer l'entrée « %s %s (%d) en date du %s » ?"|args:$mvt_suppr.input_nature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr
info="S'il ne reste aucun mouvement pour ce matériel, le matériel sera supprimé" info="S'il ne reste aucun mouvement pour ce matériel, le matériel sera supprimé"
}} }}
{{:form_errors}} {{:form_errors}}

View File

@ -5,75 +5,74 @@
{{:include file="../../_nav.html" current="entrees"}} {{:include file="../../_nav.html" current="entrees"}}
{{if $_GET.ok}} {{if $_GET.ok}}
{{if $_GET.msg|match:"suppression"}} {{if $_GET.msg|match:"suppression"}}
{{:assign msg="Entrée supprimée"}} {{:assign msg="Entrée supprimée"}}
{{if $_GET.msg|match:"matériel"}} {{if $_GET.msg|match:"matériel"}}
{{:assign var="msg" value="%s - Matériel supprimé"|args:$msg}} {{:assign var="msg" value="%s - Matériel supprimé"|args:$msg}}
{{/if}} {{/if}}
{{elseif $_GET.msg == "entrée"}} {{elseif $_GET.msg == "entrée"}}
{{:assign msg="Entrée enregistrée"}} {{:assign msg="Entrée enregistrée"}}
{{elseif $_GET.msg == "modification"}} {{elseif $_GET.msg == "modification"}}
{{:assign msg="Entrée modifiée"}} {{:assign msg="Entrée modifiée"}}
{{/if}} {{/if}}
<p class="block confirm">{{$msg}}</p> <p class="block confirm">{{$msg}}</p>
{{elseif $_GET.err}} {{elseif $_GET.err}}
{{if $_GET.msg == "suppression"}} {{if $_GET.msg == "suppression"}}
<p class="block error">Impossible de supprimer l'entrée</p> <p class="block error">Impossible de supprimer l'entrée</p>
{{/if}} {{/if}}
{{/if}} {{/if}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="entree"> <fieldset class="entree">
<legend>Ajouter une entrée</legend> <legend>Ajouter une entrée</legend>
<dl> <dl>
{{:linkbutton label="Matériel répertorié" shape="plus" href="repertorie.html" target="_dialog"}} {{:linkbutton label="Matériel répertorié" shape="plus" href="repertorie.html" target="_dialog"}}
{{:linkbutton label="Matériel non répertorié" shape="plus" href="non_repertorie.html" target="_dialog"}} {{:linkbutton label="Matériel non répertorié" shape="plus" href="non_repertorie.html" target="_dialog"}}
{{:linkbutton label="Retour de sortie temporaire" shape="plus" href="retour.html" target="_dialog"}} {{:linkbutton label="Retour de sortie temporaire" shape="plus" href="retour.html" target="_dialog"}}
</dl> </dl>
</fieldset> </fieldset>
</form> </form>
{{* lister les entrées *}} {{* lister les entrées *}}
<section class="liste_entrees"> <section class="liste_entrees">
<h2>Liste des entrées</h2> <h2>Liste des entrées</h2>
{{#list {{#list
select=" select="
$$.date AS 'Date' ; $$.date AS 'Date' ;
$$.input_nature AS 'Type' ; $$.input_nature AS 'Type' ;
$$.amount AS 'Nombre' ; $$.amount AS 'Nombre' ;
(SELECT $$.designation (SELECT $$.designation
FROM @TABLE AS b FROM @TABLE AS b
WHERE b.key = @TABLE.$$.equipment) WHERE b.key = @TABLE.$$.equipment) AS 'Matériel' ;
AS 'Matériel' ; $$.comment AS 'Remarques'"
$$.comment AS 'Remarques'" type="movement"
type="movement" direction="input"
direction="input" order=1}}
order=1}}
{{:assign var='mvt_key' value=$key}} {{:assign var='mvt_key' value=$key}}
<tr> <tr>
<td>{{$date|date_short}}</td> <td>{{$date|date_short}}</td>
<td>{{$input_nature}}</td> <td>{{$input_nature}}</td>
<td>{{$amount}}</td> <td>{{$amount}}</td>
<td>{{$col4}}</td> <td>{{$col4}}</td>
<td>{{$comment}}</td> <td>{{$comment}}</td>
<td class="actions"> <td class="actions">
{{:linkbutton {{:linkbutton
label="Supprimer" label="Supprimer"
href="delete_entree.html?key=%s"|args:$mvt_key href="delete_entree.html?key=%s"|args:$mvt_key
shape="delete" shape="delete"
target="_dialog"}} target="_dialog"}}
{{:linkbutton {{:linkbutton
label="Modifier" label="Modifier"
href="../modifier_mouvement.html?key=%s&direction=input&caller=%s"|args:$mvt_key:$request_url href="../modifier_mouvement.html?key=%s&direction=input&caller=%s"|args:$mvt_key:$request_url
shape="edit" shape="edit"
target="_dialog"}} target="_dialog"}}
</td> </td>
</tr> </tr>
{{else}} {{else}}
<p class="block alert">Il n'y a aucune entrée.</p> <p class="block alert">Il n'y a aucune entrée.</p>
{{/list}} {{/list}}
</section> </section>
{{:admin_footer}} {{:admin_footer}}

View File

@ -3,7 +3,7 @@
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="../../_nav.html" current="entrees"}} {{:include file="../../_nav.html" current="entrees"}}
{{/if}} {{/if}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
@ -11,55 +11,55 @@
{{* types d'entrées *}} {{* types d'entrées *}}
{{#foreach from=$config.input_nature item="elem"}} {{#foreach from=$config.input_nature item="elem"}}
{{if $elem.type != 'retour'}} {{if $elem.type != 'retour'}}
{{:assign var='input_types.' value="%s"|args:$elem.label}} {{:assign var='input_types.' value="%s"|args:$elem.label}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{* récupérer les infos de la catégorie *}} {{* récupérer les infos de la catégorie *}}
{{#load type="category" key=$_POST.category assign="category"}} {{#load type="category" key=$_POST.category assign="category"}}
{{/load}} {{/load}}
{{* vérifier l'existence d'un matériel du même nom *}} {{* vérifier l'existence d'un matériel du même nom *}}
{{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}} {{#load type="equipment" where="lower($$.designation) = :name" :name=$_POST.designation|trim|tolower}}
{{* utiliser la clé du matériel trouvé *}} {{* utiliser la clé du matériel trouvé *}}
{{:assign equipment_key=$key}} {{:assign equipment_key=$key}}
{{else}} {{else}}
{{* nouveau matériel => nouvelle clé *}} {{* nouveau matériel => nouvelle clé *}}
{{:assign equipment_key=""|uuid}} {{:assign equipment_key=""|uuid}}
{{* enregistrer un nouveau matériel *}} {{* enregistrer un nouveau matériel *}}
{{:save {{:save
key=$equipment_key key=$equipment_key
validate_schema="../../equipment.schema.json" validate_schema="../../equipment.schema.json"
type="equipment" type="equipment"
category=$category.key category=$category.key
designation=$_POST.designation|trim designation=$_POST.designation|trim
}} }}
{{/load}} {{/load}}
{{* Enregistrer le mouvement *}} {{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}} {{:assign mvt_key=""|uuid}}
{{:assign var="operation" from="input_types.%d"|args:$_POST.type_operation}} {{:assign var="operation" from="input_types.%d"|args:$_POST.type_operation}}
{{:save {{:save
key=$mvt_key key=$mvt_key
validate_schema="../movement.schema.json" validate_schema="../movement.schema.json"
type="movement" type="movement"
direction="input" direction="input"
input_nature=$operation input_nature=$operation
amount=$_POST.quantite|intval amount=$_POST.quantite|intval
equipment=$equipment_key equipment=$equipment_key
date=$_POST.date|parse_date date=$_POST.date|parse_date
comment=$_POST.remarques|trim comment=$_POST.remarques|trim
}} }}
{{:redirect force="index.html?ok=1&msg=entrée"}} {{:redirect force="index.html?ok=1&msg=entrée"}}
{{else}} {{else}}
{{:form_errors}} {{:form_errors}}
{{/form}} {{/form}}
{{* lister les catégories disponibles *}} {{* lister les catégories disponibles *}}
@ -71,27 +71,27 @@
{{* formulaire d'ajout de matériel *}} {{* formulaire d'ajout de matériel *}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="entree"> <fieldset class="entree">
<legend>Ajouter une entrée d'un matériel non répertorié</legend> <legend>Ajouter une entrée d'un matériel non répertorié</legend>
<dl> <dl>
{{:input type="select" name="type_operation" label="Type" required=true options=$input_types}} {{:input type="select" name="type_operation" label="Type" required=true options=$input_types}}
{{:input type="date" name="date" label="Date" required=true default=$now|date_short}} {{:input type="date" name="date" label="Date" required=true default=$now|date_short}}
{{:input type="number" name="quantite" label="Quantité" required=true default=1}} {{:input type="number" name="quantite" label="Quantité" required=true default=1}}
</dl> </dl>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>Matériel</legend> <legend>Matériel</legend>
<dl> <dl>
{{:input type="select" name="category" label="Catégorie" required=true options=$categories}} {{:input type="select" name="category" label="Catégorie" required=true options=$categories}}
{{:input type="text" name="designation" label="Désignation" required=true}} {{:input type="text" name="designation" label="Désignation" required=true}}
{{:input type="textarea" name="remarques" label="Remarques" cols="40", rows="3" required=false}} {{:input type="textarea" name="remarques" label="Remarques" cols="40", rows="3" required=false}}
</dl> </dl>
</fieldset> </fieldset>
<p class="submit"> <p class="submit">
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p> </p>
</form> </form>
{{:admin_footer}} {{:admin_footer}}

View File

@ -3,7 +3,7 @@
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="../../_nav.html" current="entrees"}} {{:include file="../../_nav.html" current="entrees"}}
{{/if}} {{/if}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
@ -11,77 +11,73 @@
{{* types d'entrées *}} {{* types d'entrées *}}
{{#foreach from=$config.input_nature item="elem"}} {{#foreach from=$config.input_nature item="elem"}}
{{if $elem.type != 'retour'}} {{if $elem.type != 'retour'}}
{{:assign var='input_types.' value="%s"|args:$elem.label}} {{:assign var='input_types.' value="%s"|args:$elem.label}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{* récupérer les infos du matériel *}} {{* récupérer les infos du matériel *}}
{{#load type="equipment" key=$_POST.equipment assign="equipment"}} {{#load type="equipment" key=$_POST.equipment assign="equipment"}}
{{/load}} {{/load}}
{{* Enregistrer le mouvement *}} {{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}} {{:assign mvt_key=""|uuid}}
{{:assign var="operation" from="input_types.%d|args:$_POST.type_operation}} {{:assign var="operation" from="input_types.%d|args:$_POST.type_operation}}
{{:save {{:save
key=$mvt_key key=$mvt_key
validate_schema="../movement.schema.json" validate_schema="../movement.schema.json"
type="movement" type="movement"
direction="input" direction="input"
input_nature=$operation input_nature=$operation
amount=$_POST.quantite|intval amount=$_POST.quantite|intval
equipment=$equipment.key equipment=$equipment.key
date=$_POST.date|parse_date date=$_POST.date|parse_date
comment=$_POST.remarques|trim comment=$_POST.remarques|trim
}} }}
{{:redirect force="index.html?ok=1&msg=entrée"}} {{:redirect force="index.html?ok=1&msg=entrée"}}
{{else}} {{else}}
{{:form_errors}} {{:form_errors}}
{{/form}} {{/form}}
{{* lister les catégories et matériels associés *}} {{* lister les catégories et matériels associés *}}
{{#load type="category" assign="category" order="$$.name"}} {{#load type="category" assign="category" order="$$.name"}}
{{:assign nom_cat=$category.name}} {{:assign nom_cat=$category.name}}
{{#load type="equipment" where="$$.category = :key" :key=$category.key assign="equipment"}} {{#load type="equipment" where="$$.category = :key" :key=$category.key assign="equipment"}}
{{:assign var="equipments.%s.%s"|args:$nom_cat:$equipment.key value=$equipment.designation}} {{:assign var="equipments.%s.%s"|args:$nom_cat:$equipment.key value=$equipment.designation}}
{{/load}} {{/load}}
{{/load}} {{/load}}
{{* Vérifier s'il y a au moins un matériel enregistré *}} {{* Vérifier s'il y a au moins un matériel enregistré *}}
{{if $equipments != null}} {{if $equipments != null}}
{{* formulaire d'entrée de matériel *}} {{* formulaire d'entrée de matériel *}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="entree">
<fieldset class="entree"> <legend>Ajouter une entrée d'un matériel répertorié</legend>
<legend>Ajouter une entrée d'un matériel répertorié</legend> <dl>
<dl> {{:input type="select" name="type_operation" label="Type" required=true options=$input_types}}
{{:input type="select" name="type_operation" label="Type" required=true options=$input_types}} {{:input type="date" name="date" label="Date" required=true default=$now|date_short}}
{{:input type="date" name="date" label="Date" required=true default=$now|date_short}} {{:input type="number" name="quantite" label="Quantité" required=true default=1}}
{{:input type="number" name="quantite" label="Quantité" required=true default=1}} </dl>
</dl> </fieldset>
</fieldset> <fieldset>
<legend>Matériel</legend>
<fieldset> <dl>
<legend>Matériel</legend> {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$equipments}}
<dl> {{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$equipments}} </dl>
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}} </fieldset>
</dl> <p class="submit">
</fieldset> {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
<p class="submit"> </form>
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>
{{else}} {{else}}
<p class="block error">Il n'y a aucun matériel</p> <p class="block error">Il n'y a aucun matériel</p>
{{/if}} {{/if}}
{{:admin_footer}} {{:admin_footer}}

View File

@ -3,7 +3,7 @@
{{* barre de navigation *}} {{* barre de navigation *}}
{{if ! $dialog}} {{if ! $dialog}}
{{:include file="../../_nav.html" current="entrees"}} {{:include file="../../_nav.html" current="entrees"}}
{{/if}} {{/if}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
@ -11,52 +11,52 @@
{{* types d'entrées *}} {{* types d'entrées *}}
{{#foreach from=$config.input_nature item="elem"}} {{#foreach from=$config.input_nature item="elem"}}
{{if $elem.type == 'retour'}} {{if $elem.type == 'retour'}}
{{:assign var='input_types.' value="%s"|args:$elem.label}} {{:assign var='input_types.' value="%s"|args:$elem.label}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{* récupérer les infos du matériel *}} {{* récupérer les infos du matériel *}}
{{#load type="equipment" key=$_POST.equipment assign="equipment"}} {{#load type="equipment" key=$_POST.equipment assign="equipment"}}
{{:assign designation=$equipment.designation}} {{:assign designation=$equipment.designation}}
{{:assign var="categories." value=$equipment.category}} {{:assign var="categories." value=$equipment.category}}
{{/load}} {{/load}}
{{* Extraire et compiler les infos de la base *}} {{* Extraire et compiler les infos de la base *}}
{{:include {{:include
file="../../_calcul_dispo.html" file="../../_calcul_dispo.html"
keep="equipments" keep="equipments"
date=$_POST.date|parse_date date=$_POST.date|parse_date
}} }}
{{* déterminer la quantité sortie temporairement de ce matriel à la date donnée *}} {{* déterminer la quantité sortie temporairement de ce matriel à la date donnée *}}
{{:assign var=sorti from="equipments.%s.eqpmt.%s.exterieur"|args:$equipment.category:$_POST.equipment}} {{:assign var=sorti from="equipments.%s.eqpmt.%s.exterieur"|args:$equipment.category:$_POST.equipment}}
{{if $_POST.quantite|intval > $sorti}} {{if $_POST.quantite|intval > $sorti}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle sortie (%d) à la date du %s"|args:$_POST.quantite:$sorti:$_POST.date}} {{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle sortie (%d) à la date du %s"|args:$_POST.quantite:$sorti:$_POST.date}}
{{/if}} {{/if}}
{{* Enregistrer le mouvement *}} {{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}} {{:assign mvt_key=""|uuid}}
{{:assign var="operation" from="input_types.%d|args:$_POST.type_operation}} {{:assign var="operation" from="input_types.%d|args:$_POST.type_operation}}
{{:save {{:save
key=$mvt_key key=$mvt_key
validate_schema="../movement.schema.json" validate_schema="../movement.schema.json"
type="movement" type="movement"
direction="input" direction="input"
input_nature=$operation input_nature=$operation
amount=$_POST.quantite|intval amount=$_POST.quantite|intval
equipment=$equipment.key equipment=$equipment.key
date=$_POST.date|parse_date date=$_POST.date|parse_date
comment=$_POST.remarques|trim comment=$_POST.remarques|trim
}} }}
{{:redirect force="index.html?ok=1&msg=entrée"}} {{:redirect force="index.html?ok=1&msg=entrée"}}
{{else}} {{else}}
{{:form_errors}} {{:form_errors}}
{{/form}} {{/form}}
{{* Extraire et compiler les infos de la base *}} {{* Extraire et compiler les infos de la base *}}
@ -64,51 +64,47 @@
{{if $equipments !== null}} {{if $equipments !== null}}
{{* déterminer la quantité des matériels sortis temporairement *}} {{* déterminer la quantité des matériels sortis temporairement *}}
{{#foreach from=$equipments key="cat_key" item="category"}} {{#foreach from=$equipments key="cat_key" item="category"}}
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}} {{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
{{:assign quantite=$eqpmt.exterieur}} {{:assign quantite=$eqpmt.exterieur}}
{{if $quantite != 0}} {{if $quantite != 0}}
{{:assign {{:assign
var="temporaire.%s.%s"|args:$category.name:$eqpmt_key var="temporaire.%s.%s"|args:$category.name:$eqpmt_key
value="%s (quantité : %d)"|args:$eqpmt.designation:$quantite value="%s (quantité : %d)"|args:$eqpmt.designation:$quantite
}} }}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
{{if $temporaire != null}} {{if $temporaire != null}}
{{* formulaire d'entrée de matériel *}} {{* formulaire d'entrée de matériel *}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="entree">
<fieldset class="entree"> <legend>Ajouter une entrée pour un retour de matériel</legend>
<legend>Ajouter une entrée pour un retour de matériel</legend> <dl>
<dl> {{:input type="select" name="type_operation" label="Type" required=true options=$input_types}}
{{:input type="select" name="type_operation" label="Type" required=true options=$input_types}} {{:input type="date" name="date" label="Date" required=true default=$now|date_short}}
{{:input type="date" name="date" label="Date" required=true default=$now|date_short}} {{:input type="number" name="quantite" label="Quantité" required=true default=1}}
{{:input type="number" name="quantite" label="Quantité" required=true default=1}} </dl>
</dl> </fieldset>
</fieldset> <fieldset>
<legend>Matériel</legend>
<fieldset> <dl>
<legend>Matériel</legend> {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$temporaire}}
<dl> {{:input type="textarea" name="remarques" label="Remarques" cols="40", rows="3" required=false}}
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$temporaire}} </dl>
{{:input type="textarea" name="remarques" label="Remarques" cols="40", rows="3" required=false}} </fieldset>
</dl> <p class="submit">
</fieldset> {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
<p class="submit"> </form>
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} {{else}}
</p> <p class="block error">Il n'y a aucun matériel</p>
{{/if}}
</form>
{{else}}
<p class="block error">Il n'y a aucun matériel</p>
{{/if}}
{{else}} {{else}}
<p class="block error">Il n'y a aucun matériel</p> <p class="block error">Il n'y a aucun matériel</p>
{{/if}} {{/if}}
{{:admin_footer}} {{:admin_footer}}

View File

@ -5,7 +5,7 @@
{{:assign url=$_GET.caller}} {{:assign url=$_GET.caller}}
{{:assign pos=$url|strpos:"?"}} {{:assign pos=$url|strpos:"?"}}
{{if $pos|intval > 0}} {{if $pos|intval > 0}}
{{:assign url=$url|truncate:$pos:"":true}} {{:assign url=$url|truncate:$pos:"":true}}
{{/if}} {{/if}}
{{:assign direction=$_GET.direction}} {{:assign direction=$_GET.direction}}
@ -14,12 +14,12 @@
{{* récupérer les infos du mouvement à modifier *}} {{* récupérer les infos du mouvement à modifier *}}
{{#load key=$key_mvt assign="mvt_modif"}} {{#load key=$key_mvt assign="mvt_modif"}}
{{else}} {{else}}
{{:error message="Aucune %s avec la clé %s"|args:$_GET.direction:$key_mvt}} {{:error message="Aucune %s avec la clé %s"|args:$_GET.direction:$key_mvt}}
{{/load}} {{/load}}
{{if $direction == "input"}} {{if $direction == "input"}}
{{:assign input_init=$mvt_modif.input_nature}} {{:assign input_init=$mvt_modif.input_nature}}
{{else}} {{else}}
{{:assign output_init=$mvt_modif.output_nature}} {{:assign output_init=$mvt_modif.output_nature}}
{{/if}} {{/if}}
{{:assign amount_init=$mvt_modif.amount}} {{:assign amount_init=$mvt_modif.amount}}
{{:assign date_init=$mvt_modif.date|date_short}} {{:assign date_init=$mvt_modif.date|date_short}}
@ -31,173 +31,173 @@
{{:include file="../_get_config.html" keep="config"}} {{:include file="../_get_config.html" keep="config"}}
{{if $direction == "input"}} {{if $direction == "input"}}
{{* types d'entrées *}} {{* types d'entrées *}}
{{#foreach from=$config.input_nature key="rang" item="elem"}} {{#foreach from=$config.input_nature key="rang" item="elem"}}
{{:assign var='input_types.' value="%s"|args:$elem.label}} {{:assign var='input_types.' value="%s"|args:$elem.label}}
{{if $elem.label == $mvt_modif.input_nature}} {{if $elem.label == $mvt_modif.input_nature}}
{{:assign type_defaut=$rang}} {{:assign type_defaut=$rang}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{else}} {{else}}
{{* types de sorties *}} {{* types de sorties *}}
{{#foreach from=$config.output_nature key="rang" item="elem"}} {{#foreach from=$config.output_nature key="rang" item="elem"}}
{{:assign var='types_sorties.' value="%s"|args:$elem.label}} {{:assign var='types_sorties.' value="%s"|args:$elem.label}}
{{if $elem.label == $mvt_modif.output_nature}} {{if $elem.label == $mvt_modif.output_nature}}
{{:assign type_defaut=$rang}} {{:assign type_defaut=$rang}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{* récupérer les infos du matériel associé *}} {{* récupérer les infos du matériel associé *}}
{{#load key=$key_eqpmt_init assign="eqpmt_init"}} {{#load key=$key_eqpmt_init assign="eqpmt_init"}}
{{else}} {{else}}
{{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_init}} {{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_init}}
{{/load}} {{/load}}
{{* {{*
-------------------- Traiter la saisie -------------------- -------------------- Traiter la saisie --------------------
*}} *}}
{{#form on="change"}} {{#form on="change"}}
{{* préparer le mouvement modifié *}} {{* préparer le mouvement modifié *}}
{{if $direction == "input"}} {{if $direction == "input"}}
{{:assign var="mvt_modif.input_nature" from="input_types.%d"|args:$_POST.type_operation}} {{:assign var="mvt_modif.input_nature" from="input_types.%d"|args:$_POST.type_operation}}
{{else}} {{else}}
{{:assign var="mvt_modif.output_nature" from="types_sorties.%d"|args:$_POST.type_operation}} {{:assign var="mvt_modif.output_nature" from="types_sorties.%d"|args:$_POST.type_operation}}
{{/if}} {{/if}}
{{:assign var="mvt_modif.amount" value=$_POST.amount}} {{:assign var="mvt_modif.amount" value=$_POST.amount}}
{{:assign var="mvt_modif.equipment" value=$_POST.equipment}} {{:assign var="mvt_modif.equipment" value=$_POST.equipment}}
{{:assign var="mvt_modif.date" value=$_POST.date|parse_date}} {{:assign var="mvt_modif.date" value=$_POST.date|parse_date}}
{{:assign var="mvt_modif.comment" value=$_POST.comment}} {{:assign var="mvt_modif.comment" value=$_POST.comment}}
{{* {{*
lister les mouvements et remplacer le mouvement sélectionné par sa version modifiée lister les mouvements et remplacer le mouvement sélectionné par sa version modifiée
en l'insérant à sa place par date croissante en l'insérant à sa place par date croissante
*}} *}}
{{:assign insere=false}} {{:assign insere=false}}
{{#select {{#select
id, key, id, key,
json_extract(document, '$.type') as 'type', json_extract(document, '$.type') as 'type',
json_extract(document, '$.direction') as 'direction', json_extract(document, '$.direction') as 'direction',
json_extract(document, '$.input_nature') as 'input_nature', json_extract(document, '$.input_nature') as 'input_nature',
json_extract(document, '$.output_nature') as 'output_nature', json_extract(document, '$.output_nature') as 'output_nature',
json_extract(document, '$.amount') as 'amount', json_extract(document, '$.amount') as 'amount',
json_extract(document, '$.equipment') as 'equipment', json_extract(document, '$.equipment') as 'equipment',
json_extract(document, '$.date') as 'date', json_extract(document, '$.date') as 'date',
json_extract(document, '$.comment') as 'comment' json_extract(document, '$.comment') as 'comment'
FROM module_data_equipment FROM module_data_equipment
WHERE WHERE
json_extract(document, '$.type') = 'movement' json_extract(document, '$.type') = 'movement'
AND AND
(json_extract(document, '$.equipment') = :old_eqpmt_key (json_extract(document, '$.equipment') = :old_eqpmt_key
OR OR
json_extract(document, '$.equipment') = :new_eqpmt_key) json_extract(document, '$.equipment') = :new_eqpmt_key)
ORDER BY json_extract(document, '$.date'); ORDER BY json_extract(document, '$.date');
:old_eqpmt_key=$key_eqpmt_init :old_eqpmt_key=$key_eqpmt_init
:new_eqpmt_key=$_POST.equipment :new_eqpmt_key=$_POST.equipment
assign="movement" assign="movement"
}} }}
{{if $key != $key_mvt}} {{if $key != $key_mvt}}
{{if $date > $mvt_modif.date && ! $insere}} {{if $date > $mvt_modif.date && ! $insere}}
{{:assign var=movements_modif." from=mvt_modif}} {{:assign var=movements_modif." from=mvt_modif}}
{{:assign insere=true}} {{:assign insere=true}}
{{/if}} {{/if}}
{{:assign var=movements_modif." from=movement}} {{:assign var=movements_modif." from=movement}}
{{/if}} {{/if}}
{{/select}} {{/select}}
{{if ! $insere}} {{if ! $insere}}
{{:assign var=movements_modif." from=mvt_modif}} {{:assign var=movements_modif." from=mvt_modif}}
{{/if}} {{/if}}
{{* Vérifier la cohérence des opérations de l'ancien matériel *}} {{* Vérifier la cohérence des opérations de l'ancien matériel *}}
{{:include {{:include
file="./valider_modification.html" file="./valider_modification.html"
keep="erreur" keep="erreur"
movements=$movements_modif movements=$movements_modif
eqpmt_key=$key_eqpmt_init eqpmt_key=$key_eqpmt_init
}} }}
{{* Si le matériel a changé, vérifier la cohérence des opérations du nouveau matériel *}} {{* Si le matériel a changé, vérifier la cohérence des opérations du nouveau matériel *}}
{{if ! $erreur && $key_eqpmt_init != $_POST.equipment}} {{if ! $erreur && $key_eqpmt_init != $_POST.equipment}}
{{:include {{:include
file="./valider_modification.html" file="./valider_modification.html"
keep="erreur" keep="erreur"
movements=$movements_modif movements=$movements_modif
eqpmt_key=$_POST.equipment eqpmt_key=$_POST.equipment
}} }}
{{/if}} {{/if}}
{{#load key=$mvt_modif.equipment assign="eqpmt"}}{{/load}} {{#load key=$mvt_modif.equipment assign="eqpmt"}}{{/load}}
{{if $erreur}} {{if $erreur}}
<p class="block error"> <p class="block error">
Modification demandée impossible : Modification demandée impossible :
{{if $direction == "input"}} {{if $direction == "input"}}
« {{$input_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers « {{$input_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers
« {{$mvt_modif.input_nature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} » « {{$mvt_modif.input_nature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} »
{{else}} {{else}}
« {{$output_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers « {{$output_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers
« {{$mvt_modif.output_nature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} » « {{$mvt_modif.output_nature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} »
{{/if}} {{/if}}
</p> </p>
{{else}} {{else}}
{{* vérification réussie : modifier le mouvement *}} {{* vérification réussie : modifier le mouvement *}}
{{:save {{:save
key=$key_mvt key=$key_mvt
validate_schema="./movement.schema.json" validate_schema="./movement.schema.json"
type="movement" type="movement"
direction=$direction direction=$direction
input_nature=$mvt_modif.input_nature input_nature=$mvt_modif.input_nature
output_nature=$mvt_modif.output_nature output_nature=$mvt_modif.output_nature
amount=$mvt_modif.amount|intval amount=$mvt_modif.amount|intval
equipment=$mvt_modif.equipment equipment=$mvt_modif.equipment
date=$mvt_modif.date date=$mvt_modif.date
comment=$mvt_modif.comment comment=$mvt_modif.comment
}} }}
{{:redirect force="%s?ok=1&msg=modification"|args:$url}} {{:redirect force="%s?ok=1&msg=modification"|args:$url}}
{{/if}} {{/if}}
{{/form}} {{/form}}
{{* {{*
-------------------- Préparer la saisie -------------------- -------------------- Préparer la saisie --------------------
*}} *}}
{{* lister les catégories et matériels associés *}} {{* lister les catégories et matériels associés *}}
{{#load type="category" assign="category" order="$$.name"}} {{#load type="category" assign="category" order="$$.name"}}
{{:assign nom_cat=$category.name}} {{:assign nom_cat=$category.name}}
{{#load type="equipment" where="$$.category = :key" :key=$category.key assign="equipment"}} {{#load type="equipment" where="$$.category = :key" :key=$category.key assign="equipment"}}
{{:assign var="equipments.%s.%s"|args:$nom_cat:$equipment.key value=$equipment.designation}} {{:assign var="equipments.%s.%s"|args:$nom_cat:$equipment.key value=$equipment.designation}}
{{/load}} {{/load}}
{{/load}} {{/load}}
{{* formulaire de modification du mouvement *}} {{* formulaire de modification du mouvement *}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="entree"> <fieldset class="entree">
{{if $direction == "input"}} {{if $direction == "input"}}
<legend>Modifier l'entrée « {{$input_init}} {{$eqpmt_init.designation}} ({{$amount_init}}) en date du {{$date_init}} »</legend> <legend>Modifier l'entrée « {{$input_init}} {{$eqpmt_init.designation}} ({{$amount_init}}) en date du {{$date_init}} »</legend>
<dl> <dl>
{{:input type="select" name="type_operation" label="Type" required=true options=$input_types default=$type_defaut}} {{:input type="select" name="type_operation" label="Type" required=true options=$input_types default=$type_defaut}}
{{else}} {{else}}
<legend>Modifier la sortie « {{$output_init}} {{$eqpmt_init.designation}} ({{$amount_init}}) en date du {{$date_init}} »</legend> <legend>Modifier la sortie « {{$output_init}} {{$eqpmt_init.designation}} ({{$amount_init}}) en date du {{$date_init}} »</legend>
<dl> <dl>
{{:input type="select" name="type_operation" label="Type" required=true options=$types_sorties default=$type_defaut}} {{:input type="select" name="type_operation" label="Type" required=true options=$types_sorties default=$type_defaut}}
{{/if}} {{/if}}
{{:input type="date" name="date" label="Date" required=true default=$mvt_modif.date}} {{:input type="date" name="date" label="Date" required=true default=$mvt_modif.date}}
{{:input type="number" name="amount" label="Quantité" required=true default=$mvt_modif.amount}} {{:input type="number" name="amount" label="Quantité" required=true default=$mvt_modif.amount}}
</dl> </dl>
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>Matériel</legend> <legend>Matériel</legend>
<dl> <dl>
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$equipments default=$key_eqpmt_init}} {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$equipments default=$key_eqpmt_init}}
{{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_modif.comment}} {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false default=$mvt_modif.comment}}
</dl> </dl>
</fieldset> </fieldset>
<p class="submit"> <p class="submit">
{{:button type="submit" name="change" label="Enregistrer" shape="right" class="main"}} {{:button type="submit" name="change" label="Enregistrer" shape="right" class="main"}}
</p> </p>
</form> </form>

View File

@ -1,42 +1,42 @@
{ {
"$schema": "https://json-schema.org/draft/2020-12/schema", "$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object", "type": "object",
"properties": { "properties": {
"type": { "type": {
"type": "string", "type": "string",
"enum": ["movement"] "enum": ["movement"]
},
"direction" : {
"description": "Entrée ou sortie",
"type": "string",
"enum": ["input", "output"]
},
"input_nature": {
"description": "Nature de l'entrée",
"type": ["null", "string"]
},
"output_nature": {
"description": "Nature de la sortie",
"type": ["null", "string"]
},
"amount": {
"description": "Quantité ajoutée ou retirée",
"type": "integer",
"minimum": 1
},
"equipment": {
"description": "Clé du matériel",
"type": "string"
},
"date" : {
"description": "Date de l'opération",
"type": "string",
"format": "date"
},
"comment": {
"description": "Commentaire additionnel",
"type": ["null", "string"]
}
}, },
"direction" : { "required": ["type", "direction", "amount", "equipment", "date", "comment"]
"description": "Entrée ou sortie",
"type": "string",
"enum": ["input", "output"]
},
"input_nature": {
"description": "Nature de l'entrée",
"type": ["null", "string"]
},
"output_nature": {
"description": "Nature de la sortie",
"type": ["null", "string"]
},
"amount": {
"description": "Quantité ajoutée ou retirée",
"type": "integer",
"minimum": 1
},
"equipment": {
"description": "Clé du matériel",
"type": "string"
},
"date" : {
"description": "Date de l'opération",
"type": "string",
"format": "date"
},
"comment": {
"description": "Commentaire additionnel",
"type": ["null", "string"]
}
},
"required": ["type", "direction", "amount", "equipment", "date", "comment"]
} }

View File

@ -4,7 +4,7 @@
{{* récupérer les infos du mouvement à supprimer et du matériel associé *}} {{* récupérer les infos du mouvement à supprimer et du matériel associé *}}
{{#load key=$_GET.key assign="mvt_suppr"}} {{#load key=$_GET.key assign="mvt_suppr"}}
{{else}} {{else}}
{{:error message="Aucune sortie avec la clé « %s »"|args:$_GET.key}} {{:error message="Aucune sortie avec la clé « %s »"|args:$_GET.key}}
{{/load}} {{/load}}
{{:assign amount_suppr=$mvt_suppr.amount}} {{:assign amount_suppr=$mvt_suppr.amount}}
@ -13,78 +13,78 @@
{{#load key=$key_eqpmt_suppr assign="eqpmt_suppr"}} {{#load key=$key_eqpmt_suppr assign="eqpmt_suppr"}}
{{else}} {{else}}
{{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_suppr}} {{:error message="Aucun matériel avec la clé « %s »"|args:$key_eqpmt_suppr}}
{{/load}} {{/load}}
{{#form on="delete"}} {{#form on="delete"}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
{{:include file="../../_get_config.html" keep="config"}} {{:include file="../../_get_config.html" keep="config"}}
{{* déterminer s'il s'agit d'une sortie temporaire *}} {{* déterminer s'il s'agit d'une sortie temporaire *}}
{{:assign temporaire=false}} {{:assign temporaire=false}}
{{#foreach from=$config.output_nature item="elem"}} {{#foreach from=$config.output_nature item="elem"}}
{{if $mvt_suppr.output_nature == $elem.label && $elem.type == 'temporaire'}} {{if $mvt_suppr.output_nature == $elem.label && $elem.type == 'temporaire'}}
{{:assign temporaire=true}} {{:assign temporaire=true}}
{{:break}} {{:break}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{* dans le cas d'une sortie temporaire, vérifier s'il est possible de la supprimer *}} {{* dans le cas d'une sortie temporaire, vérifier s'il est possible de la supprimer *}}
{{if $temporaire}} {{if $temporaire}}
{{:assign exterieur=0}} {{:assign exterieur=0}}
{{#load {{#load
type="movement" type="movement"
where="$$.equipment = :key" :key=$key_eqpmt_suppr where="$$.equipment = :key" :key=$key_eqpmt_suppr
assign="movement" assign="movement"
order="$$.date"}} order="$$.date"}}
{{if $key != $_GET.key}} {{if $key != $_GET.key}}
{{* ce n'est pas le mouvement à supprimer : cumuler les entrées/sorties *}} {{* ce n'est pas le mouvement à supprimer : cumuler les entrées/sorties *}}
{{if $movement.direction == 'input'}} {{if $movement.direction == 'input'}}
{{* chercher le type d'entrée parmi les types de la config *}} {{* chercher le type d'entrée parmi les types de la config *}}
{{#foreach from=$config.input_nature item="elem"}} {{#foreach from=$config.input_nature item="elem"}}
{{if $movement.input_nature == $elem.label && $elem.type == 'retour'}} {{if $movement.input_nature == $elem.label && $elem.type == 'retour'}}
{{:assign exterieur="%d-%d"|math:$exterieur:$movement.amount}} {{:assign exterieur="%d-%d"|math:$exterieur:$movement.amount}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{elseif $movement.direction == 'output'}} {{elseif $movement.direction == 'output'}}
{{* chercher le type de sortie parmi les types de la config *}} {{* chercher le type de sortie parmi les types de la config *}}
{{#foreach from=$config.output_nature item="elem"}} {{#foreach from=$config.output_nature item="elem"}}
{{if $movement.output_nature == $elem.label && $elem.type == 'temporaire'}} {{if $movement.output_nature == $elem.label && $elem.type == 'temporaire'}}
{{:assign exterieur="%d+%d"|math:$exterieur:$movement.amount}} {{:assign exterieur="%d+%d"|math:$exterieur:$movement.amount}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{* problème ? *}} {{* problème ? *}}
{{if $exterieur < 0}} {{if $exterieur < 0}}
{{:redirect force="./index.html?err=1&msg=suppression"}} {{:redirect force="./index.html?err=1&msg=suppression"}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/load}} {{/load}}
{{/if}} {{/if}}
{{* vérification réussie : supprimer la sortie *}} {{* vérification réussie : supprimer la sortie *}}
{{:delete key=$_GET.key}} {{:delete key=$_GET.key}}
{{:assign var="msg" value="suppression"}} {{:assign var="msg" value="suppression"}}
{{* voir s'il reste des mouvements pour le matériel concerné par le mouvement supprimé *}} {{* voir s'il reste des mouvements pour le matériel concerné par le mouvement supprimé *}}
{{#load type="movement" where="$$.equipment = :eqpmt_key" :eqpmt_key=$key_eqpmt_suppr}} {{#load type="movement" where="$$.equipment = :eqpmt_key" :eqpmt_key=$key_eqpmt_suppr}}
{{else}} {{else}}
{{* supprimer le matériel *}} {{* supprimer le matériel *}}
{{:delete key=$key_eqpmt_suppr}} {{:delete key=$key_eqpmt_suppr}}
{{:assign var="msg" value="%s - matériel"|args:$msg}} {{:assign var="msg" value="%s - matériel"|args:$msg}}
{{/load}} {{/load}}
{{:redirect force="./index.html?ok=1&msg=%s"|args:$msg}} {{:redirect force="./index.html?ok=1&msg=%s"|args:$msg}}
{{/form}} {{/form}}
{{:delete_form {{:delete_form
legend="Supprimer cette sortie ?" legend="Supprimer cette sortie ?"
warning="Supprimer la sortie « %s %s (%d) en date du %s » ?"|args:$mvt_suppr.output_nature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr warning="Supprimer la sortie « %s %s (%d) en date du %s » ?"|args:$mvt_suppr.output_nature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr
info="S'il ne reste aucun mouvement pour ce matériel, le matériel sera supprimé" info="S'il ne reste aucun mouvement pour ce matériel, le matériel sera supprimé"
}} }}
{{:form_errors}} {{:form_errors}}

View File

@ -2,8 +2,8 @@
{{:admin_header title="Sortie de matériel" current="module_equipment"}} {{:admin_header title="Sortie de matériel" current="module_equipment"}}
{{if ! $dialog}} {{if ! $dialog}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{:include file="../../_nav.html" current="sorties"}} {{:include file="../../_nav.html" current="sorties"}}
{{/if}} {{/if}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
@ -11,114 +11,111 @@
{{* types de sorties *}} {{* types de sorties *}}
{{#foreach from=$config.output_nature item="elem"}} {{#foreach from=$config.output_nature item="elem"}}
{{if $elem.type == 'retour'}} {{if $elem.type == 'retour'}}
{{:assign var='output_types.' value="%s"|args:$elem.label}} {{:assign var='output_types.' value="%s"|args:$elem.label}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{* récupérer les infos du matériel *}} {{* récupérer les infos du matériel *}}
{{#load type="equipment" key=$_POST.equipment assign="equipment"}} {{#load type="equipment" key=$_POST.equipment assign="equipment"}}
{{:assign designation=$equipment.designation}} {{:assign designation=$equipment.designation}}
{{:assign var="categories." value=$equipment.category}} {{:assign var="categories." value=$equipment.category}}
{{/load}} {{/load}}
{{* Extraire et compiler les infos de la base *}} {{* Extraire et compiler les infos de la base *}}
{{:include {{:include
file="../../_calcul_dispo.html" file="../../_calcul_dispo.html"
keep="equipments" keep="equipments"
date=$_POST.date|parse_date date=$_POST.date|parse_date
}} }}
{{* déterminer la quantité présente de ce matériel à la date donnée *}} {{* déterminer la quantité présente de ce matériel à la date donnée *}}
{{:assign var=present from="equipments.%s.eqpmt.%s.nonproprio"|args:$equipment.category:$_POST.equipment}} {{:assign var=present from="equipments.%s.eqpmt.%s.nonproprio"|args:$equipment.category:$_POST.equipment}}
{{if $_POST.quantite|intval > $present}} {{if $_POST.quantite|intval > $present}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle présente (%d) à la date du %s"|args:$_POST.quantite:$present:$_POST.date}} {{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle présente (%d) à la date du %s"|args:$_POST.quantite:$present:$_POST.date}}
{{/if}} {{/if}}
{{* Enregistrer le mouvement *}} {{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}} {{:assign mvt_key=""|uuid}}
{{:assign var="operation" from="output_types.%d|args:$_POST.type_operation}} {{:assign var="operation" from="output_types.%d|args:$_POST.type_operation}}
{{:save {{:save
key=$mvt_key key=$mvt_key
validate_schema="../movement.schema.json" validate_schema="../movement.schema.json"
type="movement" type="movement"
direction="output" direction="output"
output_nature=$operation output_nature=$operation
amount=$_POST.quantite|intval amount=$_POST.quantite|intval
equipment=$equipment.key equipment=$equipment.key
date=$_POST.date|parse_date date=$_POST.date|parse_date
comment=$_POST.remarques|trim comment=$_POST.remarques|trim
}} }}
{{:redirect force="index.html?ok=1&msg=sortie"}} {{:redirect force="index.html?ok=1&msg=sortie"}}
{{else}} {{else}}
{{:form_errors}} {{:form_errors}}
{{/form}} {{/form}}
{{* Extraire et compiler les infos de la base *}} {{* Extraire et compiler les infos de la base *}}
{{:include file="../../_calcul_dispo.html" keep="equipments"}} {{:include file="../../_calcul_dispo.html" keep="equipments"}}
{{if $equipments !== null}} {{if $equipments !== null}}
{{* calculer les quantité de matériels dont l'asso n'est pas propriétaire *}} {{* calculer les quantité de matériels dont l'asso n'est pas propriétaire *}}
{{#foreach from=$equipments key="cat_key" item="category"}} {{#foreach from=$equipments key="cat_key" item="category"}}
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}} {{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
{{:assign quantite="%d-%d"|math:$eqpmt.nonproprio:$eqpmt.retour}} {{:assign quantite="%d-%d"|math:$eqpmt.nonproprio:$eqpmt.retour}}
{{if $quantite != 0}} {{if $quantite != 0}}
{{:assign {{:assign
var="temporaire.%s.%s"|args:$category.name:$eqpmt_key var="temporaire.%s.%s"|args:$category.name:$eqpmt_key
value="%s (quantité : %d)"|args:$eqpmt.designation:$quantite value="%s (quantité : %d)"|args:$eqpmt.designation:$quantite
}} }}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
{{if $temporaire != null}} {{if $temporaire != null}}
{{* formulaire de sortie de matériel *}} {{* formulaire de sortie de matériel *}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="sortie">
<fieldset class="sortie"> <legend>Ajouter une sortie d'un matériel disponible en stock</legend>
<legend>Ajouter une sortie d'un matériel disponible en stock</legend> <dl>
<dl> {{:input type="select" name="type_operation" label="Type" required=true options=$output_types}}
{{:input type="select" name="type_operation" label="Type" required=true options=$output_types}} {{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}}
{{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}} {{:input type="number" name="quantite" label="Quantité" required=true default=1 min=1}}
{{:input type="number" name="quantite" label="Quantité" required=true default=1 min=1}} </dl>
</dl> </fieldset>
</fieldset> <fieldset>
<legend>Matériel</legend>
<fieldset> <p><span class="alert">La quantité disponible est celle à la date du jour</span></p>
<legend>Matériel</legend> <dl>
<p><span class="alert">La quantité disponible est celle à la date du jour</span></p> {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$temporaire onchange="fixerValeurMax('f_equipment', 'f_quantite')"}}
<dl> {{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$temporaire onchange="fixerValeurMax('f_equipment', 'f_quantite')"}} </dl>
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}} </fieldset>
</dl> <p class="submit">
</fieldset> {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
<p class="submit"> </form>
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}} {{else}}
</p> <p class="block error">Il n'y a aucun matériel</p>
</form> {{/if}}
{{else}}
<p class="block error">Il n'y a aucun matériel</p>
{{/if}}
{{else}} {{else}}
<p class="block error">Il n'y a aucun matériel</p> <p class="block error">Il n'y a aucun matériel</p>
{{/if}} {{/if}}
<script type="text/javascript"> <script type="text/javascript">
// fixer la valeur maximale du champ de saisie de la quantité // fixer la valeur maximale du champ de saisie de la quantité
function fixerValeurMax(idSelect, idNumber) { function fixerValeurMax(idSelect, idNumber) {
let option = document.getElementById(idSelect).selectedOptions[0]; let option = document.getElementById(idSelect).selectedOptions[0];
let max = parseInt(option.label.match(/\(quantité : ([0-9]+)\)/)[1]); let max = parseInt(option.label.match(/\(quantité : ([0-9]+)\)/)[1]);
let val = parseInt(document.getElementById(idNumber).value); let val = parseInt(document.getElementById(idNumber).value);
document.getElementById(idNumber).setAttribute("max", max); document.getElementById(idNumber).setAttribute("max", max);
if (val > max) { if (val > max) {
document.getElementById(idNumber).value = max; document.getElementById(idNumber).value = max;
} }
} }
</script> </script>
{{:admin_footer}} {{:admin_footer}}

View File

@ -5,74 +5,73 @@
{{:include file="../../_nav.html" current="sorties"}} {{:include file="../../_nav.html" current="sorties"}}
{{if $_GET.ok}} {{if $_GET.ok}}
{{if $_GET.msg|match:"suppression"}} {{if $_GET.msg|match:"suppression"}}
{{:assign msg="Sortie supprimée"}} {{:assign msg="Sortie supprimée"}}
{{if $_GET.msg|match:"matériel"}} {{if $_GET.msg|match:"matériel"}}
{{:assign var="msg" value="%s - Matériel supprimé"|args:$msg}} {{:assign var="msg" value="%s - Matériel supprimé"|args:$msg}}
{{/if}} {{/if}}
{{elseif $_GET.msg == "sortie"}} {{elseif $_GET.msg == "sortie"}}
{{:assign msg="Sortie enregistrée"}} {{:assign msg="Sortie enregistrée"}}
{{elseif $_GET.msg == "modification"}} {{elseif $_GET.msg == "modification"}}
{{:assign msg="Sortie modifiée"}} {{:assign msg="Sortie modifiée"}}
{{/if}} {{/if}}
<p class="block confirm">{{$msg}}</p> <p class="block confirm">{{$msg}}</p>
{{elseif $_GET.err}} {{elseif $_GET.err}}
{{if $_GET.msg == "suppression"}} {{if $_GET.msg == "suppression"}}
<p class="block error">Impossible de supprimer la sortie</p> <p class="block error">Impossible de supprimer la sortie</p>
{{/if}} {{/if}}
{{/if}} {{/if}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="sortie"> <fieldset class="sortie">
<legend>Ajouter une sortie </legend> <legend>Ajouter une sortie </legend>
<dl> <dl>
{{:linkbutton label="Matériel en stock disponible" shape="plus" href="stock_disponible.html" target="_dialog"}} {{:linkbutton label="Matériel en stock disponible" shape="plus" href="stock_disponible.html" target="_dialog"}}
{{:linkbutton label="Matériel emprunté" shape="plus" href="emprunte.html" target="_dialog"}} {{:linkbutton label="Matériel emprunté" shape="plus" href="emprunte.html" target="_dialog"}}
</dl> </dl>
</fieldset> </fieldset>
</form> </form>
{{* lister les sorties *}} {{* lister les sorties *}}
<section class="liste_sorties"> <section class="liste_sorties">
<h2>Liste des sorties</h2> <h2>Liste des sorties</h2>
{{#list {{#list
select=" select="
$$.date AS 'Date' ; $$.date AS 'Date' ;
$$.output_nature AS 'Type' ; $$.output_nature AS 'Type' ;
$$.amount AS 'Nombre' ; $$.amount AS 'Nombre' ;
(SELECT $$.designation (SELECT $$.designation
FROM @TABLE AS b FROM @TABLE AS b
WHERE b.key = @TABLE.$$.equipment) WHERE b.key = @TABLE.$$.equipment) AS 'Matériel' ;
AS 'Matériel' ; $$.comment AS 'Remarques'"
$$.comment AS 'Remarques'" type="movement"
type="movement" direction="output"
direction="output" order=1}}
order=1}}
{{:assign var='mvt_key' value=$key}} {{:assign var='mvt_key' value=$key}}
<tr> <tr>
<td>{{$date|date_short}}</td> <td>{{$date|date_short}}</td>
<td>{{$output_nature}}</td> <td>{{$output_nature}}</td>
<td>{{$amount}}</td> <td>{{$amount}}</td>
<td>{{$col4}}</td> <td>{{$col4}}</td>
<td>{{$comment}}</td> <td>{{$comment}}</td>
<td class="actions"> <td class="actions">
{{:linkbutton {{:linkbutton
label="Supprimer" label="Supprimer"
href="delete_sortie.html?key=%s"|args:$mvt_key href="delete_sortie.html?key=%s"|args:$mvt_key
shape="delete" shape="delete"
target="_dialog"}} target="_dialog"}}
{{:linkbutton {{:linkbutton
label="Modifier" label="Modifier"
href="../modifier_mouvement.html?key=%s&direction=output&caller=%s"|args:$mvt_key:$request_url href="../modifier_mouvement.html?key=%s&direction=output&caller=%s"|args:$mvt_key:$request_url
shape="edit" shape="edit"
target="_dialog"}} target="_dialog"}}
</td> </td>
</tr> </tr>
{{else}} {{else}}
<p class="block alert">Il n'y a aucune sortie.</p> <p class="block alert">Il n'y a aucune sortie.</p>
{{/list}} {{/list}}
</section> </section>
{{:admin_footer}} {{:admin_footer}}

View File

@ -2,8 +2,8 @@
{{:admin_header title="Sortie de matériel" current="module_equipment"}} {{:admin_header title="Sortie de matériel" current="module_equipment"}}
{{if ! $dialog}} {{if ! $dialog}}
{{* barre de navigation *}} {{* barre de navigation *}}
{{:include file="../../_nav.html" current="sorties"}} {{:include file="../../_nav.html" current="sorties"}}
{{/if}} {{/if}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
@ -11,114 +11,110 @@
{{* types de sorties *}} {{* types de sorties *}}
{{#foreach from=$config.output_nature item="elem"}} {{#foreach from=$config.output_nature item="elem"}}
{{if $elem.type != 'retour'}} {{if $elem.type != 'retour'}}
{{:assign var='output_types.' value="%s"|args:$elem.label}} {{:assign var='output_types.' value="%s"|args:$elem.label}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{* Traiter l'envoi du formulaire *}} {{* Traiter l'envoi du formulaire *}}
{{#form on="save"}} {{#form on="save"}}
{{* récupérer les infos du matériel *}} {{* récupérer les infos du matériel *}}
{{#load type="equipment" key=$_POST.equipment assign="equipment"}} {{#load type="equipment" key=$_POST.equipment assign="equipment"}}
{{:assign designation=$equipment.designation}} {{:assign designation=$equipment.designation}}
{{:assign var="categories." value=$equipment.category}} {{:assign var="categories." value=$equipment.category}}
{{/load}} {{/load}}
{{* Extraire et compiler les infos de la base *}} {{* Extraire et compiler les infos de la base *}}
{{:include {{:include
file="../../_calcul_dispo.html" file="../../_calcul_dispo.html"
keep="equipments" keep="equipments"
date=$_POST.date|parse_date date=$_POST.date|parse_date
}} }}
{{* déterminer la quantité disponible de ce matériel à la date donnée *}} {{* déterminer la quantité disponible de ce matériel à la date donnée *}}
{{:assign var=stock from="equipments.%s.eqpmt.%s.stock"|args:$equipment.category:$_POST.equipment}} {{:assign var=stock from="equipments.%s.eqpmt.%s.stock"|args:$equipment.category:$_POST.equipment}}
{{:assign var=exterieur from="equipments.%s.eqpmt.%s.exterieur"|args:$equipment.category:$_POST.equipment}} {{:assign var=exterieur from="equipments.%s.eqpmt.%s.exterieur"|args:$equipment.category:$_POST.equipment}}
{{:assign dispo="%d-%d"|math:$stock:$exterieur}} {{:assign dispo="%d-%d"|math:$stock:$exterieur}}
{{if $_POST.quantite|intval > $dispo}} {{if $_POST.quantite|intval > $dispo}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo:$_POST.date}} {{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo:$_POST.date}}
{{/if}} {{/if}}
{{* Enregistrer le mouvement *}} {{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}} {{:assign mvt_key=""|uuid}}
{{:assign var="operation" from="output_types.%d|args:$_POST.type_operation}} {{:assign var="operation" from="output_types.%d|args:$_POST.type_operation}}
{{:save {{:save
key=$mvt_key key=$mvt_key
validate_schema="../movement.schema.json" validate_schema="../movement.schema.json"
type="movement" type="movement"
direction="output" direction="output"
output_nature=$operation output_nature=$operation
amount=$_POST.quantite|intval amount=$_POST.quantite|intval
equipment=$equipment.key equipment=$equipment.key
date=$_POST.date|parse_date date=$_POST.date|parse_date
comment=$_POST.remarques|trim comment=$_POST.remarques|trim
}} }}
{{:redirect force="index.html?ok=1&msg=sortie"}} {{:redirect force="index.html?ok=1&msg=sortie"}}
{{else}} {{else}}
{{:form_errors}} {{:form_errors}}
{{/form}} {{/form}}
{{* Extraire et compiler les infos de la base *}} {{* Extraire et compiler les infos de la base *}}
{{:include file="../../_calcul_dispo.html" keep="equipments"}} {{:include file="../../_calcul_dispo.html" keep="equipments"}}
{{if $equipments !== null}} {{if $equipments !== null}}
{{* calculer les disponibilités *}} {{* calculer les disponibilités *}}
{{#foreach from=$equipments key="cat_key" item="category"}} {{#foreach from=$equipments key="cat_key" item="category"}}
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}} {{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
{{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}} {{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}}
{{:assign {{:assign
var="disponibilites.%s.%s"|args:$category.name:$eqpmt_key var="disponibilites.%s.%s"|args:$category.name:$eqpmt_key
value="%s (dispo : %d)"|args:$eqpmt.designation:$dispo value="%s (dispo : %d)"|args:$eqpmt.designation:$dispo
}} }}
{{/foreach}} {{/foreach}}
{{/foreach}} {{/foreach}}
{{if $disponibilites === null}} {{if $disponibilites === null}}
{{:error message="Le matériel choisi (%s) n'est pas présent à la date du %s"|args:$designation:$_POST.date}} {{:error message="Le matériel choisi (%s) n'est pas présent à la date du %s"|args:$designation:$_POST.date}}
{{/if}} {{/if}}
{{* formulaire de sortie de matériel *}} {{* formulaire de sortie de matériel *}}
<form method="post" action=""> <form method="post" action="">
<fieldset class="sortie">
<fieldset class="sortie"> <legend>Ajouter une sortie d'un matériel disponible en stock</legend>
<legend>Ajouter une sortie d'un matériel disponible en stock</legend> <dl>
<dl> {{:input type="select" name="type_operation" label="Type" required=true options=$output_types}}
{{:input type="select" name="type_operation" label="Type" required=true options=$output_types}} {{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}}
{{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}} {{:input type="number" name="quantite" label="Quantité" required=true default=1 min=1}}
{{:input type="number" name="quantite" label="Quantité" required=true default=1 min=1}} </dl>
</dl> </fieldset>
</fieldset> <fieldset>
<legend>Matériel</legend>
<fieldset> <p><span class="alert">La quantité disponible est celle à la date du jour</span></p>
<legend>Matériel</legend> <dl>
<p><span class="alert">La quantité disponible est celle à la date du jour</span></p> {{:input type="select_groups" name="equipment" label="Matériel" required=true options=$disponibilites onchange="fixerValeurMax('f_equipment', 'f_quantite')"}}
<dl> {{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$disponibilites onchange="fixerValeurMax('f_equipment', 'f_quantite')"}} </dl>
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}} </fieldset>
</dl> <p class="submit">
</fieldset> {{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
<p class="submit"> </form>
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
</p>
</form>
{{else}} {{else}}
<p class="block error">Il n'y a aucun matériel</p> <p class="block error">Il n'y a aucun matériel</p>
{{/if}} {{/if}}
<script type="text/javascript"> <script type="text/javascript">
// fixer la valeur maximale du champ de saisie de la quantité // fixer la valeur maximale du champ de saisie de la quantité
function fixerValeurMax(idSelect, idNumber) { function fixerValeurMax(idSelect, idNumber) {
let option = document.getElementById(idSelect).selectedOptions[0]; let option = document.getElementById(idSelect).selectedOptions[0];
let max = parseInt(option.label.match(/\(dispo : ([0-9]+)\)/)[1]); let max = parseInt(option.label.match(/\(dispo : ([0-9]+)\)/)[1]);
let val = parseInt(document.getElementById(idNumber).value); let val = parseInt(document.getElementById(idNumber).value);
document.getElementById(idNumber).setAttribute("max", max); document.getElementById(idNumber).setAttribute("max", max);
if (val > max) { if (val > max) {
document.getElementById(idNumber).value = max; document.getElementById(idNumber).value = max;
} }
} }
</script> </script>
{{:admin_footer}} {{:admin_footer}}

View File

@ -1,8 +1,8 @@
{{* {{*
Vérifier la cohérence des E/S d'un matériel Vérifier la cohérence des E/S d'un matériel
- paramètres : - paramètres :
- movements : liste de mouvements - movements : liste de mouvements
- eqpmt_key : clé du matériel à vérifier - eqpmt_key : clé du matériel à vérifier
*}} *}}
{{* récupérer la config des entrées/sorties *}} {{* récupérer la config des entrées/sorties *}}
@ -13,38 +13,38 @@
{{:assign exterieur=0}} {{:assign exterieur=0}}
{{:assign nonprop=0}} {{:assign nonprop=0}}
{{#foreach from=$movements item="movement"}} {{#foreach from=$movements item="movement"}}
{{if $movement.equipment == $eqpmt_key}} {{if $movement.equipment == $eqpmt_key}}
{{if $movement.direction == 'input'}} {{if $movement.direction == 'input'}}
{{* chercher le type d'entrée parmi les types de la config *}} {{* chercher le type d'entrée parmi les types de la config *}}
{{#foreach from=$config.input_nature item="elem"}} {{#foreach from=$config.input_nature item="elem"}}
{{if $movement.input_nature == $elem.label}} {{if $movement.input_nature == $elem.label}}
{{if $elem.type == 'définitif'}} {{if $elem.type == 'définitif'}}
{{:assign stock="%d+%d"|math:$stock:$movement.amount}} {{:assign stock="%d+%d"|math:$stock:$movement.amount}}
{{elseif $elem.type == 'retour'}} {{elseif $elem.type == 'retour'}}
{{:assign exterieur="%d-%d"|math:$exterieur:$movement.amount}} {{:assign exterieur="%d-%d"|math:$exterieur:$movement.amount}}
{{elseif $elem.type == 'temporaire'}} {{elseif $elem.type == 'temporaire'}}
{{:assign nonprop="%d+%d"|math:$nonprop:$movement.amount}} {{:assign nonprop="%d+%d"|math:$nonprop:$movement.amount}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{elseif $movement.direction == 'output'}} {{elseif $movement.direction == 'output'}}
{{* chercher le type de sortie parmi les types de la config *}} {{* chercher le type de sortie parmi les types de la config *}}
{{#foreach from=$config.output_nature item="elem"}} {{#foreach from=$config.output_nature item="elem"}}
{{if $movement.output_nature == $elem.label}} {{if $movement.output_nature == $elem.label}}
{{if $elem.type == 'définitif'}} {{if $elem.type == 'définitif'}}
{{:assign stock="%d-%d"|math:$stock:$movement.amount}} {{:assign stock="%d-%d"|math:$stock:$movement.amount}}
{{elseif $elem.type == 'temporaire'}} {{elseif $elem.type == 'temporaire'}}
{{:assign exterieur="%d+%d"|math:$exterieur:$movement.amount}} {{:assign exterieur="%d+%d"|math:$exterieur:$movement.amount}}
{{elseif $elem.type == 'retour'}} {{elseif $elem.type == 'retour'}}
{{:assign nonprop="%d-%d"|math:$nonprop:$movement.amount}} {{:assign nonprop="%d-%d"|math:$nonprop:$movement.amount}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{/if}} {{/if}}
{{:assign dispo="%d-%d"|math:$stock:$exterieur}} {{:assign dispo="%d-%d"|math:$stock:$exterieur}}
{{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonprop < 0}} {{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonprop < 0}}
{{:assign erreur=true}} {{:assign erreur=true}}
{{:break}} {{:break}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}