89 lines
3.2 KiB
Clojure
89 lines
3.2 KiB
Clojure
(ns fix-pending-transactions)
|
|
|
|
|
|
(def potential-matches
|
|
(d/query {:query {:find ['(pull ?e1 [:db/id :transaction/date])
|
|
'(pull ?e2 [:db/id :transaction/date])]
|
|
:in ['$]
|
|
:where ['[?e1 :transaction/status "PENDING"]
|
|
'[?e1 :transaction/description-original ?e1-d]
|
|
'[?e1 :transaction/amount ?e1-a]
|
|
#_'[?e1 :transaction/date ?e1-dt]
|
|
|
|
'[?e2 :transaction/description-original ?e1-d]
|
|
'[?e2 :transaction/amount ?e1-a]
|
|
#_'[?e2 :transaction/date e1-dt]
|
|
'[?e2 :transaction/status "POSTED"]]}
|
|
:args [(d/db (d/connect uri))]})
|
|
)
|
|
|
|
(def all-pending
|
|
(d/query {:query {:find ['?e1]
|
|
:in ['$]
|
|
:where ['[?e1 :transaction/status "PENDING"]]}
|
|
:args [(d/db (d/connect uri))]}))
|
|
|
|
(def checkless
|
|
(d/query {:query {:find ['?e1]
|
|
:in ['$]
|
|
:where ['[?e1 :transaction/status "PENDING"]
|
|
'(not [?e1 :transaction/payment])
|
|
]}
|
|
:args [(d/db (d/connect uri))]}))
|
|
|
|
(def checked
|
|
(d/query {:query {:find ['?e1 '(pull ?z [:payment/amount :payment/type :payment/status {:payment/client [:client/code]}])]
|
|
:in ['$]
|
|
:where ['[?e1 :transaction/status "PENDING"]
|
|
'[?e1 :transaction/payment ?z]
|
|
]}
|
|
:args [(d/db (d/connect uri))]}))
|
|
|
|
(count checkless)
|
|
(count all-pending)
|
|
(count checked)
|
|
(take 4 checked)
|
|
|
|
(def match-lookup (->> potential-matches
|
|
(reduce
|
|
(fn [acc x]
|
|
(into acc (map
|
|
#(vector (:db/id %) x)
|
|
x)))
|
|
{})))
|
|
|
|
(take 2 potential-matches)
|
|
|
|
(take 3 match-lookup)
|
|
|
|
(->> checked
|
|
(map first)
|
|
(map #(if (get match-lookup %)
|
|
(d/pull (d/db (d/connect uri)) '[*] (:db/id (second (get match-lookup %))))
|
|
)))
|
|
|
|
(defn revert-transactions [ids]
|
|
(->>
|
|
(d/query {:query {:find ['(pull ?id [:db/id {:journal-entry/_original-entity [:db/id]
|
|
:transaction/payment [:db/id]} ])]
|
|
:in ['$ '[?id ...]]
|
|
:where ['[?id :transaction/status]]}
|
|
:args [(d/db (d/connect uri)) ids]})
|
|
(mapcat (fn [[transaction]]
|
|
(let [ledger-id (:db/id (first (:journal-entry/_original-entity transaction)))
|
|
payment-id (:db/id (:transaction/payment transaction))]
|
|
(cond-> [[:db/retractEntity (:db/id transaction)]]
|
|
ledger-id (conj [:db/retractEntity ledger-id])
|
|
payment-id (conj {:db/id payment-id
|
|
:payment/status :payment-status/pending})))))
|
|
(into [])))
|
|
|
|
#_(doseq [result (partition-all 200 (revert-transactions (map first checked)))]
|
|
(println "proccesed 1")
|
|
@(d/transact (d/connect uri) result ))
|
|
|
|
(map second checked)
|
|
|
|
|
|
(re-find #"(?i)check(card|[^0-9]+([0-9]*))" "Check-1205")
|