From 9e00372857a972ca5ba4782099d09fb850bed788 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Mon, 30 Jul 2018 09:23:56 -0700 Subject: [PATCH] you can't add an existing invoice. --- src/clj/auto_ap/db/invoices.clj | 9 +++++++++ src/clj/auto_ap/graphql/invoices.clj | 4 ++++ src/cljs/auto_ap/events.cljs | 8 ++++++++ src/cljs/auto_ap/views/components/modal.cljs | 12 ++++++++---- src/cljs/auto_ap/views/pages/unpaid_invoices.cljs | 8 +++++++- 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/clj/auto_ap/db/invoices.clj b/src/clj/auto_ap/db/invoices.clj index 9d64be55..1baff022 100644 --- a/src/clj/auto_ap/db/invoices.clj +++ b/src/clj/auto_ap/db/invoices.clj @@ -63,6 +63,15 @@ (defn get-all [] (query base-query)) +(defn find-conflicting [{:keys [id invoice-number company-id vendor-id]}] + (query + (-> base-query + (helpers/merge-where [:and [:not= :id id] + [:= :invoice-number invoice-number] + [:= :company-id company-id] + [:= :vendor-id vendor-id] + [:not= :status "voided"]])))) + (defn get-multi [ids] (query (-> base-query (helpers/merge-where [:in :id ids])))) diff --git a/src/clj/auto_ap/graphql/invoices.clj b/src/clj/auto_ap/graphql/invoices.clj index 3b97f56a..f743d063 100644 --- a/src/clj/auto_ap/graphql/invoices.clj +++ b/src/clj/auto_ap/graphql/invoices.clj @@ -13,6 +13,10 @@ (vendors/insert {:name vendor-name :default-expense-account 0}))) (defn add-invoice [context {{:keys [total invoice_number location company_id vendor_id vendor_name date] :as in} :invoice} value] + (when (seq (invoices/find-conflicting {:invoice-number invoice_number + :vendor-id vendor_id + :company-id company_id})) + (throw (ex-info "that invoice already exists" {:invoice-number invoice_number}))) (let [vendor (-create-or-get-vendor vendor_id vendor_name) _ (assert-can-see-company (:id context) company_id) company (companies/get-by-id company_id) diff --git a/src/cljs/auto_ap/events.cljs b/src/cljs/auto_ap/events.cljs index 12f79b78..2e3ca5e4 100644 --- a/src/cljs/auto_ap/events.cljs +++ b/src/cljs/auto_ap/events.cljs @@ -85,6 +85,14 @@ (println "changing modal status" id "to") (update-in db [:modal-state id] #(merge % state)))) +(re-frame/reg-event-db + ::modal-failed + (fn [db [_ id message]] + (println "CURRENT" (get-in db [:modal-state])) + (-> db + (assoc-in [:modal-state id :saving?] false) + (assoc-in [:modal-state id :error-message] message)))) + (re-frame/reg-event-db ::modal-completed (fn [db [_ id state]] diff --git a/src/cljs/auto_ap/views/components/modal.cljs b/src/cljs/auto_ap/views/components/modal.cljs index 25ba0800..e8ab876a 100644 --- a/src/cljs/auto_ap/views/components/modal.cljs +++ b/src/cljs/auto_ap/views/components/modal.cljs @@ -22,9 +22,10 @@ foot])]]) (defn action-modal [{:keys [title action-text id save-event can-submit?] :or {can-submit? true}} & rest] - (let [{:keys [visible? saving?]} @(re-frame/subscribe [::subs/modal-state id])] + (let [{:keys [visible? saving? error-message]} @(re-frame/subscribe [::subs/modal-state id])] (when visible? - (-> [modal {:title title + (-> [modal {:title [:span title + ] :foot [:input.button.is-primary {:type "submit" :tab-index "0" :form id @@ -45,7 +46,10 @@ (into [:form {:id id :on-submit (fn [e] (.preventDefault e) - (re-frame/dispatch [::events/modal-status id {:saving? true}]) - (re-frame/dispatch save-event))}] + (re-frame/dispatch [::events/modal-status id {:saving? true :error-message nil}]) + (re-frame/dispatch save-event))} + (when error-message + [:div.notification.is-warning error-message])] + (r/children (r/current-component)) )] (into [(when saving? [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])]))))) diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index f76a5d2f..27190b92 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -259,7 +259,8 @@ :location [:expense_account [:id :name [:parent [:id :name]]]]]] ]]}]} - :on-success [::invoice-created]}}))) + :on-success [::invoice-created] + :on-error [::invoice-create-failed]}}))) (re-frame/reg-event-fx ::edit-invoice-save @@ -331,6 +332,11 @@ invoices))) (dissoc ::handwrite-checks))}))) +(re-frame/reg-event-fx + ::invoice-create-failed + (fn [{:keys [db]} [_ data]] + {:dispatch [::events/modal-failed ::new-invoice "That invoice already exists."]})) + (re-frame/reg-event-fx ::invoice-created (fn [{:keys [db]} [_ {:keys [add-invoice]}]]