adding general ledger from invoice

This commit is contained in:
BC
2019-03-14 21:37:29 -07:00
parent 7b6eb54e51
commit 0551879b51

View File

@@ -4,7 +4,18 @@
(defonce report-queue (d/tx-report-queue (d/connect uri) ) ) (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 (let [namespaces (->> changes
(map :a) (map :a)
(map namespace) (map namespace)
@@ -14,35 +25,46 @@
(namespaces "invoice-expense-account" ) :invoice-expense-account (namespaces "invoice-expense-account" ) :invoice-expense-account
:else nil))) :else nil)))
(defmulti entity-change->ledger infer-entity ) (defmulti entity-change->ledger (fn [_ [type]]
type))
(defmethod entity-change->ledger :invoice (defmethod entity-change->ledger :invoice
[[entity changes]] [db [type id]]
(let [added-v (reduce (fn [added-v {:keys [a v added]}] (println "HI")
(if added (let [entity (d/pull db ['* {:invoice/vendor '[*] :invoice/payment '[*]}] id)]
(assoc added-v a v)
added-v)) (map
{} (fn [ea]
changes)]
{:general-ledger/source "invoice" {:general-ledger/source "invoice"
:general-ledger/original-entity entity :general-ledger/client (:invoice/client entity)
:general-ledger/vendor (:invoice/vendor added-v) :general-ledger/date (:invoice/date entity)
:general-ledger/amount (- (:invoice/total added-v)) :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 (defmethod entity-change->ledger :invoice-expense-account
[[entity changes]] [db [entity changes]]
nil nil
) )
(defmethod entity-change->ledger nil (defmethod entity-change->ledger nil
[[entity changes]] [db [entity changes]]
nil) nil)
#_(defn entity-change->ledger [[entity-id changes]] #_(defn entity-change->ledger [[entity-id changes]]
[entity-id (infer-entity 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) (let [transaction (.peek report-queue)
db (:db-after transaction)] db (:db-after transaction)]
(->> (:tx-data transaction) (->> (:tx-data transaction)
@@ -52,6 +74,10 @@
:v (:v x) :v (:v x)
:added (:added x)})) :added (:added x)}))
(group-by :e) (group-by :e)
(map entity-change->ledger))) (mapcat #(datums->impacted-entity db %))
(set)
(map #(entity-change->ledger db %))
(filter seq)
(map ledger-entries->transaction)))