diff --git a/mouvements/entrees/retour.html b/mouvements/entrees/retour.html index 9f6daf4..fe461d8 100644 --- a/mouvements/entrees/retour.html +++ b/mouvements/entrees/retour.html @@ -13,55 +13,89 @@ {{* récupérer la config des entrées/sorties *}} {{:include file="../../_get_config.html" keep="config"}} -{{* types d'entrées *}} -{{#foreach from=$config.input_nature key=key}} - {{if $type == 'retour'}} - {{:assign var="input_labels.%s"|args:$key value=$label}} - {{/if}} -{{/foreach}} +{{* déterminer le matériel concerné par le mouvement *}} +{{#load key=$_GET.key assign="equipment"}}{{/load}} -{{* Traiter l'envoi du formulaire *}} +{{* + -------------------- Traiter l'envoi du formulaire -------------------- +*}} {{#form on="save"}} - {{* interdire date dans le futur *}} + {{* vérifier les données saisies *}} + {{if $_POST.amount <= 0}} + {{:error message="La quantité (%s) doit être strictement positive !!"|args:$_POST.amount}} + {{/if}} + {{if $_POST.date|parse_date|strtotime > $now}} {{:error message="Impossible de saisir une date dans le futur (%s)"|args:$_POST.date}} {{/if}} - {{* récupérer les infos du matériel *}} - {{#load type="equipment" key=$_GET.key assign="equipment"}} - {{:assign name=$equipment.name}} - {{/load}} + {{* préparer le nouveau mouvement *}} + {{:assign var="mvt_new.key" value=""|uuid}} + {{:assign var="mvt_new.direction" value="input"}} + {{:assign var="mvt_new.date" value=$_POST.date|parse_date}} + {{:assign var="mvt_new.operation" value=$_POST.operation}} + {{:assign var="mvt_new.amount" value=$_POST.amount}} - {{* Extraire et compiler les infos de la base *}} - {{:include - file="../../_calcul_dispo.html" - keep="equipments" - eqpmt_key=$_GET.key - date=$_POST.date|parse_date + {{* + lister les mouvements + - insérer le nouveau mvt à sa place par date croissante + *}} + {{:assign insere=false}} + {{#load + where=" + $$.type = 'movement' + AND + $$.equipment = :eqpmt_key" + :eqpmt_key=$equipment.key + order="$$.date" + assign="movement" }} - - {{* déterminer la quantité sortie temporairement de ce matériel à la date donnée *}} - {{:assign var=sorti from="equipments.%s.exterieur"|args:$_GET.key}} - - {{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}} + {{if! $insere}} + {{if + $mvt_new.direction == "input" && $date >= $mvt_new.date || + $mvt_new.direction == "output" && $date > $mvt_new.date + }} + {{:assign var="movements_new." from=mvt_new}} + {{:assign insere=true}} + {{/if}} + {{/if}} + {{:assign var="movements_new." from=movement}} + {{/load}} + {{if ! $insere}} + {{:assign var="movements_new." from=mvt_new}} {{/if}} - {{* Enregistrer le mouvement *}} - {{:assign mvt_key=""|uuid}} - {{:save - key=$mvt_key - validate_schema="../movement.schema.json" - type="movement" - direction="input" - operation=$_POST.operation - amount=$_POST.quantite|intval - equipment=$equipment.key - date=$_POST.date|parse_date - comment=$_POST.remarques|trim + {{* Vérifier la cohérence des mouvements du matériel *}} + {{:include + file="../valider_modification.html" + keep="erreur, pb" + movements=$movements_new }} - {{:redirect force="../../historique.html?ok=1&key=%s&prop=1&msg=retour"|args:$_GET.key}} + {{if $erreur}} +

Impossible d'enregistrer ce mouvement. + {{if $pb.mvt.key != $mvt_new.key}} + {{:assign var="err_mvt_label" from="config.input_nature.%s.label"|args:$pb.mvt.operation}} +
Mouvement incompatible avec + « {{$err_mvt_label}} de {{$equipment.name}} (qté : {{$pb.mvt.amount}}) + en date du {{$pb.mvt.date|date_short}} ». + {{/if}} +

+ {{else}} + {{* vérification réussie : enregistrer le mouvement modifié *}} + {{:save + key=""|uuid + validate_schema="../movement.schema.json" + type="movement" + direction="input" + operation=$_POST.operation + amount=$_POST.amount|intval + equipment=$equipment.key + date=$_POST.date|parse_date + comment=$_POST.comment|trim + }} + {{:redirect force="../../historique.html?ok=1&key=%s&prop=1&msg=retour"|args:$_GET.key}} +{{/if}} {{/form}} {{:admin_header title="Retour de matériel" custom_css="./../../style.css" current="module_equipment"}} @@ -71,13 +105,15 @@ {{:include file="../../_calcul_dispo.html" eqpmt_key=$_GET.key keep="categories, equipments"}} {{:assign var=sorti from="equipments.%s.exterieur"|args:$_GET.key}} +{{* types d'entrées *}} +{{#foreach from=$config.input_nature key=key}} + {{if $type == 'retour'}} + {{:assign var="input_labels.%s"|args:$key value=$label}} + {{/if}} +{{/foreach}} + {{if $sorti > 0}} - - {{* déterminer le matériel concerné par le mouvement *}} - {{#load key=$_GET.key assign="equipment"}} - {{/load}} {{:assign var=cat_name from=categories.%s|args:$equipment.category}} - {{* formulaire d'entrée de matériel *}}
@@ -96,8 +132,8 @@
{{:input type="select" name="operation" label="Type" required=true 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=$sorti max=$sorti}} - {{:input type="textarea" name="remarques" label="Remarques" cols="40", rows="3" required=false}} + {{:input type="number" name="amount" label="Quantité" min=1 required=true default=$sorti max=$sorti}} + {{:input type="textarea" name="comment" label="Remarques" cols="40", rows="3" required=false}}

diff --git a/mouvements/valider_modification.html b/mouvements/valider_modification.html index 753fbd8..52b1253 100644 --- a/mouvements/valider_modification.html +++ b/mouvements/valider_modification.html @@ -38,6 +38,7 @@ {{:assign dispo="%d-%d"|math:$stock:$exterieur}} {{if $dispo < 0 || $stock < 0 || $exterieur < 0 || $nonprop < 0}} {{:assign erreur=true}} + {{:assign var="pb.mvt" value=$mvt}} {{:break}} {{/if}} {{/foreach}}