[Racket] Ferti hydroponic nutrient solver, redux.
Align URLs to Rails convention.
Changed files
handlers.rkt
@@ -25,24 +25,24 @@
25
25
;; Ferti
26
26
[("ferti" "index") #:method "get" ferti-index]
27
27
[("ferti" "measurements-and-rotations") #:method "get" ferti-measurements-and-rotations]
28
Removed:
[("ferti" "recipe" (string-arg)) #:method "get" ferti-recipe]
28
Added:
[("ferti" "recipes" (string-arg)) #:method "get" ferti-recipe]
29
29
[("ferti" "fertilizers") #:method "get" ferti-fertilizers]
30
30
;; Nutrient measurements
31
Removed:
[("ferti" "measurement" "new") #:method "get" new-measurement]
32
Removed:
[("ferti" "measurement" "create") #:method "post" create-measurement]
33
Removed:
[("ferti" "measurement" (integer-arg)) #:method "get" show-measurement]
34
Removed:
[("ferti" "measurement" "destroy" (integer-arg)) #:method "get" destroy-measurement]
31
Added:
[("ferti" "measurements" "new") #:method "get" new-measurement]
32
Added:
[("ferti" "measurements" "create") #:method "post" create-measurement]
33
Added:
[("ferti" "measurements" (integer-arg)) #:method "get" show-measurement]
34
Added:
[("ferti" "measurements" "destroy" (integer-arg)) #:method "get" destroy-measurement]
35
35
;; Crop rotations
36
Removed:
[("ferti" "rotation" "new") #:method "get" new-rotation]
37
Removed:
[("ferti" "rotation" "new" (string-arg)) #:method "get" new-rotation-for-date]
38
Removed:
[("ferti" "rotation" "create") #:method "post" create-rotation]
39
Removed:
[("ferti" "rotation" (integer-arg)) #:method "get" show-rotation]
40
Removed:
[("ferti" "rotation" "destroy" (integer-arg)) #:method "get" destroy-rotation]
36
Added:
[("ferti" "rotations" "new") #:method "get" new-rotation]
37
Added:
[("ferti" "rotations" "new" (string-arg)) #:method "get" new-rotation-for-date]
38
Added:
[("ferti" "rotations" "create") #:method "post" create-rotation]
39
Added:
[("ferti" "rotations" (integer-arg)) #:method "get" show-rotation]
40
Added:
[("ferti" "rotations" "destroy" (integer-arg)) #:method "get" destroy-rotation]
41
41
;; Fertilizer products
42
Removed:
[("ferti" "fertilizer" "new") #:method "get" new-fertilizer]
43
Removed:
[("ferti" "fertilizer" "create") #:method "post" create-fertilizer]
44
Removed:
[("ferti" "fertilizer" (integer-arg)) #:method "get" show-fertilizer]
45
Removed:
[("ferti" "fertilizer" "destroy" (integer-arg)) #:method "get" destroy-fertilizer]
42
Added:
[("ferti" "fertilizers" "new") #:method "get" new-fertilizer]
43
Added:
[("ferti" "fertilizers" "create") #:method "post" create-fertilizer]
44
Added:
[("ferti" "fertilizers" (integer-arg)) #:method "get" show-fertilizer]
45
Added:
[("ferti" "fertilizers" "destroy" (integer-arg)) #:method "get" destroy-fertilizer]
46
46
;; Default
47
47
[("") #:method "get" index]
48
48
[else fallback]))
views.rkt
@@ -89,18 +89,16 @@
89
89
(a ((class "nav-link") (aria-current "page") (href "/ferti/measurements-and-rotations"))
90
90
"Relevés & Assolements"))
91
91
(li ((class "nav-item"))
92
Removed:
(a ((class "nav-link") (aria-current "page") (href "/ferti/fertilizers")) "Intrants"))
93
Removed:
#;(li ((class "nav-item"))
94
Removed:
(a ((class "nav-link") (aria-current "page") (href "/ferti/recipe")) "Recette Ferti©"))))
92
Added:
(a ((class "nav-link") (aria-current "page") (href "/ferti/fertilizers")) "Intrants"))))
95
93
96
94
(define (ferti-index-page)
97
95
(ferti-template
98
Removed:
`((p "La recette Ferti© est calculée en fonction d'un relevé de nutriments et d'une cible.")
99
Removed:
(div ((class "btn-group-vertical"))
100
Removed:
(a ((class "btn btn-outline-primary") [href "/ferti/measurement/new"]) "Ajouter un relevé")
101
Removed:
(a ((class "btn btn-outline-primary") [href "/ferti/rotation/new"]) "Ajouter un assolement")
102
Removed:
(a ((class "btn btn-outline-primary") [href "/ferti/fertilizer/new"])
103
Removed:
"Ajouter un intrant")))))
96
Added:
`((p "La recette Ferti© est calculée en fonction d'un relevé de nutriments et d'un assolement.")
97
Added:
(div
98
Added:
((class "btn-group-vertical"))
99
Added:
(a ((class "btn btn-outline-primary") [href "/ferti/measurements/new"]) "Ajouter un relevé")
100
Added:
(a ((class "btn btn-outline-primary") [href "/ferti/rotations/new"]) "Ajouter un assolement")
101
Added:
(a ((class "btn btn-outline-primary") [href "/ferti/fertilizers/new"]) "Ajouter un intrant")))))
104
102
105
103
(define (ferti-measurements-and-rotations-page measurements rotations)
106
104
(define (maybe-rotation-for-measurement m)
@@ -110,27 +108,28 @@
110
108
((class "table"))
111
109
(thead (tr (th "Date du relevé") (th "Relevé") (th "Cultures") (th "Recette")))
112
110
(tbody
113
Removed:
,@(for/list ([m measurements])
114
Removed:
(define maybe-rotation (maybe-rotation-for-measurement m))
115
Removed:
`(tr (td ((class "font-monospace")) ,(normal-date (nutrient-measurement-date m)))
116
Removed:
(td (a ((class "btn btn-outline-secondary btn-sm")
117
Removed:
(href ,(format "/ferti/measurement/~a" (nutrient-measurement-id m))))
118
Removed:
"Modifier"))
119
Removed:
(td ,(if maybe-rotation
120
Removed:
`(a ((class "btn btn-outline-secondary btn-sm")
121
Removed:
(href ,(format "/ferti/rotation/~a" (crop-rotation-id maybe-rotation))))
122
Removed:
"Modifier")
123
Removed:
`(a ((class "btn btn-outline-primary btn-sm")
124
Removed:
(href ,(format "/ferti/rotation/new/~a" (nutrient-measurement-date m))))
125
Removed:
"Ajouter")))
126
Removed:
(td ,(if maybe-rotation
127
Removed:
`(a ((class "btn btn-outline-secondary btn-sm")
128
Removed:
(href ,(format "/ferti/recipe/~a" (crop-rotation-date maybe-rotation))))
129
Removed:
"Consulter")
130
Removed:
"—")))))))
111
Added:
,@
112
Added:
(for/list ([m measurements])
113
Added:
(define maybe-rotation (maybe-rotation-for-measurement m))
114
Added:
`(tr (td ((class "font-monospace")) ,(normal-date (nutrient-measurement-date m)))
115
Added:
(td (a ((class "btn btn-outline-secondary btn-sm")
116
Added:
(href ,(format "/ferti/measurements/~a" (nutrient-measurement-id m))))
117
Added:
"Modifier"))
118
Added:
(td ,(if maybe-rotation
119
Added:
`(a ((class "btn btn-outline-secondary btn-sm")
120
Added:
(href ,(format "/ferti/rotations/~a" (crop-rotation-id maybe-rotation))))
121
Added:
"Modifier")
122
Added:
`(a ((class "btn btn-outline-primary btn-sm")
123
Added:
(href ,(format "/ferti/rotations/new/~a" (nutrient-measurement-date m))))
124
Added:
"Ajouter")))
125
Added:
(td ,(if maybe-rotation
126
Added:
`(a ((class "btn btn-outline-secondary btn-sm")
127
Added:
(href ,(format "/ferti/recipes/~a" (crop-rotation-date maybe-rotation))))
128
Added:
"Consulter")
129
Added:
"—")))))))
131
130
(ferti-template `((h2 () "Relevés & Assolements")
132
131
(div ((class "btn-group mb-3"))
133
Removed:
(a ((class "btn btn-primary") [href "/ferti/measurement/new"])
132
Added:
(a ((class "btn btn-primary") [href "/ferti/measurements/new"])
134
133
"Ajouter un relevé"))
135
134
,table)))
136
135
@@ -155,13 +154,13 @@
155
154
(define table
156
155
`(table ((class "table table-striped"))
157
156
(tr (th () "Nom de référence") (th () "Nom de marque"))
158
Removed:
,@
159
Removed:
(for/list ([fertilizer fertilizers])
160
Removed:
`(tr (td (a ([href ,(format "/ferti/fertilizer/~a" (fertilizer-product-id fertilizer))])
161
Removed:
,(fertilizer-product-name fertilizer)))
162
Removed:
(td ,(or (fertilizer-brand-name fertilizer) "—"))))))
157
Added:
,@(for/list ([fertilizer fertilizers])
158
Added:
`(tr (td (a ([href
159
Added:
,(format "/ferti/fertilizers/~a" (fertilizer-product-id fertilizer))])
160
Added:
,(fertilizer-product-name fertilizer)))
161
Added:
(td ,(or (fertilizer-brand-name fertilizer) "—"))))))
163
162
(ferti-template `((h2 () "Intrants") (a ((class "btn btn-primary mb-3") [href
164
Removed:
"/ferti/fertilizer/new"])
163
Added:
"/ferti/fertilizers/new"])
165
164
"Ajouter un intrant")
166
165
,table)))
167
166
@@ -198,7 +197,7 @@
198
197
(page-template title
199
198
`((h1 ((class "display-1 mb-3")) ,title)
200
199
(a ((class "btn btn-danger")
201
Removed:
[href ,(format "/ferti/measurement/destroy/~a" (nutrient-measurement-id nm))])
200
Added:
[href ,(format "/ferti/measurements/destroy/~a" (nutrient-measurement-id nm))])
202
201
"Supprimer relevé")
203
202
,table)))
204
203
@@ -213,12 +212,12 @@
213
212
`(tr (td ,(crop-requirement-profile requirement))
214
213
(td ((class "text-end font-monospace"))
215
214
,(round 2 requirement-proportion)))))))
216
Removed:
(page-template
217
Removed:
title
218
Removed:
`((h1 ((class "display-1 mb-3")) ,title)
219
Removed:
(a ((class "btn btn-danger") [href ,(format "/ferti/rotation/destroy/~a" (crop-rotation-id cr))])
220
Removed:
"Supprimer assolement")
221
Removed:
,table)))
215
Added:
(page-template title
216
Added:
`((h1 ((class "display-1 mb-3")) ,title)
217
Added:
(a ((class "btn btn-danger")
218
Added:
[href ,(format "/ferti/rotations/destroy/~a" (crop-rotation-id cr))])
219
Added:
"Supprimer assolement")
220
Added:
,table)))
222
221
223
222
(define (show-fertilizer-page fp)
224
223
(define title (fertilizer-product-name fp))
@@ -234,7 +233,7 @@
234
233
(page-template title
235
234
`((h1 ((class "display-1 mb-3")) ,title)
236
235
(a ((class "btn btn-danger")
237
Removed:
[href ,(format "/ferti/fertilizer/destroy/~a" (fertilizer-product-id fp))])
236
Added:
[href ,(format "/ferti/fertilizers/destroy/~a" (fertilizer-product-id fp))])
238
237
"Supprimer")
239
238
,table)))
240
239