more progress on cash flow.
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
(def cell (r/adapt-react-class js/Recharts.Cell))
|
||||
(def tool-tip (r/adapt-react-class js/Recharts.Tooltip))
|
||||
|
||||
(def colors ["hsl(171, 100%, 41%)" "hsl(217, 71%, 53%)" "hsl(141, 71%, 48%)" "hsl(48, 100%, 67%)" "hsl(348, 100%, 61%)" "hsl(217, 71%, 53%)"])
|
||||
(def colors ["hsl(171, 100%, 41%)" "hsl(217, 71%, 53%)" "hsl(141, 71%, 48%)" "hsl(48, 100%, 67%)" "hsl(348, 100%, 61%)" "hsl(217, 71%, 53%)" "hsl(141, 53%, 53%)"])
|
||||
(def light-colors ["hsl(171, 60%, 80%)" "hsl(217, 71%, 53%)" "hsl(141, 71%, 48%)" "hsl(48, 100%, 67%)" "hsl(348, 100%, 61%)" "hsl(217, 71%, 53%)"])
|
||||
|
||||
(defn make-pie-chart
|
||||
@@ -61,7 +61,10 @@
|
||||
:on-click redirect-fn}]
|
||||
[bar {:dataKey "invoices" :fill (get colors 3) :stackId "a" :name "Invoices"
|
||||
:on-click redirect-fn}]
|
||||
|
||||
[bar {:dataKey "credits" :fill (get colors 2) :stackId "a" :name "Upcoming Credits"
|
||||
:on-click redirect-fn}]
|
||||
[bar {:dataKey "debits" :fill (get colors 4) :stackId "a" :name "Upcoming Debits"
|
||||
:on-click redirect-fn}]
|
||||
[x-axis {:dataKey "name"}]
|
||||
[y-axis]
|
||||
[legend]])
|
||||
@@ -98,37 +101,51 @@
|
||||
(fn [db]
|
||||
(::top-expense-categories db)))
|
||||
|
||||
(defn sum-by-date [pairs]
|
||||
(reduce
|
||||
(fn [result [date amount]]
|
||||
(let [due (if (t/before? date (local-now))
|
||||
(local-now)
|
||||
date)]
|
||||
(update result (date->str due)
|
||||
(fn [r] (+ (or r 0.0) (js/parseFloat amount))))))
|
||||
{}
|
||||
pairs))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::cash-flow
|
||||
(fn [db]
|
||||
(let [{:keys [outstanding-payments beginning-balance invoices-due-soon]} (::cash-flow db)
|
||||
invoices-due-soon (reduce
|
||||
(fn [result invoice]
|
||||
(let [due (if (t/before? (:due invoice) (local-now))
|
||||
(local-now)
|
||||
(:due invoice))]
|
||||
(update result (date->str due)
|
||||
(fn [r] (+ (or r 0.0) (:outstanding-balance invoice))))))
|
||||
{}
|
||||
invoices-due-soon)
|
||||
(let [{:keys [outstanding-payments beginning-balance invoices-due-soon upcoming-credits upcoming-debits]} (::cash-flow db)
|
||||
invoices-due-soon (sum-by-date (map (fn [i] [(:due i) (:outstanding-balance i)]) invoices-due-soon))
|
||||
upcoming-credits (sum-by-date (map (fn [i] [(:date i) (:amount i)]) upcoming-credits))
|
||||
upcoming-debits (sum-by-date (map (fn [i] [(:date i) (:amount i)]) upcoming-debits))
|
||||
start-date (local-now)
|
||||
effective-balance (- beginning-balance outstanding-payments (invoices-due-soon (date->str start-date) 0.0))
|
||||
]
|
||||
effective-balance (- beginning-balance outstanding-payments (invoices-due-soon (date->str start-date) 0.0))]
|
||||
|
||||
(reverse
|
||||
(reduce
|
||||
(fn [[{:keys [effective-balance] } :as acc] day]
|
||||
(let [invoices-due-today (invoices-due-soon (date->str (t/plus start-date (t/days day))) 0.0)]
|
||||
(fn [[{:keys [effective-balance credits-yesterday] } :as acc] day]
|
||||
(let [invoices-due-today (invoices-due-soon (date->str (t/plus start-date (t/days day))) 0.0)
|
||||
credits-due-today (upcoming-credits (date->str (t/plus start-date (t/days day))) 0.0)
|
||||
debits-due-today (upcoming-debits (date->str (t/plus start-date (t/days day))) 0.0)]
|
||||
(let [today (t/plus start-date (t/days day))]
|
||||
(conj acc
|
||||
{:name (date->str today)
|
||||
:effective-balance (- effective-balance invoices-due-today)
|
||||
:effective-balance (+ (- effective-balance invoices-due-today )
|
||||
debits-due-today
|
||||
credits-yesterday)
|
||||
:credits-yesterday credits-due-today
|
||||
:credits credits-due-today
|
||||
:debits debits-due-today
|
||||
:invoices (- invoices-due-today)
|
||||
:query-params (cemerick.url/map->query {:due-range {:start (date->str today standard)
|
||||
:end (date->str today standard)}})}))))
|
||||
(list {:name (date->str start-date)
|
||||
:effective-balance effective-balance
|
||||
:invoices (- (invoices-due-soon (date->str start-date) 0.0))
|
||||
:credits (upcoming-credits (date->str start-date) 0.0)
|
||||
:credits-yesterday (upcoming-credits (date->str start-date) 0.0)
|
||||
:debits (upcoming-debits (date->str start-date) 0.0)
|
||||
:outstanding-payments (- outstanding-payments)
|
||||
:query-params (cemerick.url/map->query {:due-range {:end (date->str start-date standard)}})})
|
||||
(range 1 7))))))
|
||||
@@ -146,7 +163,11 @@
|
||||
[:name :paid :unpaid]]
|
||||
[:cash-flow
|
||||
{:client-id (:id @(re-frame/subscribe [::subs/client]))}
|
||||
[:beginning-balance :outstanding-payments [:invoices-due-soon [:due :outstanding-balance]]]]]}
|
||||
[:beginning-balance
|
||||
:outstanding-payments
|
||||
[:invoices-due-soon [:due :outstanding-balance]]
|
||||
[:upcoming-credits [:date :amount]]
|
||||
[:upcoming-debits [:date :amount]]]]]}
|
||||
:on-success [::received]}}))
|
||||
|
||||
(defn home-content []
|
||||
|
||||
Reference in New Issue
Block a user