lots of QOL improvements.
This commit is contained in:
@@ -50,7 +50,7 @@
|
||||
(-> params
|
||||
(assoc
|
||||
:client-id (:id @(re-frame/subscribe [::subs/client]))))
|
||||
[[:invoices [:id :total :outstanding-balance :invoice-number :date :due :status :client-identifier
|
||||
[[:invoices [:id :total :outstanding-balance :invoice-number :date :due :status :client-identifier :automatically-paid-when-due
|
||||
[:vendor [:name :id]]
|
||||
[:expense_accounts [:amount :id :location
|
||||
[:account [:id ]]]]
|
||||
@@ -81,17 +81,20 @@
|
||||
{:db (merge table-params params)}))
|
||||
|
||||
(defn row [{:keys [invoice check-boxes checked on-check-changed selected-client overrides expense-event on-edit-invoice on-void-invoice on-unvoid-invoice]}]
|
||||
(let [{:keys [client payments expense-accounts invoice-number date due total outstanding-balance id vendor] :as i} invoice
|
||||
(let [{:keys [client payments expense-accounts invoice-number date due total outstanding-balance id vendor checkable?] :as i} invoice
|
||||
accounts-by-id @(re-frame/subscribe [::subs/accounts-by-id client])
|
||||
account->name #(:name (accounts-by-id (:id %)))]
|
||||
[:tr {:class (:class i)}
|
||||
(when check-boxes
|
||||
[:td [:input.checkbox {:type "checkbox"
|
||||
:checked (if (get checked id)
|
||||
"checked"
|
||||
"")
|
||||
:on-change (fn [x e] (when on-check-changed
|
||||
(on-check-changed id i)))} ]])
|
||||
[:td.expandable
|
||||
[:input.checkbox (cond-> {:type "checkbox"
|
||||
|
||||
:checked (if (get checked id)
|
||||
"checked"
|
||||
"")
|
||||
:on-change (fn [x e] (when on-check-changed
|
||||
(on-check-changed id i)))}
|
||||
(boolean? checkable?) (assoc :disabled (not checkable?))) ]])
|
||||
(when-not selected-client
|
||||
[:td (if-let [client-override (:client overrides)]
|
||||
(client-override i)
|
||||
|
||||
@@ -6,11 +6,12 @@
|
||||
[cljs-time.core :as c]
|
||||
[goog.string :as gstring]
|
||||
[bidi.bidi :as bidi]
|
||||
[auto-ap.utils :refer [deep-merge ]]
|
||||
[auto-ap.routes :as routes]
|
||||
[auto-ap.views.components.date-range-filter :refer [date-range-filter]]
|
||||
[auto-ap.views.components.number-filter :refer [number-filter]]
|
||||
[auto-ap.views.components.typeahead :refer [typeahead-entity]]
|
||||
[auto-ap.views.utils :refer [active-when dispatch-event bind-field horizontal-field date->str str->date pretty standard query-params]]
|
||||
[auto-ap.views.utils :refer [active-when dispatch-event bind-field horizontal-field date->str str->date pretty standard query-params dispatch-value-change]]
|
||||
[auto-ap.subs :as subs]
|
||||
[auto-ap.events :as events]))
|
||||
|
||||
@@ -25,7 +26,6 @@
|
||||
:<- [::subs/vendors-by-id]
|
||||
:<- [::subs/query-params]
|
||||
(fn [[specific-filters vendors-by-id query-params] ]
|
||||
(println "Q:UERY" query-params)
|
||||
(let [url-filters (-> query-params
|
||||
(select-keys #{:vendor-id
|
||||
:date-range
|
||||
@@ -37,16 +37,13 @@
|
||||
url-filters {:vendor (when-let [vendor-id (:vendor-id url-filters)]
|
||||
{:id (str vendor-id)
|
||||
:name (get-in vendors-by-id [(str vendor-id) :name] "Loading...")})
|
||||
:date-range {:raw (:date-range url-filters)
|
||||
:settled (:date-range url-filters)}
|
||||
:date-range (:date-range url-filters)
|
||||
:due-range (:due-range url-filters)
|
||||
:amount-range {:raw {:amount-gte (:amount-gte url-filters)
|
||||
:amount-lte (:amount-lte url-filters)}
|
||||
:settled {:amount-gte (:amount-gte url-filters)
|
||||
:amount-lte (:amount-lte url-filters)}}
|
||||
:invoice-number-like {:raw (str (:invoice-number-like url-filters))
|
||||
:settled (str (:invoice-number-like url-filters))}}]
|
||||
(merge url-filters specific-filters ))))
|
||||
:amount-range {:amount-gte (:amount-gte url-filters)
|
||||
:amount-lte (:amount-lte url-filters)}
|
||||
:invoice-number-like (str (:invoice-number-like url-filters))}]
|
||||
|
||||
(deep-merge url-filters (or specific-filters {}) ))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::filter
|
||||
@@ -54,24 +51,34 @@
|
||||
(fn [filters [_ which]]
|
||||
(get filters which)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::settled-filters
|
||||
(fn [db ]
|
||||
(::settled-filters db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::filter-params
|
||||
:<- [::settled-filters]
|
||||
:<- [::filters]
|
||||
:<- [::subs/active-page]
|
||||
|
||||
(fn [[filters ap ]]
|
||||
{:vendor-id (:id (:vendor filters))
|
||||
:date-range (:settled (:date-range filters))
|
||||
:due-range (:due-range filters)
|
||||
:amount-gte (:amount-gte (:settled (:amount-range filters)))
|
||||
:amount-lte (:amount-lte (:settled (:amount-range filters)))
|
||||
:invoice-number-like (:settled (:invoice-number-like filters))
|
||||
:status (condp = ap
|
||||
:invoices nil
|
||||
:unpaid-invoices :unpaid
|
||||
:paid-invoices :paid
|
||||
:voided-invoices :voided)}))
|
||||
(fn [[settled-filters filters ap ]]
|
||||
(let [filters (or settled-filters filters)]
|
||||
{:vendor-id (:id (:vendor filters))
|
||||
:date-range (:date-range filters)
|
||||
:due-range (:due-range filters)
|
||||
:amount-gte (:amount-gte (:amount-range filters))
|
||||
:amount-lte (:amount-lte (:amount-range filters))
|
||||
:invoice-number-like (:invoice-number-like filters)
|
||||
:status (condp = ap
|
||||
:invoices nil
|
||||
:unpaid-invoices :unpaid
|
||||
:paid-invoices :paid
|
||||
:voided-invoices :voided)})))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::filters-settled
|
||||
(fn [{:keys [db]} [_ & params]]
|
||||
{:db (assoc db ::settled-filters @(re-frame/subscribe [::filters]))}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::filter-changed
|
||||
@@ -80,66 +87,17 @@
|
||||
[which val] (if (= 3 (count params))
|
||||
[(into [a] b) c]
|
||||
[[a] b])]
|
||||
{:db (assoc-in db (into [::filters] which) val)})))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::invoice-number-like-settled
|
||||
[(re-frame/path [::filters :invoice-number-like])]
|
||||
(fn [{:keys [db]} [_ invoice-number-like]]
|
||||
{:db (assoc db :settled invoice-number-like)
|
||||
:dispatch [::filter-changed :invoice-number-like [:settled] invoice-number-like]}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::amount-range-settled
|
||||
[(re-frame/path [::filters :amount-range])]
|
||||
(fn [{:keys [db]} [_ which value]]
|
||||
{:db (assoc-in db [:settled which] value)
|
||||
:dispatch [::filter-changed :amount-range [:settled] (assoc (:settled db) which value)]}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::invoice-number-like-changed
|
||||
[(re-frame/path [::filters :invoice-number-like])]
|
||||
(fn [{:keys [db]} [_ invoice-number-like]]
|
||||
{:dispatch-debounce {:event [::invoice-number-like-settled invoice-number-like]
|
||||
:time 500
|
||||
:key ::invoice-number-like}
|
||||
:db (assoc db :raw invoice-number-like)}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::amount-range-changed
|
||||
[(re-frame/path [::filters :amount-range])]
|
||||
(fn [{:keys [db]} [_ [which] value]]
|
||||
{:dispatch-debounce
|
||||
{:event [::amount-range-settled which value]
|
||||
:time 500
|
||||
:key ::amount-range}
|
||||
:db (assoc-in db [:raw which] value)}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::date-range-settled
|
||||
[(re-frame/path [::filters :date-range])]
|
||||
(fn [{:keys [db]} [_ which value]]
|
||||
{:db (assoc-in db [:settled which] value)
|
||||
:dispatch [::filter-changed :date-range [:settled] (assoc (:settled db) which value)]}))
|
||||
|
||||
;; TODO for some reason reloading is borken, and typing will unset stuff, has nothing to do with it being debounced
|
||||
(re-frame/reg-event-fx
|
||||
::date-range-changed
|
||||
[(re-frame/path [::filters :date-range])]
|
||||
(fn [{:keys [db]} [_ [which] value]]
|
||||
(println which value)
|
||||
{:dispatch-debounce
|
||||
{:event [::date-range-settled which value]
|
||||
:time 1000
|
||||
:key ::date-range}
|
||||
:db (assoc-in db [:raw which] value)}))
|
||||
{:db (assoc-in db (into [::filters] which) val)
|
||||
:dispatch-debounce
|
||||
{:event [::filters-settled]
|
||||
:time 800
|
||||
:key ::filters}})))
|
||||
|
||||
(defn invoice-number-filter []
|
||||
[:div.field
|
||||
[:div.control [:input.input {:placeholder "AP-123"
|
||||
:value (:raw @(re-frame/subscribe [::filter :invoice-number-like]))
|
||||
:on-change (fn [x]
|
||||
(re-frame/dispatch [::invoice-number-like-changed (.. x -target -value) ]))} ]]])
|
||||
:value @(re-frame/subscribe [::filter :invoice-number-like])
|
||||
:on-change (dispatch-value-change [::filter-changed :invoice-number-like ])} ]]])
|
||||
|
||||
(defn invoices-side-bar [params]
|
||||
(let [ap @(re-frame/subscribe [::subs/active-page])
|
||||
@@ -191,8 +149,8 @@
|
||||
[:p.menu-label "Date Range"]
|
||||
[:div
|
||||
[date-range-filter
|
||||
{:on-change-event [::date-range-changed]
|
||||
:value (:raw @(re-frame/subscribe [::filter :date-range]))}]]
|
||||
{:on-change-event [::filter-changed :date-range]
|
||||
:value @(re-frame/subscribe [::filter :date-range])}]]
|
||||
|
||||
[:p.menu-label "Due Range"]
|
||||
[:div
|
||||
@@ -203,8 +161,8 @@
|
||||
[:p.menu-label "Amount"]
|
||||
[:div
|
||||
[number-filter
|
||||
{:on-change-event [::amount-range-changed]
|
||||
:value (:raw @(re-frame/subscribe [::filter :amount-range]))}]]
|
||||
{:on-change-event [::filter-changed :amount-range]
|
||||
:value @(re-frame/subscribe [::filter :amount-range])}]]
|
||||
|
||||
[:p.menu-label "Invoice #"]
|
||||
[:div
|
||||
|
||||
Reference in New Issue
Block a user