ledger export

This commit is contained in:
Bryce Covert
2022-12-14 08:29:16 -08:00
parent 5fad948c12
commit 02696110b8
4 changed files with 92 additions and 10 deletions

View File

@@ -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 []

View File

@@ -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 {}