tweak for cash flow
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user