Making manual import work in datomic
This commit is contained in:
@@ -3,31 +3,35 @@
|
||||
[auto-ap.db.transactions :as transactions]
|
||||
[auto-ap.db.vendors :as vendors]
|
||||
[auto-ap.utils :refer [by]]
|
||||
[datomic.api :as d]
|
||||
[auto-ap.datomic :refer [uri remove-nils]]
|
||||
[auto-ap.db.companies :as companies]
|
||||
[clj-time.coerce :as coerce]
|
||||
[digest :refer [sha-256]]
|
||||
[auto-ap.db.checks :as checks]
|
||||
[auto-ap.datomic.checks :as d-checks]
|
||||
[auto-ap.time :as time]))
|
||||
|
||||
|
||||
|
||||
(defn transaction->check-id [_ check-number company-id bank-account-id amount]
|
||||
(cond (and check-number company-id bank-account-id)
|
||||
(-> (checks/get-graphql {:company-id company-id
|
||||
:bank-account-id bank-account-id
|
||||
:check-number check-number
|
||||
:amount (- amount)
|
||||
:status "pending"})
|
||||
(defn transaction->check-id [_ check-number client-id bank-account-id amount]
|
||||
(cond (and check-number client-id bank-account-id)
|
||||
(-> (d-checks/get-graphql {:client-id client-id
|
||||
:bank-account-id bank-account-id
|
||||
:check-number check-number
|
||||
:amount (- amount)
|
||||
:status :payment-status/pending})
|
||||
first
|
||||
:id)
|
||||
(doto println)
|
||||
:db/id)
|
||||
|
||||
(and company-id bank-account-id amount)
|
||||
(and client-id bank-account-id amount)
|
||||
|
||||
(let [matching-checks (checks/get-graphql {:company-id company-id
|
||||
(let [matching-checks (d-checks/get-graphql {:client-id client-id
|
||||
:bank-account-id bank-account-id
|
||||
:amount (- amount)
|
||||
:status "pending"})]
|
||||
:status :payment-status/pending})]
|
||||
(if (= 1 (count matching-checks))
|
||||
(:id (first matching-checks))
|
||||
(:db/id (first matching-checks))
|
||||
nil))
|
||||
|
||||
:else
|
||||
@@ -61,31 +65,32 @@
|
||||
(- amount)
|
||||
amount)
|
||||
check-number (extract-check-number transaction)
|
||||
company-id (transaction->company transaction)
|
||||
client-id (transaction->company transaction)
|
||||
bank-account-id (transaction->bank-account-id transaction)
|
||||
check-id (transaction->check-id transaction check-number company-id bank-account-id amount)]]
|
||||
|
||||
|
||||
|
||||
check-id (transaction->check-id transaction check-number client-id bank-account-id amount)]]
|
||||
(try
|
||||
(when company-id
|
||||
(transactions/upsert!
|
||||
{:post-date (time/parse post-date "YYYY-MM-dd")
|
||||
:id (sha-256 (str id))
|
||||
:account-id account-id
|
||||
:date (time/parse date "YYYY-MM-dd")
|
||||
:amount amount
|
||||
:description-original description-original
|
||||
:description-simple description-simple
|
||||
:type type
|
||||
:status status
|
||||
:company-id company-id
|
||||
:check-number check-number
|
||||
:bank-account-id (transaction->bank-account-id transaction)
|
||||
:check-id check-id
|
||||
})
|
||||
(when check-id
|
||||
(checks/update! {:id check-id :status "cleared"})))
|
||||
(when client-id
|
||||
@(->> [(remove-nils #:transaction
|
||||
{:post-date (time/parse post-date "YYYY-MM-dd")
|
||||
:id (sha-256 (str id))
|
||||
:account-id account-id
|
||||
:date (coerce/to-date (time/parse date "YYYY-MM-dd"))
|
||||
:amount amount
|
||||
:description-original description-original
|
||||
:description-simple description-simple
|
||||
:type type
|
||||
:status status
|
||||
:client client-id
|
||||
:check-number check-number
|
||||
:bank-account (transaction->bank-account-id transaction)
|
||||
:payment (when check-id
|
||||
{:db/id check-id
|
||||
:payment/status :payment-status/cleared}
|
||||
)
|
||||
})]
|
||||
|
||||
|
||||
(d/transact (d/connect uri))))
|
||||
|
||||
(catch Exception e
|
||||
(println e)))))
|
||||
@@ -94,25 +99,22 @@
|
||||
(let [transformed-transactions (->> manual-transactions
|
||||
(filter #(= "posted" (:status %)))
|
||||
(group-by #(select-keys % [:date :description-original :amount]))
|
||||
|
||||
(vals)
|
||||
|
||||
(mapcat (fn [transaction-group]
|
||||
(map
|
||||
(fn [index {:keys [date description-original high-level-category amount account-id company-id] :as transaction}]
|
||||
{:id (str date "-" account-id "-" description-original "-" amount "-" index "-" company-id)
|
||||
:company-id company-id
|
||||
:bank-account-id account-id
|
||||
(fn [index {:keys [date description-original high-level-category amount bank-account-id client-id] :as transaction}]
|
||||
{:id (str date "-" bank-account-id "-" description-original "-" amount "-" index "-" client-id)
|
||||
:client-id client-id
|
||||
:bank-account-id bank-account-id
|
||||
:date (time/unparse date "YYYY-MM-dd")
|
||||
:amount {:amount amount}
|
||||
:description {:original description-original
|
||||
:simple high-level-category}
|
||||
:status "POSTED"})
|
||||
(range)
|
||||
|
||||
transaction-group))))]
|
||||
(println "importing manual transactions" transformed-transactions)
|
||||
(import-transactions transformed-transactions :company-id :bank-account-id)))
|
||||
(import-transactions transformed-transactions :client-id :bank-account-id)))
|
||||
|
||||
(defn do-import []
|
||||
(let [transactions (client/get-transactions)
|
||||
|
||||
Reference in New Issue
Block a user