diff options
Diffstat (limited to 'formlets.rkt')
| -rw-r--r-- | formlets.rkt | 59 |
1 files changed, 42 insertions, 17 deletions
diff --git a/formlets.rkt b/formlets.rkt index 3408278..cb4601f 100644 --- a/formlets.rkt +++ b/formlets.rkt @@ -8,6 +8,7 @@ web-server/formlets "models/nutrient.rkt" "models/nutrient-measurement.rkt" + "models/fertilizer-product.rkt" "models/crop.rkt" "models/crop-requirement.rkt") @@ -38,20 +39,42 @@ (values req proportion))]) (values rotation-date requirement-proportions)))) -(define (fertilizer-formlet) - (formlet* - (#%# `(div ((class "mb-3")) (h5 "Nom de référence") ,{=>* required-string-input canonical-name*}) - `(div ((class "mb-3")) (h5 "Nom de marque") ,{=>* required-string-input brand-name*}) - `(div ((class "mb-3")) - (h5 "Valeurs de l'intrant") - ,@(for/list ([nutrient (get-nutrients)]) - {=>* (nutrient-value-formlet nutrient) nutrient-values*})) - {=>* (submit "Enregistrer l'intrant" #:attributes '((class "btn btn-primary"))) _}) - (let ([canonical-name (first canonical-name*)] - [nutrient-values (for/hash ([nv nutrient-values*]) - (values (car nv) (cdr nv)))] - [brand-name (first brand-name*)]) - (values canonical-name brand-name nutrient-values)))) +(define (fertilizer-formlet #:value [fp #f]) + (formlet* (#%# (=>* (to-string (required (hidden (if fp + (number->string (fertilizer-product-id fp)) + "")))) + id*) + `(div ((class "mb-3")) + (h5 "Nom de référence") + ,{=>* + (required-string-input #:value (if fp + (fertilizer-product-name fp) + "")) + canonical-name*}) + `(div ((class "mb-3")) + (h5 "Nom de marque") + ,{=>* + (required-string-input #:value (if fp + (fertilizer-brand-name fp) + "")) + brand-name*}) + `(div ((class "mb-3")) + (h5 "Valeurs de l'intrant") + ,@(for/list ([n (get-nutrients)]) + (define v + (if fp + (fertilizer-product-value fp n) + 0)) + (=>* (nutrient-value-formlet n v) nutrient-values*))) + (=>* (submit (string-join (list (if fp "Modifier" "Enregistrer") "l'intrant")) + #:attributes '((class "btn btn-primary"))) + _)) + (let ([id (string->number (first id*))] + [canonical-name (first canonical-name*)] + [brand-name (first brand-name*)] + [nutrient-values (for/hash ([nv nutrient-values*]) + (values (car nv) (cdr nv)))]) + (fertilizer-product id canonical-name brand-name nutrient-values)))) (define (crop-requirement-formlet requirement) (define id (number->string (crop-requirement-id requirement))) @@ -86,7 +109,7 @@ #:value (or date-string (date->iso8601 (today))) #:attributes '((class "form-control") [required "required"]))))) -(define (nutrient-value-formlet nutrient) +(define (nutrient-value-formlet nutrient value) (define id (number->string (nutrient-id nutrient))) (define number-input (to-number (to-string (required (input #:type "number" @@ -95,6 +118,7 @@ [required "required"] [id ,id] [name ,id] + [value ,(number->string value)] [step "0.1"] [placeholder ,(nutrient-french-name nutrient)])))))) (define input-label @@ -104,5 +128,6 @@ (formlet (div ((class "form-floating mb-3")) ,{=> number-input nutrient-value} ,input-label) (cons nutrient nutrient-value))) -(define required-string-input - (to-string (required (text-input #:attributes '((class "form-control") [required "required"]))))) +(define (required-string-input #:value [str #f]) + (to-string (required (text-input #:attributes `((class "form-control") [required "required"] + [value ,(or str "")]))))) |