diff options
| author | Marius Peter <dev@marius-peter.com> | 2025-12-13 22:50:05 +0100 |
|---|---|---|
| committer | Marius Peter <dev@marius-peter.com> | 2025-12-13 22:51:42 +0100 |
| commit | fc64ba9e3f119b3e283bd3750385c477381d549a (patch) | |
| tree | a1db6761bf9a3bdc95b0cc8050f1b7ffc33801ce | |
| parent | 0071a7fdf3c171ffa5a4fb562fd7d29c10251790 (diff) | |
Add measurement editing + updating logic.
| -rw-r--r-- | formlets.rkt | 23 | ||||
| -rw-r--r-- | handlers.rkt | 11 | ||||
| -rw-r--r-- | models/nutrient-measurement.rkt | 15 | ||||
| -rw-r--r-- | views.rkt | 6 |
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) @@ -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))) |