143 lines
6.4 KiB
Clojure
143 lines
6.4 KiB
Clojure
;; This buffer is for Clojure experiments and evaluation.
|
|
|
|
;; Press C-j to evaluate the last expression.
|
|
|
|
;; You can also press C-u C-j to evaluate the expression and pretty-print its result.
|
|
|
|
(def c auto-ap.datomic/conn)
|
|
|
|
(defn check-fn [query checker]
|
|
(fn [db]
|
|
(assert (checker (d/q query db))
|
|
(str "query failed!" query))))
|
|
|
|
(defn check-transaction [fs tx]
|
|
|
|
(println "checking before...")
|
|
(doseq [f fs]
|
|
(f (d/db c)))
|
|
|
|
(println "checing after...")
|
|
(let [updated (:db-after (d/with (d/db c)
|
|
tx))]
|
|
(doseq [f fs]
|
|
(f updated)))
|
|
(println "success!"))
|
|
|
|
|
|
|
|
|
|
(let [invoices-without-clients (check-fn '[:find ?i
|
|
:in $
|
|
:where
|
|
[?i :invoice/invoice-number]
|
|
(not [?i :invoice/client ])]
|
|
#(= (count %) 0))
|
|
transactions-without-clients (check-fn '[:find ?t
|
|
:in $
|
|
:where
|
|
[?t :transaction/amount]
|
|
(not [?t :transaction/client ])]
|
|
#(= (count %) 0))
|
|
account-overide-without-clients (check-fn '[:find ?t
|
|
:in $
|
|
:where
|
|
[?t :account-client-override/name]
|
|
(not [?t :account-client-override/client ])]
|
|
#(= (count %) 0))
|
|
vendor-schedule-payment-dom (check-fn '[:find ?t
|
|
:in $
|
|
:where
|
|
[?t :vendor-schedule-payment-dom/dom]
|
|
(not [?t :vendor-schedule-payment-dom/client ])]
|
|
#(= (count %) 0))
|
|
payments-without-clients (check-fn '[:find ?t
|
|
:in $
|
|
:where
|
|
[?t :payment/date]
|
|
(not [?t :payment/client ])]
|
|
#(= (count %) 0))
|
|
vendor-usage-without-client (check-fn '[:find ?t
|
|
:in $
|
|
:where
|
|
[?t :vendor-usage/vendor]
|
|
(not [?t :vendor-usage/client ])]
|
|
#(= (count %) 0))
|
|
journal-entries-without-client (check-fn '[:find ?t
|
|
:in $
|
|
:where
|
|
[?t :journal-entry/date]
|
|
(not [?t :journal-entry/client ])]
|
|
#(= (count %) 0))
|
|
userless-users (check-fn '[:find ?t
|
|
:in $
|
|
:where
|
|
[?t :user/role :user-role/user]
|
|
(not [?t :user/clients ])]
|
|
#(= (count %) 0))
|
|
invoice-payments-without-invoices (check-fn '[:find ?t
|
|
:in $
|
|
:where
|
|
[?t :invoice-payment/amount]
|
|
(not [?t :invoice-payment/invoice ])]
|
|
#(= (count %) 0))
|
|
banks-without-types (check-fn '[:find ?ba
|
|
:in $
|
|
:where [?ba :bank-account/name]
|
|
(not [?ba :bank-account/type])]
|
|
#(= (count %) 0))
|
|
|
|
transaction fix-transaction
|
|
]
|
|
|
|
(check-transaction [invoices-without-clients transactions-without-clients
|
|
account-overide-without-clients vendor-schedule-payment-dom
|
|
payments-without-clients vendor-usage-without-client
|
|
journal-entries-without-client userless-users
|
|
invoice-payments-without-invoices banks-without-types]
|
|
transaction)
|
|
)
|
|
|
|
(def fix-transaction
|
|
(d/transact c (into [{:db/id "datomic.tx"
|
|
:db/doc "Fixing issue with a transaction that was adjusting bank accounts"}]
|
|
(->>
|
|
(d/pull (d/db c) '[*] 17592250556002)
|
|
:transaction/accounts
|
|
(group-by #(dissoc % :db/id))
|
|
(vals)
|
|
(mapcat rest)
|
|
(map :db/id)
|
|
(map (fn [to-delete]
|
|
[:db/retractEntity to-delete]))
|
|
))))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(comment
|
|
(defn delete-client []
|
|
(->> [[:db/retractEntity [:client/code "NGGL"]]]
|
|
(into (map (fn [[i]]
|
|
[:db/retractEntity i])
|
|
(d/q '[:find ?i
|
|
:in $
|
|
:where (or [?i :invoice/client [:client/code "NGGL"]]
|
|
[?i :vendor-usage/client [:client/code "NGGL"]]
|
|
[?i :transaction/client [:client/code "NGGL"]]
|
|
[?i :payment/client [:client/code "NGGL"]]
|
|
[?i :transaction-rule/client [:client/code "NGGL"]]
|
|
[?i :journal-entry/client [:client/code "NGGL"]]
|
|
[?i :user/clients [:client/code "NGGL"]])]
|
|
(d/db c))))
|
|
(into (map (fn [[i]]
|
|
[:db/retractEntity i])
|
|
(d/q '[:find ?ip
|
|
:in $
|
|
:where [?i :invoice/client [:client/code "NGGL"]]
|
|
[?ip :invoice-payment/invoice ?i]]
|
|
(d/db c)))))))
|