diff options
| author | Marius Peter <dev@marius-peter.com> | 2025-11-22 11:23:05 +0100 |
|---|---|---|
| committer | Marius Peter <dev@marius-peter.com> | 2025-11-22 11:23:05 +0100 |
| commit | 239af6f6f547b495598d94c0951afce4ccaf39e8 (patch) | |
| tree | 0c67c18f90a3cf59bd000e6517d91eeb2255accc /views.rkt | |
| parent | 98ae0353f9cc02db73a1365ea0312f16cf585e43 (diff) | |
Break up ferti page components.
Diffstat (limited to 'views.rkt')
| -rw-r--r-- | views.rkt | 142 |
1 files changed, 71 insertions, 71 deletions
@@ -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é" |