summaryrefslogtreecommitdiff
path: root/views.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'views.rkt')
-rw-r--r--views.rkt142
1 files changed, 71 insertions, 71 deletions
diff --git a/views.rkt b/views.rkt
index b661499..7cd7b6f 100644
--- a/views.rkt
+++ b/views.rkt
@@ -84,80 +84,80 @@
;; Pages
-(define (ferti-page ferti-recipe latest-measurement-hash latest-target-hash measurements)
+(define (ferti-page fertilizer-recipe latest-measurement-hash latest-target-hash measurements)
(page-template
"Ferti"
`((h1 ((class "display-1 mb-3")) "Ferti")
- ;;;;;;;;
- ;; Ferti
- ;;;;;;;;
- (h2 () "Recette")
- ,(if (ormap (λ (pair) (not (zero? (cdr pair)))) ferti-recipe)
- `(table ((class "table"))
- (tr (th "Intrant") (th ((class "text-end")) "Quantité (g/L)"))
- ,@(for/list ([fertilizer-amount ferti-recipe]
- #:when (not (zero? (cdr fertilizer-amount))))
- (match-define (cons fertilizer amount) fertilizer-amount)
- `(tr (td () ,(fertilizer-name fertilizer))
- (td ((class "text-end font-monospace")) ,(round 2 amount)))))
- `(p "La recette Ferti requiert au moins un relevé et une cible."))
- ;;;;;;;;;
- ;; Cibles
- ;;;;;;;;;
- (h2 () "Dernière Cible")
- (a ((class "btn btn-primary mb-3") [href "/target/new"]) "Créer une cible")
- (table ((class "table"))
- (tr (th "Nutriment")
- (th ((class "text-end")) "Dernier Relevé")
- (th ((class "text-end")) "Dernière Cible")
- (th ((class "text-end")) "Delta (%)"))
- ,@(for/list ([n (get-nutrients)])
- (define latest-measurement (hash-ref latest-measurement-hash n #f))
- (define latest-target (hash-ref latest-target-hash n #f))
- (define delta-percentage
- (cond
- [(false? latest-target) #f]
- [(zero? latest-target) -100]
- [(zero? latest-measurement) 100]
- [(number? latest-target)
- (* 100 (/ (- latest-target latest-measurement) latest-measurement))]))
- `(tr (td ,(nutrient-name n))
- (td ((class "text-end font-monospace"))
- ,(if latest-measurement
- (round 2 latest-measurement)
- "—"))
- (td ((class "text-end font-monospace"))
- ,(if latest-target
- (round 2 latest-target)
- "—"))
- (td ((class "text-end font-monospace"))
- ,(if delta-percentage
- (round 1 delta-percentage)
- "—")))))
- ;;;;;;;;;;
- ;; Relevés
- ;;;;;;;;;;
- (h2 () "Relevés")
- (a ((class "btn btn-primary mb-3") [href "/measurement/new"]) "Ajouter un relevé")
- (table ((class "table table-striped"))
- (tr (th "Date")
- (th ((class "text-end")) "N")
- (th ((class "text-end")) "P")
- (th ((class "text-end")) "K"))
- ,@(for/list ([m measurements])
- (define measured-on (nutrient-measurement-date m))
- (define-values (n p k)
- (apply values
- (for/list ([nutrient '("Nitrate Nitrogen" "Phosphorus" "Potassium")])
- (define n (get-nutrient #:name nutrient))
- (define mnv (get-nutrient-measurement-value m n))
- (if (real? mnv)
- (round 2 mnv)
- "—"))))
- `(tr (td ,measured-on)
- (td ((class "text-end font-monospace")) ,n)
- (td ((class "text-end font-monospace")) ,p)
- (td ((class "text-end font-monospace")) ,k)))))))
+ ,@(ferti-recipe fertilizer-recipe)
+ ,@(ferti-targets latest-measurement-hash latest-target-hash)
+ ,@(ferti-measurements measurements))))
+
+(define (ferti-recipe ferti-recipe)
+ `((h2 () "Recette")
+ ,(if (ormap (λ (pair) (not (zero? (cdr pair)))) ferti-recipe)
+ `(table ((class "table"))
+ (tr (th "Intrant") (th ((class "text-end")) "Quantité (g/L)"))
+ ,@(for/list ([fertilizer-amount ferti-recipe]
+ #:when (not (zero? (cdr fertilizer-amount))))
+ (match-define (cons fertilizer amount) fertilizer-amount)
+ `(tr (td () ,(fertilizer-name fertilizer))
+ (td ((class "text-end font-monospace")) ,(round 2 amount)))))
+ `(p "La recette Ferti requiert au moins un relevé et une cible."))))
+
+(define (ferti-targets latest-measurement-hash latest-target-hash)
+ `((h2 () "Dernière Cible")
+ (a ((class "btn btn-primary mb-3") [href "/target/new"]) "Créer une cible")
+ (table ((class "table"))
+ (tr (th "Nutriment")
+ (th ((class "text-end")) "Dernier Relevé")
+ (th ((class "text-end")) "Dernière Cible")
+ (th ((class "text-end")) "Delta (%)"))
+ ,@(for/list ([n (get-nutrients)])
+ (define latest-measurement (hash-ref latest-measurement-hash n #f))
+ (define latest-target (hash-ref latest-target-hash n #f))
+ (define delta-percentage
+ (cond
+ [(false? latest-target) #f]
+ [(zero? latest-target) -100]
+ [(zero? latest-measurement) 100]
+ [(number? latest-target)
+ (* 100 (/ (- latest-target latest-measurement) latest-measurement))]))
+ `(tr (td ,(nutrient-name n))
+ (td ((class "text-end font-monospace"))
+ ,(if latest-measurement
+ (round 2 latest-measurement)
+ "—"))
+ (td ((class "text-end font-monospace"))
+ ,(if latest-target
+ (round 2 latest-target)
+ "—"))
+ (td ((class "text-end font-monospace"))
+ ,(if delta-percentage
+ (round 1 delta-percentage)
+ "—")))))))
+
+(define (ferti-measurements measurements)
+ `((h2 () "Relevés")
+ (a ((class "btn btn-primary mb-3") [href "/measurement/new"]) "Ajouter un relevé")
+ (table ((class "table table-striped"))
+ (tr (th "Date")
+ (th ((class "text-end")) "N")
+ (th ((class "text-end")) "P")
+ (th ((class "text-end")) "K"))
+ ,@(for/list ([m measurements])
+ (define measured-on (nutrient-measurement-date m))
+ (define-values (n p k)
+ (apply values
+ (for/list ([nutrient '("Nitrate Nitrogen" "Phosphorus" "Potassium")])
+ (define n (get-nutrient #:name nutrient))
+ (define mnv (get-nutrient-measurement-value m n))
+ (if (real? mnv)
+ (round 2 mnv)
+ "—"))))
+ `(tr (td ,measured-on)
+ (td ((class "text-end font-monospace")) ,n)
+ (td ((class "text-end font-monospace")) ,p)
+ (td ((class "text-end font-monospace")) ,k))))))
(define (new-measurement-page)
(page-template "Nouveau relevé"
Copyright 2019--2026 Marius PETER