summaryrefslogtreecommitdiff
path: root/formlets.rkt
diff options
context:
space:
mode:
authorMarius Peter <dev@marius-peter.com>2025-12-13 17:54:41 +0100
committerMarius Peter <dev@marius-peter.com>2025-12-13 17:54:41 +0100
commit3b7f77480ab5b5fe1a14bfba7a6f1b486aaa9a0a (patch)
tree25a0840e5e243bb09e2be7aad99b7971f8c795d7 /formlets.rkt
parent649d6fa5ad5883f62c4df200b7a9958bba12fe3d (diff)
Add fertilizer product updating logic.
Diffstat (limited to 'formlets.rkt')
-rw-r--r--formlets.rkt59
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 "")])))))
Copyright 2019--2026 Marius PETER