[Racket] Ferti hydroponic nutrient solver, redux.
Date formlet now takes an optional initial value.
formlets.rkt
@@ -1,17 +1,18 @@
1
1
#lang racket
2
2
3
3
(provide measurements-formlet
4
Removed:
targets-formlet
4
Added:
rotation-formlet
5
5
fertilizer-formlet)
6
6
7
7
(require gregor
8
8
web-server/formlets
9
9
"models/nutrient.rkt"
10
Added:
"models/nutrient-measurement.rkt"
10
11
"models/crop.rkt"
11
12
"models/crop-requirement.rkt")
12
13
13
14
(define (measurements-formlet)
14
Removed:
(formlet* (#%# `(div ((class "mb-3")) (h5 "Date du relevé") ,{=>* date-formlet measurement-date*})
15
Added:
(formlet* (#%# `(div ((class "mb-3")) (h5 "Date du relevé") ,{=>* (date-formlet) measurement-date*})
15
16
`(div ((class "mb-3"))
16
17
(h5 "Valeurs du relevé")
17
18
,@(for/list ([nutrient (get-nutrients)])
@@ -22,17 +23,20 @@
22
23
(values (car nv) (cdr nv)))])
23
24
(values measurement-date nutrient-values))))
24
25
25
Removed:
(define (targets-formlet)
26
Removed:
(formlet* (#%# `(div ((class "mb-3")) (h5 "Date ciblée") ,{=>* date-formlet target-date*})
26
Added:
(define (rotation-formlet #:date [date-string #f])
27
Added:
(formlet* (#%# `(div ((class "mb-3"))
28
Added:
(h5 "Date de l'assolement")
29
Added:
,{=>* (date-formlet #:date date-string) rotation-date*})
27
30
`(div ((class "mb-3"))
28
Removed:
(h5 "Valeurs cibles (%)")
31
Added:
(h5 "Répartition des cultures (%)")
29
32
,@(for/list ([requirement (get-crop-requirements)])
30
33
{=>* (crop-requirement-formlet requirement) requirements*}))
31
34
{=>* (submit "Enregistrer la cible" #:attributes '((class "btn btn-primary"))) _})
32
Removed:
(let ([target-date (first target-date*)]
33
Removed:
[nutrient-values (average-crop-requirement-nutrient-values (filter pair?
34
Removed:
requirements*))])
35
Removed:
(values target-date nutrient-values))))
35
Added:
(let ([rotation-date (first rotation-date*)]
36
Added:
[requirement-proportions (for/hash ([rp requirements*])
37
Added:
(match-define (cons req proportion) rp)
38
Added:
(values req proportion))])
39
Added:
(values rotation-date requirement-proportions))))
36
40
37
41
(define (fertilizer-formlet)
38
42
(formlet*
@@ -77,9 +81,9 @@
77
81
(div ((class "form-floating mb-3")) ,{=> percentage-input requirement-percentage} ,input-label)
78
82
(cons requirement requirement-percentage)))
79
83
80
Removed:
(define date-formlet
84
Added:
(define (date-formlet #:date [date-string #f])
81
85
(to-string (required (input #:type "date"
82
Removed:
#:value (date->iso8601 (today))
86
Added:
#:value (or date-string (date->iso8601 (today)))
83
87
#:attributes '((class "form-control") [required "required"])))))
84
88
85
89
(define (nutrient-value-formlet nutrient)