diff --git a/resources/sample-ledger.csv b/resources/sample-ledger.csv new file mode 100644 index 00000000..2214dcae --- /dev/null +++ b/resources/sample-ledger.csv @@ -0,0 +1,12 @@ +Id Client Source Vendor Date Account Location Debit Credit +ABC DEMO Payroll Dummy 12/19/2018 5310 HQ 100 0 +ABC DEMO Payroll 123551123 12/19/2018 DEMO-1 HQ 0 50 +ABC DEMO Payroll 123551123 12/19/2018 DEMO-1 HQ 0 50 +DEF DEMO Payroll 223551123 12/19/2018 2950 HQ 0 50 +GHI DEMO Payroll 123551123 12/19/2018 21550 HQ 100 0 +1 DEMO Payroll 123551123 12/19/2018 21550 HQ 100 0 +234 DEMO Payroll 123551123 12/19/2018 21550 HQ 100 0 +8912 DEMO Payroll 123551123 12/19/2018 21550 HQ 100 0 +aosentuh DEMO Payroll 123551123 12/19/2018 21550 HQ 100 0 +aonet DEMO Payroll 123551123 12/19/2018 2750 HQ 0 50 +1923 DEMO Payroll 123551123 12/19/2018 2950 HQ 0 50 diff --git a/src/clj/auto_ap/datomic/transactions.clj b/src/clj/auto_ap/datomic/transactions.clj index 83375bd8..e73a7105 100644 --- a/src/clj/auto_ap/datomic/transactions.clj +++ b/src/clj/auto_ap/datomic/transactions.clj @@ -2,7 +2,8 @@ (:require [datomic.api :as d] [auto-ap.datomic :refer [uri merge-query apply-sort-2 apply-sort apply-pagination add-sorter-field]] [auto-ap.graphql.utils :refer [limited-clients]] - [clj-time.coerce :as c])) + [clj-time.coerce :as c] + [clj-time.coerce :as coerce])) (defn sort-fn [sort-by] (cond @@ -51,6 +52,17 @@ (merge-query {:query {:in ['?client-id] :where ['[?e :transaction/client ?client-id]]} :args [(:client-id args)]}) + (:start (:date-range args)) + (merge-query {:query {:in ['?start-date] + :where ['[?e :transaction/date ?date] + '[(>= ?date ?start-date)]]} + :args [(coerce/to-date (:start (:date-range args)))]}) + + (:end (:date-range args)) + (merge-query {:query {:in ['?end-date] + :where ['[?e :transaction/date ?date] + '[(<= ?date ?end-date)]]} + :args [(coerce/to-date (:end (:date-range args)))]}) (:client-code args) (merge-query {:query {:in ['?client-code] diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 3c16a157..112f1c0e 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -325,6 +325,7 @@ :transaction_page {:type '(list :transaction_page) :args {:client_id {:type :id} :bank_account_id {:type :id} + :date_range {:type :date_range} :start {:type 'Int} :sort_by {:type 'String} :asc {:type 'Boolean}} @@ -368,6 +369,9 @@ :invoice_payment_amount {:fields {:invoice_id {:type :id} :amount {:type 'Float}}} + :date_range {:fields {:start {:type :iso_date} + :end {:type :iso_date}}} + :import_ledger_line_item {:fields {:account_identifier {:type 'String} :location {:type 'String} :debit {:type 'String} diff --git a/src/cljs/auto_ap/views/components/date_range_filter.cljs b/src/cljs/auto_ap/views/components/date_range_filter.cljs new file mode 100644 index 00000000..ce46d5b3 --- /dev/null +++ b/src/cljs/auto_ap/views/components/date_range_filter.cljs @@ -0,0 +1,38 @@ +(ns auto-ap.views.components.date-range-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]])) + +(defn date-range-filter [{:keys [value on-change-event]}] + [:div.field + [:div.control + [:div.columns.is-variable.is-1 + [:div.column + [bind-field + [date-picker {:class-name "input is-fullwidth" + :class "input" + :format-week-number (fn [] "") + :previous-month-button-label "" + :placeholder "Start Date mm/dd/yyyy" + :next-month-button-label "" + :next-month-label "" + :event on-change-event + :type "date" + :field [:start] + :subscription value}]]] + [:div.column.is-narrow " to "] + [:div.column + [bind-field + [date-picker {:class-name "input is-fullwidth" + :class "input" + :format-week-number (fn [] "") + :previous-month-button-label "" + :placeholder "Start Date mm/dd/yyyy" + :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 d72eb19d..7a050bde 100644 --- a/src/cljs/auto_ap/views/pages/transactions.cljs +++ b/src/cljs/auto_ap/views/pages/transactions.cljs @@ -3,6 +3,7 @@ [auto-ap.forms :as forms] [auto-ap.subs :as subs] [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.layouts :refer [appearing-side-bar side-bar-layout]] [auto-ap.views.components.modal :refer [action-modal]] [auto-ap.views.components.paginator :refer [paginator]] @@ -12,7 +13,7 @@ [auto-ap.views.pages.transactions.common :refer [transaction-read]] [auto-ap.utils :refer [replace-by]] [auto-ap.views.pages.transactions.manual :as manual] - [auto-ap.views.utils :refer [bind-field date->str dispatch-event nf]] + [auto-ap.views.utils :refer [bind-field date->str dispatch-event nf date-picker]] [goog.string :as gstring] [re-frame.core :as re-frame])) @@ -63,7 +64,7 @@ ::received (fn [db [_ data]] (-> db - (assoc ::transaction-page (first (:transaction-page data))) + (update ::transaction-page merge (first (:transaction-page data))) (assoc-in [:status :loading] false)))) (re-frame/reg-event-db @@ -78,6 +79,17 @@ (assoc-in updated [::params :bank-account-id] value)) updated)))) + +(re-frame/reg-event-fx + ::change-selected-date-range + (fn [{:keys [db]} [_ key value]] + (let [[key] key + updated (-> db + (assoc-in [::transaction-page :date-range-filter key] value) + (assoc-in [::params :date-range key] value))] + {:dispatch [::params-change (::params updated)] + :db updated}))) + (re-frame/reg-sub ::notification (fn [db] @@ -130,7 +142,12 @@ [bank-account-filter {:on-change-event [::change-selected-bank-account] :value (:bank-acount-filter @(re-frame/subscribe [::transaction-page])) - :bank-accounts @(re-frame/subscribe [::subs/bank-accounts])}]]] + :bank-accounts @(re-frame/subscribe [::subs/bank-accounts])}]] + [:p.menu-label "Date Range"] + [:div + [date-range-filter + {:on-change-event [::change-selected-date-range] + :value (:date-range-filter @(re-frame/subscribe [::transaction-page]))}]]] :main [transactions-content] :right-side-bar [appearing-side-bar {:visible? transaction-bar-active?} diff --git a/src/cljs/auto_ap/views/pages/transactions/table.cljs b/src/cljs/auto_ap/views/pages/transactions/table.cljs index eb500e61..41dc6f2e 100644 --- a/src/cljs/auto_ap/views/pages/transactions/table.cljs +++ b/src/cljs/auto_ap/views/pages/transactions/table.cljs @@ -123,7 +123,8 @@ [drop-down {:id [::expense-accounts id ] :header [:a.button {:aria-haspopup true :on-click (dispatch-event [::events/toggle-menu [::expense-accounts id]]) - :tab-index "0"} "i"]} + :tab-index "0"} + [:span.icon-saving-bank-1]]} [drop-down-contents [:div [:span.dropdown-item description-original ]]]]