Add measurement editing + updating logic.

Commit
fc64ba9e3f119b3e283bd3750385c477381d549a
Author
Marius Peter <dev@marius-peter.com>
Author date
Committer
Marius Peter <dev@marius-peter.com>
Committer date
Changed files
formlets.rkt
index 116db814..7ebd0b93 100644..100644
@@ -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
index 988789bb..49e27d96 100644..100644
@@ -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
index 676ec1b9..3a5238b9 100644..100644
@@ -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
index 3544474a..2ffce4c0 100644..100644
@@ -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)))