tweak for cash flow

This commit is contained in:
Bryce Covert
2022-12-12 14:05:57 -08:00
parent 89c32a95fa
commit e88f015d1d
3 changed files with 116 additions and 57 deletions

View File

@@ -136,6 +136,12 @@
(defn aggregate-accounts [pnl-data]
(reduce (fnil + 0.0) 0.0 (map :amount (:data pnl-data))))
(defn aggregate-credits [pnl-data]
(reduce (fnil + 0.0) 0.0 (map :credits (:data pnl-data))))
(defn aggregate-debits [pnl-data]
(reduce (fnil + 0.0) 0.0 (map :debits (:data pnl-data))))
(defn best-category [a]
(->> flat-categories
(filter (fn [[category start end]]
@@ -228,7 +234,6 @@
:bold true}]
(map
(fn [p]
(println "FILTERS" (:filters p))
(merge
{:format :dollar
:value (aggregate-accounts p)
@@ -238,6 +243,35 @@
cell-args))
pnl-datas)))
(defn cashflow-subtotal-by-column-row [pnl-datas title & [cell-args]]
(into [{:value title
:bold true}]
(mapcat
(fn [p]
[
(merge
{:format :dollar
:value (aggregate-credits p)
:filters (when (:numeric-code (:filters p)) ;; don't allow filtering when you don't at least filter numeric codes
(:filters p))}
(:cell-args p)
cell-args)
(merge
{:format :dollar
:value (aggregate-debits p)
:filters (when (:numeric-code (:filters p)) ;; don't allow filtering when you don't at least filter numeric codes
(:filters p))}
(:cell-args p)
cell-args)
(merge
{:format :dollar
:value (aggregate-accounts p)
:filters (when (:numeric-code (:filters p)) ;; don't allow filtering when you don't at least filter numeric codes
(:filters p))}
(:cell-args p)
cell-args)])
pnl-datas)))
(defn calc-percent-of-sales [table pnl-datas]
(let [sales (map
(fn [p]
@@ -383,7 +417,8 @@
:rows (combine-tables pnl-datas table percent-of-sales deltas)}))
(defn detail-rows [pnl-datas grouping title]
(defn detail-rows
[pnl-datas grouping title]
(let [pnl-datas (map #(filter-categories % [grouping])
pnl-datas)
individual-accounts
@@ -472,25 +507,75 @@
{:header (headers pnl-datas title)
:rows (combine-tables pnl-datas table percent-of-sales deltas)}))
(defn cash-flows-location-detail-table [pnl-datas #_client-datas title prefix]
(defn cash-flow-detail-rows
[pnl-datas grouping title]
(let [pnl-datas (map #(filter-categories % [grouping])
pnl-datas)
individual-accounts
(for [[grouping-name from to] (groupings grouping)
:let [pnl-datas (map #(filter-numeric-code % from to)
pnl-datas)
account-codes (used-accounts pnl-datas)]
:when (seq account-codes)
row (-> [(into [{:value (str "---" grouping-name "---")}]
(map
(fn [p]
(assoc (:cell-args p) :value "" :format ""))
pnl-datas)
)]
(into (for [{:keys [numeric-code name]} account-codes]
(into [{:value name}]
(mapcat
(fn [p]
(let [pnl-data (-> p (filter-numeric-code numeric-code numeric-code))]
[(merge
{:format :dollar
:filters (:filters pnl-data)
:value (aggregate-credits pnl-data)}
(:cell-args p))
(merge
{:format :dollar
:filters (:filters pnl-data)
:value (aggregate-debits pnl-data)}
(:cell-args p))
(merge
{:format :dollar
:filters (:filters pnl-data)
:value (aggregate-accounts pnl-data)}
(:cell-args p))]))
pnl-datas))))
(conj (cashflow-subtotal-by-column-row pnl-datas "" {:border [:top]})))]
row)]
(-> [(into [{:value title
:bold true}]
(map
(fn [p]
(assoc (:cell-args p) :value "" :format ""))
pnl-datas))]
(into individual-accounts)
(conj (cashflow-subtotal-by-column-row pnl-datas title)))))
(defn cash-flows-table [pnl-datas #_client-datas title prefix]
(let [table (-> []
(into (detail-rows pnl-datas
(into (cash-flow-detail-rows pnl-datas
:operating-activities
(str prefix " Operating Activities")))
(into (detail-rows pnl-datas
(into (cash-flow-detail-rows pnl-datas
:investment-activities
(str prefix " Investment Activities")))
(into (detail-rows pnl-datas
(into (cash-flow-detail-rows pnl-datas
:financing-activities
(str prefix " Financing Activities")))
(into (detail-rows pnl-datas
(into (cash-flow-detail-rows pnl-datas
:bottom-line
(str prefix " Bottom Line"))))
percent-of-sales (calc-percent-of-sales table pnl-datas)
deltas (into [] (calc-deltas table))]
{:header (headers pnl-datas title)
(str prefix " Bottom Line"))))]
{:header [[{:value "Account"}
{:value "Increases"}
{:value "Decreases"}
{:value "Total"}]]
:rows table}))
(defn warning-message [pnl-data]
@@ -566,27 +651,14 @@
set)]
{:warning (warning-message pnl-data)
:details
(doall (if (-> pnl-data :args :column-per-location)
[(cash-flows-location-detail-table (mapcat identity (for [[period i] (map vector (-> pnl-data :args :periods ) (range))]
(concat
(for [[client-id location] (client-locations pnl-data)]
(-> pnl-data
(filter-client client-id)
(filter-period period)
(zebra i)))
[(-> pnl-data
(filter-period period)
(zebra i))])))
"All location Detail"
"")]
(for [client-id client-ids]
(cash-flows-location-detail-table (for [[period i] (map vector (-> pnl-data :args :periods ) (range))]
(-> pnl-data
(filter-client client-id)
(filter-period period)
(zebra i)))
(str (-> pnl-data :clients-by-id (get client-id)) " Detail")
""))))}))
(doall (for [client-id client-ids]
(cash-flows-table (for [[period i] (map vector (-> pnl-data :args :periods ) (range))]
(-> pnl-data
(filter-client client-id)
(filter-period period)
(zebra i)))
(str (-> pnl-data :clients-by-id (get client-id)) " Detail")
"")))}))
(defn balance-sheet-headers [pnl-data]