Makes cash flow report match closely to ben's recommendations

This commit is contained in:
2023-02-06 13:25:39 -08:00
parent 9ab70b869b
commit 32b5ff1caa
2 changed files with 81 additions and 30 deletions

View File

@@ -233,19 +233,17 @@
(defn find-conflicting [{:keys [:invoice/invoice-number :invoice/vendor :invoice/client :db/id]}] (defn find-conflicting [{:keys [:invoice/invoice-number :invoice/vendor :invoice/client :db/id]}]
(->> (d/query (->> (d/query
(cond-> {:query {:find [(list 'pull '?e default-read)] (cond-> {:query {:find [(list 'pull '?e default-read)]
:in ['$ '?invoice-number '?vendor '?client '?invoice-id] :in ['$ '?invoice-number '?vendor '?client '?invoice-id]
:where '[[?e :invoice/invoice-number ?invoice-number] :where '[[?e :invoice/invoice-number ?invoice-number]
[?e :invoice/vendor ?vendor] [?e :invoice/vendor ?vendor]
[?e :invoice/client ?client] [?e :invoice/client ?client]
(not [?e :invoice/status :invoice-status/voided]) (not [?e :invoice/status :invoice-status/voided])
[(not= ?e ?invoice-id)]]} [(not= ?e ?invoice-id)]]}
:args [(d/db (d/connect uri)) invoice-number vendor client (or id 0)]}))
:args [(d/db (d/connect uri)) invoice-number vendor client (or id 0)]}))
(map first) (map first)
(map <-datomic))) (map <-datomic)))

View File

@@ -73,18 +73,39 @@
["97000 Taxes" 97000 97999] ["97000 Taxes" 97000 97999]
["98000 Other Expenses" 98000 98999]] ["98000 Other Expenses" 98000 98999]]
:operating-activities [["Accounts Payable" 21000 27999 :add] :operating-activities [
["Accounts Receivable" 12200 12899 :subtract] ;; BEN EDIT STARTING HERE
["CCP" 12000 12199 :subtract] ["21000-24000 Accounts Payable" 21000 23999 :add]
["Receipts Split" 12900 12999 :subtract] ["25000-28000 Accounts Payable" 25000 27999 :add]
["Depreciation Expense" 96000 96999 :add] ["24000-25000 Accrual Liabilities" 24000 24999 :add]
["Inventory" 13000 13999 :subtract] ["12000-13000 Accounts Receivable" 12000 13000 :subtract]
["96000-97000 Depreciation Expense" 96000 96999 :add]
["13000-15000 Inventory" 13000 14999 :subtract]
;; BEN ENDING HERE
] ]
:investment-activities [["14000-18000 Investments" 14000 17999 :subtract]] :investment-activities [
:financing-activities [["Owner's Distributions" 34000 35999 :subtract]
["Owner's Contributions" 33000 33999 :add] ;; BEN EDIT STARTING HERE
["Loans" 28000 28599 :add]]}) ["15000-18000 Investments" 15000 17999 :subtract]
;; BEN ENDING HERE
]
:financing-activities [
;; BEN EDIT STARTING HERE
["30000-33000 Other Equity Accounts" 30000 32999 :subtract]
["33000-34000 Owner's Contributions" 33000 33999 :subtract]
["34000-35000 Owner's Distributions" 34000 34999 :subtract]
["35000-36000 Retained Earnings" 35000 35999 :subtract]
["28000-29000 Loans (payable)" 28000 28999 :add]
;; BEN ENDING HERE
]
:cash [
;; BEN EDIT STARTING HERE
["11000-11400 Bank Accounts / Cash" 11000 11399 :add]
;; BEN ENDING HERE
]})
(def cashflow-aggregation (def cashflow-aggregation
(->> (select-keys groupings [:operating-activities :investment-activities :financing-activities]) (->> (select-keys groupings [:operating-activities :investment-activities :financing-activities])
@@ -530,6 +551,33 @@
{:header (headers pnl-datas title) {:header (headers pnl-datas title)
:rows (combine-tables pnl-datas table percent-of-sales deltas)})) :rows (combine-tables pnl-datas table percent-of-sales deltas)}))
(defn cash-flow-headers [[pnl-data :as pnl-datas] header-title]
(let [big-header (into [{:value header-title
:bold true}]
(map-indexed (fn [i p]
(cond-> {:value
(str (date->str (:start p))
" - "
(date->str (:end p)))
:colspan 3
:align :center
:bold true}
(odd? i) (assoc :bg-color [240 240 240])))
(:periods (:args pnl-data))))
sub-header (into [{:value "Account"}]
(mapcat
(fn [p]
[(merge {:value "Increases"
:align :right}
(:cell-args p))
(merge {:value "Decreases"
:align :right}
(:cell-args p))
(merge {:value "+/- in Cash"
:align :right}
(:cell-args p))])
pnl-datas))]
[big-header sub-header]))
(defn cash-flow-detail-rows (defn cash-flow-detail-rows
[pnl-datas grouping title] [pnl-datas grouping title]
@@ -542,9 +590,11 @@
account-codes (used-accounts pnl-datas)] account-codes (used-accounts pnl-datas)]
:when (seq account-codes) :when (seq account-codes)
row (-> [(into [{:value (str "---" grouping-name "---")}] row (-> [(into [{:value (str "---" grouping-name "---")}]
(map (mapcat
(fn [p] (fn [p]
(assoc (:cell-args p) :value "" :format "")) [(assoc (:cell-args p) :value "" :format "")
(assoc (:cell-args p) :value "" :format "")
(assoc (:cell-args p) :value "" :format "")])
pnl-datas) pnl-datas)
)] )]
(into (for [{:keys [numeric-code name]} account-codes] (into (for [{:keys [numeric-code name]} account-codes]
@@ -592,9 +642,11 @@
row)] row)]
(-> [(into [{:value title (-> [(into [{:value title
:bold true}] :bold true}]
(map (mapcat
(fn [p] (fn [p]
(assoc (:cell-args p) :value "" :format "")) [(assoc (:cell-args p) :value "" :format "")
(assoc (:cell-args p) :value "" :format "")
(assoc (:cell-args p) :value "" :format "")])
pnl-datas))] pnl-datas))]
(into individual-accounts) (into individual-accounts)
(conj (cashflow-subtotal-by-column-row pnl-datas title))))) (conj (cashflow-subtotal-by-column-row pnl-datas title)))))
@@ -616,15 +668,16 @@
:financing-activities :financing-activities
(str prefix " Financing Activities"))) (str prefix " Financing Activities")))
(into (cash-flow-detail-rows pnl-datas
:cash
(str prefix " Bank Accounts / Cash")))
(conj (cashflow-subtotal-by-column-row (map #(-> % (conj (cashflow-subtotal-by-column-row (map #(-> %
(filter-categories [:operating-activities :investment-activities :financing-activities]) (filter-categories [:operating-activities :investment-activities :financing-activities :cash])
#_(negate #{:cogs :payroll :controllable :fixed-overhead :ownership-controllable})) #_(negate #{:cogs :payroll :controllable :fixed-overhead :ownership-controllable}))
pnl-datas) pnl-datas)
"Change in Cash and Cash Equivalents")))] "Change in Cash and Cash Equivalents")))]
{:header [[{:value "Account"} {:header (cash-flow-headers pnl-datas "Cash Flow")
{:value "Increases"}
{:value "Decreases"}
{:value "Total"}]]
:rows table})) :rows table}))
(defn warning-message [pnl-data] (defn warning-message [pnl-data]