makes balance sheet with multiple dates easy.

This commit is contained in:
2024-10-23 09:18:14 -07:00
parent 3da8bf054f
commit f589b24908
2 changed files with 55 additions and 63 deletions

View File

@@ -6,6 +6,7 @@
[auto-ap.time-utils :refer [user-friendly-date]]
[auto-ap.utils :refer [dollars-0? dollars=]]
[clojure.string :as str]
[clj-time.coerce :as coerce]
[auto-ap.time-utils :refer [user-friendly-date]]
)]
:cljs
@@ -17,7 +18,9 @@
(defn date->str [d]
#?(:clj
(atime/unparse-local d atime/normal-date)
(if (inst? d)
(atime/unparse-local (coerce/to-date-time d) atime/normal-date)
(atime/unparse-local d atime/normal-date))
:cljs (au/date->str d au/pretty)))
@@ -786,42 +789,52 @@
(defn balance-sheet-headers [pnl-data]
(cond-> []
(> (count (set (map :client-id (:data pnl-data)))) 1)
(conj (into [{:value "Client"}]
(let [period-count (count (:periods (:args pnl-data)))]
(cond-> []
(> (count (set (map :client-id (:data pnl-data)))) 1)
(conj (into [{:value "Client"}]
(mapcat identity
(for [client (set (map :client-id (:data pnl-data))) ]
(cond-> [{:value (str (-> pnl-data :client-codes (get client)))}]
(mapcat identity
(for [client (set (map :client-id (:data pnl-data))) ]
(cond-> [{:value (str (-> pnl-data :client-codes (get client)))}]
(> (count (:periods (:args pnl-data))) 1)
(into ["" ""]))))))
true
(conj (into [{:value "Period Ending"}]
(mapcat identity
(for [client (set (map :client-id (:data pnl-data))) ]
(cond-> [{:value (date->str (:date (:args pnl-data)))}]
(> (count (:periods (:args pnl-data))) 1)
(into [{:value (date->str (:comparison-date (:args pnl-data)))}
{:value "+/-"}]))))))))
(> period-count 1)
(into (apply concat (repeat (dec period-count) ["" ""]))))))))
true
(conj (into [{:value "Period Ending"}]
(for [client (set (map :client-id (:data pnl-data)))
[index p] (map vector (range) (:periods (:args pnl-data)))
:let [is-first? (= 0 index)
period-date (date->str p)
period-headers (if is-first?
[{:value period-date}]
[{:value period-date}
{:value "+/-"}])]
header period-headers]
header))))))
(defn append-deltas [table]
(->> table
(map (fn [[title & pairs]]
(reduce
(fn [result [ a b]]
(into result
[a b (and (:value a) (:value b)
(number? (:value a)) (number? (:value b))
{:border (:border b)
:format :dollar
:value (- (or (:value a) 0.0)
(or (:value b) 0.0))})]))
[title]
(partition 2 pairs))))))
(map (fn [[title & values]]
(loop [result [title]
previous nil
[current :as values] values]
(if current
(recur
(cond-> result
true (conj current)
(and (:value current) (:value previous)
(number? (:value current)) (number? (:value previous))
(= (:client-id (:filters previous))
(:client-id (:filters current))))
(conj {:border (:border previous)
:format :dollar
:value (- (or (:value current) 0.0)
(or (:value previous) 0.0))}))
current
(rest values))
result))))))
#_(defn summarize-balance-sheet [pnl-data]
(reduce
@@ -889,7 +902,7 @@
(negate #{:cogs :payroll :controllable :fixed-overhead :ownership-controllable}))
pnl-datas)
"Retained Earnings")))
table (if (> (count (:periods pnl-data)) 1)
table (if (> (count (:periods (:args pnl-data))) 1)
(append-deltas table)
table)]
{:warning (warning-message pnl-data)