(cloud) leaving an artificat for speending up p&l later
This commit is contained in:
@@ -189,6 +189,86 @@
|
|||||||
#(roll-up-until (lookup-account %) (all-ledger-entries %) (coerce/to-date end) (coerce/to-date start) )
|
#(roll-up-until (lookup-account %) (all-ledger-entries %) (coerce/to-date end) (coerce/to-date start) )
|
||||||
client-ids)})))})))
|
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]
|
(defn profit-and-loss-pdf [context args value]
|
||||||
(let [data (get-profit-and-loss context args value)
|
(let [data (get-profit-and-loss context args value)
|
||||||
result (print-pnl (:id context) args data)]
|
result (print-pnl (:id context) args data)]
|
||||||
|
|||||||
Reference in New Issue
Block a user