(ns auto-ap.views.pages.ledger (:require [auto-ap.events :as events] [auto-ap.forms :as forms] [auto-ap.subs :as subs] [auto-ap.views.components.bank-account-filter :refer [bank-account-filter]] [auto-ap.views.components.layouts :refer [appearing-side-bar side-bar-layout]] [auto-ap.routes :as routes] [auto-ap.views.components.modal :refer [action-modal]] [bidi.bidi :as bidi] [auto-ap.views.components.paginator :refer [paginator]] [auto-ap.views.components.sorter :refer [sorted-column]] [auto-ap.views.pages.ledger.table :as table] [auto-ap.views.pages.ledger.side-bar :refer [ledger-side-bar]] [auto-ap.views.pages.transactions.common :refer [transaction-read]] [auto-ap.utils :refer [replace-by]] [auto-ap.views.pages.transactions.manual :as manual] [auto-ap.views.utils :refer [bind-field date->str dispatch-event nf active-when]] [goog.string :as gstring] [re-frame.core :as re-frame])) (re-frame/reg-sub ::ledger-page (fn [db] (-> db ::ledger-page))) (re-frame/reg-sub ::params (fn [db] (-> db (::params {})))) (re-frame/reg-event-fx ::params-change (fn [cofx [_ params]] {:db (-> (:db cofx) (assoc-in [:status :loading] true) (assoc-in [::params] params)) :graphql {:token (-> cofx :db :user) :query-obj {:venia/queries [[:ledger-page (assoc params :client-id (:id @(re-frame/subscribe [::subs/client]))) [[:journal-entries [:id :source :amount [:vendor [:name :id]] [:client [:name :id]] [:line-items [:id :debit :credit :location [:account [:id :name]]]] :date]] :total :start :end]]]} :on-success [::received]}})) (re-frame/reg-event-db ::received (fn [db [_ data]] (-> db (assoc ::ledger-page (:ledger-page data)) (assoc-in [:status :loading] false)))) (re-frame/reg-event-db ::change-selected-bank-account (fn [db [_ key value]] (let [[key] key updated (assoc-in db [::ledger-page :bank-account-filter key] value)] (if (and (= key :id) (not= value (get-in db [::params :bank-account-id]))) (do (re-frame/dispatch [::params-change (assoc (::params updated) :bank-account-id value)]) (assoc-in updated [::params :bank-account-id] value)) updated)))) (def ledger-content (with-meta (fn [] (let [current-client @(re-frame/subscribe [::subs/client]) user @(re-frame/subscribe [::subs/user])] [:div [:h1.title "Ledger"] [table/table {:id :ledger :params (re-frame/subscribe [::params]) :ledger-page (re-frame/subscribe [::ledger-page]) :status (re-frame/subscribe [::subs/status]) :on-params-change (fn [params] (re-frame/dispatch [::params-change params]))}] [manual/modal {:import-completed [::manual-import-completed ]}]])) {:component-will-mount #(re-frame/dispatch-sync [::params-change {}]) })) (defn ledger-page [] [side-bar-layout {:side-bar [ledger-side-bar] :main [ledger-content]}])