summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Peter <dev@marius-peter.com>2025-12-13 22:50:05 +0100
committerMarius Peter <dev@marius-peter.com>2025-12-13 22:51:42 +0100
commitfc64ba9e3f119b3e283bd3750385c477381d549a (patch)
treea1db6761bf9a3bdc95b0cc8050f1b7ffc33801ce
parent0071a7fdf3c171ffa5a4fb562fd7d29c10251790 (diff)
Add measurement editing + updating logic.
-rw-r--r--formlets.rkt23
-rw-r--r--handlers.rkt11
-rw-r--r--models/nutrient-measurement.rkt15
-rw-r--r--views.rkt6
4 files changed, 50 insertions, 5 deletions
diff --git a/formlets.rkt b/formlets.rkt
index 116db81..7ebd0b9 100644
--- a/formlets.rkt
+++ b/formlets.rkt
@@ -12,17 +12,30 @@
"models/crop.rkt"
"models/crop-requirement.rkt")
-(define (measurements-formlet)
- (formlet* (#%# `(div ((class "mb-3")) (h5 "Date du relevé") ,{=>* (date-formlet) measurement-date*})
+(define (measurements-formlet #:value [nm #f])
+ (formlet* (#%# (=>* (to-string (required (hidden (if nm
+ (number->string (nutrient-measurement-id nm))
+ ""))))
+ id*)
+ `(div ((class "mb-3"))
+ (h5 "Date du relevé")
+ ,(=>* (date-formlet #:value (if nm
+ (nutrient-measurement-date nm)
+ (date->iso8601 (today))))
+ measurement-date*))
`(div ((class "mb-3"))
(h5 "Valeurs du relevé")
- ,@(for/list ([nutrient (get-nutrients)])
- {=>* (nutrient-value-formlet nutrient) nutrient-values*}))
+ ,@(for/list ([n (get-nutrients)])
+ (define v
+ (if nm
+ (nutrient-measurement-value nm n)
+ 0))
+ (=>* (nutrient-value-formlet n v) nutrient-values*)))
{=>* (submit "Enregistrer le relevé" #:attributes '((class "btn btn-primary"))) _})
- (values measurement-date nutrient-values))))
(let ([id (first id*)]
[measurement-date (first measurement-date*)]
[nutrient-values (make-immutable-hash nutrient-values*)])
+ (nutrient-measurement id measurement-date nutrient-values))))
(define (rotation-formlet #:date [date-string #f])
(formlet* (#%# `(div ((class "mb-3"))
diff --git a/handlers.rkt b/handlers.rkt
index 988789b..49e27d9 100644
--- a/handlers.rkt
+++ b/handlers.rkt
@@ -32,6 +32,8 @@
[("ferti" "measurements" "new") #:method "get" new-measurement]
[("ferti" "measurements" "create") #:method "post" create-measurement]
[("ferti" "measurements" (integer-arg)) #:method "get" show-measurement]
+ [("ferti" "measurements" (integer-arg) "edit") #:method "get" edit-measurement]
+ [("ferti" "measurements" "update") #:method "post" update-measurement]
[("ferti" "measurements" (integer-arg) "destroy") #:method "get" destroy-measurement]
;; Crop rotations
[("ferti" "rotations" "new") #:method "get" new-rotation]
@@ -95,6 +97,15 @@
(define nm (get-nutrient-measurement #:id id))
(render-page (show-measurement-page nm)))
+(define (edit-measurement _ id)
+ (define nm (get-nutrient-measurement #:id id))
+ (render-page (edit-measurement-page nm)))
+
+(define (update-measurement req)
+ (define edited-nutrient-measurement (formlet-process (measurements-formlet) req))
+ (update-nutrient-measurement! edited-nutrient-measurement)
+ (redirect-to "/ferti/measurements-and-rotations"))
+
(define (destroy-measurement _ id)
(delete-nutrient-measurement! id)
(redirect-to "/ferti/measurements-and-rotations"))
diff --git a/models/nutrient-measurement.rkt b/models/nutrient-measurement.rkt
index 676ec1b..3a5238b 100644
--- a/models/nutrient-measurement.rkt
+++ b/models/nutrient-measurement.rkt
@@ -18,6 +18,7 @@
[get-latest-nutrient-measurement (-> maybe-nutrient-measurement?)]
[get-latest-nutrient-measurement-value (-> nutrient? maybe-nutrient-value?)]
[get-latest-nutrient-measurement-values (-> nutrient-value-hash/c)]
+ [update-nutrient-measurement! (-> nutrient-measurement? void?)]
[delete-nutrient-measurement! (-> nutrient-measurement-or-id/c void?)]))
(require db
@@ -187,6 +188,20 @@
;; UPDATE
+(define (update-nutrient-measurement! nm)
+ (define id
+ (or (nutrient-measurement-id nm)
+ (raise-argument-error 'update-nutrient-measurement! "db-id?" (nutrient-measurement-id nm))))
+ (with-tx
+ (query-exec (current-conn)
+ (update nutrient_measurements
+ #:set [measurement_date ,(nutrient-measurement-measurement-date nm)]
+ #:where [= id ,id]))
+ (define nvs-id
+ (query-value (current-conn)
+ (select id #:from nutrient_value_sets #:where [= nutrient_measurement_id ,id])))
+ (update-nutrient-values! (current-conn) nvs-id (nutrient-measurement-nutrient-values nm))))
+
;; DELETE
(define (delete-nutrient-measurement! nm-or-id)
diff --git a/views.rkt b/views.rkt
index 3544474..2ffce4c 100644
--- a/views.rkt
+++ b/views.rkt
@@ -9,6 +9,7 @@
new-measurement-page
new-rotation-page
new-fertilizer-page
+ edit-measurement-page
edit-fertilizer-page
show-measurement-page
show-rotation-page
@@ -207,6 +208,11 @@
;; Edit
+(define (edit-measurement-page nm)
+ (form-page-template "Modifier le relevé"
+ "/ferti/measurements/update"
+ (measurements-formlet #:value nm)))
+
(define (edit-fertilizer-page fp)
(form-page-template "Modifier intrant" "/ferti/fertilizers/update" (fertilizer-formlet #:value fp)))
Copyright 2019--2026 Marius PETER