build a ledger from transactions
This commit is contained in:
@@ -3,10 +3,13 @@
|
||||
[auto-ap.datomic :refer [uri]]))
|
||||
|
||||
(defn get-graphql [args]
|
||||
(->> (d/q '[:find (pull ?e [* {:general-ledger/client [:client/name :client/code :db/id]
|
||||
:general-ledger/vendor [:vendor/name :db/id]
|
||||
(->> (d/q '[:find (pull ?e [* {:journal-entry/client [:client/name :client/code :db/id]
|
||||
:journal-entry/vendor [:vendor/name :db/id]
|
||||
:journal-entry/line-items [* {:journal-entry-line/account [*
|
||||
{:account/type [*]}]}]
|
||||
|
||||
}])
|
||||
:where [?e :general-ledger/original-entity]]
|
||||
:where [?e :journal-entry/original-entity]]
|
||||
(d/db (d/connect uri)))
|
||||
(map first)))
|
||||
|
||||
|
||||
@@ -12,8 +12,11 @@
|
||||
|
||||
(cond (namespaces "invoice" ) [[:invoice e]]
|
||||
(namespaces "invoice-expense-account" ) [[:invoice (:db/id (:invoice/_expense-accounts entity))]]
|
||||
(namespaces "transaction" ) [[:transaction e]]
|
||||
:else nil)))
|
||||
|
||||
|
||||
|
||||
(defn infer-entity [_ [_ changes]]
|
||||
(let [namespaces (->> changes
|
||||
(map :a)
|
||||
@@ -53,6 +56,29 @@
|
||||
(every? #(= :payment-status/cleared (:payment/status %)) (:invoice/payments entity))
|
||||
)})))
|
||||
|
||||
(defmethod entity-change->ledger :transaction
|
||||
[db [type id]]
|
||||
(let [entity (d/pull db ['* {:transaction/vendor '[*] :transaction/client '[*] :transaction/account '[*]}] id)]
|
||||
(remove-nils
|
||||
{:journal-entry/source "transaction"
|
||||
:journal-entry/client (:db/id (:transaction/client entity))
|
||||
:journal-entry/date (:transaction/date entity)
|
||||
:journal-entry/original-entity (:db/id entity)
|
||||
:journal-entry/vendor (:db/id (:transaction/vendor entity))
|
||||
:journal-entry/amount (Math/abs (:transaction/amount entity))
|
||||
|
||||
:journal-entry/line-items [{:journal-entry-line/account (:db/id (:transaction/account entity))
|
||||
:journal-entry-line/location "HQ"
|
||||
:journal-entry-line/debit (Math/abs (:transaction/amount entity))}
|
||||
|
||||
{:journal-entry-line/account (:db/id (:transaction/bank-account entity))
|
||||
:journal-entry-line/location "HQ"
|
||||
:journal-entry-line/credit (Math/abs (:transaction/amount entity))}
|
||||
]
|
||||
#_#_:general-ledger/from-expense-account 2110
|
||||
#_#_:general-ledger/to-expense-account (:invoice-expense-account/expense-account-id ea)
|
||||
:journal-entry/cleared true})))
|
||||
|
||||
(defmethod entity-change->ledger :invoice-expense-account
|
||||
[db [entity changes]]
|
||||
nil
|
||||
@@ -70,8 +96,9 @@
|
||||
entries))
|
||||
|
||||
(defn process-one [report-queue]
|
||||
(println report-queue)
|
||||
|
||||
(let [transaction (.take report-queue)
|
||||
_ (println "processing transaction" transaction)
|
||||
db (:db-after transaction)
|
||||
affected-entities (->> (:tx-data transaction)
|
||||
(map (fn [^datomic.db.Datum x]
|
||||
@@ -85,16 +112,18 @@
|
||||
d-txs (->> affected-entities
|
||||
(map #(entity-change->ledger db %))
|
||||
(filter seq))
|
||||
retractions (map (fn [[_ e]] [:replace-general-ledger e]) affected-entities)]
|
||||
retractions (map (fn [[_ e]] [:db/retractEntity [:journal-entry/original-entity e]]) affected-entities)]
|
||||
|
||||
(when (seq retractions)
|
||||
(println "Retracting " retractions)
|
||||
@(d/transact (d/connect uri) retractions))
|
||||
(println retractions d-txs)
|
||||
|
||||
|
||||
(doseq [d-tx d-txs]
|
||||
(println "Transacting")
|
||||
(clojure.pprint/pprint d-tx)
|
||||
#_(println "updating general-ledger " d-tx)
|
||||
@(d/transact (d/connect uri) d-tx))))
|
||||
@(d/transact (d/connect uri) [d-tx]))))
|
||||
|
||||
(defn process-all []
|
||||
(while (not (Thread/interrupted))
|
||||
@@ -105,8 +134,3 @@
|
||||
#_(process-one (d/tx-report-queue (d/connect uri) ))
|
||||
|
||||
#_(process-all)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user