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.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))

View File

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

View File

@@ -277,7 +277,7 @@
[expense-accounts-field {:type "expense-accounts"
:descriptor "account asssignment"
: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
:field [:accounts]}]]

View File

@@ -72,7 +72,7 @@
(is (= "123" (:description result)))
(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 (:id result))
(testing "it should delete removed rules"