adding general ledger from invoice
This commit is contained in:
@@ -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/client (:invoice/client entity)
|
||||||
:general-ledger/original-entity entity
|
:general-ledger/date (:invoice/date entity)
|
||||||
:general-ledger/vendor (:invoice/vendor added-v)
|
:general-ledger/original-entity (:db/id entity)
|
||||||
:general-ledger/amount (- (:invoice/total added-v))
|
: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)))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user