diff --git a/src/clj/auto_ap/datomic/transactions.clj b/src/clj/auto_ap/datomic/transactions.clj index 40c10373..c050143a 100644 --- a/src/clj/auto_ap/datomic/transactions.clj +++ b/src/clj/auto_ap/datomic/transactions.clj @@ -59,6 +59,8 @@ (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] @@ -100,6 +102,12 @@ '[?c :client/original-id ?original-id]]} :args [(:original-id args)]}) + (:description args) + (merge-query {:query {:in ['?description] + :where ['[?e :transaction/description-original ?do] + '[(.contains ?do ?description)]]} + :args [(:description args)]}) + true (merge-query {:query {:find ['?base-date '?e] :where ['[?e :transaction/id] '[?e :transaction/date ?base-date]]}}))] diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index f6997ec7..f9c877a9 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -401,6 +401,7 @@ :date_range {:type :date_range} :amount_lte {:type :money} :amount_gte {:type :money} + :description {:type 'String} :start {:type 'Int} :sort_by {:type 'String} :asc {:type 'Boolean} diff --git a/src/cljs/auto_ap/views/components/number-filter b/src/cljs/auto_ap/views/components/number-filter new file mode 100644 index 00000000..e9286807 --- /dev/null +++ b/src/cljs/auto_ap/views/components/number-filter @@ -0,0 +1,43 @@ +(ns auto-ap.views.components.number-filter + (:require + [clojure.spec.alpha :as s] + [auto-ap.entities.invoice :as invoice] + [auto-ap.views.components.typeahead :refer [typeahead]] + [auto-ap.views.utils :refer [bind-field date-picker date->str local-now standard]] + [cljs-time.core :as t] + [re-frame.core :as re-frame])) + +(defn dispatch-change [on-change-event start end] + (fn [_] + (re-frame/dispatch (into on-change-event [[:start] start]) ) + (re-frame/dispatch (into on-change-event [[:end] end])))) + +(defn number-filter [{:keys [value on-change-event]}] + [:div + [:div.field.has-addons + [:div.control + [bind-field + [date-picker {:class-name "input is-fullwidth" + :class "input" + :format-week-number (fn [] "") + :previous-month-button-label "" + :placeholder-text "Start" + :next-month-button-label "" + :next-month-label "" + :event on-change-event + :type "date" + :field [:start] + :subscription value}]]] + [:div.control + [bind-field + [date-picker {:class-name "input is-fullwidth" + :class "input" + :format-week-number (fn [] "") + :previous-month-button-label "" + :placeholder-text "End" + :next-month-button-label "" + :event on-change-event + :next-month-label "" + :type "date" + :field [:end] + :subscription value}]]]]]) diff --git a/src/cljs/auto_ap/views/components/number_filter.cljs b/src/cljs/auto_ap/views/components/number_filter.cljs new file mode 100644 index 00000000..ca3786c7 --- /dev/null +++ b/src/cljs/auto_ap/views/components/number_filter.cljs @@ -0,0 +1,62 @@ +(ns auto-ap.views.components.number-filter + (:require + [clojure.spec.alpha :as s] + [auto-ap.entities.invoice :as invoice] + [auto-ap.views.components.typeahead :refer [typeahead]] + [auto-ap.views.utils :refer [bind-field date-picker date->str local-now standard]] + [cljs-time.core :as t] + [re-frame.core :as re-frame])) + +(defn dispatch-change [on-change-event start end] + (fn [_] + (re-frame/dispatch (into on-change-event [[:start] start]) ) + (re-frame/dispatch (into on-change-event [[:end] end])))) + +(defn number-filter [{:keys [value on-change-event]}] + [:div.field + [:div.control + [:div.columns + [:div.column + [bind-field + [:input.input {:type "number" + :placeholder ">=" + :field [:amount-gte] + :step "0.01" + :event on-change-event + :subscription value}]]] + [:div.column + [bind-field + [:input.input {:type "number" + :placeholder "<=" + :field [:amount-lte] + :event on-change-event + :step "0.01" + :subscription value}]]]]]] + #_[:div + [:div.field.has-addons + [:div.control + [bind-field + [date-picker {:class-name "input is-fullwidth" + :class "input" + :format-week-number (fn [] "") + :previous-month-button-label "" + :placeholder-text "Start" + :next-month-button-label "" + :next-month-label "" + :event on-change-event + :type "date" + :field [:start] + :subscription value}]]] + [:div.control + [bind-field + [date-picker {:class-name "input is-fullwidth" + :class "input" + :format-week-number (fn [] "") + :previous-month-button-label "" + :placeholder-text "End" + :next-month-button-label "" + :event on-change-event + :next-month-label "" + :type "date" + :field [:end] + :subscription value}]]]]]) diff --git a/src/cljs/auto_ap/views/pages/transactions.cljs b/src/cljs/auto_ap/views/pages/transactions.cljs index 80a25f22..17027a70 100644 --- a/src/cljs/auto_ap/views/pages/transactions.cljs +++ b/src/cljs/auto_ap/views/pages/transactions.cljs @@ -114,6 +114,24 @@ {:dispatch [::params-change (::params updated)] :db updated}))) +(re-frame/reg-event-fx + ::description-settled + (fn [{:keys [db]} [_ description]] + (let [updated (-> db + (assoc-in [::params :description] description))] + {:dispatch [::params-change (::params updated)] + :db updated}))) + + +(re-frame/reg-event-fx + ::description-changed + (fn [{:keys [db]} [_ description]] + {:dispatch-debounce + {:event [::description-settled description] + :time 500 + :key ::description} + :db (assoc-in db [::transaction-page :description] description)})) + (re-frame/reg-sub ::notification (fn [db] @@ -207,6 +225,7 @@ {:on-change-event [::change-selected-bank-account] :value (:bank-acount-filter @(re-frame/subscribe [::transaction-page])) :bank-accounts @(re-frame/subscribe [::subs/bank-accounts])}]] + [:p.menu-label "Date Range"] [:div [date-range-filter @@ -225,8 +244,15 @@ :on-change #(re-frame/dispatch [::change-selected-vendor %]) :match->text :name :type "typeahead-entity" - :value (:vendor-filter @(re-frame/subscribe [::transaction-page]))}] - ] ] + :value (:vendor-filter @(re-frame/subscribe [::transaction-page]))}]] + + [:p.menu-label "Description"] + [:div + [:div.field + [:div.control [:input.input {:placeholder "CHECK 123 ABC" + :value (:description @(re-frame/subscribe [::transaction-page])) + :on-change (fn [e] + (re-frame/dispatch [::description-changed (.. e -target -value) ]))} ]]]]] :main [(get main-content approval-status)] :bottom [:div