diff --git a/src/clj/auto_ap/db/invoices.clj b/src/clj/auto_ap/db/invoices.clj index 1baff022..35fcf95c 100644 --- a/src/clj/auto_ap/db/invoices.clj +++ b/src/clj/auto_ap/db/invoices.clj @@ -63,7 +63,7 @@ (defn get-all [] (query base-query)) -(defn find-conflicting [{:keys [id invoice-number company-id vendor-id]}] +(defn find-conflicting [{:keys [id invoice-number company-id vendor-id] :as i}] (query (-> base-query (helpers/merge-where [:and [:not= :id id] diff --git a/src/clj/auto_ap/graphql/invoices.clj b/src/clj/auto_ap/graphql/invoices.clj index f743d063..ad246094 100644 --- a/src/clj/auto_ap/graphql/invoices.clj +++ b/src/clj/auto_ap/graphql/invoices.clj @@ -37,8 +37,14 @@ (->graphql)))) -(defn edit-invoice [context {{:keys [id] :as in} :invoice} value] +(defn edit-invoice [context {{:keys [id invoice_number vendor_id company_id] :as in} :invoice} value] + (let [invoice (invoices/get-by-id id) + _ (when (seq (invoices/find-conflicting {:id id + :invoice-number invoice_number + :vendor-id (:vendor-id invoice) + :company-id (:company-id invoice)})) + (throw (ex-info "that invoice already exists" {:invoice-number invoice_number}))) paid-amount (- (:total invoice) (:outstanding-balance invoice)) _ (assert-can-see-company (:id context) (:company-id invoice)) updated-invoice (invoices/update (-> in diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 27190b92..006b4d28 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -279,7 +279,8 @@ [:expense_accounts [:amount :id :expense_account_id :location [:expense_account [:id :name [:parent [:id :name]]]]]]]]}]} - :on-success [::invoice-edited]}}))) + :on-success [::invoice-edited] + :on-error [::invoice-edit-failed]}}))) (re-frame/reg-event-fx @@ -361,6 +362,12 @@ i)) is))) (dissoc ::edit-invoice))})) + +(re-frame/reg-event-fx + ::invoice-edit-failed + (fn [{:keys [db]} [_ data]] + {:dispatch [::events/modal-failed ::edit-invoice "That invoice already exists."]})) + (re-frame/reg-event-fx ::invoice-voided (fn [{:keys [db]} [_ {:keys [void-invoice]}]]