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,31 +50,32 @@
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 []
:let [{post-date :postDate
account-id :accountId (for [transaction transactions
date :date :let [{post-date :postDate
id :id account-id :accountId
{amount :amount} :amount date :date
{description-original :original id :id
description-simple :simple} :description {amount :amount} :amount
{merchant-id :id {description-original :original
merchant-name :name} :merchant description-simple :simple} :description
base-type :baseType {merchant-id :id
type :type merchant-name :name} :merchant
status :status} base-type :baseType
transaction type :type
amount (if (= "DEBIT" base-type) status :status}
(- amount) transaction
amount) amount (if (= "DEBIT" base-type)
check-number (extract-check-number transaction) (- amount)
client-id (transaction->client transaction) amount)
bank-account-id (transaction->bank-account-id transaction) check-number (extract-check-number transaction)
check (transaction->payment transaction check-number client-id bank-account-id amount id)]] client-id (transaction->client transaction)
(try bank-account-id (transaction->bank-account-id transaction)
(when client-id check (transaction->payment transaction check-number client-id bank-account-id amount id)]
@(->> [(remove-nils #:transaction :when client-id]
(->> (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))))
(catch Exception e (defn batch-transact [transactions]
(println e))))) (reduce (fn [acc batch]
(into acc (->> batch
(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,21 +136,24 @@
(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)))
(fn [{:keys [:db/id :bank-account/yodlee-account-id]}] ([transactions]
(when (and id yodlee-account-id) (let [all-bank-accounts (mapcat (fn [c] (map
{:bank-account-id id (fn [{:keys [:db/id :bank-account/yodlee-account-id]}]
:client-id (:db/id c) (when (and id yodlee-account-id)
:yodlee-account-id yodlee-account-id})) {:bank-account-id id
(:client/bank-accounts c))) :client-id (:db/id c)
(d-clients/get-all)) :yodlee-account-id yodlee-account-id}))
transaction->client (comp (by :yodlee-account-id :client-id all-bank-accounts) :accountId) (:client/bank-accounts c)))
transaction->bank-account-id (comp (by :yodlee-account-id :bank-account-id all-bank-accounts) :accountId)] (d-clients/get-all))
(import-transactions transactions transaction->client transaction->bank-account-id))) 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" [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"