(cloud) experimental approach to ensure the ledgers do not get out of sync
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
(ns auto-ap.graphql.checks
|
||||
(:require
|
||||
[amazonica.aws.s3 :as s3]
|
||||
[auto-ap.datomic :refer [conn remove-nils plus pull-many]]
|
||||
[auto-ap.datomic :refer [conn remove-nils plus pull-many audit-transact]]
|
||||
[auto-ap.datomic.accounts :as a]
|
||||
[iol-ion.tx :refer [upsert-invoice]]
|
||||
[auto-ap.datomic.bank-accounts :as d-bank-accounts]
|
||||
[auto-ap.datomic.checks :as d-checks]
|
||||
[auto-ap.datomic.clients :as d-clients]
|
||||
@@ -18,7 +19,6 @@
|
||||
assert-failure
|
||||
assert-not-locked
|
||||
enum->keyword]]
|
||||
[auto-ap.ledger :refer [transact-with-ledger]]
|
||||
[auto-ap.numeric :refer [num->words]]
|
||||
[auto-ap.time :refer [iso-date local-now parse]]
|
||||
[auto-ap.utils :refer [by dollars-0?]]
|
||||
@@ -415,7 +415,7 @@
|
||||
(make-pdfs (filter #(and (= :payment-type/check (:payment/type %))
|
||||
(> (:payment/amount %) 0.0))
|
||||
checks))))
|
||||
(transact-with-ledger (map #(if (map? %)
|
||||
(audit-transact (map #(if (map? %)
|
||||
(dissoc % :payment/pdf-data)
|
||||
%) checks ) id)
|
||||
|
||||
@@ -476,7 +476,7 @@
|
||||
0
|
||||
invoice-payment-lookup)]
|
||||
|
||||
(transact-with-ledger
|
||||
(audit-transact
|
||||
(into [(assoc base-payment
|
||||
:payment/type :payment-type/check
|
||||
:payment/status :payment-status/pending
|
||||
@@ -501,60 +501,60 @@
|
||||
new-balance (+ (:invoice/outstanding-balance invoice)
|
||||
(:invoice-payment/amount x))]
|
||||
[[:db.fn/retractEntity (:db/id x)]
|
||||
{:db/id (:db/id invoice)
|
||||
:invoice/outstanding-balance new-balance
|
||||
:invoice/status (if (dollars-0? new-balance)
|
||||
(:invoice/status invoice)
|
||||
:invoice-status/unpaid)}]))
|
||||
`(upsert-invoice ~{:db/id (:db/id invoice)
|
||||
:invoice/outstanding-balance new-balance
|
||||
:invoice/status (if (dollars-0? new-balance)
|
||||
(:invoice/status invoice)
|
||||
:invoice-status/unpaid)})]))
|
||||
(:payment/invoices check))
|
||||
updated-payment {:db/id id
|
||||
:payment/amount 0.0
|
||||
:payment/status :payment-status/voided}]
|
||||
(transact-with-ledger (conj removing-payments updated-payment)
|
||||
(audit-transact (conj removing-payments updated-payment)
|
||||
(:id context)))
|
||||
(-> (d-checks/get-by-id id)
|
||||
(->graphql))))
|
||||
|
||||
(defn void-payments-internal [all-ids id]
|
||||
(transact-with-ledger (->> all-ids
|
||||
(dc/q '[:find (pull ?p [:db/id
|
||||
{:invoice-payment/_payment [:invoice-payment/amount
|
||||
:db/id
|
||||
{:invoice-payment/invoice [:db/id :invoice/outstanding-balance]}]}])
|
||||
:in $ [?p ...]
|
||||
:where
|
||||
(not [_ :transaction/payment ?p])
|
||||
(not [?p :payment/status :payment-status/voided])
|
||||
[?p :payment/client ?c]
|
||||
[(get-else $ ?c :client/locked-until #inst "2000-01-01") ?lu]
|
||||
[?p :payment/date ?d]
|
||||
[(>= ?d ?lu)]
|
||||
]
|
||||
(dc/db conn))
|
||||
(map first)
|
||||
(mapcat (fn [{:keys [:db/id]
|
||||
invoices :invoice-payment/_payment}]
|
||||
(into
|
||||
[{:db/id id
|
||||
:payment/amount 0.0
|
||||
:payment/status :payment-status/voided}]
|
||||
(->> invoices
|
||||
(mapcat (fn [{:keys [:invoice-payment/invoice :db/id :invoice-payment/amount]}]
|
||||
(let [new-balance (+ (:invoice/outstanding-balance invoice)
|
||||
amount)]
|
||||
[[:db.fn/retractEntity id]
|
||||
{:db/id (:db/id invoice)
|
||||
:invoice/outstanding-balance new-balance
|
||||
:invoice/status (if (dollars-0? new-balance)
|
||||
(:invoice/status invoice)
|
||||
:invoice-status/unpaid)}]))))))))
|
||||
id))
|
||||
(audit-transact (->> all-ids
|
||||
(dc/q '[:find (pull ?p [:db/id
|
||||
{:invoice-payment/_payment [:invoice-payment/amount
|
||||
:db/id
|
||||
{:invoice-payment/invoice [:db/id :invoice/outstanding-balance]}]}])
|
||||
:in $ [?p ...]
|
||||
:where
|
||||
(not [_ :transaction/payment ?p])
|
||||
(not [?p :payment/status :payment-status/voided])
|
||||
[?p :payment/client ?c]
|
||||
[(get-else $ ?c :client/locked-until #inst "2000-01-01") ?lu]
|
||||
[?p :payment/date ?d]
|
||||
[(>= ?d ?lu)]
|
||||
]
|
||||
(dc/db conn))
|
||||
(map first)
|
||||
(mapcat (fn [{:keys [:db/id]
|
||||
invoices :invoice-payment/_payment}]
|
||||
(into
|
||||
[{:db/id id
|
||||
:payment/amount 0.0
|
||||
:payment/status :payment-status/voided}]
|
||||
(->> invoices
|
||||
(mapcat (fn [{:keys [:invoice-payment/invoice :db/id :invoice-payment/amount]}]
|
||||
(let [new-balance (+ (:invoice/outstanding-balance invoice)
|
||||
amount)]
|
||||
[[:db.fn/retractEntity id]
|
||||
`(upsert-invoice ~{:db/id (:db/id invoice)
|
||||
:invoice/outstanding-balance new-balance
|
||||
:invoice/status (if (dollars-0? new-balance)
|
||||
(:invoice/status invoice)
|
||||
:invoice-status/unpaid)})]))))))))
|
||||
id))
|
||||
|
||||
|
||||
(defn void-payments [context args _]
|
||||
(assert-admin (:id context))
|
||||
(let [args (assoc args :id (:id context))
|
||||
ids (some-> args
|
||||
(let [args (assoc args :id (:id context))
|
||||
ids (some-> args
|
||||
:filters
|
||||
(assoc :id (:id context))
|
||||
(<-graphql)
|
||||
@@ -649,10 +649,7 @@
|
||||
:payment/type :payment-type/balance-credit
|
||||
:payment/status :payment-status/cleared}]
|
||||
|
||||
|
||||
|
||||
|
||||
(transact-with-ledger (-> []
|
||||
(audit-transact (-> []
|
||||
(conj payment)
|
||||
(into (invoice-payments invoices invoice-amounts))) (:id context))
|
||||
(->graphql {:invoices (d-invoices/get-multi (map :db/id invoices))})))
|
||||
|
||||
Reference in New Issue
Block a user