diff --git a/src/cljs/auto_ap/views/pages/ledger/balance_sheet.cljs b/src/cljs/auto_ap/views/pages/ledger/balance_sheet.cljs index 9bd55896..7fafaadd 100644 --- a/src/cljs/auto_ap/views/pages/ledger/balance_sheet.cljs +++ b/src/cljs/auto_ap/views/pages/ledger/balance_sheet.cljs @@ -1,15 +1,31 @@ (ns auto-ap.views.pages.ledger.balance-sheet (:require [auto-ap.subs :as subs] - [auto-ap.views.components.layouts :refer [side-bar-layout]] + [auto-ap.views.components.layouts :refer [side-bar-layout appearing-side-bar]] [auto-ap.views.components.switch-field :refer [switch-field]] + [auto-ap.views.pages.ledger.table :as ledger-table ] [goog.string :as gstring] + [vimsical.re-frame.fx.track :as track] [auto-ap.utils :refer [by]] + [auto-ap.views.pages.data-page :as data-page] [auto-ap.views.pages.ledger.side-bar :refer [ledger-side-bar]] - [auto-ap.views.utils :refer [date->str date-picker bind-field local-now standard ->$ str->date]] + [auto-ap.views.utils :refer [date->str date-picker bind-field local-now standard ->$ str->date dispatch-event with-user]] [cljs-time.core :as t] [re-frame.core :as re-frame] + [reagent.core :as reagent] + [clojure.set :as set] [auto-ap.status :as status])) +(defn data-params->query-params [params] + (when params + {:start (:start params 0) + :sort (:sort params) + :per-page (:per-page params) + :vendor-id (:id (:vendor params)) + :client-id (:client-id params ) + :from-numeric-code (:from-numeric-code params) + :to-numeric-code (:to-numeric-code params) + :date-range (:date-range params)})) + (re-frame/reg-sub ::report (fn [db] @@ -48,7 +64,10 @@ (= type account-type))) (by :id)))) - +(re-frame/reg-sub + ::ledger-list-active? + (fn [db] + (-> db ::ledger-list-active?))) (def groupings {:asset [["1100 Cash and Bank Accounts" 11000 11999] ["1200 Accounts Receivable" 12000 12999] @@ -114,6 +133,63 @@ :include-comparison include-comparison)]})) +(re-frame/reg-event-fx + ::investigate-clicked + (fn [{:keys [db]} [_ from-numeric-code to-numeric-code which]] + (let [date (if (= :current which) + (get @(re-frame/subscribe [::params]) :date) + (date->str (t/minus (str->date (get @(re-frame/subscribe [::params]) :date) standard) (t/years 1)) standard))] + {:db (-> db (assoc ::ledger-list-active? true)) + :dispatch [::data-page/additional-params-changed ::ledger {:client-id (:id @(re-frame/subscribe [::subs/client])) + :from-numeric-code from-numeric-code + :to-numeric-code to-numeric-code + :date-range {:start "2000-01-01" + :end date}}]}))) + +(re-frame/reg-event-fx + ::ledger-params-change + [with-user] + (fn [{:keys [user db]} [_ ledger-params]] + + (if (seq ledger-params) + {:graphql {:token user + :owns-state {:single [::data-page/page ::ledger]} + :query-obj {:venia/queries [[:ledger-page + {:filters (data-params->query-params ledger-params)} + [[:journal-entries [:id + :source + :original-entity + :amount + :alternate-description + [:vendor + [:name :id]] + [:client + [:name :id]] + [:line-items + [:id :debit :credit :location :running-balance + [:account [:id :name]]]] + :date]] + :total + :start + :end]]]} + :on-success (fn [result] + + [::data-page/received ::ledger (set/rename-keys (:ledger-page result) + {:journal-entries :data})])}}))) + +(re-frame/reg-event-fx + ::unmounted-balance-sheet + (fn [{:keys [db]} _] + {:dispatch [::data-page/dispose ::ledger] + ::track/dispose {:id ::ledger-params}})) + +(re-frame/reg-event-fx + ::mounted-balance-sheet + (fn [{:keys [db]} _] + {::track/register {:id ::ledger-params + :subscription [::data-page/params ::ledger] + :event-fn (fn [params] [::ledger-params-change params])}})) + (defn grouping [{:keys [header accounts comparable-accounts groupings]}] (let [include-comparison @(re-frame/subscribe [::include-comparison])] @@ -133,17 +209,21 @@ ] (for [account matching-accounts] [:tr [:td (:name account)] - [:td.has-text-right (->$ (:amount account))] + [:td.has-text-right [:a {:on-click (dispatch-event [::investigate-clicked (:numeric-code account) (:numeric-code account) :current])} + (->$ (:amount account))] ] (when include-comparison - [:td.has-text-right (->$ (:amount (get comparable-accounts (:id account)) 0))]) + [:td.has-text-right [:a {:on-click (dispatch-event [::investigate-clicked (:numeric-code account) (:numeric-code account) :comparable])} + (->$ (:amount (get comparable-accounts (:id account)) 0))]]) (when include-comparison [:td.has-text-right (->$ (- (:amount account ) (:amount (get comparable-accounts (:id account)) 0)))])]) [:tr [:th "---" grouping-name "---"] - [:th.has-text-right.total (->$ (reduce + 0 (map :amount - matching-accounts))) ] + [:th.has-text-right.total [:a {:on-click (dispatch-event [::investigate-clicked from to :current])} + (->$ (reduce + 0 (map :amount + matching-accounts)))] ] (when include-comparison - [:th.has-text-right.total (->$ (reduce + 0 (map #(:amount (get comparable-accounts (:id %)) 0) - matching-accounts)))]) + [:th.has-text-right.total [:a {:on-click (dispatch-event [::investigate-clicked from to :comparable])} + (->$ (reduce + 0 (map #(:amount (get comparable-accounts (:id %)) 0) + matching-accounts)))]]) (when include-comparison [:th.has-text-right.total (->$ (reduce + 0 (map #(- (:amount % ) (:amount (get comparable-accounts (:id %)) 0)) @@ -249,10 +329,27 @@ {:component-will-mount #(re-frame/dispatch-sync [::params-change {:date (date->str (local-now) standard) :include-comparison true}]) })) +(defn ledger-list [_ ] + [:div [:a.delete.is-pulled-right {:on-click (dispatch-event [::ledger-list-closing])}] + [:div + [:h1.title "Ledger entries"] + [ledger-table/table {:id :ledger + :data-page ::ledger}]]]) + (defn balance-sheet-page [] - (let [user (re-frame/subscribe [::subs/user])] - (if (not= "manager" (:user/role @user)) - [side-bar-layout - {:side-bar [ledger-side-bar] - :main [balance-sheet-content]}] - [:div "Not Authorized"]))) + (reagent/create-class + {:display-name "balance-sheet-page" + :component-did-mount #(re-frame/dispatch [::mounted-balance-sheet]) + :component-will-unmount #(re-frame/dispatch [::unmounted-balance-sheet]) + :reagent-render + (fn [] + (let [ledger-list-active? @(re-frame/subscribe [::ledger-list-active?]) + user (re-frame/subscribe [::subs/user])] + (if (not= "manager" (:user/role @user)) + [side-bar-layout + {:side-bar [ledger-side-bar] + :main [balance-sheet-content] + :right-side-bar [appearing-side-bar + {:visible? ledger-list-active?} + [ledger-list]]}] + [:div "Not authorized"])))}))