From d07367dc191ac544677efe541e68163eed519099 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Sat, 4 May 2019 08:04:08 -0700 Subject: [PATCH] date range filter for everyone. --- src/clj/auto_ap/datomic/invoices.clj | 13 ++++++++++++- src/clj/auto_ap/graphql.clj | 1 + .../auto_ap/views/pages/unpaid_invoices.cljs | 16 ++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/clj/auto_ap/datomic/invoices.clj b/src/clj/auto_ap/datomic/invoices.clj index 4f0707d0..99ebdb78 100644 --- a/src/clj/auto_ap/datomic/invoices.clj +++ b/src/clj/auto_ap/datomic/invoices.clj @@ -1,6 +1,6 @@ (ns auto-ap.datomic.invoices (:require [datomic.api :as d] - [auto-ap.datomic :refer [uri remove-nils]] + [auto-ap.datomic :refer [uri remove-nils merge-query]] [auto-ap.graphql.utils :refer [limited-clients]] [auto-ap.parse :as parse] [clj-time.coerce :as c] @@ -51,6 +51,17 @@ (:original-id args) (add-arg '?original-id (cond-> (:original-id args) (string? (:original-id args)) Long/parseLong ) '[?e :invoice/client ?c] '[?c :client/original-id ?original-id]) + + (:start (:date-range args)) (merge-query {:query {:in '[?start-date] + :where ['[?e :invoice/date ?date] + '[(>= ?date ?start-date)]]} + :args [(c/to-date (:start (:date-range args)))]}) + + (:end (:date-range args)) (merge-query {:query {:in '[?end-date] + :where ['[?e :invoice/date ?date] + '[(<= ?date ?end-date)]]} + :args [(c/to-date (:end (:date-range args)))]}) + (:import-status args) (add-arg '?import-status (keyword "import-status" (:import-status args)) '[?e :invoice/import-status ?import-status]) (:status args) (add-arg '?status (keyword "invoice-status" (:status args)) diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 03fee929..689d7720 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -294,6 +294,7 @@ :invoice_page {:type '(list :invoice_page) :args {:import_status {:type 'String} + :date_range {:type :date_range} :status {:type 'String} :client_id {:type :id} :vendor_id {:type :id} diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 341fc88e..15bb705e 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -14,6 +14,7 @@ [auto-ap.views.components.typeahead :refer [typeahead]] [auto-ap.views.components.vendor-dialog :refer [vendor-dialog]] [auto-ap.views.components.vendor-filter :refer [vendor-filter]] + [auto-ap.views.components.date-range-filter :refer [date-range-filter]] [auto-ap.views.pages.invoices.common :refer [invoice-read]] [auto-ap.views.utils :refer @@ -564,6 +565,16 @@ (assoc-in updated [::params :vendor-id] value)) updated)))) +(re-frame/reg-event-fx + ::change-selected-date-range + (fn [{:keys [db]} [_ key value]] + (let [[key] key + updated (-> db + (assoc-in [::invoice-page :date-range-filter key] value) + (assoc-in [::params :date-range key] value))] + {:dispatch [::params-change (::params updated)] + :db updated}))) + (re-frame/reg-event-fx ::invoice-number-like-current-changed (fn [{:keys [db]} [_ params invoice-like]] @@ -704,6 +715,11 @@ [:div [vendor-filter {:on-change-event [::change-selected-vendor] :value (:vendor-filter @(re-frame/subscribe [::invoice-page])) :vendors @(re-frame/subscribe [::subs/vendors])}]] + [:p.menu-label "Date Range"] + [:div + [date-range-filter + {:on-change-event [::change-selected-date-range] + :value (:date-range-filter @(re-frame/subscribe [::invoice-page]))}]] [:p.menu-label "Invoice #"] [:div [invoice-number-filter]]]]