diff --git a/src/clj/auto_ap/datomic.clj b/src/clj/auto_ap/datomic.clj index e74f0764..224d2390 100644 --- a/src/clj/auto_ap/datomic.clj +++ b/src/clj/auto_ap/datomic.clj @@ -12,9 +12,9 @@ [clj-time.core :as time] [clj-time.coerce :as coerce])) -#_(def uri "datomic:sql://invoices?jdbc:postgresql://database:5432/datomic?user=datomic&password=datomic") +(def uri "datomic:sql://invoices?jdbc:postgresql://database:5432/datomic?user=datomic&password=datomic") -(def uri "datomic:mem://datomic-transactor:4334/invoice") +#_(def uri "datomic:mem://datomic-transactor:4334/invoice") (defn create-database [] (d/create-database uri)) diff --git a/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj b/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj index 4d74b9a6..ef86c976 100644 --- a/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj +++ b/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj @@ -384,6 +384,11 @@ :db/cardinality :db.cardinality/one :db/doc "Status of a transaction"} + {:db/ident :transaction/matched-rule + :db/valueType :db.type/ref + :db/cardinality :db.cardinality/one + :db/doc "The rule that this transaction matched"} + {:db/ident :transaction-rule/transaction-approval-status :db/valueType :db.type/ref :db/cardinality :db.cardinality/one diff --git a/src/clj/auto_ap/datomic/transaction_rules.clj b/src/clj/auto_ap/datomic/transaction_rules.clj index 75211d3a..8998b743 100644 --- a/src/clj/auto_ap/datomic/transaction_rules.clj +++ b/src/clj/auto_ap/datomic/transaction_rules.clj @@ -77,3 +77,10 @@ (->> (d/pull (d/db (d/connect uri)) default-read id) (<-datomic))) + +(defn get-all [] + (mapv first + (d/query {:query {:find [(list 'pull '?e default-read )] + :in ['$] + :where ['[?e :transaction-rule/description]]} + :args [(d/db (d/connect uri))]}))) diff --git a/src/clj/auto_ap/yodlee/import.clj b/src/clj/auto_ap/yodlee/import.clj index 14994a0d..1010ce41 100644 --- a/src/clj/auto_ap/yodlee/import.clj +++ b/src/clj/auto_ap/yodlee/import.clj @@ -9,7 +9,8 @@ [auto-ap.datomic.checks :as d-checks] [auto-ap.datomic.transactions :as d-transactions] [auto-ap.datomic.clients :as d-clients] - [auto-ap.time :as time])) + [auto-ap.time :as time] + [auto-ap.datomic.transaction-rules :as tr])) @@ -107,8 +108,8 @@ :location "A" :amount (Math/abs (double amount))}])} - remove-nils - apply-rules)))) + apply-rules + remove-nils)))) (defn batch-transact [transactions] @@ -125,6 +126,7 @@ :transaction-rule/dom-gte :transaction-rule/dom-lte :transaction-rule/amount-gte :transaction-rule/amount-lte :transaction-rule/client :transaction-rule/bank-account]} ] + (println transaction description) (let [transaction-dom (some-> transaction :transaction/date .toInstant @@ -180,11 +182,12 @@ true]))) (defn rule-applying-fn [rules] - (let [rules (transduce (map (fn [r] (update r :transaction-rule/description #(some-> % re-pattern)))) + (let [rules (transduce (map (fn [r] + (update r :transaction-rule/description #(some-> % re-pattern)))) conj [] (sort prioritize-rule rules))] - (println rules) + (fn [transaction] (let [matching-rules (->> rules @@ -233,6 +236,7 @@ (:client/bank-accounts c))) (d-clients/get-all)) transaction->client (comp (by :yodlee-account-id :client-id all-bank-accounts) :accountId) - transaction->bank-account-id (comp (by :yodlee-account-id :bank-account-id all-bank-accounts) :accountId)] - (batch-transact (transactions->txs transactions transaction->client transaction->bank-account-id (rule-applying-fn [])))))) + transaction->bank-account-id (comp (by :yodlee-account-id :bank-account-id all-bank-accounts) :accountId) + all-rules (tr/get-all)] + (batch-transact (transactions->txs transactions transaction->client transaction->bank-account-id (rule-applying-fn all-rules))))))