diff --git a/src/clj/auto_ap/datomic/transactions.clj b/src/clj/auto_ap/datomic/transactions.clj index 2d631b0f..40c10373 100644 --- a/src/clj/auto_ap/datomic/transactions.clj +++ b/src/clj/auto_ap/datomic/transactions.clj @@ -59,6 +59,18 @@ (merge-query {:query {:in ['?vendor-id] :where ['[?e :transaction/vendor ?vendor-id]]} :args [(:vendor-id args)]}) + (:amount-gte args) + (merge-query {:query {:in ['?amount-gte] + :where ['[?e :transaction/amount ?a] + '[(>= ?a ?amount-gte)]]} + :args [(:amount-gte args)]}) + + (:amount-lte args) + (merge-query {:query {:in ['?amount-lte] + :where ['[?e :transaction/amount ?a] + '[(<= ?a ?amount-lte)]]} + :args [(:amount-lte args)]}) + (:start (:date-range args)) (merge-query {:query {:in ['?start-date] :where ['[?e :transaction/date ?date] diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 04dc0f00..f6997ec7 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -399,6 +399,8 @@ :vendor_id {:type :id} :bank_account_id {:type :id} :date_range {:type :date_range} + :amount_lte {:type :money} + :amount_gte {:type :money} :start {:type 'Int} :sort_by {:type 'String} :asc {:type 'Boolean} diff --git a/src/cljs/auto_ap/views/pages/transactions.cljs b/src/cljs/auto_ap/views/pages/transactions.cljs index 50a682a2..80a25f22 100644 --- a/src/cljs/auto_ap/views/pages/transactions.cljs +++ b/src/cljs/auto_ap/views/pages/transactions.cljs @@ -6,6 +6,7 @@ [auto-ap.routes :as routes] [auto-ap.views.components.bank-account-filter :refer [bank-account-filter]] [auto-ap.views.components.date-range-filter :refer [date-range-filter]] + [auto-ap.views.components.number-filter :refer [number-filter]] [auto-ap.views.components.vendor-filter :refer [vendor-filter]] [auto-ap.views.components.typeahead :refer [typeahead-entity]] [auto-ap.views.components.layouts :refer [appearing-side-bar side-bar-layout]] @@ -94,6 +95,16 @@ {:dispatch [::params-change (::params updated)] :db updated}))) +(re-frame/reg-event-fx + ::change-selected-amount-range + (fn [{:keys [db]} [_ key value]] + (let [[key] key + updated (-> db + (assoc-in [::transaction-page :amount-range-filter key] value) + (assoc-in [::params key] value))] + {:dispatch [::params-change (::params updated)] + :db updated}))) + (re-frame/reg-event-fx ::change-selected-vendor (fn [{:keys [db]} [_ vendor]] @@ -202,6 +213,12 @@ {:on-change-event [::change-selected-date-range] :value (:date-range-filter @(re-frame/subscribe [::transaction-page]))}]] + [:p.menu-label "Amount"] + [:div + [number-filter + {:on-change-event [::change-selected-amount-range] + :value (:amount-range-filter @(re-frame/subscribe [::transaction-page]))}]] + [:p.menu-label "Vendor"] [:div [typeahead-entity {:matches @(re-frame/subscribe [::subs/vendors])