[Racket] Ferti hydroponic nutrient solver, redux.
Add measurement editing + updating logic.
Changed files
formlets.rkt
@@ -12,17 +12,30 @@
12
12
"models/crop.rkt"
13
13
"models/crop-requirement.rkt")
14
14
15
Removed:
(define (measurements-formlet)
16
Removed:
(formlet* (#%# `(div ((class "mb-3")) (h5 "Date du relevé") ,{=>* (date-formlet) measurement-date*})
15
Added:
(define (measurements-formlet #:value [nm #f])
16
Added:
(formlet* (#%# (=>* (to-string (required (hidden (if nm
17
Added:
(number->string (nutrient-measurement-id nm))
18
Added:
""))))
19
Added:
id*)
17
20
`(div ((class "mb-3"))
21
Added:
(h5 "Date du relevé")
22
Added:
,(=>* (date-formlet #:value (if nm
23
Added:
(nutrient-measurement-date nm)
24
Added:
(date->iso8601 (today))))
25
Added:
measurement-date*))
26
Added:
`(div ((class "mb-3"))
18
27
(h5 "Valeurs du relevé")
19
Removed:
,@(for/list ([nutrient (get-nutrients)])
20
Removed:
{=>* (nutrient-value-formlet nutrient) nutrient-values*}))
28
Added:
,@(for/list ([n (get-nutrients)])
29
Added:
(define v
30
Added:
(if nm
31
Added:
(nutrient-measurement-value nm n)
32
Added:
0))
33
Added:
(=>* (nutrient-value-formlet n v) nutrient-values*)))
21
34
{=>* (submit "Enregistrer le relevé" #:attributes '((class "btn btn-primary"))) _})
22
Removed:
(values measurement-date nutrient-values))))
23
35
(let ([id (first id*)]
24
36
[measurement-date (first measurement-date*)]
25
37
[nutrient-values (make-immutable-hash nutrient-values*)])
38
Added:
(nutrient-measurement id measurement-date nutrient-values))))
26
39
27
40
(define (rotation-formlet #:date [date-string #f])
28
41
(formlet* (#%# `(div ((class "mb-3"))
handlers.rkt
@@ -32,6 +32,8 @@
32
32
[("ferti" "measurements" "new") #:method "get" new-measurement]
33
33
[("ferti" "measurements" "create") #:method "post" create-measurement]
34
34
[("ferti" "measurements" (integer-arg)) #:method "get" show-measurement]
35
Added:
[("ferti" "measurements" (integer-arg) "edit") #:method "get" edit-measurement]
36
Added:
[("ferti" "measurements" "update") #:method "post" update-measurement]
35
37
[("ferti" "measurements" (integer-arg) "destroy") #:method "get" destroy-measurement]
36
38
;; Crop rotations
37
39
[("ferti" "rotations" "new") #:method "get" new-rotation]
@@ -94,6 +96,15 @@
94
96
(define (show-measurement _ id)
95
97
(define nm (get-nutrient-measurement #:id id))
96
98
(render-page (show-measurement-page nm)))
99
Added:
100
Added:
(define (edit-measurement _ id)
101
Added:
(define nm (get-nutrient-measurement #:id id))
102
Added:
(render-page (edit-measurement-page nm)))
103
Added:
104
Added:
(define (update-measurement req)
105
Added:
(define edited-nutrient-measurement (formlet-process (measurements-formlet) req))
106
Added:
(update-nutrient-measurement! edited-nutrient-measurement)
107
Added:
(redirect-to "/ferti/measurements-and-rotations"))
97
108
98
109
(define (destroy-measurement _ id)
99
110
(delete-nutrient-measurement! id)
models/nutrient-measurement.rkt
@@ -18,6 +18,7 @@
18
18
[get-latest-nutrient-measurement (-> maybe-nutrient-measurement?)]
19
19
[get-latest-nutrient-measurement-value (-> nutrient? maybe-nutrient-value?)]
20
20
[get-latest-nutrient-measurement-values (-> nutrient-value-hash/c)]
21
Added:
[update-nutrient-measurement! (-> nutrient-measurement? void?)]
21
22
[delete-nutrient-measurement! (-> nutrient-measurement-or-id/c void?)]))
22
23
23
24
(require db
@@ -186,6 +187,20 @@
186
187
(values (nutrient n-id n-canonical-name n-french-name n-formula) value-ppm)))
187
188
188
189
;; UPDATE
190
Added:
191
Added:
(define (update-nutrient-measurement! nm)
192
Added:
(define id
193
Added:
(or (nutrient-measurement-id nm)
194
Added:
(raise-argument-error 'update-nutrient-measurement! "db-id?" (nutrient-measurement-id nm))))
195
Added:
(with-tx
196
Added:
(query-exec (current-conn)
197
Added:
(update nutrient_measurements
198
Added:
#:set [measurement_date ,(nutrient-measurement-measurement-date nm)]
199
Added:
#:where [= id ,id]))
200
Added:
(define nvs-id
201
Added:
(query-value (current-conn)
202
Added:
(select id #:from nutrient_value_sets #:where [= nutrient_measurement_id ,id])))
203
Added:
(update-nutrient-values! (current-conn) nvs-id (nutrient-measurement-nutrient-values nm))))
189
204
190
205
;; DELETE
191
206
views.rkt
@@ -9,6 +9,7 @@
9
9
new-measurement-page
10
10
new-rotation-page
11
11
new-fertilizer-page
12
Added:
edit-measurement-page
12
13
edit-fertilizer-page
13
14
show-measurement-page
14
15
show-rotation-page
@@ -206,6 +207,11 @@
206
207
(form-page-template "Nouvel intrant" "/ferti/fertilizers/create" (fertilizer-formlet)))
207
208
208
209
;; Edit
210
Added:
211
Added:
(define (edit-measurement-page nm)
212
Added:
(form-page-template "Modifier le relevé"
213
Added:
"/ferti/measurements/update"
214
Added:
(measurements-formlet #:value nm)))
209
215
210
216
(define (edit-fertilizer-page fp)
211
217
(form-page-template "Modifier intrant" "/ferti/fertilizers/update" (fertilizer-formlet #:value fp)))