Supports testing yodlee import

This commit is contained in:
Bryce Covert
2019-05-14 21:18:52 -07:00
parent 66fd9a87bc
commit f7d9fed0c5
4 changed files with 64 additions and 55 deletions

View File

@@ -12,9 +12,9 @@
[clj-time.core :as time] [clj-time.core :as time]
[clj-time.coerce :as coerce])) [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 [] (defn create-database []
(d/create-database uri)) (d/create-database uri))

View File

@@ -14,11 +14,13 @@
(defn transaction->payment [_ check-number client-id bank-account-id amount id] (defn transaction->payment [_ check-number client-id bank-account-id amount id]
(cond (not (and client-id bank-account-id))
(cond (:transaction/payment (d-transactions/get-by-id [:transaction/id (sha-256 (str id))]))
nil nil
(and check-number client-id bank-account-id) (:transaction/payment (d-transactions/get-by-id [:transaction/id (sha-256 (str id))]))
nil
check-number
(-> (d-checks/get-graphql {:client-id client-id (-> (d-checks/get-graphql {:client-id client-id
:bank-account-id bank-account-id :bank-account-id bank-account-id
:check-number check-number :check-number check-number
@@ -28,7 +30,6 @@
first) first)
(and client-id bank-account-id amount) (and client-id bank-account-id amount)
(let [[matching-checks] (d-checks/get-graphql {:client-id client-id (let [[matching-checks] (d-checks/get-graphql {:client-id client-id
:bank-account-id bank-account-id :bank-account-id bank-account-id
:amount (- amount) :amount (- amount)
@@ -49,8 +50,10 @@
nil)) nil))
nil)) nil))
(defn import-transactions [transactions transaction->client transaction->bank-account-id] (defn transactions->txs [transactions transaction->client transaction->bank-account-id]
(doseq [transaction transactions (into []
(for [transaction transactions
:let [{post-date :postDate :let [{post-date :postDate
account-id :accountId account-id :accountId
date :date date :date
@@ -70,10 +73,9 @@
check-number (extract-check-number transaction) check-number (extract-check-number transaction)
client-id (transaction->client transaction) client-id (transaction->client transaction)
bank-account-id (transaction->bank-account-id transaction) bank-account-id (transaction->bank-account-id transaction)
check (transaction->payment transaction check-number client-id bank-account-id amount id)]] check (transaction->payment transaction check-number client-id bank-account-id amount id)]
(try :when client-id]
(when client-id (->> (remove-nils #:transaction
@(->> [(remove-nils #:transaction
{:post-date (coerce/to-date (time/parse post-date "YYYY-MM-dd")) {:post-date (coerce/to-date (time/parse post-date "YYYY-MM-dd"))
:id (sha-256 (str id)) :id (sha-256 (str id))
:account-id account-id :account-id account-id
@@ -102,14 +104,18 @@
:accounts (when check :accounts (when check
[#:transaction-account {:account (:db/id (a/get-account-by-numeric-code-and-sets 2110 ["default"])) [#:transaction-account {:account (:db/id (a/get-account-by-numeric-code-and-sets 2110 ["default"]))
:location "A" :location "A"
:amount (Math/abs (double amount))}]) :amount (Math/abs (double amount))}])})))))
})]
(d/transact (d/connect uri)))) (defn batch-transact [transactions]
(reduce (fn [acc batch]
(catch Exception e (into acc (->> batch
(println e))))) (d/transact (d/connect uri) )
(deref)
:tempids
vals)))
[]
(partition-all 100 transactions)))
(defn manual-import [manual-transactions] (defn manual-import [manual-transactions]
(let [transformed-transactions (->> manual-transactions (let [transformed-transactions (->> manual-transactions
@@ -130,13 +136,16 @@
(range) (range)
transaction-group))))] transaction-group))))]
(println "importing manual transactions" transformed-transactions) (println "importing manual transactions" transformed-transactions)
(import-transactions transformed-transactions :client-id :bank-account-id))) (batch-transact
(transactions->txs transformed-transactions :client-id :bank-account-id))))
(defn do-import []
(let [transactions (client/get-transactions)
#_#__ (println "All accounts:" (client/get-accounts)) (defn do-import
#_#__ (println "ALL Transactions:" transactions) ([]
all-bank-accounts (mapcat (fn [c] (map (do-import (client/get-transactions)))
([transactions]
(let [all-bank-accounts (mapcat (fn [c] (map
(fn [{:keys [:db/id :bank-account/yodlee-account-id]}] (fn [{:keys [:db/id :bank-account/yodlee-account-id]}]
(when (and id yodlee-account-id) (when (and id yodlee-account-id)
{:bank-account-id id {:bank-account-id id
@@ -146,5 +155,5 @@
(d-clients/get-all)) (d-clients/get-all))
transaction->client (comp (by :yodlee-account-id :client-id all-bank-accounts) :accountId) 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)] transaction->bank-account-id (comp (by :yodlee-account-id :bank-account-id all-bank-accounts) :accountId)]
(import-transactions transactions transaction->client transaction->bank-account-id))) (batch-transact (transactions->txs transactions transaction->client transaction->bank-account-id)))))

View File

@@ -277,7 +277,7 @@
[expense-accounts-field {:type "expense-accounts" [expense-accounts-field {:type "expense-accounts"
:descriptor "account asssignment" :descriptor "account asssignment"
:percentage-only? true :percentage-only? true
:locations @(re-frame/subscribe [::subs/locations-for-client (:id (:client data))]) :locations (into ["Shared"] @(re-frame/subscribe [::subs/locations-for-client (:id (:client data))]))
:max 100 :max 100
:field [:accounts]}]] :field [:accounts]}]]

View File

@@ -72,7 +72,7 @@
(is (= "123" (:description result))) (is (= "123" (:description result)))
(is (= "Bryce's Meat Co" (-> result :vendor :name))) (is (= "Bryce's Meat Co" (-> result :vendor :name)))
(is (= :approved (:transaction-status result))) (is (= :approved (:transaction-approval-status result)))
(is (= "hello" (-> result :accounts (get 0) :account :name ))) (is (= "hello" (-> result :accounts (get 0) :account :name )))
(is (:id result)) (is (:id result))
(testing "it should delete removed rules" (testing "it should delete removed rules"