fixes to prevent data issue.
This commit is contained in:
@@ -131,11 +131,18 @@
|
|||||||
(throw (ex-info "Expense account is missing account" {:validation-error "Expense account is missing account"})))))
|
(throw (ex-info "Expense account is missing account" {:validation-error "Expense account is missing account"})))))
|
||||||
|
|
||||||
|
|
||||||
|
(defn assert-invoice-amounts-add-up [{:keys [expense_accounts total]}]
|
||||||
|
(let [expense-account-total (reduce + 0 (map (fn [x] (:amount x)) expense_accounts))]
|
||||||
|
(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 add-invoice [context {{:keys [total expense_accounts invoice_number location client_id vendor_id vendor_name date] :as in} :invoice} value]
|
(defn add-invoice [context {{:keys [total expense_accounts invoice_number location client_id vendor_id vendor_name date] :as in} :invoice} value]
|
||||||
(assert-no-conflicting in)
|
(assert-no-conflicting in)
|
||||||
(assert-can-see-client (:id context) client_id)
|
(assert-can-see-client (:id context) client_id)
|
||||||
(assert-valid-expense-accounts expense_accounts)
|
(assert-valid-expense-accounts expense_accounts)
|
||||||
|
(assert-invoice-amounts-add-up in)
|
||||||
|
|
||||||
(let [transaction-result (audit-transact [(add-invoice-transaction in)] (:id context))]
|
(let [transaction-result (audit-transact [(add-invoice-transaction in)] (:id context))]
|
||||||
(-> (d-invoices/get-by-id (get-in transaction-result [:tempids "invoice"]))
|
(-> (d-invoices/get-by-id (get-in transaction-result [:tempids "invoice"]))
|
||||||
@@ -150,6 +157,7 @@
|
|||||||
(assert-can-see-client (:id context) client_id)
|
(assert-can-see-client (:id context) client_id)
|
||||||
(assert-bank-account-belongs client_id bank-account-id)
|
(assert-bank-account-belongs client_id bank-account-id)
|
||||||
(assert-valid-expense-accounts (:expense_accounts 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))]
|
(let [transaction-result (audit-transact [(add-invoice-transaction in)] (:id context))]
|
||||||
(-> (gq-checks/print-checks [{:invoice-id (get-in transaction-result [:tempids "invoice"])
|
(-> (gq-checks/print-checks [{:invoice-id (get-in transaction-result [:tempids "invoice"])
|
||||||
:amount total}]
|
:amount total}]
|
||||||
@@ -168,14 +176,13 @@
|
|||||||
:invoice/client (:db/id (:invoice/client invoice))}))
|
:invoice/client (:db/id (:invoice/client invoice))}))
|
||||||
(throw (ex-info (str "Invoice '" invoice_number "' already exists.") {:invoice-number invoice_number})))
|
(throw (ex-info (str "Invoice '" invoice_number "' already exists.") {:invoice-number invoice_number})))
|
||||||
|
|
||||||
expense-account-total (reduce + 0 (map (fn [x] (:amount x)) expense_accounts))
|
|
||||||
_ (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}))))
|
|
||||||
paid-amount (- (:invoice/total invoice) (:invoice/outstanding-balance invoice))
|
paid-amount (- (:invoice/total invoice) (:invoice/outstanding-balance invoice))
|
||||||
_ (assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))
|
_ (assert-can-see-client (:id context) (:db/id (:invoice/client invoice)))
|
||||||
deleted (deleted-expense-accounts invoice expense_accounts)
|
deleted (deleted-expense-accounts invoice expense_accounts)
|
||||||
_ (assert-valid-expense-accounts expense_accounts)
|
_ (assert-valid-expense-accounts expense_accounts)
|
||||||
|
_ (assert-invoice-amounts-add-up in)
|
||||||
|
|
||||||
|
|
||||||
updated-invoice (cond-> {:db/id id
|
updated-invoice (cond-> {:db/id id
|
||||||
|
|||||||
Reference in New Issue
Block a user