(cloud) leaving an artificat for speending up p&l later

This commit is contained in:
2023-04-03 12:34:50 -07:00
parent 2a3c538849
commit 5293b7f3e6

View File

@@ -189,6 +189,86 @@
#(roll-up-until (lookup-account %) (all-ledger-entries %) (coerce/to-date end) (coerce/to-date start) )
client-ids)})))})))
;; profit and loss based off of index
#_(defn get-profit-and-loss [context args _]
(let [client-id (:client_id args)
client-ids (or (some-> client-id vector)
(filter identity (:client_ids args)))
_ (when (not (seq client-ids))
(throw (ex-info "Please select a client." {:validation-error "Please select a client."})))
_ (doseq [client-id client-ids]
(assert-can-see-client (:id context) client-id))
_ (when (and (:include_deltas args)
(:column_per_location args))
(throw (ex-info "Please select one of 'Include deltas' or 'Column per location'" {:validation-error "Please select one of 'Include deltas' or 'Column per location'"})))
db (dc/db conn)
all-used-account-locations (dc/q '[:find ?c ?a ?l
:in $ [?c ...]
:where
(or-join [?c ?a ?l]
(and
[?a :account/numeric-code]
(not [?a :account/location])
[?c :client/locations ?l])
(and
[?a :account/numeric-code]
[?a :account/location ?l]
[?c :client/locations ?l])
(and
[?c :client/bank-accounts ?a]
[(ground "A") ?l]))]
(dc/db conn)
client-ids)
lookup-account (->> client-ids
(map (fn [client-id]
[client-id (build-account-lookup client-id)]))
(into {}))]
(->graphql
{:periods
(->> (:periods args)
(mapv (fn [{:keys [start end]}]
(let [start (coerce/to-date start)
end (coerce/to-date end)]
{:accounts (mapcat
(fn [[c a l]]
(let [start-point (->> (dc/index-pull db
{:index :avet
:selector [:db/id :journal-entry-line/running-balance :journal-entry-line/client+account+location+date]
:start [:journal-entry-line/client+account+location+date [c a l start]]
:reverse true
:limit 1})
(take-while (fn [result]
(= [c a l]
(take 3 (:journal-entry-line/client+account+location+date result)))))
(drop-while (fn [{[_ _ _ date] :journal-entry-line/client+account+location+date}]
(>= (compare date start) 0)))
first)
end-point (->> (dc/index-pull db
{:index :avet
:selector [:db/id :journal-entry-line/running-balance :journal-entry-line/client+account+location+date]
:start [:journal-entry-line/client+account+location+date [c a l end]]
:reverse true
:limit 1})
(take-while (fn [result]
(= [c a l]
(take 3 (:journal-entry-line/client+account+location+date result)))))
(take 1)
(drop-while (fn [{[_ _ _ date] :journal-entry-line/client+account+location+date}]
(>= (compare date end) 0)))
first)]
(when end-point
[(merge {:id (str a "-" l)
:location (or l "")
:count 0
:debits 0
:credits 0
:amount (- (or (:journal-entry-line/running-balance end-point) 0.0)
(or (:journal-entry-line/running-balance start-point) 0.0))
}
((lookup-account c) a))])))
all-used-account-locations)}))))})))
(defn profit-and-loss-pdf [context args value]
(let [data (get-profit-and-loss context args value)
result (print-pnl (:id context) args data)]