Supports testing yodlee import
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))
|
||||
|
||||
@@ -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)))))
|
||||
|
||||
|
||||
@@ -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]}]]
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user