summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Peter <dev@marius-peter.com>2025-12-10 20:47:05 +0100
committerMarius Peter <dev@marius-peter.com>2025-12-10 20:47:05 +0100
commit8020f23b1cefe9ad6cef9bbd47d3879caeba0d0d (patch)
treeed6e055e63a32aa19b4f26a28e3971a65421c702
parent014056f90eb55f36c606374857716072ebba753a (diff)
Add crop requirements logic + views.
-rw-r--r--handlers.rkt9
-rw-r--r--models/crop-requirement.rkt3
-rw-r--r--views.rkt24
3 files changed, 29 insertions, 7 deletions
diff --git a/handlers.rkt b/handlers.rkt
index 179775e..010fe8e 100644
--- a/handlers.rkt
+++ b/handlers.rkt
@@ -10,8 +10,8 @@
"views.rkt"
"formlets.rkt"
"models/user.rkt"
- "models/nutrient.rkt"
"models/nutrient-measurement.rkt"
+ "models/crop-requirement.rkt"
"models/crop-rotation.rkt"
"models/fertilizer-product.rkt"
"services/nnls.rkt")
@@ -27,6 +27,7 @@
[("ferti" "measurements-and-rotations") #:method "get" ferti-measurements-and-rotations]
[("ferti" "recipes" (string-arg)) #:method "get" ferti-recipe]
[("ferti" "fertilizers") #:method "get" ferti-fertilizers]
+ [("ferti" "crop-requirements") #:method "get" ferti-crop-requirements]
;; Nutrient measurements
[("ferti" "measurements" "new") #:method "get" new-measurement]
[("ferti" "measurements" "create") #:method "post" create-measurement]
@@ -71,8 +72,10 @@
(render-page (ferti-recipe-page date-string ferti-recipe)))
(define (ferti-fertilizers _)
- (define fertilizers (get-fertilizer-products))
- (render-page (ferti-fertilizers-page fertilizers)))
+ (render-page (ferti-fertilizers-page (get-fertilizer-products))))
+
+(define (ferti-crop-requirements _)
+ (render-page (ferti-crop-requirements-page (get-crop-requirements))))
;; Nutrient measurements
diff --git a/models/crop-requirement.rkt b/models/crop-requirement.rkt
index 018c6c1..bf61d0d 100644
--- a/models/crop-requirement.rkt
+++ b/models/crop-requirement.rkt
@@ -93,8 +93,7 @@
(define (get-crop-requirement #:id [cr-id #f] #:profile [profile #f])
(define where
(cond
- [(and cr-id profile)
- (scalar-expr-qq (and (= cr.id ,cr-id) (= cr.profile ,profile)))]
+ [(and cr-id profile) (scalar-expr-qq (and (= cr.id ,cr-id) (= cr.profile ,profile)))]
[cr-id (scalar-expr-qq (= cr.id ,cr-id))]
[profile (scalar-expr-qq (= cr.profile ,profile))]
[else (error 'get-crop-requirement "one of #:id or #:profile must be provided")]))
diff --git a/views.rkt b/views.rkt
index 09679cb..bd6b3b9 100644
--- a/views.rkt
+++ b/views.rkt
@@ -5,6 +5,7 @@
ferti-measurements-and-rotations-page
ferti-recipe-page
ferti-fertilizers-page
+ ferti-crop-requirements-page
new-measurement-page
new-rotation-page
new-fertilizer-page
@@ -19,6 +20,7 @@
"models/user.rkt"
"models/nutrient.rkt"
"models/nutrient-measurement.rkt"
+ "models/crop.rkt"
"models/crop-rotation.rkt"
"models/crop-requirement.rkt"
"models/fertilizer-product.rkt")
@@ -89,7 +91,10 @@
(a ((class "nav-link") (aria-current "page") (href "/ferti/measurements-and-rotations"))
"Relevés & Assolements"))
(li ((class "nav-item"))
- (a ((class "nav-link") (aria-current "page") (href "/ferti/fertilizers")) "Intrants"))))
+ (a ((class "nav-link") (aria-current "page") (href "/ferti/fertilizers")) "Intrants"))
+ (li ((class "nav-item"))
+ (a ((class "nav-link") (aria-current "page") (href "/ferti/crop-requirements"))
+ "Cultures"))))
(define (ferti-index-page)
(ferti-template
@@ -127,7 +132,7 @@
(href ,(format "/ferti/recipes/~a" (crop-rotation-date maybe-rotation))))
"Consulter")
"—")))))))
- (ferti-template `((h2 () "Relevés & Assolements")
+ (ferti-template `((h2 () "Relevés et Assolements")
(div ((class "btn-group mb-3"))
(a ((class "btn btn-primary") [href "/ferti/measurements/new"])
"Ajouter un relevé"))
@@ -164,6 +169,21 @@
"Ajouter un intrant")
,table)))
+(define (ferti-crop-requirements-page crop-requirements)
+ (define table
+ `(table ((class "table table-striped"))
+ (tr (th "Culture") (th "Profil"))
+ ,@(for/list ([cr crop-requirements])
+ (define crop-id (crop-requirement-crop-id cr))
+ `(tr (td ,(if crop-id
+ (string-titlecase (crop-name (get-crop #:id crop-id)))
+ "—"))
+ (td ,(string-titlecase (crop-requirement-profile cr)))))))
+ (ferti-template `((h2 () "Profils de culture")
+ (a ((class "btn btn-primary mb-3") [href "/ferti/crop-requirements/new"])
+ "Ajouter un profil")
+ ,table)))
+
(define (new-measurement-page)
(page-template "Nouveau relevé"
`((h1 ((class "display-1 mb-3")) "Nouveau relevé")
Copyright 2019--2026 Marius PETER