diff options
| -rw-r--r-- | handlers.rkt | 6 | ||||
| -rw-r--r-- | models/fertilizer-product.rkt | 7 | ||||
| -rw-r--r-- | models/nutrient-measurement.rkt | 7 | ||||
| -rw-r--r-- | models/nutrient-target.rkt | 3 |
4 files changed, 12 insertions, 11 deletions
diff --git a/handlers.rkt b/handlers.rkt index aa380aa..0fe131f 100644 --- a/handlers.rkt +++ b/handlers.rkt @@ -7,7 +7,6 @@ web-server/formlets "views.rkt" "formlets.rkt" - "models/nutrient.rkt" "models/nutrient-measurement.rkt" "models/nutrient-target.rkt" "models/crop-requirement.rkt") @@ -62,7 +61,7 @@ (formlet-process (targets-formlet) req)) (define (average-nutrient-values mix) - (define totals + (define average-values (for/fold ([acc (hash)]) ([pair (in-list mix)]) (define crop-requirement (car pair)) (define percentage (/ (cdr pair) 100)) @@ -73,11 +72,10 @@ (hash-update acc n (λ (old) (+ old (* v percentage))) (λ () (* v percentage)))))) - (for/list ([(k v) (in-hash totals)]) + (for/list ([(k v) (in-hash average-values)]) (cons k v))) (define target-nutrient-values (average-nutrient-values crop-requirement-mix)) - (pretty-display target-nutrient-values) (create-nutrient-target! effective-on target-nutrient-values) (redirect-to "/")) diff --git a/models/fertilizer-product.rkt b/models/fertilizer-product.rkt index abaf77a..bd6bba9 100644 --- a/models/fertilizer-product.rkt +++ b/models/fertilizer-product.rkt @@ -46,7 +46,10 @@ [else (insert #:into fertilizer_products #:set [canonical_name ,canonical-name])])) - (define fp-id (fertilizer-product-id (get-fertilizer-product #:canonical-name canonical-name))) + (define fp-id (query-value (current-conn) + (select id + #:from fertilizer_products + #:where (= canonical_name ,canonical-name)))) (query-exec (current-conn) (insert #:into nutrient_value_sets #:set [fertilizer_product_id ,fp-id])) @@ -87,7 +90,7 @@ n.id n.canonical_name n.formula nv.value_ppm #:from (TableExpr:AST ,joined) - #:order-by canonical_name #:asc)) + #:order-by fp.canonical_name #:asc)) (define rows (query-rows (current-conn) query)) (define by-id (for/fold ([h (hash)]) ([row (in-list rows)]) diff --git a/models/nutrient-measurement.rkt b/models/nutrient-measurement.rkt index 23ee9e3..d3631de 100644 --- a/models/nutrient-measurement.rkt +++ b/models/nutrient-measurement.rkt @@ -21,7 +21,7 @@ [get-nutrient-measurement-values (-> nutrient-measurement? (listof (cons/c nutrient? number?)))] [get-nutrient-measurement-value (-> nutrient-measurement? nutrient? number?)] - [get-latest-nutrient-measurement-value (-> nutrient? number?)] + [get-latest-nutrient-measurement-value (-> nutrient? (or/c number? #f))] [delete-nutrient-measurement! (-> nutrient-measurement? void?)])) (require racket/contract @@ -124,7 +124,7 @@ (cond [(null? rows) #f] [else - ;; Fold all nutrient rows belonging to the single measurement into one struct + ;; Fold all nutrient value rows belonging to the single nutrient measurement into one struct (define the-id #f) (define A #f) (for ([row (in-list rows)]) @@ -134,7 +134,8 @@ (set! A (if A (acc (acc-measured-on A) (cons nv-pair (acc-pairs A))) - (acc measured-on (list nv-pair))))) + (acc measured-on + (list nv-pair))))) (and A (nutrient-measurement the-id (acc-measured-on A) diff --git a/models/nutrient-target.rkt b/models/nutrient-target.rkt index 7ae9003..8611a40 100644 --- a/models/nutrient-target.rkt +++ b/models/nutrient-target.rkt @@ -20,7 +20,6 @@ (or/c nutrient-target? #f))] [get-nutrient-target-values (-> nutrient-target? (listof (cons/c nutrient? number?)))] [get-nutrient-target-value (-> nutrient-target? nutrient? number?)] - ;; The "latest" value is false before the first target is created. [get-latest-nutrient-target-value (-> nutrient? (or/c number? #f))] [delete-nutrient-target! (-> nutrient-target? void?)])) @@ -160,7 +159,7 @@ (select value_ppm #:from (TableExpr:AST ,joined) #:where (= nv.nutrient_id ,(nutrient-id nutrient)) - #:order-by nm.effective_on #:desc + #:order-by nt.effective_on #:desc #:limit 1))) |