sales orders and transactions better.
This commit is contained in:
@@ -81,18 +81,19 @@
|
||||
(re-frame/reg-event-fx
|
||||
::saving
|
||||
[with-user (forms/triggers-loading ::form) (forms/in-form ::form)]
|
||||
(fn [{:keys [user]} [_ params]]
|
||||
(fn [{:keys [user]} [_]]
|
||||
{:graphql
|
||||
{:token user
|
||||
:query-obj @(re-frame/subscribe [::submit-query])
|
||||
:on-success [::edited params]
|
||||
:on-success (fn [result]
|
||||
[::edited (:edit-transaction result)])
|
||||
:on-error [::forms/save-error ::form]}}))
|
||||
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::matching
|
||||
[with-user (forms/triggers-loading ::form) (forms/in-form ::form)]
|
||||
(fn [{{{:keys [id]} :data} :db user :user} [_ params payment-id]]
|
||||
(fn [{{{:keys [id]} :data} :db user :user} [_ payment-id]]
|
||||
{:graphql
|
||||
{:token user
|
||||
:query-obj {:venia/operation {:operation/type :mutation
|
||||
@@ -101,13 +102,14 @@
|
||||
{:transaction_id id
|
||||
:payment-id payment-id}
|
||||
transaction-read]}]}
|
||||
:on-success [::edited params]
|
||||
:on-success (fn [result]
|
||||
[::edited (:match-transaction result)])
|
||||
:on-error [::forms/save-error ::form]}}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::matching-rule
|
||||
[with-user (forms/triggers-loading ::form) (forms/in-form ::form)]
|
||||
(fn [{{{:keys [id]} :data} :db user :user} [_ params transaction-rule-id]]
|
||||
(fn [{{{:keys [id]} :data} :db user :user} [_ transaction-rule-id]]
|
||||
{:graphql
|
||||
{:token user
|
||||
:query-obj {:venia/operation {:operation/type :mutation
|
||||
@@ -116,14 +118,16 @@
|
||||
{:transaction-ids [id]
|
||||
:transaction-rule-id transaction-rule-id}
|
||||
transaction-read]}]}
|
||||
:on-success [::edited params]
|
||||
:on-success (fn [result]
|
||||
[::edited (first (:match-transaction-rules result))])
|
||||
:on-error [::forms/save-error ::form]}}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::edited
|
||||
[(forms/triggers-stop ::form)]
|
||||
(fn [{:keys [db]} [_ {:keys [edit-completed]} {:keys [edit-transaction match-transaction match-transaction-rules]}]]
|
||||
{:dispatch (conj edit-completed (or edit-transaction match-transaction (first match-transaction-rules)))}))
|
||||
(fn [{:keys [db]} [_ transaction]]
|
||||
{}))
|
||||
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::manual-match
|
||||
@@ -158,7 +162,7 @@
|
||||
[:tr
|
||||
[:td.no-border note]
|
||||
[:td.no-border
|
||||
[:a.button.is-primary.is-small {:on-click (dispatch-event [::matching-rule params id])}
|
||||
[:a.button.is-primary.is-small {:on-click (dispatch-event [::matching-rule id])}
|
||||
"Use this rule"]]])]])
|
||||
|
||||
|
||||
@@ -177,11 +181,11 @@
|
||||
[:td.no-border (:name vendor)]
|
||||
[:td.no-border (when check-number (str "Check " check-number " ")) memo]
|
||||
[:td.no-border
|
||||
[:a.button.is-primary.is-small {:on-click (dispatch-event [::matching params id])}
|
||||
[:a.button.is-primary.is-small {:on-click (dispatch-event [::matching id])}
|
||||
"Match"]]]))]])
|
||||
|
||||
|
||||
(defn form [{:keys [edit-completed]}]
|
||||
(defn form [_]
|
||||
[layouts/side-bar {:on-close (dispatch-event [::forms/form-closing ::form])}
|
||||
(let [change-event [::forms/change ::form]
|
||||
{:keys [data] } @(re-frame/subscribe [::forms/form ::form])
|
||||
@@ -190,7 +194,7 @@
|
||||
is-admin? @(re-frame/subscribe [::subs/is-admin?])
|
||||
should-disable-for-client? (and (not is-admin?)
|
||||
(not= :requires-feedback (:original-status data)))]
|
||||
[form {:title "Transaction" :edit-completed edit-completed}
|
||||
[form {:title "Transaction"}
|
||||
|
||||
(when (and @(re-frame/subscribe [::subs/is-admin?])
|
||||
(get-in data [:yodlee-merchant]))
|
||||
@@ -221,15 +225,13 @@
|
||||
(not (:matched-rule data))
|
||||
(not (:payment data))
|
||||
is-admin?)
|
||||
[potential-transaction-rule-matches-box {:potential-transaction-rule-matches (:potential-transaction-rule-matches data)
|
||||
:edit-completed edit-completed}]
|
||||
[potential-transaction-rule-matches-box {:potential-transaction-rule-matches (:potential-transaction-rule-matches data)}]
|
||||
|
||||
|
||||
(and (seq (:potential-payment-matches data))
|
||||
(not (:payment data))
|
||||
is-admin?)
|
||||
[potential-payment-matches-box {:potential-payment-matches (:potential-payment-matches data)
|
||||
:edit-completed edit-completed}]
|
||||
[potential-payment-matches-box {:potential-payment-matches (:potential-payment-matches data)}]
|
||||
|
||||
(and (not (seq (:potential-payment-matches data)))
|
||||
(not (seq (:potential-transaction-rule-matches data))))
|
||||
|
||||
@@ -7,90 +7,12 @@
|
||||
[auto-ap.views.components.bank-account-filter :refer [bank-account-filter]]
|
||||
[auto-ap.views.components.typeahead :refer [typeahead-entity]]
|
||||
[bidi.bidi :as bidi]
|
||||
[re-frame.core :as re-frame]))
|
||||
(re-frame/reg-sub
|
||||
::specific-filters
|
||||
(fn [db ]
|
||||
(::filters db {})))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::filters
|
||||
:<- [::specific-filters]
|
||||
:<- [::subs/vendors-by-id]
|
||||
:<- [::subs/bank-accounts-by-id]
|
||||
:<- [::subs/query-params]
|
||||
(fn [[specific-filters vendors-by-id bank-accounts-by-id query-params] ]
|
||||
|
||||
|
||||
(let [url-filters (-> query-params
|
||||
(select-keys #{:vendor-id
|
||||
:bank-account-id
|
||||
:date-range
|
||||
:description
|
||||
:amount-gte
|
||||
:amount-lte}))
|
||||
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...")})
|
||||
:bank-account (when-let [bank-account-id (:bank-account-id url-filters)]
|
||||
{:id (str bank-account-id)
|
||||
:name (get-in bank-accounts-by-id [(str bank-account-id) :name] "Loading...")})
|
||||
:amount-range {:amount-gte (:amount-gte url-filters)
|
||||
:amount-lte (:amount-lte url-filters)}
|
||||
:description (:description url-filters)
|
||||
:date-range (:date-range url-filters)}]
|
||||
(merge url-filters specific-filters ))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::filter
|
||||
:<- [::filters]
|
||||
(fn [filters [_ which]]
|
||||
(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 [[settled-filters filters ap]]
|
||||
(let [filters (or settled-filters filters)]
|
||||
{:vendor-id (:id (:vendor filters))
|
||||
:date-range (:date-range filters)
|
||||
:bank-account-id (:id (:bank-account filters))
|
||||
:amount-gte (:amount-gte (:amount-range filters))
|
||||
:amount-lte (:amount-lte (:amount-range filters))
|
||||
:description (:description filters)
|
||||
:approval-status (condp = ap
|
||||
:transactions nil
|
||||
:unapproved-transactions :unapproved
|
||||
:requires-feedback-transactions :requires-feedback
|
||||
:excluded-transactions :excluded
|
||||
:approved-transactions :approved)})))
|
||||
(re-frame/reg-event-fx
|
||||
::filters-settled
|
||||
(fn [{:keys [db]} [_ & params]]
|
||||
{:db (assoc db ::settled-filters @(re-frame/subscribe [::filters]))}))
|
||||
[re-frame.core :as re-frame]
|
||||
[auto-ap.views.pages.data-page :as data-page]))
|
||||
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::filter-changed
|
||||
(fn [{:keys [db]} [_ & params]]
|
||||
(let [[a b c] params
|
||||
[which val] (if (= 3 (count params))
|
||||
[(into [a] b) c]
|
||||
[[a] b])]
|
||||
{:db (assoc-in db (into [::filters] which) val)
|
||||
:dispatch-debounce
|
||||
{:event [::filters-settled]
|
||||
:time 800
|
||||
:key ::filters}})))
|
||||
|
||||
(defn side-bar []
|
||||
(defn side-bar [{:keys [data-page]}]
|
||||
(let [ap @(re-frame/subscribe [::subs/active-page])
|
||||
user @(re-frame/subscribe [::subs/user])]
|
||||
[:div
|
||||
@@ -131,34 +53,35 @@
|
||||
[:p.menu-label "Bank Account"]
|
||||
[:div
|
||||
[bank-account-filter
|
||||
{:on-change-event [::filter-changed :bank-account]
|
||||
:value @(re-frame/subscribe [::filter :bank-account])
|
||||
{:on-change-event [::data-page/filter-changed data-page :bank-account]
|
||||
:value @(re-frame/subscribe [::data-page/filter data-page :bank-account])
|
||||
:bank-accounts @(re-frame/subscribe [::subs/bank-accounts])}]]
|
||||
|
||||
[:p.menu-label "Date Range"]
|
||||
[:div
|
||||
[date-range-filter
|
||||
{:on-change-event [::filter-changed :date-range]
|
||||
:value @(re-frame/subscribe [::filter :date-range])}]]
|
||||
{:on-change-event [::data-page/filter-changed data-page :date-range]
|
||||
:value @(re-frame/subscribe [::data-page/filter data-page :date-range])}]]
|
||||
|
||||
[:p.menu-label "Amount"]
|
||||
[:p.menu-label "Amount"]
|
||||
[:div
|
||||
[number-filter
|
||||
{:on-change-event [::filter-changed :amount-range]
|
||||
:value @(re-frame/subscribe [::filter :amount-range])}]]
|
||||
{:on-change-event [::data-page/filter-changed data-page :amount-range]
|
||||
:value @(re-frame/subscribe [::data-page/filter data-page :amount-range])}]]
|
||||
|
||||
[:p.menu-label "Vendor"]
|
||||
[:div
|
||||
[typeahead-entity {:matches @(re-frame/subscribe [::subs/vendors])
|
||||
:on-change #(re-frame/dispatch [::filter-changed :vendor %])
|
||||
:on-change #(re-frame/dispatch [::data-page/filter-changed data-page :vendor %])
|
||||
:include-keys [:name :id]
|
||||
:match->text :name
|
||||
:type "typeahead-entity"
|
||||
:value @(re-frame/subscribe [::filter :vendor])}]]
|
||||
:value @(re-frame/subscribe [::data-page/filter data-page :vendor])}]]
|
||||
|
||||
[:p.menu-label "Description"]
|
||||
[:div
|
||||
[:div.field
|
||||
[:div.control [:input.input {:placeholder "CHECK 123 ABC"
|
||||
:value @(re-frame/subscribe [::filter :description])
|
||||
:on-change (dispatch-value-change [::filter-changed :description])} ]]]]]))
|
||||
:value @(re-frame/subscribe [::data-page/filter data-page :description])
|
||||
:on-change (dispatch-value-change [::data-page/filter-changed data-page :description])} ]]]]]))
|
||||
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
[goog.string :as gstring]
|
||||
[re-frame.core :as re-frame]
|
||||
[auto-ap.views.components.buttons :as buttons]
|
||||
[auto-ap.status :as status]))
|
||||
[auto-ap.status :as status]
|
||||
[auto-ap.views.pages.data-page :as data-page]))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::editing-matches-found
|
||||
@@ -54,15 +55,13 @@
|
||||
(fn [{table-params :db} [_ params :as z]]
|
||||
{:db (merge table-params params)}))
|
||||
|
||||
(defn table [{:keys [id transaction-page status]}]
|
||||
(defn table [{:keys [id data-page ]}]
|
||||
(let [selected-client @(re-frame/subscribe [::subs/client])
|
||||
{:keys [data status]} @(re-frame/subscribe [::data-page/page data-page])
|
||||
states @(re-frame/subscribe [::status/multi ::edits])]
|
||||
[grid/grid {:on-params-change (fn [e]
|
||||
(re-frame/dispatch [::params-changed e]))
|
||||
:params @(re-frame/subscribe [::table-params])
|
||||
:status status
|
||||
[grid/grid {:data-page data-page
|
||||
:column-count (if selected-client 6 7)}
|
||||
[grid/controls transaction-page]
|
||||
[grid/controls data]
|
||||
[grid/table {:fullwidth true}
|
||||
[grid/header {}
|
||||
[grid/row {}
|
||||
@@ -75,7 +74,7 @@
|
||||
[grid/sortable-header-cell {:sort-key "status" :sort-name "Status" :style {:width "7em"}} "Status"]
|
||||
[grid/header-cell {:style {:width (action-cell-width 3)}}]]]
|
||||
[grid/body
|
||||
(for [{:keys [client account vendor approval-status payment status bank-account description-original date amount id yodlee-merchant ] :as i} (:transactions transaction-page)]
|
||||
(for [{:keys [client account vendor approval-status payment status bank-account description-original date amount id yodlee-merchant ] :as i} (:data data)]
|
||||
^{:key id}
|
||||
[grid/row {:class (:class i)}
|
||||
(when-not selected-client
|
||||
|
||||
Reference in New Issue
Block a user