From 581e5e8798d367f20a917a41e822f90e3250638b Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Wed, 25 Jul 2018 16:28:24 -0700 Subject: [PATCH] added ability to void invoices. --- resources/public/index.html | 13 ++++++++ src/clj/auto_ap/db/invoices.clj | 2 +- src/clj/auto_ap/graphql.clj | 4 +++ src/clj/auto_ap/graphql/invoices.clj | 12 ++++++- .../views/components/invoice_table.cljs | 10 ++++-- .../auto_ap/views/pages/unpaid_invoices.cljs | 33 +++++++++++++++++++ 6 files changed, 69 insertions(+), 5 deletions(-) diff --git a/resources/public/index.html b/resources/public/index.html index c3b5cb31..146046d0 100644 --- a/resources/public/index.html +++ b/resources/public/index.html @@ -53,6 +53,16 @@ translateY(-100%); } } + @keyframes flashWarning { + from { + + } + to { + + background-color: #00d1b2; + } + } + @keyframes flashPrimary { from { transform: translateY(100%); @@ -65,6 +75,9 @@ } } + tbody tr.live-removed { + animation: flashWarning 1.0s ease both; + } tbody tr.live-added { animation: flashPrimary 1.0s ease both; } diff --git a/src/clj/auto_ap/db/invoices.clj b/src/clj/auto_ap/db/invoices.clj index 069d8b50..07985ea4 100644 --- a/src/clj/auto_ap/db/invoices.clj +++ b/src/clj/auto_ap/db/invoices.clj @@ -64,7 +64,7 @@ (j/update! (get-conn) :invoices {:imported true} [] )) (defn update [v] - (j/update! (get-conn) :invoices v ["id = ?" (:id v)]) + (j/update! (get-conn) :invoices (clj->db v) ["id = ?" (:id v)]) (get-by-id (:id v))) (defn reject [] diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 1e278021..265b39ae 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -290,6 +290,9 @@ :edit_invoice {:type :invoice :args {:invoice {:type :edit_invoice}} :resolve :mutation/edit-invoice} + :void_invoice {:type :invoice + :args {:invoice_id {:type 'Int}} + :resolve :mutation/void-invoice} :edit_expense_accounts {:type :invoice :args {:invoice_id {:type 'Int} :expense_accounts {:type '(list :edit_expense_account)}} @@ -504,6 +507,7 @@ :mutation/edit-user gq-users/edit-user :mutation/add-invoice gq-invoices/add-invoice :mutation/edit-invoice gq-invoices/edit-invoice + :mutation/void-invoice gq-invoices/void-invoice :mutation/edit-expense-accounts gq-invoices/edit-expense-accounts :get-vendor get-vendor :get-expense-account expense-accounts/get-expense-account diff --git a/src/clj/auto_ap/graphql/invoices.clj b/src/clj/auto_ap/graphql/invoices.clj index 6e9f30cd..6969692f 100644 --- a/src/clj/auto_ap/graphql/invoices.clj +++ b/src/clj/auto_ap/graphql/invoices.clj @@ -39,7 +39,17 @@ _ (assert-can-see-company (:id context) (:company-id invoice)) updated-invoice (invoices/update (-> in (update :date parse iso-date) - (assoc :outstanding_balance (- (:total in) paid-amount))))] + (assoc :outstanding-balance (- (:total in) paid-amount))))] + (-> updated-invoice + (->graphql)))) + +(defn void-invoice [context {id :invoice_id} value] + (let [invoice (invoices/get-by-id id) + _ (assert-can-see-company (:id context) (:company-id invoice)) + updated-invoice (invoices/update {:id id + :total 0 + :outstanding-balance 0 + :status "voided"})] (-> updated-invoice (->graphql)))) diff --git a/src/cljs/auto_ap/views/components/invoice_table.cljs b/src/cljs/auto_ap/views/components/invoice_table.cljs index 0c06ef77..fa0ee398 100644 --- a/src/cljs/auto_ap/views/components/invoice_table.cljs +++ b/src/cljs/auto_ap/views/components/invoice_table.cljs @@ -55,7 +55,7 @@ -(defn invoice-table [{:keys [id invoice-page status on-params-change vendors params check-boxes checked on-check-changed on-edit-invoice expense-event]}] +(defn invoice-table [{:keys [id invoice-page status on-params-change vendors params check-boxes checked on-check-changed on-edit-invoice on-void-invoice expense-event]}] (let [state (reagent/atom (or @params {})) visible-checks @(re-frame/subscribe [::visible-checks]) visible-expense-accounts @(re-frame/subscribe [::visible-expense-accounts]) @@ -180,9 +180,13 @@ [:hr.dropdown-divider] - [:a.dropdown-item.is-primary {:on-click (dispatch-event (conj expense-event id))} "Change"]]]]) + (when expense-event + [:a.dropdown-item.is-primary {:on-click (dispatch-event (conj expense-event id))} "Change"])]]]) [:span {:style {:margin-left "1em"}}] - [:button.button {:on-click (fn [] (on-edit-invoice i))} [:span [:span.icon [:i.fa.fa-pencil]] " Edit"]] + (when on-edit-invoice + [:button.button {:on-click (fn [] (on-edit-invoice i))} [:span.icon [:i.fa.fa-pencil]]]) + (when (and on-void-invoice (= (:outstanding-balance i) (:total i))) + [:button.button.is-warning.is-outlined {:on-click (fn [] (on-void-invoice i))} [:span [:span.icon [:i.fa.fa-undo]]]]) (when (seq checks) [:div.dropdown.is-right {:class (if (= id visible-checks) diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 3f864908..4dc770f5 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -278,6 +278,25 @@ [:expense_account [:id :name [:parent [:id :name]]]]]]]]}]} :on-success [::invoice-edited]}}))) + +(re-frame/reg-event-fx + ::void-invoice + (fn [{:keys [db]} [_ {id :id}]] + {:graphql + {:token (-> db :user) + :query-obj {:venia/operation {:operation/type :mutation + :operation/name "VoidInvoice"} + + :venia/queries [{:query/data [:void-invoice + {:invoice-id id} + [:id :total :outstanding-balance :date :invoice-number + [:company [:id :name :locations]] + [:vendor [:id :name]] + [:expense_accounts [:amount :id :expense_account_id + :location + [:expense_account [:id :name [:parent [:id :name]]]]]]]]}]} + :on-success [::invoice-voided]}})) + (re-frame/reg-event-fx ::handwrite-checks-save (fn [{:keys [db]} _] @@ -334,6 +353,17 @@ i)) is))) (dissoc ::edit-invoice))})) +(re-frame/reg-event-fx + ::invoice-voided + (fn [{:keys [db]} [_ {:keys [void-invoice]}]] + {:db (-> db + (update-in [::invoice-page :invoices] + (fn [is] + (mapv (fn [i] + (if (= (:id i) (:id void-invoice)) + (assoc void-invoice :class "live-removed") + i)) is))))})) + (re-frame/reg-event-fx ::change-expense-accounts (fn [{:keys [db]} [_ id]] @@ -755,6 +785,9 @@ :status (re-frame/subscribe [::subs/status]) :on-edit-invoice (fn [which] (re-frame/dispatch [::edit-invoice which])) + + :on-void-invoice (fn [which] + (re-frame/dispatch [::void-invoice which])) :on-params-change (fn [params] (re-frame/dispatch [::params-change params])) :check-boxes true