diff --git a/src/clj/auto_ap/ledger.clj b/src/clj/auto_ap/ledger.clj index 0d7d794c..bef3e8c6 100644 --- a/src/clj/auto_ap/ledger.clj +++ b/src/clj/auto_ap/ledger.clj @@ -4,15 +4,54 @@ (defonce report-queue (d/tx-report-queue (d/connect uri) ) ) -(let [transaction (.peek report-queue)] +(defn infer-entity [[_ changes]] + (let [namespaces (->> changes + (map :a) + (map namespace) + set)] + + (cond (namespaces "invoice" ) :invoice + (namespaces "invoice-expense-account" ) :invoice-expense-account + :else nil))) + +(defmulti entity-change->ledger infer-entity ) + +(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)) + }) + ) + +(defmethod entity-change->ledger :invoice-expense-account + [[entity changes]] + nil + ) + +(defmethod entity-change->ledger nil + [[entity changes]] + nil) + +#_(defn entity-change->ledger [[entity-id changes]] + [entity-id (infer-entity changes)]) + +(let [transaction (.peek report-queue) + db (:db-after transaction)] (->> (:tx-data transaction) - (map (fn [x] - (.getY x) - (println id))) - )) - - - - + (map (fn [^datomic.db.Datum x] + {:e (:e x) + :a (d/ident db (:a x)) + :v (:v x) + :added (:added x)})) + (group-by :e) + (map entity-change->ledger)))