Makes invoice reject accounts that cannot be used.

This commit is contained in:
2023-02-04 20:15:03 -08:00
parent f7d5454d2c
commit 9ab70b869b
2 changed files with 118 additions and 8 deletions

View File

@@ -23,7 +23,8 @@
[clj-time.core :as time]
[clojure.set :as set]
[clojure.tools.logging :as log]
[datomic.api :as d]))
[datomic.api :as d]
[manifold.deferred :as de]))
(defn ->graphql [invoice user ]
(if (= "admin" (:user/role user))
@@ -127,7 +128,7 @@
set)]
(set/difference existing-ids specified-ids)))
(defn assert-valid-expense-accounts [expense_accounts]
(defn assert-valid-expense-accounts [expense_accounts vendor_id]
(doseq [expense-account expense_accounts
:let [account (d/entity (d/db conn) (:account_id expense-account))]]
(when (empty? (:location expense-account))
@@ -140,6 +141,14 @@
(throw (ex-info err
{:validation-error err}))))
(when (and (= :allowance/denied
(:account/invoice-allowance account))
(not= (:db/id (:vendor/default-account (d/entity (d/db conn) vendor_id)))
(:db/id account)))
(let [err (str "Account isn't allowed for invoice use.")]
(throw (ex-info err
{:validation-error err}))))
(when (and (empty? (:account/location account))
(= "A" (:location expense-account)))
(let [err (str "Account uses location '" (:location expense-account) "', which is reserved for liabilities, equities, and assets.")]
@@ -160,12 +169,12 @@
(defn add-invoice [context {{:keys [expense_accounts client_id] :as in} :invoice} _]
(defn add-invoice [context {{:keys [expense_accounts client_id vendor_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-valid-expense-accounts expense_accounts vendor_id)
(assert-invoice-amounts-add-up in)
(let [transaction-result (transact-with-ledger [(add-invoice-transaction in)] (:id context))]
@@ -178,12 +187,12 @@
(defn add-and-print-invoice [context {{:keys [total client_id] :as in} :invoice bank-account-id :bank_account_id type :type} _]
(defn add-and-print-invoice [context {{:keys [total client_id vendor_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-valid-expense-accounts (:expense_accounts in) vendor_id)
(assert-invoice-amounts-add-up in)
(let [transaction-result (transact-with-ledger [(add-invoice-transaction in)] (:id context))]
(-> (gq-checks/print-checks-internal [{:invoice-id (get-in transaction-result [:tempids "invoice"])
@@ -194,7 +203,7 @@
(:id context))
u/->graphql)))
(defn edit-invoice [context {{:keys [id due invoice_number total date expense_accounts scheduled_payment] :as in} :invoice} _]
(defn edit-invoice [context {{:keys [id due invoice_number vendor_id total date expense_accounts scheduled_payment] :as in} :invoice} _]
(let [invoice (d-invoices/get-by-id id)
_ (when (seq (d-invoices/find-conflicting {:db/id id
:invoice/invoice-number invoice_number
@@ -206,7 +215,7 @@
_ (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-valid-expense-accounts expense_accounts vendor_id)
_ (assert-invoice-amounts-add-up in)
updated-invoice (cond-> {:db/id id