From 0551879b5103001317a3b87b21b11eda45214d45 Mon Sep 17 00:00:00 2001 From: BC Date: Thu, 14 Mar 2019 21:37:29 -0700 Subject: [PATCH] adding general ledger from invoice --- src/clj/auto_ap/ledger.clj | 62 +++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/src/clj/auto_ap/ledger.clj b/src/clj/auto_ap/ledger.clj index bef3e8c6..5194de5a 100644 --- a/src/clj/auto_ap/ledger.clj +++ b/src/clj/auto_ap/ledger.clj @@ -4,7 +4,18 @@ (defonce report-queue (d/tx-report-queue (d/connect uri) ) ) -(defn infer-entity [[_ changes]] +(defn datums->impacted-entity [db [e changes]] + (let [entity (d/pull db '[* {:invoice/_expense-accounts [*]}] e) + namespaces (->> changes + (map :a) + (map namespace) + set)] + + (cond (namespaces "invoice" ) [[:invoice e]] + (namespaces "invoice-expense-account" ) [[:invoice (:db/id (:invoice/_expense-accounts entity))]] + :else nil))) + +(defn infer-entity [_ [_ changes]] (let [namespaces (->> changes (map :a) (map namespace) @@ -14,35 +25,46 @@ (namespaces "invoice-expense-account" ) :invoice-expense-account :else nil))) -(defmulti entity-change->ledger infer-entity ) +(defmulti entity-change->ledger (fn [_ [type]] + type)) (defmethod entity-change->ledger :invoice - [[entity changes]] - (let [added-v (reduce (fn [added-v {:keys [a v added]}] - (if added - (assoc added-v a v) - added-v)) - {} - changes)] - {:general-ledger/source "invoice" - :general-ledger/original-entity entity - :general-ledger/vendor (:invoice/vendor added-v) - :general-ledger/amount (- (:invoice/total added-v)) - }) - ) + [db [type id]] + (println "HI") + (let [entity (d/pull db ['* {:invoice/vendor '[*] :invoice/payment '[*]}] id)] + + (map + (fn [ea] + {:general-ledger/source "invoice" + :general-ledger/client (:invoice/client entity) + :general-ledger/date (:invoice/date entity) + :general-ledger/original-entity (:db/id entity) + :general-ledger/vendor (:db/id (:invoice/vendor entity)) + :general-ledger/amount (- (:invoice-expense-account/amount ea)) + :general-ledger/location (:invoice-expense-account/location ea) + :general-ledger/from-expense-account 2110 + :general-ledger/to-expense-account (:invoice-expense-account/expense-account-id ea) + :general-ledger/cleared (and (< (:invoice/outstanding-balance entity) 0.01) + (every? #(= :payment-status/cleared (:payment/status %)) (:invoice/payments entity)) + )}) + (:invoice/expense-accounts entity)))) (defmethod entity-change->ledger :invoice-expense-account - [[entity changes]] + [db [entity changes]] nil ) (defmethod entity-change->ledger nil - [[entity changes]] + [db [entity changes]] nil) #_(defn entity-change->ledger [[entity-id changes]] [entity-id (infer-entity changes)]) +(defn ledger-entries->transaction [entries] + (into [[:replace-general-ledger (:general-ledger/original-entity (first entries))]] + entries)) + (let [transaction (.peek report-queue) db (:db-after transaction)] (->> (:tx-data transaction) @@ -52,6 +74,10 @@ :v (:v x) :added (:added x)})) (group-by :e) - (map entity-change->ledger))) + (mapcat #(datums->impacted-entity db %)) + (set) + (map #(entity-change->ledger db %)) + (filter seq) + (map ledger-entries->transaction)))