ledger export
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
[auto-ap.subs :as subs]
|
||||
[auto-ap.views.components.layouts :refer [side-bar-layout]]
|
||||
[auto-ap.views.pages.data-page :as data-page]
|
||||
[auto-ap.views.components.buttons :as buttons]
|
||||
[auto-ap.views.pages.ledger.side-bar
|
||||
:as side-bar
|
||||
:refer [ledger-side-bar]]
|
||||
@@ -12,7 +13,8 @@
|
||||
[clojure.set :as set]
|
||||
[re-frame.core :as re-frame]
|
||||
[reagent.core :as reagent]
|
||||
[vimsical.re-frame.fx.track :as track]))
|
||||
[vimsical.re-frame.fx.track :as track]
|
||||
[vimsical.re-frame.cofx.inject :as inject]))
|
||||
|
||||
(defn data-params->query-params [params]
|
||||
{:start (:start params 0)
|
||||
@@ -31,7 +33,7 @@
|
||||
(re-frame/reg-event-fx
|
||||
::params-change
|
||||
[with-user]
|
||||
(fn [{:keys [user]} [_ params]]
|
||||
(fn [{:keys [user db]} [_ params]]
|
||||
{:graphql {:token user
|
||||
:owns-state {:single [::data-page/page ::page]}
|
||||
:query-obj {:venia/queries [[:ledger-page
|
||||
@@ -56,7 +58,30 @@
|
||||
:end]]]}
|
||||
:on-success (fn [result]
|
||||
[::data-page/received ::page (set/rename-keys (:ledger-page result)
|
||||
{:journal-entries :data})])}}))
|
||||
{:journal-entries :data})])}
|
||||
:db (dissoc db ::csv-content)}))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::csv-content
|
||||
(fn [db]
|
||||
(::csv-content db)))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::csv-exported
|
||||
(fn [{:keys [db]} [_ csv]]
|
||||
{:db (assoc db ::csv-content csv)}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::export-csv
|
||||
[with-user (re-frame/inject-cofx ::inject/sub [::data-page/params ::page])]
|
||||
(fn [{:keys [user db] ::data-page/keys [params]}]
|
||||
{:graphql {:token user
|
||||
:owns-state {:single [::data-page/page ::page]}
|
||||
:query-obj {:venia/queries [[:ledger-csv
|
||||
{:filters (data-params->query-params params)}
|
||||
[:csv_content_b64]]]}
|
||||
:on-success (fn [result]
|
||||
[::csv-exported (:csv-content-b64 (:ledger-csv result))])}}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::unmounted
|
||||
@@ -67,19 +92,33 @@
|
||||
(re-frame/reg-event-fx
|
||||
::mounted
|
||||
(fn [{:keys [db]} _]
|
||||
{:db (assoc-in db [::data-page/settled-filters ::page :date-range] {:start (date->str (time/plus (time/now) (time/months -1))
|
||||
standard)})
|
||||
{:db (-> db (assoc-in [::data-page/settled-filters ::page :date-range] {:start (date->str (time/plus (time/now) (time/months -1))
|
||||
standard)})
|
||||
(assoc ::csv-content nil))
|
||||
::track/register {:id ::params
|
||||
:subscription [::data-page/params ::page]
|
||||
:event-fn (fn [params] [::params-change params])}}))
|
||||
|
||||
|
||||
(defn action-buttons []
|
||||
(let [params @(re-frame/subscribe [::data-page/params ::page])
|
||||
csv-content @(re-frame/subscribe [::csv-content])
|
||||
is-admin? @(re-frame/subscribe [::subs/is-admin?])]
|
||||
(when is-admin?
|
||||
(if csv-content
|
||||
[:a {:href (str "data:attachment/csv;base64," csv-content)
|
||||
:target "_blank"
|
||||
:download (str "ledger.csv")}
|
||||
"Click here to download"]
|
||||
[buttons/event-button {:event [::export-csv]
|
||||
:name "Export"}]))))
|
||||
|
||||
(defn ledger-content []
|
||||
[:div
|
||||
[:h1.title "Ledger"]
|
||||
[table/table {:id :ledger
|
||||
:data-page ::page}]])
|
||||
:data-page ::page
|
||||
:action-buttons [action-buttons]}]])
|
||||
|
||||
|
||||
(defn ledger-page []
|
||||
|
||||
@@ -92,13 +92,13 @@
|
||||
|
||||
#_[grid/cell {:class "has-text-right"} (when running-balance (nf running-balance ))]])]])
|
||||
|
||||
(defn table [{:keys [data-page]}]
|
||||
(defn table [{:keys [data-page action-buttons]}]
|
||||
(let [{:keys [data]} @(re-frame/subscribe [::data-page/page data-page])
|
||||
selected-client @(re-frame/subscribe [::subs/client])
|
||||
bank-accounts-by-id @(re-frame/subscribe [::subs/bank-accounts-by-id])]
|
||||
[grid/grid {:data-page data-page
|
||||
:column-count (if selected-client 5 6)}
|
||||
[grid/controls data]
|
||||
[grid/controls (assoc data :action-buttons action-buttons)]
|
||||
[grid/table {:fullwidth true :class ["wrappable"]}
|
||||
[grid/header
|
||||
[grid/row {}
|
||||
|
||||
Reference in New Issue
Block a user