makes balance sheet clickable.

This commit is contained in:
2021-02-25 20:54:30 -08:00
parent 2e7a5238c7
commit 05663e65a7

View File

@@ -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"])))}))