makes balance sheet with multiple dates easy.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user