enormous refactor but simplified much!
This commit is contained in:
@@ -1,95 +0,0 @@
|
||||
(ns auto-ap.intuit.import
|
||||
(:require [amazonica.aws.s3 :as s3]
|
||||
[auto-ap.datomic :refer [conn remove-nils]]
|
||||
[auto-ap.intuit.core :as i]
|
||||
[auto-ap.utils :refer [by allow-once]]
|
||||
[auto-ap.yodlee.import :as y]
|
||||
[clj-time.coerce :as coerce]
|
||||
[clj-time.core :as time]
|
||||
[clj-time.format :as f]
|
||||
[clojure.string :as str]
|
||||
[clojure.tools.logging :as log]
|
||||
[datomic.api :as d]
|
||||
[mount.core :as mount]
|
||||
[unilog.context :as lc]
|
||||
[yang.scheduler :as scheduler]))
|
||||
|
||||
(def client-whitelist #{"PPFB"})
|
||||
|
||||
(defn get-intuit-bank-accounts [db]
|
||||
(-> (d/q '[:find ?ba ?external-id
|
||||
:in $
|
||||
:where
|
||||
[?c :client/bank-accounts ?ba]
|
||||
[?ba :bank-account/intuit-bank-account ?iab]
|
||||
[?iab :intuit-bank-account/external-id ?external-id]]
|
||||
db #_client-whitelist)))
|
||||
|
||||
|
||||
(defn upsert-transactions []
|
||||
(lc/with-context {:source "Importing intuit transactions"}
|
||||
(let [db (d/db conn)]
|
||||
(->>
|
||||
(for [[bank-account external-id] (get-intuit-bank-accounts db)
|
||||
:let [bank-account (d/entity db bank-account)
|
||||
end (auto-ap.time/local-now)
|
||||
start (time/plus end (time/days -30))
|
||||
_ (log/infof "importing from %s to %s for %s" start end external-id)]
|
||||
transaction (i/get-transactions (auto-ap.time/unparse start auto-ap.time/iso-date)
|
||||
(auto-ap.time/unparse end auto-ap.time/iso-date)
|
||||
external-id)]
|
||||
{:client-id (:db/id (:client/_bank-accounts bank-account))
|
||||
:bank-account-id (:db/id bank-account)
|
||||
:description-original (:Memo/Description transaction)
|
||||
:amount (Double/parseDouble (:Amount transaction))
|
||||
:date (auto-ap.time/parse (:Date transaction) auto-ap.time/iso-date)
|
||||
:status "posted"})
|
||||
(y/grouped-import :import-source/intuit "Automated Intuit User"))
|
||||
(log/info "Intuit transactions imported"))))
|
||||
|
||||
(def upsert-transactions (allow-once upsert-transactions))
|
||||
|
||||
(defn dry-run-upsert-transactions []
|
||||
(let [db (d/db conn)]
|
||||
(clojure.data.csv/write-csv
|
||||
*out*
|
||||
(->>
|
||||
(for [[bank-account external-id] (get-intuit-bank-accounts db)
|
||||
:let [bank-account (d/entity db bank-account)
|
||||
end (auto-ap.time/local-now)
|
||||
start (time/plus end (time/days -30))]
|
||||
r (i/get-transactions (auto-ap.time/unparse start auto-ap.time/iso-date)
|
||||
(auto-ap.time/unparse end auto-ap.time/iso-date)
|
||||
external-id)]
|
||||
{:client-id (:db/id (:client/_bank-accounts bank-account))
|
||||
:client-code (:client/code (:client/_bank-accounts bank-account))
|
||||
:bank-account-id (:db/id bank-account)
|
||||
:bank-account-code (:bank-account/code bank-account)
|
||||
:external-id external-id
|
||||
:description-original (:Memo/Description r)
|
||||
:amount (Double/parseDouble (:Amount r))
|
||||
:date (auto-ap.time/parse (:Date r) auto-ap.time/iso-date)
|
||||
:status "posted"})
|
||||
(y/grouped-new)
|
||||
:import
|
||||
(mapcat identity)
|
||||
(map (juxt #(:bank-account/code (d/entity db(:transaction/bank-account %))) :transaction/id :transaction/raw-id :transaction/amount :transaction/description-original #(auto-ap.time/unparse-local (coerce/to-date-time (:transaction/date %)) auto-ap.time/normal-date) )))
|
||||
:separator \tab)))
|
||||
|
||||
|
||||
(defn upsert-accounts []
|
||||
(let [token (i/get-fresh-access-token)
|
||||
bank-accounts (i/get-bank-accounts token)]
|
||||
@(d/transact conn (mapv
|
||||
(fn [ba]
|
||||
{:intuit-bank-account/external-id (:name ba)
|
||||
:intuit-bank-account/name (:name ba)})
|
||||
bank-accounts))))
|
||||
|
||||
(mount/defstate upsert-transaction-worker
|
||||
:start (scheduler/every (* 1000 60 60 24) upsert-transactions)
|
||||
:stop (scheduler/stop upsert-transaction-worker))
|
||||
|
||||
(mount/defstate upsert-account-worker
|
||||
:start (scheduler/every (* 1000 60 60 24) upsert-accounts)
|
||||
:stop (scheduler/stop upsert-account-worker))
|
||||
Reference in New Issue
Block a user