Simplification calcul dispo et config par défaut

This commit is contained in:
Jean-Christophe Engel 2023-12-07 17:33:49 +01:00
parent d7f7ec9423
commit af9dbf2b22
14 changed files with 260 additions and 304 deletions

View file

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