Files
integreat/src/clj/auto_ap/import/intuit.fiddle

74 lines
3.4 KiB
Plaintext

(ns auto-ap.import.intuit
(:require
[auto-ap.datomic :refer [conn]]
[auto-ap.import.common :refer [wrap-integration]]
[auto-ap.import.transactions :as t]
[auto-ap.intuit.core :as i]
[auto-ap.logging :as alog]
[auto-ap.time :as atime]
[clj-time.coerce :as coerce]
[clj-time.core :as time]
[clojure.string :as str]
[com.unbounce.dogstatsd.core :as statsd]
[datomic.api :as dc]
[clj-http.client :as client]))
(for [[e] (take 5 (get-intuit-bank-accounts (dc/db conn)))]
(i/get-transactions "2023-02-01"
"2023-02-05"
e))
(defn get-bank-accounts [token]
(defn get-bank-accounts [token]
(->> (:body (client/get (str i/prod-base-url "/company/" i/prod-company-id "/query")
{:headers
(i/with-auth i/prod-base-headers token)
:as :json
:query-params {"query" "SELECT * From Account maxresults 1000"}}))
:QueryResponse
:Account
#_(filter
#(#{"Bank" "Credit Card"} (:AccountType %))))))
(require 'auto-ap.time_reader)
(let [start #clj-time/date-time "2024-02-01"
end #clj-time/date-time "2024-04-01"]
(for [[ib ba c] (seq (get-intuit-bank-accounts (dc/db conn) "BCFM"))
:let [raw-transactions (i/get-transactions (atime/unparse-local start atime/iso-date)
(atime/unparse-local end atime/iso-date)
ib)
ideal-transactions (intuits->transactions raw-transactions ba c)
found-transactions (when (seq ideal-transactions)
(into {} (dc/q '[:find ?si (count ?t)
:in $ [?eid ...]
:where
[?t :transaction/id ?eid]
[?t :transaction/approval-status ?s]
[?s :db/ident ?si]]
(dc/db conn)
(map :transaction/id ideal-transactions))))
missing-transaction-ids (when (seq ideal-transactions)
(->>
(dc/q '[:find ?eid
:in $ [?eid ...]
:where (not [_ :transaction/id ?eid])]
(dc/db conn)
(map :transaction/id ideal-transactions))
(map first)
(into #{})))
missing-transactions (filter (comp missing-transaction-ids :transaction/id) ideal-transactions)]]
{:bank-account/name (pull-attr (dc/db conn) :bank-account/name ba)
:external-transaction-count (count raw-transactions)
:integreat-transaction-count (reduce + 0 (vals found-transactions))
:approved-count (:transaction-approval-status/approved found-transactions 0)
:unapproved-count (:transaction-approval-status/unapproved found-transactions 0)
:requires-feedback-count (:transaction-approval-status/requires-feedback found-transactions 0)
:missing-transactions missing-transactions}))