[Racket] Ferti hydroponic nutrient solver, redux.
Add crop requirements logic + views.
Changed files
handlers.rkt
@@ -10,8 +10,8 @@
10
10
"views.rkt"
11
11
"formlets.rkt"
12
12
"models/user.rkt"
13
Removed:
"models/nutrient.rkt"
14
13
"models/nutrient-measurement.rkt"
14
Added:
"models/crop-requirement.rkt"
15
15
"models/crop-rotation.rkt"
16
16
"models/fertilizer-product.rkt"
17
17
"services/nnls.rkt")
@@ -27,6 +27,7 @@
27
27
[("ferti" "measurements-and-rotations") #:method "get" ferti-measurements-and-rotations]
28
28
[("ferti" "recipes" (string-arg)) #:method "get" ferti-recipe]
29
29
[("ferti" "fertilizers") #:method "get" ferti-fertilizers]
30
Added:
[("ferti" "crop-requirements") #:method "get" ferti-crop-requirements]
30
31
;; Nutrient measurements
31
32
[("ferti" "measurements" "new") #:method "get" new-measurement]
32
33
[("ferti" "measurements" "create") #:method "post" create-measurement]
@@ -71,8 +72,10 @@
71
72
(render-page (ferti-recipe-page date-string ferti-recipe)))
72
73
73
74
(define (ferti-fertilizers _)
74
Removed:
(define fertilizers (get-fertilizer-products))
75
Removed:
(render-page (ferti-fertilizers-page fertilizers)))
75
Added:
(render-page (ferti-fertilizers-page (get-fertilizer-products))))
76
Added:
77
Added:
(define (ferti-crop-requirements _)
78
Added:
(render-page (ferti-crop-requirements-page (get-crop-requirements))))
76
79
77
80
;; Nutrient measurements
78
81
models/crop-requirement.rkt
@@ -93,8 +93,7 @@
93
93
(define (get-crop-requirement #:id [cr-id #f] #:profile [profile #f])
94
94
(define where
95
95
(cond
96
Removed:
[(and cr-id profile)
97
Removed:
(scalar-expr-qq (and (= cr.id ,cr-id) (= cr.profile ,profile)))]
96
Added:
[(and cr-id profile) (scalar-expr-qq (and (= cr.id ,cr-id) (= cr.profile ,profile)))]
98
97
[cr-id (scalar-expr-qq (= cr.id ,cr-id))]
99
98
[profile (scalar-expr-qq (= cr.profile ,profile))]
100
99
[else (error 'get-crop-requirement "one of #:id or #:profile must be provided")]))
views.rkt
@@ -5,6 +5,7 @@
5
5
ferti-measurements-and-rotations-page
6
6
ferti-recipe-page
7
7
ferti-fertilizers-page
8
Added:
ferti-crop-requirements-page
8
9
new-measurement-page
9
10
new-rotation-page
10
11
new-fertilizer-page
@@ -19,6 +20,7 @@
19
20
"models/user.rkt"
20
21
"models/nutrient.rkt"
21
22
"models/nutrient-measurement.rkt"
23
Added:
"models/crop.rkt"
22
24
"models/crop-rotation.rkt"
23
25
"models/crop-requirement.rkt"
24
26
"models/fertilizer-product.rkt")
@@ -89,7 +91,10 @@
89
91
(a ((class "nav-link") (aria-current "page") (href "/ferti/measurements-and-rotations"))
90
92
"Relevés & Assolements"))
91
93
(li ((class "nav-item"))
92
Removed:
(a ((class "nav-link") (aria-current "page") (href "/ferti/fertilizers")) "Intrants"))))
94
Added:
(a ((class "nav-link") (aria-current "page") (href "/ferti/fertilizers")) "Intrants"))
95
Added:
(li ((class "nav-item"))
96
Added:
(a ((class "nav-link") (aria-current "page") (href "/ferti/crop-requirements"))
97
Added:
"Cultures"))))
93
98
94
99
(define (ferti-index-page)
95
100
(ferti-template
@@ -127,7 +132,7 @@
127
132
(href ,(format "/ferti/recipes/~a" (crop-rotation-date maybe-rotation))))
128
133
"Consulter")
129
134
"—")))))))
130
Removed:
(ferti-template `((h2 () "Relevés & Assolements")
135
Added:
(ferti-template `((h2 () "Relevés et Assolements")
131
136
(div ((class "btn-group mb-3"))
132
137
(a ((class "btn btn-primary") [href "/ferti/measurements/new"])
133
138
"Ajouter un relevé"))
@@ -163,6 +168,21 @@
163
168
"/ferti/fertilizers/new"])
164
169
"Ajouter un intrant")
165
170
,table)))
171
Added:
172
Added:
(define (ferti-crop-requirements-page crop-requirements)
173
Added:
(define table
174
Added:
`(table ((class "table table-striped"))
175
Added:
(tr (th "Culture") (th "Profil"))
176
Added:
,@(for/list ([cr crop-requirements])
177
Added:
(define crop-id (crop-requirement-crop-id cr))
178
Added:
`(tr (td ,(if crop-id
179
Added:
(string-titlecase (crop-name (get-crop #:id crop-id)))
180
Added:
"—"))
181
Added:
(td ,(string-titlecase (crop-requirement-profile cr)))))))
182
Added:
(ferti-template `((h2 () "Profils de culture")
183
Added:
(a ((class "btn btn-primary mb-3") [href "/ferti/crop-requirements/new"])
184
Added:
"Ajouter un profil")
185
Added:
,table)))
166
186
167
187
(define (new-measurement-page)
168
188
(page-template "Nouveau relevé"