Enregistrement quantités avec matériel

This commit is contained in:
Jean-Christophe Engel 2025-03-24 20:47:49 +01:00
parent bea3a2f0e8
commit c10ff02403
11 changed files with 291 additions and 201 deletions

View File

@ -18,7 +18,22 @@
"description": "État du matériel",
"type": "string",
"enum": ["available", "archived"]
},
"stock": {
"description": "Quantité en stock",
"type" : "integer",
"minimum": 0
},
"out": {
"description": "Quantité sortie temporairement",
"type" : "integer",
"minimum": 0
},
"notowned": {
"description": "Quantité présente temporairement",
"type" : "integer",
"minimum": 0
}
},
"required": ["type", "category", "name", "status"]
"required": ["type", "category", "name", "status", "stock", "out", "notowned"]
}

View File

@ -29,24 +29,6 @@
<p class="help">Inventaire des matériels propriété de l'association</p>
</div>
{{* types d'entrées et sorties *}}
{{:include file="./_get_config.html" keep="config, directions"}}
{{#foreach from=$directions key="direction"}}
{{:assign var="nature" from="config.%s_nature"|args:$direction}}
{{#foreach from=$nature key="key"}}
{{:assign var="types.%s.%s."|args:$direction:$type value=$key}}
{{/foreach}}
{{:assign var="iotypes" from="types.%s"|args:$direction}}
{{#foreach from=$iotypes key="key"}}
{{:assign var=elem from="iotypes.%s"|args:$key}}
{{:assign elem=$elem|quote_sql|implode:","}}
{{:assign elem="("|cat:$elem|cat:")"}}
{{:assign var="%s_types.%s"|args:$direction:$key value=$elem}}
{{/foreach}}
{{/foreach}}
{{* filtrer selon la catégorie *}}
{{if $_GET.cat_key == null}}
{{:assign condition="1"}}
@ -61,100 +43,20 @@
(SELECT $$.name
FROM @TABLE as cat
WHERE cat.key = @TABLE.$$.category) AS 'Catégorie' ;
(SELECT
SUM($$.amount)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) -
(SELECT
COALESCE(SUM($$.amount), 0)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) AS 'Stock' ;
(SELECT
COALESCE(SUM($$.amount), 0)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) -
(SELECT
COALESCE(SUM($$.amount), 0)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) AS 'Sorti' ;
(SELECT
SUM($$.amount)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) -
(SELECT
COALESCE(SUM($$.amount), 0)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) -
(SELECT
COALESCE(SUM($$.amount), 0)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) + (SELECT
COALESCE(SUM($$.amount), 0)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) AS 'Disponible'
"|args:$input_types.définitif:$output_types.définitif:$output_types.temporaire:$input_types.retour:$input_types.définitif:$output_types.définitif:$output_types.temporaire:$input_types.retour
$$.stock AS 'Stock' ;
$$.out AS 'Sorti' ;
(SELECT $$.stock - $$.out) AS 'Disponible'
"
type="equipment"
where="$$.status <> 'archived' AND %s"|args:$condition
group="col1 HAVING col3 NOT NULL"
order=1
}}
{{:assign var=cat_name from=categories.%s|args:$category}}
<tr>
<td>{{$name}}</td>
<td>{{$cat_name}}</td>
<td class="num">{{$col3}}</td>
<td class="num">{{$col4}}</td>
<td class="num">{{$stock}}</td>
<td class="num">{{$out}}</td>
<td class="num">{{$col5}}</td>
<td class="actions">
{{if $col4 > 0}}

View File

@ -29,24 +29,6 @@
<p class="help">Inventaire des matériels empruntés ou loués</p>
</div>
{{* types d'entrées et sorties *}}
{{:include file="./_get_config.html" keep="config, directions"}}
{{#foreach from=$directions key="direction"}}
{{:assign var="nature" from="config.%s_nature"|args:$direction}}
{{#foreach from=$nature key="key"}}
{{:assign var="types.%s.%s."|args:$direction:$type value=$key}}
{{/foreach}}
{{:assign var="iotypes" from="types.%s"|args:$direction}}
{{#foreach from=$iotypes key="key"}}
{{:assign var=elem from="iotypes.%s"|args:$key}}
{{:assign elem=$elem|quote_sql|implode:","}}
{{:assign elem="("|cat:$elem|cat:")"}}
{{:assign var="%s_types.%s"|args:$direction:$key value=$elem}}
{{/foreach}}
{{/foreach}}
{{* filtrer selon la catégorie *}}
{{if $_GET.cat_key == null}}
{{:assign condition="1"}}
@ -61,35 +43,13 @@
(SELECT $$.name
FROM @TABLE as cat
WHERE cat.key = @TABLE.$$.category) AS 'Catégorie' ;
(SELECT
SUM($$.amount)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) -
(SELECT
COALESCE(SUM($$.amount), 0)
FROM @TABLE AS mvt
WHERE
$$.type = 'movement'
AND
$$.operation IN %s
AND
$$.equipment = @TABLE.key
) AS 'Quantité'
"|args:$input_types.temporaire:$output_types.retour
$$.notowned AS 'Quantité'
"
type="equipment"
where="$$.status <> 'archived' AND %s"|args:$condition
group="col1 HAVING (col3 NOT NULL AND col3 > 0)"
where="$$.status <> 'archived' AND $$.notowned != 0 AND %s"|args:$condition
order=1
}}
{{:assign var=cat_name from=categories.%s|args:$category}}
<tr>
<td>{{$name}}</td>
<td>{{$cat_name}}</td>

View File

@ -24,9 +24,9 @@
{{* Traiter l'envoi du formulaire *}}
{{#form on="save"}}
{{* vérifier la quantité saisie (UTILE ? : fait par la navigateur) *}}
{{if $_POST.quantite <= 0}}
{{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.quantite}}
{{* vérifier la quantité saisie *}}
{{if $_POST.amount <= 0}}
{{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.amount}}
{{/if}}
{{* interdire date dans le futur *}}
@ -35,25 +35,26 @@
{{/if}}
{{* vérifier l'existence d'un matériel de même nom *}}
{{#load type="equipment" where="$$.name = :name COLLATE U_NOCASE" :name=$_POST.name|trim limit=1}}}}
{{:assign equipment_key=$key}}
{{:assign var=nom_cat from="categories.%s"|args:$category}}
{{#load type="equipment" where="$$.name = :name COLLATE U_NOCASE" :name=$_POST.name|trim limit=1 assign="equipment"}}
{{:assign present=true}}
{{/load}}
{{:assign var=nom_cat from="categories.%s"|args:$equipment.category}}
{{:assign var=post_cat from="categories.%s"|args:$_POST.category}}
{{:assign post_mat=$_POST.name|trim|tolower|ucfirst}}
{{:assign var="type_mvt" from="config.input_nature.%s.type"|args:$_POST.operation}}
{{if $present}}
{{* voir si le matériel existe dans une autre catégorie *}}
{{if $nom_cat != $post_cat}}
{{:error message="Le matériel « %s » est déjà présent dans la catégorie « %s » ..."|args:$post_mat:$nom_cat}}
{{/if}}
{{* utiliser la clé du matériel trouvé *}}
{{else}}
{{* nouveau matériel => nouvelle clé *}}
{{:assign equipment_key=""|uuid}}
{{* enregistrer un nouveau matériel *}}
{{* calculer la nouvelle quantité du matériel *}}
{{if $type_mvt == 'définitif'}}
{{:assign var="equipment.stock" value="%d+%d"|math:$equipment.stock:$_POST.amount|intval}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign var="equipment.notowned" value="%d+%d"|math:$equipment.notowned:$_POST.amount|intval}}
{{/if}}
{{:assign equipment_key=$equipment.key}}
{{:save
key=$equipment_key
validate_schema="../equipment.schema.json"
@ -61,9 +62,32 @@
category=$_POST.category
name=$post_mat
status="available"
stock=$equipment.stock
out=$equipment.out
notowned=$equipment.notowned
}}
{{else}}
{{* enregistrer un nouveau matériel *}}
{{:assign equipment_key=""|uuid}}
{{if $type_mvt == 'définitif'}}
{{:assign stock=$_POST.amount|intval}}
{{:assign notowned=0}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign notowned=$_POST.amount|intval}}
{{:assign stock=0}}
{{/if}}
{{:save
key=$equipment_key
validate_schema="../equipment.schema.json"
type="equipment"
category=$_POST.category
name=$post_mat
status="available"
stock=$stock
out=0
notowned=$notowned
}}
{{/if}}
{{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}}
{{:assign var="operation" from="input_labels.%d"|args:$_POST.type_operation}}
@ -73,14 +97,13 @@
type="movement"
direction="input"
operation=$_POST.operation
amount=$_POST.quantite|intval
amount=$_POST.amount|intval
equipment=$equipment_key
date=$_POST.date|parse_date
comment=$_POST.remarques|trim
}}
{{:assign var=entree from="config.input_nature.%s"|args:$_POST.operation}}
{{if $entree.type == "temporaire"}}
{{if $type_mvt == "temporaire"}}
{{:assign prop=0}}
{{else}}
{{:assign prop=1}}
@ -100,7 +123,7 @@
<dl>
{{:input type="select" name="operation" label="Type" required=true default_empty="— Aucun —" options=$input_labels|sort}}
{{:input type="date" name="date" label="Date" required=true default=$now|date_short}}
{{:input type="number" name="quantite" label="Quantité" min=1 required=true default=1}}
{{:input type="number" name="amount" label="Quantité" min=1 required=true default=1}}
</dl>
</fieldset>

View File

@ -19,7 +19,7 @@
{{:assign eqpmt_key=$mvt_new.equipment}}
{{* récupérer les infos du matériel associé *}}
{{#load key=$eqpmt_key assign="eqpmt"}}
{{#load key=$eqpmt_key assign="equipment"}}
{{else}}
{{:error message="Aucun matériel avec la clé « %s »"|args:$eqpmt_key}}
{{/load}}
@ -121,9 +121,43 @@
{{:assign var="mvt_label" from="%s_labels.%s"|args:$mvt_new.direction:$mvt_new.operation}}
<p class="block error">
Impossible d'enregistrer ce mouvement : « {{$mvt_label}}
de {{$eqpmt.name}} (qté : {{$mvt_new.amount}}) à la date du {{$mvt_new.date|date_short}} »
de {{$equipment.name}} (qté : {{$mvt_new.amount}}) à la date du {{$mvt_new.date|date_short}} »
</p>
{{else}}
{{* calculer la nouvelle quantité du matériel *}}
{{if $mvt_new.direction == "input"}}
{{:assign var="type_mvt" from="config.input_nature.%s.type"|args:$_POST.operation}}
{{if $type_mvt == 'définitif'}}
{{:assign var="equipment.stock" value="%d+%d"|math:$equipment.stock:$_POST.amount|intval}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign var="equipment.notowned" value="%d+%d"|math:$equipment.notowned:$_POST.amount|intval}}
{{elseif $type_mvt == 'retour'}}
{{:assign var="equipment.out" value="%d-%d"|math:$equipment.out:$_POST.amount|intval}}
{{/if}}
{{else}}
{{:assign var="type_mvt" from="config.output_nature.%s.type"|args:$_POST.operation}}
{{if $type_mvt == 'définitif'}}
{{:assign var="equipment.stock" value="%d-%d"|math:$equipment.stock:$_POST.amount|intval}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign var="equipment.out" value="%d+%d"|math:$equipment.out:$_POST.amount|intval}}
{{elseif $type_mvt == 'retour'}}
{{:assign var="equipment.notowned" value="%d-%d"|math:$equipment.notowned:$_POST.amount|intval}}
{{/if}}
{{/if}}
{{:save
key=$equipment.key
validate_schema="../equipment.schema.json"
type="equipment"
category=$equipment.category
name=$equipment.name
status="available"
stock=$equipment.stock
out=$equipment.out
notowned=$equipment.notowned
}}
{{* vérification réussie : enregistrer le mouvement modifié *}}
{{:assign mvt_key=""|uuid}}
{{:save
@ -149,13 +183,13 @@
*}}
{{* récupérer les infos de la catégorie *}}
{{#load key=$eqpmt.category assign="category"}}{{/load}}
{{#load key=$equipment.category assign="category"}}{{/load}}
{{:assign var="op_label" from="config.%s_nature.%s.label"|args:$mvt_new.direction:$mvt_new.operation}}
{{* formulaire de copie du mouvement *}}
<form method="post" action="">
<fieldset>
<legend>Créer une copie de « {{$op_label}} {{$eqpmt.name}} (Catégorie : {{$category.name}}) »</legend>
<legend>Créer une copie de « {{$op_label}} {{$equipment.name}} (Catégorie : {{$category.name}}) »</legend>
{{if $mvt_new.direction == "input"}}
<dl>
{{:input type="select" name="operation" label="Type" required=true options=$input_labels|sort default=$mvt_new.operation}}

View File

@ -31,8 +31,8 @@
{{#form on="save"}}
{{* vérifier la quantité saisie *}}
{{if $_POST.quantite <= 0}}
{{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.quantite}}
{{if $_POST.amount <= 0}}
{{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.amount}}
{{/if}}
{{* interdire date dans le futur *}}
@ -40,6 +40,26 @@
{{:error message="Impossible de saisir une date dans le futur (%s)"|args:$_POST.date}}
{{/if}}
{{* calculer la nouvelle quantité du matériel *}}
{{:assign var="type_mvt" from="config.input_nature.%s.type"|args:$_POST.operation}}
{{if $type_mvt == 'définitif'}}
{{:assign var="equipment.stock" value="%d+%d"|math:$equipment.stock:$_POST.amount|intval}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign var="equipment.notowned" value="%d+%d"|math:$equipment.notowned:$_POST.amount|intval}}
{{/if}}
{{:save
key=$equipment.key
validate_schema="../../equipment.schema.json"
type="equipment"
category=$equipment.category
name=$equipment.name
status="available"
stock=$equipment.stock
out=$equipment.out
notowned=$equipment.notowned
}}
{{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}}
{{:save
@ -48,7 +68,7 @@
type="movement"
direction="input"
operation=$_POST.operation
amount=$_POST.quantite|intval
amount=$_POST.amount|intval
equipment=$equipment.key
date=$_POST.date|parse_date
comment=$_POST.remarques|trim
@ -81,7 +101,7 @@
<dl>
{{:input type="select" name="operation" label="Type" required=true default_empty="— Aucun —" options=$input_labels|sort}}
{{:input type="date" name="date" label="Date" required=true default=$now|date_short}}
{{:input type="number" name="quantite" label="Quantité" required=true min=1 default=1}}
{{:input type="number" name="amount" label="Quantité" required=true min=1 default=1}}
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
</dl>
</fieldset>

View File

@ -82,7 +82,23 @@
{{/if}}
</p>
{{else}}
{{* vérification réussie : enregistrer le mouvement modifié *}}
{{* calculer la nouvelle quantité du matériel *}}
{{:assign var="type_mvt" from="config.input_nature.%s.type"|args:$_POST.operation}}
{{:assign var="equipment.out" value="%d-%d"|math:$equipment.out:$_POST.amount|intval}}
{{:save
key=$equipment.key
validate_schema="../../equipment.schema.json"
type="equipment"
category=$equipment.category
name=$equipment.name
status="available"
stock=$equipment.stock
out=$equipment.out
notowned=$equipment.notowned
}}
{{* enregistrer le mouvement modifié *}}
{{:save
key=""|uuid
validate_schema="../movement.schema.json"

View File

@ -18,11 +18,12 @@
{{* infos pour affichage *}}
{{:assign var="op_label" from="config.%s_nature.%s.label"|args:$mvt_new.direction:$mvt_new.operation}}
{{:assign amount_init=$mvt_new.amount}}
{{:assign operation_init=$mvt_new.operation}}
{{:assign date_init=$mvt_new.date|date_short}}
{{:assign eqpmt_key=$mvt_new.equipment}}
{{* récupérer les infos du matériel associé *}}
{{#load key=$eqpmt_key assign="eqpmt"}}
{{#load key=$eqpmt_key assign="equipment"}}
{{else}}
{{:error message="Aucun matériel avec la clé « %s »"|args:$eqpmt_key}}
{{/load}}
@ -112,12 +113,62 @@
{{:assign var="new_op_label" from="config.%s_nature.%s.label"|args:$mvt_new.direction:$mvt_new.operation}}
<p class="block error">
Modification demandée impossible :
« {{$op_label}} de {{$eqpmt.name}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers
« {{$op_label}} de {{$equipment.name}} (qté : {{$amount_init}}) en date du {{$date_init}} » vers
« {{$new_op_label}}
de {{$eqpmt.name}} (qté : {{$mvt_new.amount}}) à la date du {{$mvt_new.date|date_short}} »
de {{$equipment.name}} (qté : {{$mvt_new.amount}}) à la date du {{$mvt_new.date|date_short}} »
</p>
{{else}}
{{* vérification réussie : enregistrer le mouvement modifié *}}
{{* calculer la nouvelle quantité du matériel *}}
{{:assign var="type_mvt_init" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$operation_init}}
{{:assign var="type_mvt_final" from="config.%s_nature.%s.type"|args:$mvt_new.direction:$mvt_new.operation}}
{{if $mvt_new.direction == 'input'}}
{{if $type_mvt_init == 'définitif'}}
{{:assign var="equipment.stock" value="%d-%d"|math:$equipment.stock:$amount_init}}
{{elseif $type_mvt_init == 'temporaire'}}
{{:assign var="equipment.notowned" value="%d-%d"|math:$equipment.notowned:$amount_init}}
{{elseif $type_mvt_init == 'retour'}}
{{:assign var="equipment.out" value="%d+%d"|math:$equipment.out:$amount_init}}
{{/if}}
{{if $type_mvt_final == 'définitif'}}
{{:assign var="equipment.stock" value="%d+%d"|math:$equipment.stock:$mvt_new.amount|intval}}
{{elseif $type_mvt_final == 'temporaire'}}
{{:assign var="equipment.notowned" value="%d+%d"|math:$equipment.notowned:$mvt_new.amount|intval}}
{{elseif $type_mvt_final == 'retour'}}
{{:assign var="equipment.out" value="%d-%d"|math:$equipment.out:$mvt_new.amount|intval}}
{{/if}}
{{else}}
{{if $type_mvt_init == 'définitif'}}
{{:assign var="equipment.stock" value="%d+%d"|math:$equipment.stock:$amount_init}}
{{elseif $type_mvt_init == 'temporaire'}}
{{:assign var="equipment.out" value="%d-%d"|math:$equipment.out:$amount_init}}
{{elseif $type_mvt_init == 'retour'}}
{{:assign var="equipment.notowned" value="%d+%d"|math:$equipment.notowned:$amount_init}}
{{/if}}
{{if $type_mvt_final == 'définitif'}}
{{:assign var="equipment.stock" value="%d-%d"|math:$equipment.stock:$mvt_new.amount|intval}}
{{elseif $type_mvt_final == 'temporaire'}}
{{:assign var="equipment.out" value="%d+%d"|math:$equipment.out:$mvt_new.amount|intval}}
{{elseif $type_mvt_final == 'retour'}}
{{:assign var="equipment.notowned" value="%d-%d"|math:$equipment.notowned:$mvt_new.amount|intval}}
{{/if}}
{{/if}}
{{:save
key=$equipment.key
validate_schema="../equipment.schema.json"
type="equipment"
category=$equipment.category
name=$equipment.name
status="available"
stock=$equipment.stock
out=$equipment.out
notowned=$equipment.notowned
}}
{{* enregistrer le mouvement modifié *}}
{{:save
key=$_GET.key
validate_schema="movement.schema.json"
@ -141,12 +192,12 @@
*}}
{{* récupérer les infos de la catégorie *}}
{{#load key=$eqpmt.category assign="category"}}{{/load}}
{{#load key=$equipment.category assign="category"}}{{/load}}
{{* formulaire de modification du mouvement *}}
<form method="post" action="">
<fieldset>
<legend>Modifier « {{$op_label}} {{$eqpmt.name}} (Catégorie : {{$category.name}}) »</legend>
<legend>Modifier « {{$op_label}} {{$equipment.name}} (Catégorie : {{$category.name}}) »</legend>
{{if $mvt_new.direction == "input"}}
<dl>
{{:input type="select" name="operation" label="Type" required=true options=$input_labels|sort default=$mvt_new.operation}}

View File

@ -43,11 +43,11 @@
{{if ! $insere && $mvt.date > $_POST.date|parse_date}}
{{:assign insere=true}}
{{:assign dispo_old=$nonproprio}}
{{:assign nonproprio="%d-%d"|math:$nonproprio:$_POST.quantite}}
{{:assign nonproprio="%d-%d"|math:$nonproprio:$_POST.amount}}
{{if $nonproprio < 0}}
{{:assign date_err=$_POST.date|date:"d/m/Y"}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo_old:$date_err}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.amount:$dispo_old:$date_err}}
{{/if}}
{{/if}}
@ -76,18 +76,34 @@
{{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonproprio < 0}}
{{:assign date_err=$mvt.date|date:"d/m/Y"}}
{{:error message="Erreur : la quantité indiquée (%s) est incompatible avec la sortie de %s unités à la date du %s"|args:$_POST.quantite:$mvt.amount:$date_err}}
{{:error message="Erreur : la quantité indiquée (%s) est incompatible avec la sortie de %s unités à la date du %s"|args:$_POST.amount:$mvt.amount:$date_err}}
{{/if}}
{{/load}}
{{if ! $insere}}
{{:assign dispo_old=$nonproprio}}
{{:assign nonproprio="%d-%d"|math:$nonproprio:$_POST.quantite}}
{{:assign nonproprio="%d-%d"|math:$nonproprio:$_POST.amount}}
{{if $nonproprio < 0}}
{{:assign date_err=$_POST.date|date:"d/m/Y"}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo_old:$date_err}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.amount:$dispo_old:$date_err}}
{{/if}}
{{/if}}
{{* calculer la nouvelle quantité du matériel *}}
{{:assign var="type_mvt" from="config.output_nature.%s.type"|args:$_POST.operation}}
{{:assign var="equipment.notowned" value="%d-%d"|math:$equipment.notowned:$_POST.amount|intval}}
{{:save
key=$equipment.key
validate_schema="../../equipment.schema.json"
type="equipment"
category=$equipment.category
name=$equipment.name
status="available"
stock=$equipment.stock
out=$equipment.out
notowned=$equipment.notowned
}}
{{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}}
{{:save
@ -96,7 +112,7 @@
type="movement"
direction="output"
operation=$_POST.operation
amount=$_POST.quantite|intval
amount=$_POST.amount|intval
equipment=$equipment.key
date=$_POST.date|parse_date
comment=$_POST.remarques|trim
@ -134,7 +150,7 @@
<dl>
{{:input type="select" name="operation" label="Type" required=true options=$output_labels|sort}}
{{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}}
{{:input type="number" name="quantite" label="Quantité" required=true default=$present min=1 max=$present}}
{{:input type="number" name="amount" label="Quantité" required=true default=$present min=1 max=$present}}
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
</dl>
</fieldset>

View File

@ -45,15 +45,15 @@
{{:assign var="type_mvt" from="config.output_nature.%s.type"|args:$_POST.operation}}
{{if $type_mvt == 'définitif'}}
{{:assign stock="%d-%d"|math:$stock:$_POST.quantite}}
{{:assign stock="%d-%d"|math:$stock:$_POST.amount}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign exterieur="%d+%d"|math:$exterieur:$_POST.quantite}}
{{:assign exterieur="%d+%d"|math:$exterieur:$_POST.amount}}
{{/if}}
{{:assign dispo="%d-%d"|math:$stock:$exterieur}}
{{if $dispo < 0 || $stock < 0 || $exterieur < 0}}
{{:assign date_err=$_POST.date|date:"d/m/Y"}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo_old:$date_err}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.amount:$dispo_old:$date_err}}
{{/if}}
{{/if}}
@ -82,7 +82,7 @@
{{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonproprio < 0}}
{{:assign date_err=$mvt.date|date:"d/m/Y"}}
{{:error message="Erreur : la quantité indiquée (%s) est incompatible avec la sortie de %s unités à la date du %s"|args:$_POST.quantite:$mvt.amount:$date_err}}
{{:error message="Erreur : la quantité indiquée (%s) est incompatible avec la sortie de %s unités à la date du %s"|args:$_POST.amount:$mvt.amount:$date_err}}
{{/if}}
{{/load}}
{{if ! $insere}}
@ -90,18 +90,38 @@
{{:assign var="type_mvt" from="config.output_nature.%s.type"|args:$_POST.operation}}
{{if $type_mvt == 'définitif'}}
{{:assign stock="%d-%d"|math:$stock:$_POST.quantite}}
{{:assign stock="%d-%d"|math:$stock:$_POST.amount}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign exterieur="%d+%d"|math:$exterieur:$_POST.quantite}}
{{:assign exterieur="%d+%d"|math:$exterieur:$_POST.amount}}
{{/if}}
{{:assign dispo="%d-%d"|math:$stock:$exterieur}}
{{if $dispo < 0 || $stock < 0 || $exterieur < 0}}
{{:assign date_err=$_POST.date|date:"d/m/Y"}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.quantite:$dispo_old:$date_err}}
{{:error message="Erreur : la quantité indiquée (%s) est supérieure à celle disponible (%d) à la date du %s"|args:$_POST.amount:$dispo_old:$date_err}}
{{/if}}
{{/if}}
{{* calculer la nouvelle quantité du matériel *}}
{{:assign var="type_mvt" from="config.output_nature.%s.type"|args:$_POST.operation}}
{{if $type_mvt == 'définitif'}}
{{:assign var="equipment.stock" value="%d-%d"|math:$equipment.stock:$_POST.amount|intval}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign var="equipment.out" value="%d+%d"|math:$equipment.out:$_POST.amount|intval}}
{{/if}}
{{:save
key=$equipment.key
validate_schema="../../equipment.schema.json"
type="equipment"
category=$equipment.category
name=$equipment.name
status="available"
stock=$equipment.stock
out=$equipment.out
notowned=$equipment.notowned
}}
{{* Enregistrer le mouvement *}}
{{:assign mvt_key=""|uuid}}
{{:save
@ -110,7 +130,7 @@
type="movement"
direction="output"
operation=$_POST.operation
amount=$_POST.quantite|intval
amount=$_POST.amount|intval
equipment=$equipment.key
date=$_POST.date|parse_date
comment=$_POST.remarques|trim
@ -151,7 +171,7 @@
<dl>
{{:input type="select" name="operation" label="Type" required=true default_empty="— Aucun —" options=$output_labels|sort}}
{{:input type="date" name="date" label="Date de sortie" required=true default=$now|date_short}}
{{:input type="number" name="quantite" label="Quantité" required=true default=$dispo min=1 max=$dispo}}
{{:input type="number" name="amount" label="Quantité" required=true default=$dispo min=1 max=$dispo}}
{{:input type="textarea" name="remarques" label="Remarques" cols="40" rows="3" required=false}}
</dl>
</fieldset>

View File

@ -102,14 +102,47 @@
{{* voir s'il reste des mouvements pour le matériel concerné par le mouvement supprimé *}}
{{#load type="movement" where="$$.equipment = :eqpmt_key" :eqpmt_key=$equipment.key}}
{{:assign mvt_ok=1}}
{{/load}}
{{if $mvt_ok}}
{{* calculer la nouvelle quantité du matériel *}}
{{:assign var="type_mvt" from="config.%s_nature.%s.type"|args:$mvt_suppr.direction:$mvt_suppr.operation}}
{{if $mvt_suppr.direction == 'input'}}
{{if $type_mvt == 'définitif'}}
{{:assign var="equipment.stock" value="%d-%d"|math:$equipment.stock:$mvt_suppr.amount|intval}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign var="equipment.notowned" value="%d-%d"|math:$equipment.notowned:$mvt_suppr.amount|intval}}
{{elseif $type_mvt == 'retour'}}
{{:assign var="equipment.out" value="%d+%d"|math:$equipment.out:$mvt_suppr.amount|intval}}
{{/if}}
{{else}}
{{if $type_mvt == 'définitif'}}
{{:assign var="equipment.stock" value="%d+%d"|math:$equipment.stock:$mvt_suppr.amount|intval}}
{{elseif $type_mvt == 'temporaire'}}
{{:assign var="equipment.out" value="%d-%d"|math:$equipment.out:$mvt_suppr.amount|intval}}
{{elseif $type_mvt == 'retour'}}
{{:assign var="equipment.notowned" value="%d+%d"|math:$equipment.notowned:$mvt_suppr.amount|intval}}
{{/if}}
{{/if}}
{{:save
key=$equipment.key
validate_schema="../equipment.schema.json"
type="equipment"
category=$equipment.category
name=$equipment.name
status="available"
stock=$equipment.stock
out=$equipment.out
notowned=$equipment.notowned
}}
{{:redirect force="../historique.html?ok=1&key=%s&prop=%s&msg=suppression"|args:$mvt_suppr.equipment:$_GET.prop}}
{{else}}
{{* supprimer le matériel *}}
{{:delete key=$equipment.key}}
{{:assign var="msg" value="%s - Matériel « %s » supprimé"|args:$msg:$equipment.name}}
{{:redirect force="../index.html?ok=1&msg=supprmvtmat"|args:$msg}}
{{/load}}
{{:redirect force="../index.html?ok=1&msg=supprmvtmat"}}
{{/if}}
{{:redirect force="../historique.html?ok=1&key=%s&prop=%s&msg=suppression"|args:$mvt_suppr.equipment:$_GET.prop}}
{{/form}}
{{:admin_header title="Supprimer un mouvement" current="module_equipment"}}