From 4cef98e3c044c9e142e23872b4be417084413d23 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Fri, 29 Oct 2021 18:59:52 -0700 Subject: [PATCH] fixes to prevent data issue. --- src/clj/auto_ap/graphql/invoices.clj | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/clj/auto_ap/graphql/invoices.clj b/src/clj/auto_ap/graphql/invoices.clj index 93cad210..014d090d 100644 --- a/src/clj/auto_ap/graphql/invoices.clj +++ b/src/clj/auto_ap/graphql/invoices.clj @@ -131,11 +131,18 @@ (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] (assert-no-conflicting in) (assert-can-see-client (:id context) client_id) (assert-valid-expense-accounts expense_accounts) + (assert-invoice-amounts-add-up in) (let [transaction-result (audit-transact [(add-invoice-transaction in)] (:id context))] (-> (d-invoices/get-by-id (get-in transaction-result [:tempids "invoice"])) @@ -150,6 +157,7 @@ (assert-can-see-client (:id context) client_id) (assert-bank-account-belongs client_id bank-account-id) (assert-valid-expense-accounts (:expense_accounts in)) + (assert-invoice-amounts-add-up in) (let [transaction-result (audit-transact [(add-invoice-transaction in)] (:id context))] (-> (gq-checks/print-checks [{:invoice-id (get-in transaction-result [:tempids "invoice"]) :amount total}] @@ -168,14 +176,13 @@ :invoice/client (:db/id (:invoice/client invoice))})) (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)) _ (assert-can-see-client (:id context) (:db/id (:invoice/client invoice))) deleted (deleted-expense-accounts invoice expense_accounts) _ (assert-valid-expense-accounts expense_accounts) + _ (assert-invoice-amounts-add-up in) updated-invoice (cond-> {:db/id id