Starting to add locked until
This commit is contained in:
@@ -6,12 +6,14 @@
|
||||
[auto-ap.datomic.invoices :as d-invoices]
|
||||
[auto-ap.datomic.vendors :as d-vendors]
|
||||
[auto-ap.graphql.checks :as gq-checks]
|
||||
[auto-ap.time :as atime]
|
||||
[auto-ap.graphql.utils
|
||||
:as u
|
||||
:refer [<-graphql
|
||||
assert-admin
|
||||
assert-can-see-client
|
||||
assert-power-user
|
||||
assert-failure
|
||||
enum->keyword]]
|
||||
[auto-ap.utils :refer [dollars=]]
|
||||
[clj-time.coerce :as coerce]
|
||||
@@ -120,7 +122,6 @@
|
||||
(defn assert-valid-expense-accounts [expense_accounts]
|
||||
(doseq [expense-account expense_accounts
|
||||
:let [account (d/entity (d/db conn) (:account_id expense-account))]]
|
||||
(log/info "ACCOUNT" (:account/location account))
|
||||
(when (empty? (:location expense-account))
|
||||
(throw (ex-info "Expense account is missing location" {:validation-error "Expense account is missing location"})))
|
||||
|
||||
@@ -148,10 +149,17 @@
|
||||
(when-not (dollars= total expense-account-total)
|
||||
(let [error (str "Expense account total (" expense-account-total ") does not equal invoice total (" total ")")]
|
||||
(throw (ex-info error {:validation-error error}))))))
|
||||
(defn assert-not-locked [client-id date]
|
||||
(let [{:client/keys [locked-until]} (d/pull (d/db conn) [:client/locked-until] client-id)]
|
||||
(when (and locked-until
|
||||
(>= (compare locked-until (coerce/to-date date)) 0))
|
||||
(assert-failure (str "Integreat has locked finances prior to " (-> locked-until coerce/to-date-time (atime/unparse-local atime/normal-date)) ".")))))
|
||||
|
||||
(defn add-invoice [context {{:keys [expense_accounts client_id] :as in} :invoice} _]
|
||||
(assert-no-conflicting in)
|
||||
(assert-can-see-client (:id context) client_id)
|
||||
|
||||
(assert-not-locked client_id (:date in))
|
||||
(assert-valid-expense-accounts expense_accounts)
|
||||
(assert-invoice-amounts-add-up in)
|
||||
|
||||
@@ -163,10 +171,13 @@
|
||||
(when-not ((set (map :db/id (:client/bank-accounts (d-clients/get-by-id client-id)))) bank-account-id)
|
||||
(throw (ex-info (str "Bank account does not belong to client") {:validation-error "Bank account does not belong to client."}))))
|
||||
|
||||
|
||||
|
||||
(defn add-and-print-invoice [context {{:keys [total client_id] :as in} :invoice bank-account-id :bank_account_id type :type} _]
|
||||
(assert-no-conflicting in)
|
||||
(assert-can-see-client (:id context) client_id)
|
||||
(assert-bank-account-belongs client_id bank-account-id)
|
||||
(assert-not-locked client_id (:date in))
|
||||
(assert-valid-expense-accounts (:expense_accounts in))
|
||||
(assert-invoice-amounts-add-up in)
|
||||
(let [transaction-result (audit-transact [(add-invoice-transaction in)] (:id context))]
|
||||
@@ -189,6 +200,7 @@
|
||||
paid-amount (- (:invoice/total invoice) (:invoice/outstanding-balance invoice))
|
||||
_ (assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))
|
||||
deleted (deleted-expense-accounts invoice expense_accounts)
|
||||
_ (assert-not-locked (:db/id (:invoice/client invoice)) (:date in))
|
||||
_ (assert-valid-expense-accounts expense_accounts)
|
||||
_ (assert-invoice-amounts-add-up in)
|
||||
|
||||
@@ -209,8 +221,9 @@
|
||||
(->graphql (:id context)))))
|
||||
|
||||
(defn void-invoice [context {id :invoice_id} _]
|
||||
(let [invoice (d-invoices/get-by-id id)
|
||||
_ (assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))]
|
||||
(let [invoice (d-invoices/get-by-id id)]
|
||||
(assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))
|
||||
(assert-not-locked (:db/id (:invoice/client invoice)) (:invoice/date invoice))
|
||||
(audit-transact [{:db/id id
|
||||
:invoice/total 0.0
|
||||
:invoice/outstanding-balance 0.0
|
||||
@@ -262,6 +275,7 @@
|
||||
(defn unvoid-invoice [context {id :invoice_id} _]
|
||||
(let [invoice (d-invoices/get-by-id id)
|
||||
_ (assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))
|
||||
_ (assert-not-locked (:db/id (:invoice/client invoice)) (:invoice/date invoice))
|
||||
conn (d/connect uri)
|
||||
history (d/history (d/db conn))
|
||||
txs (d/query {:query {:find ['?tx '?e '?original-status '?original-outstanding '?total '?ea '?ea-amount]
|
||||
@@ -281,7 +295,6 @@
|
||||
:invoice/total total
|
||||
:invoice/status original-status
|
||||
:invoice/outstanding-balance original-outstanding)
|
||||
|
||||
(update :invoice/expense-accounts conj {:db/id expense-account :invoice-expense-account/amount expense-account-amount}))) {}))]
|
||||
(:id context))
|
||||
|
||||
@@ -289,9 +302,10 @@
|
||||
(->graphql (:id context)))))
|
||||
|
||||
(defn unautopay-invoice [context {id :invoice_id} _]
|
||||
(let [invoice (d/entity (d/db conn) id)
|
||||
_ (assert (:invoice/client invoice))
|
||||
_ (assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))]
|
||||
(let [invoice (d/entity (d/db conn) id)]
|
||||
(assert (:invoice/client invoice))
|
||||
(assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))
|
||||
(assert-not-locked (:db/id (:invoice/client invoice)) (:invoice/date invoice))
|
||||
(audit-transact [[:db/add id :invoice/status :invoice-status/unpaid]
|
||||
[:db/add id :invoice/outstanding-balance (:invoice/total invoice)]
|
||||
[:db/retract id :invoice/scheduled-payment (:invoice/scheduled-payment invoice)]]
|
||||
@@ -304,6 +318,7 @@
|
||||
(assert-can-see-client (:id context) (:db/id (:invoice/client (d-invoices/get-by-id (:invoice_id args)))))
|
||||
(let [invoice-id (:invoice_id args)
|
||||
invoice (d-invoices/get-by-id invoice-id)
|
||||
_ (assert-not-locked (:db/id (:invoice/client invoice)) (:invoice/date invoice))
|
||||
_ (assert-valid-expense-accounts (:expense_accounts args))
|
||||
deleted (deleted-expense-accounts invoice (:expense_accounts args))
|
||||
updated {:db/id invoice-id
|
||||
|
||||
Reference in New Issue
Block a user