diff --git a/mouvements/entrees/retour.html b/mouvements/entrees/retour.html index 9f6daf4..98b6f54 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}}
+