Adds new invoice for Reed, makes external ledger downloadable

This commit is contained in:
Bryce
2023-06-08 21:34:19 -07:00
parent 6f935ddbd4
commit 49a5af9409
4 changed files with 76 additions and 31 deletions

View File

@@ -13,7 +13,9 @@
[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]
[auto-ap.views.components.buttons :as buttons]))
(defn data-params->query-params [params]
{:start (:start params 0)
@@ -61,6 +63,29 @@
[::data-page/received ::page (set/rename-keys (:ledger-page result)
{:journal-entries :data})])}}))
(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
(fn [_ _]
@@ -101,31 +126,51 @@
:on-success (fn [result]
[::delete-successful result params])}})))
(defn action-buttons []
(println "HERE?")
(let [params @(re-frame/subscribe [::data-page/params ::page])
csv-content @(re-frame/subscribe [::csv-content])
is-admin? @(re-frame/subscribe [::subs/is-admin?])
status @(re-frame/subscribe [::status/single [::data-page/page ::page]])
checked @(re-frame/subscribe [::data-page/checked ::page])]
[:div.buttons
(into [:div.tags] (map (fn [[z {:keys [id external-id]}]]
(if (= "header" z)
[:span.tag.is-medium {:on-click
(dispatch-event [::data-page/remove-check ::page "header"])}
"All visible ledger entries"]
[:span.tag.is-medium external-id
[:button.delete.is-small {:on-click
(dispatch-event [::data-page/remove-check ::page id])}]]))
checked))
[:button.button.is-danger {:on-click (dispatch-event [::delete-selected params])
:class (status/class-for @(re-frame/subscribe [::status/single ::delete-selected]))
:disabled (or (status/disabled-for @(re-frame/subscribe [::status/single ::delete-selected]))
(not (seq checked)))}
"Delete selected"]
(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"
:class (status/class-for status)
:disabled (status/disabled-for status)}]))]))
(defn ledger-content []
(let [_ @(re-frame/subscribe [::subs/client])
params @(re-frame/subscribe [::data-page/params ::page])
checked @(re-frame/subscribe [::data-page/checked ::page])]
]
[:div
[:h1.title "External Ledger"]
[status/status-notification {:statuses [[::status/single ::delete-selected]]}]
[:div.is-pulled-right
[:div.buttons
(into [:div.tags ] (map (fn [[z {:keys [id external-id]}]]
(if (= "header" z)
[:span.tag.is-medium {:on-click
(dispatch-event [::data-page/remove-check ::page "header"])}
"All visible ledger entries"]
[:span.tag.is-medium external-id
[:button.delete.is-small {:on-click
(dispatch-event [::data-page/remove-check ::page id])}]]))
checked))
[:button.button.is-danger {:on-click (dispatch-event [::delete-selected params])
:class (status/class-for @(re-frame/subscribe [::status/single ::delete-selected]))
:disabled (or (status/disabled-for @(re-frame/subscribe [::status/single ::delete-selected]))
(not (seq checked)))}
"Delete selected"]]]
]
[table/table {:id :ledger
:data-page ::page}]]))
:data-page ::page
:action-buttons [action-buttons]}]]))
(defn external-ledger-page []

View File

@@ -42,16 +42,16 @@
[grid/cell {:class "has-text-right"} (when debit (nf debit ))]
[grid/cell {:class "has-text-right"} (when credit (nf credit ))]])]])
(defn table [{:keys [data-page]}]
(defn table [{:keys [data-page action-buttons]}]
(let [{:keys [data params]} @(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
:check-boxes? true
:column-count (if selected-client 7 8)}
[grid/controls data]
[grid/controls (assoc data :action-buttons action-buttons)]
[grid/table {:fullwidth true :class ["wrappable"]}
[grid/header
[grid/header
[grid/row {:id "header"
:entity params}
(when-not selected-client
@@ -67,6 +67,6 @@
(for [{:keys [id] :as i} (:data data)]
^{:key id}
[external-ledger-row {:row i
:selected-client selected-client
:bank-accounts-by-id bank-accounts-by-id}])]]]))
:selected-client selected-client
:bank-accounts-by-id bank-accounts-by-id}])]]]))