adding automatic rule feature.
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))]})))
|
||||
|
||||
@@ -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))))))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user