Compare commits
No commits in common. "d19c4ce3fd76737d846dcbd598974e8f1d3eb9e0" and "c70668831c982a9da27d63849be566655475d36a" have entirely different histories.
d19c4ce3fd
...
c70668831c
@ -1,134 +1,137 @@
|
|||||||
{{*
|
{{*
|
||||||
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"}}
|
{{#select
|
||||||
{{:assign var="categories." value=$key}}
|
key
|
||||||
{{/load}}
|
FROM module_data_equipment as cat
|
||||||
|
WHERE json_extract(cat.document, '$.type') = 'category'}}
|
||||||
|
{{:assign var="categories." value=$key}}
|
||||||
|
{{/select}}
|
||||||
{{/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 'entrée' THEN json_extract(mvt.document, '$.inputNature')
|
||||||
WHEN 'output' THEN json_extract(mvt.document, '$.output_nature')
|
WHEN 'sortie' THEN json_extract(mvt.document, '$.outputNature')
|
||||||
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="/%s/_get_config.html"|args:$module.name keep="config"}}
|
||||||
|
|
||||||
{{if $direction === 'input'}}
|
{{if $direction === 'entrée'}}
|
||||||
{{* 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.inputNature 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 === 'sortie'}}
|
||||||
{{* 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.outputNature 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}}
|
||||||
|
@ -1,34 +1,36 @@
|
|||||||
{{*
|
{{*
|
||||||
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.inputNature et config.outputNature
|
||||||
*}}
|
*}}
|
||||||
|
|
||||||
{{* config par défaut *}}
|
{{* config par défaut *}}
|
||||||
{{:read file="./defaut.json" assign="config_defaut"}}
|
{{:read file="/%s/defaut.json"|args:$module.name assign="config_defaut"}}
|
||||||
{{:assign config_defaut=$config_defaut|json_decode}}
|
{{:assign config_defaut=$config_defaut|json_decode}}
|
||||||
|
|
||||||
{{if $module.config.input_nature != null}}
|
{{if $module.config.inputNature != null}}
|
||||||
{{:assign var=config.input_nature value=$module.config.input_nature}}
|
{{:assign var=config.inputNature value=$module.config.inputNature}}
|
||||||
{{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.entrées 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.inputNature." value=$item}}
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{if $module.config.output_nature != null}}
|
{{if $module.config.outputNature != null}}
|
||||||
{{:assign var=config.output_nature value=$module.config.output_nature}}
|
{{:assign var=config.outputNature value=$module.config.outputNature}}
|
||||||
{{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.sorties 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.outputNature." value=$item}}
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
|
||||||
|
15
_nav.html
15
_nav.html
@ -1,9 +1,10 @@
|
|||||||
|
{{:assign base_path="/m/%s"|args:$module.name}}
|
||||||
<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="{{$base_path}}/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="{{$base_path}}/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="{{$base_path}}/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="{{$base_path}}/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="{{$base_path}}/config.html">Configuration</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -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"]
|
||||||
}
|
}
|
||||||
|
@ -7,18 +7,19 @@
|
|||||||
{{/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=Cette catégorie ne peut être supprimée car elle contient encore des matériels"}}
|
||||||
{{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=La catégorie « %s » a été supprimée"|args:$category.name}}
|
||||||
{{/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"
|
||||||
}}
|
}}
|
||||||
|
@ -2,71 +2,63 @@
|
|||||||
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
||||||
|
|
||||||
{{* barre de navigation *}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="../_nav.html" current="categories"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="categories"}}
|
||||||
|
|
||||||
{{if $_GET.ok}}
|
{{if $_GET.ok}}
|
||||||
{{if $_GET.msg == "modification"}}
|
<p class="block confirm">{{$_GET.msg}}</p>
|
||||||
<p class="block confirm">Modification enregistrée</p>
|
{{else}}
|
||||||
{{elseif $_GET.msg == "suppression"}}
|
{{if $_GET.err}}
|
||||||
<p class="block confirm">Catégorie supprimée</p>
|
<p class="block error">{{$_GET.msg}}</p>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{elseif $_GET.err}}
|
|
||||||
{{if $_GET.msg == "modification"}}
|
|
||||||
<p class="block error">{{$_GET.msg}}</p>
|
|
||||||
{{elseif $_GET.msg == "suppression"}}
|
|
||||||
<p class="block error">
|
|
||||||
Cette catégorie ne peut être supprimée car elle contient encore des matériels
|
|
||||||
</p>
|
|
||||||
{{/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}}
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
{{#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="/%s/_nav.html"|args:$module.name 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}}
|
||||||
{{:include file="../inventaire.html"}}
|
{{:include file="/%s/inventaire.html"|args:$module.name}}
|
||||||
|
|
||||||
{{:admin_footer}}
|
{{:admin_footer}}
|
||||||
|
@ -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=Catégorie modifiée"}}
|
||||||
{{/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>
|
||||||
|
398
config.html
398
config.html
@ -2,235 +2,237 @@
|
|||||||
{{:admin_header title="Configuration" current="module_equipment"}}
|
{{:admin_header title="Configuration" current="module_equipment"}}
|
||||||
|
|
||||||
{{* barre de navigation *}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="_nav.html" current="config"}}
|
{{:include file="/%s/_nav.html"|args:$module.name 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
|
inputNature=$_POST.input_fields|array_transpose
|
||||||
output_nature=$_POST.output_fields|array_transpose
|
outputNature=$_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 *}}
|
||||||
{{:read file="./defaut.json" assign="config_defaut"}}
|
{{:read file="/%s/defaut.json"|args:$module.name assign="config_defaut"}}
|
||||||
{{:assign config_defaut=$config_defaut|json_decode}}
|
{{:assign config_defaut=$config_defaut|json_decode}}
|
||||||
|
|
||||||
{{* types d'entrées *}}
|
{{* types d'entrées *}}
|
||||||
{{#foreach from=$config_defaut.inputs item="elem"}}
|
{{#foreach from=$config_defaut.entrées 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='types_entrees.%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.sorties 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='types_sorties.%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.inputNature 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="$$.inputNature = :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=$types_entrees
|
||||||
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.entrées 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="$$.inputNature = :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=$types_entrees
|
||||||
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" label="Ajouter un champ" onclick="addLine('#input_body')"}}
|
{{:button shape="plus"
|
||||||
</p>
|
label="Ajouter un champ"
|
||||||
<div class="help block">
|
onclick="addLine('#input_body')"}}
|
||||||
<h3>Signification du type d'entrée</h3>
|
</p>
|
||||||
<ul>
|
<div class="help block">
|
||||||
<li><b>définitif</b> : l'asso devient propriétaire du matériel (ex : achat, don)</li>
|
<h3>Signification du type d'entrée</h3>
|
||||||
<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>
|
<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>
|
||||||
</div>
|
<li><b>retour</b> : matériel qui revient après une sortie temporaire (ex : retour de location ou de prêt)</li>
|
||||||
</fieldset>
|
</ul>
|
||||||
|
</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.outputNature 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="$$.outputNature = :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=$types_sorties
|
||||||
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.sorties 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="$$.inputNature = :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=$types_sorties
|
||||||
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}}
|
||||||
|
@ -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": {
|
"inputNature": {
|
||||||
"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": {
|
"outputNature": {
|
||||||
"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"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
20
defaut.json
20
defaut.json
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"inputs" : [
|
"entrées" : [
|
||||||
{ "Achat" : "définitif" },
|
{ "Achat" : "définitif" },
|
||||||
{ "Location" : "temporaire" },
|
{ "Location" : "temporaire" },
|
||||||
{ "Retour de Location/Prêt" : "retour" }
|
{ "Retour de Location/Prêt" : "retour" }
|
||||||
],
|
],
|
||||||
"outputs" : [
|
"sorties" : [
|
||||||
{ "Vente" : "définitif" },
|
{ "Vente" : "définitif" },
|
||||||
{ "Prêt" : "temporaire" },
|
{ "Prêt" : "temporaire" },
|
||||||
{ "Retour de Location/Emprunt" : "retour" }
|
{ "Retour de Location/Emprunt" : "retour" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -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"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"required": ["type", "category", "designation"]
|
"category" : {
|
||||||
|
"description": "Clé de la catégorie",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"designation": {
|
||||||
|
"description": "Désignation du matériel",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["type", "category", "designation"]
|
||||||
}
|
}
|
||||||
|
@ -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';
|
$$.direction AS 'Mvt';
|
||||||
CASE $$.direction WHEN 'input' THEN $$.input_nature WHEN 'output' THEN $$.output_nature END AS 'Type';
|
CASE $$.direction WHEN 'entrée' THEN $$.inputNature WHEN 'sortie' THEN $$.outputNature 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>{{$direction}}</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}}
|
||||||
|
23
index.html
23
index.html
@ -1,22 +1,21 @@
|
|||||||
|
{{#restrict section="accounting" level="read"}}{{/restrict}}
|
||||||
{{:admin_header title="Gestion des matériels" custom_css=$custom_css current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" custom_css=$custom_css current="module_equipment"}}
|
||||||
|
|
||||||
{{* barre de navigation *}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="_nav.html" current="index"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="index"}}
|
||||||
|
|
||||||
{{if $_GET.ok}}
|
{{#select
|
||||||
<p class="block confirm">Modification effectuée</p>
|
key
|
||||||
{{elseif $_GET.err}}
|
FROM module_data_equipment as cat
|
||||||
<p class="block error">Modification refusée</p>
|
WHERE json_extract(cat.document, '$.type') = 'category'
|
||||||
{{/if}}
|
}}
|
||||||
|
{{:assign var="categories." value=$key}}
|
||||||
{{#load type="category"}}
|
{{/select}}
|
||||||
{{:assign var="categories." value=$key}}
|
|
||||||
{{/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}}
|
||||||
|
244
inventaire.html
244
inventaire.html
@ -6,139 +6,141 @@
|
|||||||
|
|
||||||
{{* 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>
|
|
||||||
|
|
||||||
{{* itérer sur les catégories *}}
|
<section class="inventaire">
|
||||||
{{#foreach from=$equipments key="cat_key" item="category"}}
|
<h2 class="ruler">Matériels dont l'association est propriétaire</h2>
|
||||||
|
|
||||||
{{* vérifier s'il y a des matériels dans cette catégorie *}}
|
{{* itérer sur les catégories *}}
|
||||||
{{:assign present=false}}
|
{{#foreach from=$equipments key="cat_key" item="category"}}
|
||||||
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
|
|
||||||
{{if $eqpmt.stock !== null && $eqpmt.stock !== 0}}
|
|
||||||
{{:assign present=true}}
|
|
||||||
{{:break}}
|
|
||||||
{{/if}}
|
|
||||||
{{/foreach}}
|
|
||||||
|
|
||||||
{{if $print_cat_name}}
|
{{* vérifier s'il y a des matériels dans cette catégorie *}}
|
||||||
<h3>{{$category.name}}</h3>
|
{{:assign present=false}}
|
||||||
{{/if}}
|
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
|
||||||
|
{{if $eqpmt.stock !== null && $eqpmt.stock !== 0}}
|
||||||
|
{{:assign present=true}}
|
||||||
|
{{:break}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
|
||||||
{{if $present}}
|
{{if $print_cat_name}}
|
||||||
<table class="list">
|
<h3>{{$category.name}}</h3>
|
||||||
<thead>
|
{{/if}}
|
||||||
<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 *}}
|
{{if $present}}
|
||||||
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
|
<table class="list">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Désignation</th>
|
||||||
|
<th>Stock</th>
|
||||||
|
<th>Sortie</th>
|
||||||
|
<th>Disponible</th>
|
||||||
|
<th class="actions"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
|
||||||
{{:assign keys=$eqpmt|keys}}
|
{{:assign base_path="/m/%s"|args:$module.name}}
|
||||||
{{if "stock"|in:$keys && $eqpmt.stock !== 0}}
|
{{* itérer sur les matériels de la catégorie *}}
|
||||||
{{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}}
|
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
|
||||||
<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>
|
{{:assign keys=$eqpmt|keys}}
|
||||||
|
{{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="%s/historique.html?key=%s"|args:$base_path:$eqpmt_key
|
||||||
|
shape="table"
|
||||||
|
target="_dialog"}}
|
||||||
|
{{:linkbutton
|
||||||
|
label="Modifier"
|
||||||
|
href="%s/modifier_materiel.html?key=%s"|args:$base_path:$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}}
|
||||||
|
|
||||||
{{* itérer sur les catégories *}}
|
<h2 class="ruler">Matériels dont l'association n'est pas propriétaire</h2>
|
||||||
{{#foreach from=$equipments key="cat_key" item="category"}}
|
|
||||||
|
|
||||||
{{* vérifier s'il y a des matériels dans cette catégorie *}}
|
{{* itérer sur les catégories *}}
|
||||||
{{:assign present=false}}
|
{{#foreach from=$equipments key="cat_key" item="category"}}
|
||||||
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
|
|
||||||
{{if $eqpmt.nonproprio !== null && $eqpmt.nonproprio !== 0}}
|
|
||||||
{{:assign present=true}}
|
|
||||||
{{:break}}
|
|
||||||
{{/if}}
|
|
||||||
{{/foreach}}
|
|
||||||
|
|
||||||
{{if $print_cat_name}}
|
{{* vérifier s'il y a des matériels dans cette catégorie *}}
|
||||||
<h3>{{$category.name}}</h3>
|
{{:assign present=false}}
|
||||||
{{/if}}
|
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
|
||||||
|
{{if $eqpmt.nonproprio !== null && $eqpmt.nonproprio !== 0}}
|
||||||
|
{{:assign present=true}}
|
||||||
|
{{:break}}
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
|
||||||
{{if $present}}
|
{{if $print_cat_name}}
|
||||||
<table class="list">
|
<h3>{{$category.name}}</h3>
|
||||||
<thead>
|
{{/if}}
|
||||||
<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 *}}
|
{{if $present}}
|
||||||
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
|
<table class="list">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Désignation</th>
|
||||||
|
<th>Quantité</th>
|
||||||
|
<th class="actions"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
|
||||||
{{:assign keys=$eqpmt|keys}}
|
{{* itérer sur les matériels de la catégorie *}}
|
||||||
{{if "nonproprio"|in:$keys && $eqpmt.nonproprio !== 0}}
|
{{#foreach from=$category.eqpmt key="eqpmt_key" item="eqpmt"}}
|
||||||
{{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}}
|
|
||||||
<tr>
|
{{:assign keys=$eqpmt|keys}}
|
||||||
<td>{{$eqpmt.designation}}</td>
|
{{if "nonproprio"|in:$keys && $eqpmt.nonproprio !== 0}}
|
||||||
<td>{{$eqpmt.nonproprio}}</td>
|
{{:assign dispo="%d-%d"|math:$eqpmt.stock:$eqpmt.exterieur}}
|
||||||
<td class="actions">
|
<tr>
|
||||||
{{:linkbutton
|
<td>{{$eqpmt.designation}}</td>
|
||||||
label="Historique des mouvements"
|
<td>{{$eqpmt.nonproprio}}</td>
|
||||||
href="%shistorique.html?key=%s"|args:$module.url:$eqpmt_key
|
<td class="actions">
|
||||||
shape="table"
|
{{:linkbutton
|
||||||
target="_dialog"}}
|
label="Historique des mouvements"
|
||||||
{{:linkbutton
|
href="%s/historique.html?key=%s"|args:$base_path:$eqpmt_key
|
||||||
label="Modifier"
|
shape="table"
|
||||||
href="%smodifier_materiel.html?key=%s"|args:$module.url:$eqpmt_key
|
target="_dialog"}}
|
||||||
shape="edit"
|
{{:linkbutton
|
||||||
target="_dialog"}}
|
label="Modifier"
|
||||||
</td>
|
href="%s/modifier_materiel.html?key=%s"|args:$base_path:$eqpmt_key
|
||||||
</tr>
|
shape="edit"
|
||||||
{{/if}}
|
target="_dialog"}}
|
||||||
{{else}}
|
</td>
|
||||||
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
|
</tr>
|
||||||
{{/foreach}}
|
{{/if}}
|
||||||
</tbody>
|
{{else}}
|
||||||
</table>
|
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
|
||||||
{{else}}
|
{{/foreach}}
|
||||||
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
|
</tbody>
|
||||||
{{/if}}
|
</table>
|
||||||
{{/foreach}}
|
{{else}}
|
||||||
</section>
|
<p class="block alert">Il n'y a aucun matériel dans cette catégorie.</p>
|
||||||
|
{{/if}}
|
||||||
|
{{/foreach}}
|
||||||
|
</section>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@ -3,72 +3,70 @@
|
|||||||
|
|
||||||
{{: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&msg=Modification enregistrée"}}
|
||||||
|
|
||||||
{{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>
|
{{: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}}
|
</fieldset>
|
||||||
</dl>
|
|
||||||
</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>
|
||||||
|
@ -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="/%s/_get_config.html"|args:$module.name 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 == 'entrée'}}
|
||||||
{{* 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.inputNature item="elem"}}
|
||||||
{{if $movement.input_nature == $elem.label}}
|
{{if $movement.inputNature == $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 == 'sortie'}}
|
||||||
{{* 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.outputNature item="elem"}}
|
||||||
{{if $movement.output_nature == $elem.label}}
|
{{if $movement.outputNature == $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=Impossible de supprimer l'entrée « %s %s (%d) en date du %s »"|args:$mvt_suppr.inputNature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr}}
|
||||||
{{/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="Entrée « %s %s (%d) en date du %s » supprimée"|args:$mvt_suppr.inputNature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr}}
|
||||||
|
|
||||||
{{* 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 « %s » supprimé"|args:$msg:$eqpmt_suppr.designation}}
|
||||||
{{/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.inputNature:$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}}
|
||||||
|
@ -2,77 +2,64 @@
|
|||||||
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
||||||
|
|
||||||
{{* barre de navigation *}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="../../_nav.html" current="entrees"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="entrees"}}
|
||||||
|
|
||||||
{{if $_GET.ok}}
|
{{if $_GET.ok}}
|
||||||
{{if $_GET.msg|match:"suppression"}}
|
<p class="block confirm">{{$_GET.msg}}</p>
|
||||||
{{:assign msg="Entrée supprimée"}}
|
|
||||||
{{if $_GET.msg|match:"matériel"}}
|
|
||||||
{{:assign var="msg" value="%s - Matériel supprimé"|args:$msg}}
|
|
||||||
{{/if}}
|
|
||||||
{{elseif $_GET.msg == "entrée"}}
|
|
||||||
{{:assign msg="Entrée enregistrée"}}
|
|
||||||
{{elseif $_GET.msg == "modification"}}
|
|
||||||
{{:assign msg="Entrée modifiée"}}
|
|
||||||
{{/if}}
|
|
||||||
<p class="block confirm">{{$msg}}</p>
|
|
||||||
{{elseif $_GET.err}}
|
{{elseif $_GET.err}}
|
||||||
{{if $_GET.msg == "suppression"}}
|
<p class="block error">{{$_GET.msg}}</p>
|
||||||
<p class="block error">Impossible de supprimer l'entrée</p>
|
|
||||||
{{/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>
|
{{:linkbutton label="Matériel répertorié" shape="plus" href="repertorie.html?dialog" 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?dialog" 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?dialog" target="_dialog"}}
|
||||||
{{:linkbutton label="Retour de sortie temporaire" shape="plus" href="retour.html" target="_dialog"}}
|
</fieldset>
|
||||||
</dl>
|
|
||||||
</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' ;
|
$$.inputNature 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) AS 'Matériel' ;
|
WHERE b.key = @TABLE.$$.equipment)
|
||||||
$$.comment AS 'Remarques'"
|
AS 'Matériel' ;
|
||||||
type="movement"
|
$$.comment AS 'Remarques'"
|
||||||
direction="input"
|
type="movement"
|
||||||
order=1}}
|
direction="entrée"
|
||||||
|
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>{{$inputNature}}</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"|args:$mvt_key
|
href="../modifier_mouvement.html?key=%s&direction=entrée&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}}
|
||||||
|
@ -1,65 +1,69 @@
|
|||||||
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
||||||
{{:admin_header title="Entrée de matériel" current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
||||||
|
|
||||||
{{* barre de navigation *}}
|
{{if $_GET.dialog === null}}
|
||||||
{{if ! $dialog}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="../../_nav.html" current="entrees"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="entrees"}}
|
||||||
|
{{else}}
|
||||||
|
<header class="header">
|
||||||
|
<h1>Entrée de matériel</h1>
|
||||||
|
</header>
|
||||||
{{/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="/%s/_get_config.html"|args:$module.name keep="config"}}
|
||||||
|
|
||||||
{{* types d'entrées *}}
|
{{* types d'entrées *}}
|
||||||
{{#foreach from=$config.input_nature item="elem"}}
|
{{#foreach from=$config.inputNature item="elem"}}
|
||||||
{{if $elem.type != 'retour'}}
|
{{if $elem.type != 'retour'}}
|
||||||
{{:assign var='input_types.' value="%s"|args:$elem.label}}
|
{{:assign var='types_entrees.' 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="/%s/equipment.schema.json"|args:$module.name
|
||||||
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="types_entrees.%d|args:$_POST.type_operation}}
|
||||||
|
|
||||||
{{:save
|
{{:save
|
||||||
key=$mvt_key
|
key=$mvt_key
|
||||||
validate_schema="../movement.schema.json"
|
validate_schema="/%s/mouvements/movement.schema.json"|args:$module.name
|
||||||
type="movement"
|
type="movement"
|
||||||
direction="input"
|
direction="entrée"
|
||||||
input_nature=$operation
|
inputNature=$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 de « %s » enregistrée"|args:$_POST.designation}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{:form_errors}}
|
{{:form_errors}}
|
||||||
{{/form}}
|
{{/form}}
|
||||||
|
|
||||||
{{* lister les catégories disponibles *}}
|
{{* lister les catégories disponibles *}}
|
||||||
@ -71,27 +75,23 @@
|
|||||||
{{* 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>
|
{{:input type="select" name="type_operation" label="Type" required=true options=$types_entrees}}
|
||||||
{{: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>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Matériel</legend>
|
<legend>Matériel</legend>
|
||||||
<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}}
|
</fieldset>
|
||||||
</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}}
|
||||||
|
@ -1,83 +1,87 @@
|
|||||||
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
||||||
{{:admin_header title="Entrée de matériel" current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
||||||
|
|
||||||
{{* barre de navigation *}}
|
{{if $_GET.dialog === null}}
|
||||||
{{if ! $dialog}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="../../_nav.html" current="entrees"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="entrees"}}
|
||||||
|
{{else}}
|
||||||
|
<header class="header">
|
||||||
|
<h1>Entrée de matériel</h1>
|
||||||
|
</header>
|
||||||
{{/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="/%s/_get_config.html"|args:$module.name keep="config"}}
|
||||||
|
|
||||||
{{* types d'entrées *}}
|
{{* types d'entrées *}}
|
||||||
{{#foreach from=$config.input_nature item="elem"}}
|
{{#foreach from=$config.inputNature item="elem"}}
|
||||||
{{if $elem.type != 'retour'}}
|
{{if $elem.type != 'retour'}}
|
||||||
{{:assign var='input_types.' value="%s"|args:$elem.label}}
|
{{:assign var='types_entrees.' 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="types_entrees.%d|args:$_POST.type_operation}}
|
||||||
|
|
||||||
{{:save
|
{{:save
|
||||||
key=$mvt_key
|
key=$mvt_key
|
||||||
validate_schema="../movement.schema.json"
|
validate_schema="/%s/mouvements/movement.schema.json"|args:$module.name
|
||||||
type="movement"
|
type="movement"
|
||||||
direction="input"
|
direction="entrée"
|
||||||
input_nature=$operation
|
inputNature=$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 de « %s » enregistrée"|args:$equipment.designation}}
|
||||||
{{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">
|
|
||||||
<legend>Ajouter une entrée d'un matériel répertorié</legend>
|
<fieldset class="entree">
|
||||||
<dl>
|
<legend>Ajouter une entrée d'un matériel répertorié</legend>
|
||||||
{{:input type="select" name="type_operation" label="Type" required=true options=$input_types}}
|
{{:input type="select" name="type_operation" label="Type" required=true options=$types_entrees}}
|
||||||
{{: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>
|
|
||||||
</fieldset>
|
<fieldset>
|
||||||
<fieldset>
|
<legend>Matériel</legend>
|
||||||
<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}}
|
</fieldset>
|
||||||
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
|
</fieldset>
|
||||||
</dl>
|
|
||||||
</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>
|
||||||
{{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}}
|
||||||
|
@ -1,110 +1,114 @@
|
|||||||
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
||||||
{{:admin_header title="Entrée de matériel" current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
||||||
|
|
||||||
{{* barre de navigation *}}
|
{{if $_GET.dialog === null}}
|
||||||
{{if ! $dialog}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="../../_nav.html" current="entrees"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="entrees"}}
|
||||||
|
{{else}}
|
||||||
|
<header class="header">
|
||||||
|
<h1>Entrée de matériel</h1>
|
||||||
|
</header>
|
||||||
{{/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="/%s/_get_config.html"|args:$module.name keep="config"}}
|
||||||
|
|
||||||
{{* types d'entrées *}}
|
{{* types d'entrées *}}
|
||||||
{{#foreach from=$config.input_nature item="elem"}}
|
{{#foreach from=$config.inputNature item="elem"}}
|
||||||
{{if $elem.type == 'retour'}}
|
{{if $elem.type == 'retour'}}
|
||||||
{{:assign var='input_types.' value="%s"|args:$elem.label}}
|
{{:assign var='types_entrees.' 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="/%s/_calcul_dispo.html"|args:$module.name
|
||||||
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="types_entrees.%d|args:$_POST.type_operation}}
|
||||||
|
|
||||||
{{:save
|
{{:save
|
||||||
key=$mvt_key
|
key=$mvt_key
|
||||||
validate_schema="../movement.schema.json"
|
validate_schema="/%s/mouvements/movement.schema.json"|args:$module.name
|
||||||
type="movement"
|
type="movement"
|
||||||
direction="input"
|
direction="entrée"
|
||||||
input_nature=$operation
|
inputNature=$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 de « %s » enregistrée"|args:$equipment.designation}}
|
||||||
{{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="/%s/_calcul_dispo.html"|args:$module.name keep="equipments"}}
|
||||||
|
|
||||||
{{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">
|
|
||||||
<legend>Ajouter une entrée pour un retour de matériel</legend>
|
<fieldset class="entree">
|
||||||
<dl>
|
<legend>Ajouter une entrée pour un retour de matériel</legend>
|
||||||
{{:input type="select" name="type_operation" label="Type" required=true options=$input_types}}
|
{{:input type="select" name="type_operation" label="Type" required=true options=$types_entrees}}
|
||||||
{{: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>
|
|
||||||
</fieldset>
|
<fieldset>
|
||||||
<fieldset>
|
<legend>Matériel</legend>
|
||||||
<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}}
|
</fieldset>
|
||||||
{{:input type="textarea" name="remarques" label="Remarques" cols="40", rows="3" required=false}}
|
</fieldset>
|
||||||
</dl>
|
|
||||||
</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>
|
||||||
{{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}}
|
||||||
{{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}}
|
||||||
|
@ -1,20 +1,25 @@
|
|||||||
{{#restrict section="config" level="admin" block=true}}{{/restrict}}
|
{{#restrict section="config" level="admin" block=true}}{{/restrict}}
|
||||||
{{:admin_header title="Modifier une %s"|args:$_GET.direction current="module_equipment"}}
|
{{:admin_header title="Modifier une %s"|args:$_GET.direction current="module_equipment"}}
|
||||||
|
|
||||||
|
{{* déterminer l'url de retour *}}
|
||||||
|
{{:assign url=$_GET.caller}}
|
||||||
|
{{:assign pos=$url|strpos:"?"}}
|
||||||
|
{{if $pos|intval > 0}}
|
||||||
|
{{:assign url=$url|truncate:$pos:"":true}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{:assign direction=$_GET.direction}}
|
{{:assign direction=$_GET.direction}}
|
||||||
{{:assign key_mvt=$_GET.key}}
|
{{:assign key_mvt=$_GET.key}}
|
||||||
|
|
||||||
{{* 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 == "entrée"}}
|
||||||
{{:assign input_init=$mvt_modif.input_nature}}
|
{{:assign input_init=$mvt_modif.inputNature}}
|
||||||
{{:assign url="entrees/index.html"}}
|
|
||||||
{{else}}
|
{{else}}
|
||||||
{{:assign output_init=$mvt_modif.output_nature}}
|
{{:assign output_init=$mvt_modif.outputNature}}
|
||||||
{{:assign url="sorties/index.html"}}
|
|
||||||
{{/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}}
|
||||||
@ -23,165 +28,172 @@
|
|||||||
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
||||||
|
|
||||||
{{* 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="/%s/_get_config.html"|args:$module.name keep="config"}}
|
||||||
|
|
||||||
{{if $direction == "input"}}
|
{{if $direction == "entrée"}}
|
||||||
{{* types d'entrées *}}
|
{{* types d'entrées *}}
|
||||||
{{#foreach from=$config.input_nature key="rang" item="elem"}}
|
{{#foreach from=$config.inputNature key="rang" item="elem"}}
|
||||||
{{:assign var='input_types.' value="%s"|args:$elem.label}}
|
{{:assign var='types_entrees.' value="%s"|args:$elem.label}}
|
||||||
{{if $elem.label == $mvt_modif.input_nature}}
|
{{if $elem.label == $mvt_modif.inputNature}}
|
||||||
{{: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.outputNature 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.outputNature}}
|
||||||
{{: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 == "entrée"}}
|
||||||
{{:assign var="mvt_modif.input_nature" from="input_types.%d"|args:$_POST.type_operation}}
|
{{:assign var="mvt_modif.inputNature" from="types_entrees.%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.outputNature" 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
|
||||||
|
id, key,
|
||||||
|
json_extract(document, '$.type') as 'type',
|
||||||
|
json_extract(document, '$.direction') as 'direction',
|
||||||
|
json_extract(document, '$.inputNature') as 'inputNature',
|
||||||
|
json_extract(document, '$.outputNature') as 'outputNature',
|
||||||
|
json_extract(document, '$.amount') as 'amount',
|
||||||
|
json_extract(document, '$.equipment') as 'equipment',
|
||||||
|
json_extract(document, '$.date') as 'date',
|
||||||
|
json_extract(document, '$.comment') as 'comment'
|
||||||
|
FROM module_data_equipment
|
||||||
|
WHERE
|
||||||
|
json_extract(document, '$.type') = 'movement'
|
||||||
|
AND
|
||||||
|
(json_extract(document, '$.equipment') = :old_eqpmt_key
|
||||||
|
OR
|
||||||
|
json_extract(document, '$.equipment') = :new_eqpmt_key)
|
||||||
|
ORDER BY json_extract(document, '$.date');
|
||||||
|
:old_eqpmt_key=$key_eqpmt_init
|
||||||
|
:new_eqpmt_key=$_POST.equipment
|
||||||
|
assign="movement"
|
||||||
|
}}
|
||||||
|
{{if $key != $key_mvt}}
|
||||||
|
{{if $date > $mvt_modif.date && ! $insere}}
|
||||||
|
{{:assign var=movements_modif." from=mvt_modif}}
|
||||||
|
{{:assign insere=true}}
|
||||||
|
{{/if}}
|
||||||
|
{{:assign var=movements_modif." from=movement}}
|
||||||
|
{{/if}}
|
||||||
|
{{/select}}
|
||||||
|
{{if ! $insere}}
|
||||||
|
{{:assign var=movements_modif." from=mvt_modif}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#load
|
{{* Vérifier la cohérence des opérations de l'ancien matériel *}}
|
||||||
where="
|
{{:include
|
||||||
$$.type = 'movement'
|
file="./valider_modification.html"
|
||||||
AND
|
keep="erreur"
|
||||||
($$.equipment = :old_eqpmt_key OR $$.equipment = :new_eqpmt_key)"
|
movements=$movements_modif
|
||||||
:old_eqpmt_key=$key_eqpmt_init
|
eqpmt_key=$key_eqpmt_init
|
||||||
:new_eqpmt_key=$_POST.equipment
|
}}
|
||||||
order="$$.date"
|
|
||||||
assign="movement"
|
|
||||||
}}
|
|
||||||
{{if $key != $key_mvt}}
|
|
||||||
{{if $date > $mvt_modif.date && ! $insere}}
|
|
||||||
{{:assign var=movements_modif." from=mvt_modif}}
|
|
||||||
{{:assign insere=true}}
|
|
||||||
{{/if}}
|
|
||||||
{{:assign var=movements_modif." from=movement}}
|
|
||||||
{{/if}}
|
|
||||||
{{/load}}
|
|
||||||
{{if ! $insere}}
|
|
||||||
{{:assign var=movements_modif." from=mvt_modif}}
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{* Vérifier la cohérence des opérations de l'ancien matériel *}}
|
{{* Si le matériel a changé, vérifier la cohérence des opérations du nouveau matériel *}}
|
||||||
{{:include
|
{{if ! $erreur && $key_eqpmt_init != $_POST.equipment}}
|
||||||
file="./valider_modification.html"
|
{{:include
|
||||||
keep="erreur"
|
file="./valider_modification.html"
|
||||||
movements=$movements_modif
|
keep="erreur"
|
||||||
eqpmt_key=$key_eqpmt_init
|
movements=$movements_modif
|
||||||
}}
|
eqpmt_key=$_POST.equipment
|
||||||
|
}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{* Si le matériel a changé, vérifier la cohérence des opérations du nouveau matériel *}}
|
{{#load key=$mvt_modif.equipment assign="eqpmt"}}{{/load}}
|
||||||
{{if ! $erreur && $key_eqpmt_init != $_POST.equipment}}
|
{{if $erreur}}
|
||||||
{{:include
|
<p class="block error">
|
||||||
file="./valider_modification.html"
|
Modification demandée impossible :
|
||||||
keep="erreur"
|
{{if $direction == "entrée"}}
|
||||||
movements=$movements_modif
|
« {{$input_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers
|
||||||
eqpmt_key=$_POST.equipment
|
« {{$mvt_modif.inputNature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} »
|
||||||
}}
|
{{else}}
|
||||||
{{/if}}
|
« {{$output_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers
|
||||||
|
« {{$mvt_modif.outputNature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} »
|
||||||
{{#load key=$mvt_modif.equipment assign="eqpmt"}}{{/load}}
|
{{/if}}
|
||||||
{{if $erreur}}
|
</p>
|
||||||
<p class="block error">
|
{{* :redirect force="./index.html?err=1&msg=Modification demandée impossible" *}}
|
||||||
Modification demandée impossible :
|
{{else}}
|
||||||
{{if $direction == "input"}}
|
{{* vérification réussie : modifier le mouvement *}}
|
||||||
« {{$input_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers
|
{{:save
|
||||||
« {{$mvt_modif.input_nature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} »
|
key=$key_mvt
|
||||||
{{else}}
|
validate_schema="/%s/mouvements/movement.schema.json"|args:$module.name
|
||||||
« {{$output_init}} de {{$eqpmt_init.designation}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers
|
type="movement"
|
||||||
« {{$mvt_modif.output_nature}} de {{$eqpmt.designation}} (qté : {{$mvt_modif.amount}}) à la date du {{$mvt_modif.date|date_short}} »
|
direction=$direction
|
||||||
{{/if}}
|
inputNature=$mvt_modif.inputNature
|
||||||
</p>
|
outputNature=$mvt_modif.outputNature
|
||||||
{{else}}
|
amount=$mvt_modif.amount|intval
|
||||||
{{* vérification réussie : modifier le mouvement *}}
|
equipment=$mvt_modif.equipment
|
||||||
{{:save
|
date=$mvt_modif.date
|
||||||
key=$key_mvt
|
comment=$mvt_modif.comment
|
||||||
validate_schema="./movement.schema.json"
|
}}
|
||||||
type="movement"
|
{{:redirect force="%s?ok=1&msg=Modification enregistrée"|args:$url}}
|
||||||
direction=$direction
|
{{/if}}
|
||||||
input_nature=$mvt_modif.input_nature
|
|
||||||
output_nature=$mvt_modif.output_nature
|
|
||||||
amount=$mvt_modif.amount|intval
|
|
||||||
equipment=$mvt_modif.equipment
|
|
||||||
date=$mvt_modif.date
|
|
||||||
comment=$mvt_modif.comment
|
|
||||||
}}
|
|
||||||
{{:redirect force="%s?ok=1&msg=modification"|args:$url}}
|
|
||||||
{{/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 == "entrée"}}
|
||||||
<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>
|
{{:input type="select" name="type_operation" label="Type" required=true options=$types_entrees 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>
|
{{:input type="select" name="type_operation" label="Type" required=true options=$types_sorties default=$type_defaut}}
|
||||||
<dl>
|
{{/if}}
|
||||||
{{:input type="select" name="type_operation" label="Type" required=true options=$types_sorties default=$type_defaut}}
|
{{:input type="date" name="date" label="Date" required=true default=$mvt_modif.date}}
|
||||||
{{/if}}
|
{{:input type="number" name="amount" label="Quantité" required=true default=$mvt_modif.amount}}
|
||||||
{{: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}}
|
|
||||||
</dl>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Matériel</legend>
|
<legend>Matériel</legend>
|
||||||
<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}}
|
</fieldset>
|
||||||
</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>
|
||||||
|
|
||||||
|
@ -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"]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"required": ["type", "direction", "amount", "equipment", "date", "comment"]
|
"direction" : {
|
||||||
|
"description": "Entrée ou sortie",
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["entrée", "sortie"]
|
||||||
|
},
|
||||||
|
"inputNature": {
|
||||||
|
"description": "Nature de l'entrée",
|
||||||
|
"type": ["null", "string"]
|
||||||
|
},
|
||||||
|
"outputNature": {
|
||||||
|
"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"]
|
||||||
}
|
}
|
||||||
|
@ -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="/%s/_get_config.html"|args:$module.name 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.outputNature item="elem"}}
|
||||||
{{if $mvt_suppr.output_nature == $elem.label && $elem.type == 'temporaire'}}
|
{{if $mvt_suppr.outputNature == $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 == 'entrée'}}
|
||||||
{{* 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.inputNature item="elem"}}
|
||||||
{{if $movement.input_nature == $elem.label && $elem.type == 'retour'}}
|
{{if $movement.inputNature == $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 == 'sortie'}}
|
||||||
{{* 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.outputNature item="elem"}}
|
||||||
{{if $movement.output_nature == $elem.label && $elem.type == 'temporaire'}}
|
{{if $movement.outputNature == $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=Impossible de supprimer la sortie « %s %s (%d) en date du %s »"|args:$mvt_suppr.outputNature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr}}
|
||||||
{{/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="Sortie « %s %s (%d) en date du %s » supprimée"|args:$mvt_suppr.outputNature:$eqpmt_suppr.designation:$amount_suppr:$date_suppr}}
|
||||||
|
|
||||||
{{* 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 « %s » supprimé"|args:$msg:$eqpmt_suppr.designation}}
|
||||||
{{/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.outputNature:$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}}
|
||||||
|
@ -1,121 +1,123 @@
|
|||||||
{{#restrict section="accounting" level="read"}}{{/restrict}}
|
{{#restrict section="accounting" level="read"}}{{/restrict}}
|
||||||
{{:admin_header title="Sortie de matériel" current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
||||||
|
|
||||||
{{if ! $dialog}}
|
{{if $_GET.dialog === null}}
|
||||||
{{* barre de navigation *}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="../../_nav.html" current="sorties"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="sorties"}}
|
||||||
|
{{else}}
|
||||||
|
<header class="header">
|
||||||
|
<h1>Sortie de matériel</h1>
|
||||||
|
</header>
|
||||||
{{/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="/%s/_get_config.html"|args:$module.name keep="config"}}
|
||||||
|
|
||||||
{{* types de sorties *}}
|
{{* types de sorties *}}
|
||||||
{{#foreach from=$config.output_nature item="elem"}}
|
{{#foreach from=$config.outputNature item="elem"}}
|
||||||
{{if $elem.type == 'retour'}}
|
{{if $elem.type == 'retour'}}
|
||||||
{{:assign var='output_types.' value="%s"|args:$elem.label}}
|
{{:assign var='types_sorties.' 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="/%s/_calcul_dispo.html"|args:$module.name
|
||||||
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="types_sorties.%d|args:$_POST.type_operation}}
|
||||||
{{:save
|
{{:save
|
||||||
key=$mvt_key
|
key=$mvt_key
|
||||||
validate_schema="../movement.schema.json"
|
validate_schema="/%s/mouvements/movement.schema.json"|args:$module.name
|
||||||
type="movement"
|
type="movement"
|
||||||
direction="output"
|
direction="sortie"
|
||||||
output_nature=$operation
|
outputNature=$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 de « %s » (%d) enregistrée"|args:$designation:$_POST.quantite}}
|
||||||
{{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="/%s/_calcul_dispo.html"|args:$module.name 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">
|
|
||||||
<legend>Ajouter une sortie d'un matériel disponible en stock</legend>
|
<fieldset class="sortie">
|
||||||
<dl>
|
<legend>Ajouter une sortie d'un matériel disponible en stock</legend>
|
||||||
{{:input type="select" name="type_operation" label="Type" required=true options=$output_types}}
|
{{:input type="select" name="type_operation" label="Type" required=true options=$types_sorties}}
|
||||||
{{: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>
|
<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>
|
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$temporaire onchange="fixerValeurMax('f_equipment', 'f_quantite')"}}
|
||||||
<p><span class="alert">La quantité disponible est celle à la date du jour</span></p>
|
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
|
||||||
<dl>
|
</fieldset>
|
||||||
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$temporaire onchange="fixerValeurMax('f_equipment', 'f_quantite')"}}
|
</fieldset>
|
||||||
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
|
|
||||||
</dl>
|
<p class="submit">
|
||||||
</fieldset>
|
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
|
||||||
<p class="submit">
|
</p>
|
||||||
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
|
</form>
|
||||||
</p>
|
{{else}}
|
||||||
</form>
|
<p class="block error">Il n'y a aucun matériel</p>
|
||||||
{{else}}
|
{{/if}}
|
||||||
<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}}
|
||||||
|
@ -2,76 +2,63 @@
|
|||||||
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
||||||
|
|
||||||
{{* barre de navigation *}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="../../_nav.html" current="sorties"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="sorties"}}
|
||||||
|
|
||||||
{{if $_GET.ok}}
|
{{if $_GET.ok}}
|
||||||
{{if $_GET.msg|match:"suppression"}}
|
<p class="block confirm">{{$_GET.msg}}</p>
|
||||||
{{:assign msg="Sortie supprimée"}}
|
|
||||||
{{if $_GET.msg|match:"matériel"}}
|
|
||||||
{{:assign var="msg" value="%s - Matériel supprimé"|args:$msg}}
|
|
||||||
{{/if}}
|
|
||||||
{{elseif $_GET.msg == "sortie"}}
|
|
||||||
{{:assign msg="Sortie enregistrée"}}
|
|
||||||
{{elseif $_GET.msg == "modification"}}
|
|
||||||
{{:assign msg="Sortie modifiée"}}
|
|
||||||
{{/if}}
|
|
||||||
<p class="block confirm">{{$msg}}</p>
|
|
||||||
{{elseif $_GET.err}}
|
{{elseif $_GET.err}}
|
||||||
{{if $_GET.msg == "suppression"}}
|
<p class="block error">{{$_GET.msg}}</p>
|
||||||
<p class="block error">Impossible de supprimer la sortie</p>
|
|
||||||
{{/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>
|
{{:linkbutton label="Matériel en stock disponible" shape="plus" href="stock_disponible.html?dialog" 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?dialog" target="_dialog"}}
|
||||||
{{:linkbutton label="Matériel emprunté" shape="plus" href="emprunte.html" target="_dialog"}}
|
</fieldset>
|
||||||
</dl>
|
|
||||||
</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' ;
|
$$.outputNature 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) AS 'Matériel' ;
|
WHERE b.key = @TABLE.$$.equipment)
|
||||||
$$.comment AS 'Remarques'"
|
AS 'Matériel' ;
|
||||||
type="movement"
|
$$.comment AS 'Remarques'"
|
||||||
direction="output"
|
type="movement"
|
||||||
order=1}}
|
direction="sortie"
|
||||||
|
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>{{$outputNature}}</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"|args:$mvt_key
|
href="../modifier_mouvement.html?key=%s&direction=sortie&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}}
|
||||||
|
@ -1,120 +1,123 @@
|
|||||||
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
{{#restrict section="accounting" level="write" block=true}}{{/restrict}}
|
||||||
{{:admin_header title="Sortie de matériel" current="module_equipment"}}
|
{{:admin_header title="Gestion des matériels" current="module_equipment"}}
|
||||||
|
|
||||||
{{if ! $dialog}}
|
{{if $_GET.dialog === null}}
|
||||||
{{* barre de navigation *}}
|
{{* barre de navigation *}}
|
||||||
{{:include file="../../_nav.html" current="sorties"}}
|
{{:include file="/%s/_nav.html"|args:$module.name current="sorties"}}
|
||||||
|
{{else}}
|
||||||
|
<header class="header">
|
||||||
|
<h1>Sortie de matériel</h1>
|
||||||
|
</header>
|
||||||
{{/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="/%s/_get_config.html"|args:$module.name keep="config"}}
|
||||||
|
|
||||||
{{* types de sorties *}}
|
{{* types de sorties *}}
|
||||||
{{#foreach from=$config.output_nature item="elem"}}
|
{{#foreach from=$config.outputNature item="elem"}}
|
||||||
{{if $elem.type != 'retour'}}
|
{{if $elem.type != 'retour'}}
|
||||||
{{:assign var='output_types.' value="%s"|args:$elem.label}}
|
{{:assign var='types_sorties.' 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="/%s/_calcul_dispo.html"|args:$module.name
|
||||||
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="types_sorties.%d|args:$_POST.type_operation}}
|
||||||
{{:save
|
{{:save
|
||||||
key=$mvt_key
|
key=$mvt_key
|
||||||
validate_schema="../movement.schema.json"
|
validate_schema="/%s/mouvements/movement.schema.json"|args:$module.name
|
||||||
type="movement"
|
type="movement"
|
||||||
direction="output"
|
direction="sortie"
|
||||||
output_nature=$operation
|
outputNature=$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 de « %s » (%d) enregistrée"|args:$designation:$_POST.quantite}}
|
||||||
{{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="/%s/_calcul_dispo.html"|args:$module.name 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">
|
|
||||||
<legend>Ajouter une sortie d'un matériel disponible en stock</legend>
|
<fieldset class="sortie">
|
||||||
<dl>
|
<legend>Ajouter une sortie d'un matériel disponible en stock</legend>
|
||||||
{{:input type="select" name="type_operation" label="Type" required=true options=$output_types}}
|
{{:input type="select" name="type_operation" label="Type" required=true options=$types_sorties}}
|
||||||
{{: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>
|
<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>
|
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$disponibilites onchange="fixerValeurMax('f_equipment', 'f_quantite')"}}
|
||||||
<p><span class="alert">La quantité disponible est celle à la date du jour</span></p>
|
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
|
||||||
<dl>
|
</fieldset>
|
||||||
{{:input type="select_groups" name="equipment" label="Matériel" required=true options=$disponibilites onchange="fixerValeurMax('f_equipment', 'f_quantite')"}}
|
</fieldset>
|
||||||
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
|
|
||||||
</dl>
|
<p class="submit">
|
||||||
</fieldset>
|
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
|
||||||
<p class="submit">
|
</p>
|
||||||
{{:button type="submit" name="save" label="Enregistrer" shape="right" class="main"}}
|
|
||||||
</p>
|
</form>
|
||||||
</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}}
|
||||||
|
@ -1,50 +1,50 @@
|
|||||||
{{*
|
{{*
|
||||||
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 *}}
|
||||||
{{:include file="../_get_config.html" keep="config"}}
|
{{:include file="/%s/_get_config.html"|args:$module.name keep="config"}}
|
||||||
|
|
||||||
{{:assign erreur = false}}
|
{{:assign erreur = false}}
|
||||||
{{:assign stock=0}}
|
{{:assign stock=0}}
|
||||||
{{: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 == 'entrée'}}
|
||||||
{{* 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.inputNature item="elem"}}
|
||||||
{{if $movement.input_nature == $elem.label}}
|
{{if $movement.inputNature == $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 == 'sortie'}}
|
||||||
{{* 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.outputNature item="elem"}}
|
||||||
{{if $movement.output_nature == $elem.label}}
|
{{if $movement.outputNature == $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}}
|
||||||
|
Loading…
Reference in New Issue
Block a user