141 lines
2.7 KiB
Clojure
141 lines
2.7 KiB
Clojure
(ns auto-ap.subs
|
|
(:require [re-frame.core :as re-frame]
|
|
[clojure.string :as str]
|
|
[auto-ap.expense-accounts :refer [expense-accounts chooseable-expense-accounts]]
|
|
[goog.crypt.base64 :as base64]))
|
|
|
|
(re-frame/reg-sub
|
|
::client
|
|
(fn [db]
|
|
(get (:clients db) (:client db))))
|
|
|
|
(re-frame/reg-sub
|
|
::clients
|
|
(fn [db]
|
|
(when (:user db)
|
|
(sort-by :name (vals (:clients db))))))
|
|
|
|
(re-frame/reg-sub
|
|
::bank-accounts
|
|
:<- [::clients]
|
|
:<- [::client]
|
|
(fn [[clients client]]
|
|
(println client)
|
|
(if client
|
|
(:bank-accounts client)
|
|
(reduce (fn [result {:keys [bank-accounts]}]
|
|
(into result bank-accounts))
|
|
[]
|
|
clients))))
|
|
|
|
(re-frame/reg-sub
|
|
::real-bank-accounts
|
|
:<- [::client]
|
|
(fn [client]
|
|
(->> client :bank-accounts (filter #(= (:type %) :check)) (sort-by :sort-order))))
|
|
|
|
|
|
(re-frame/reg-sub
|
|
::clients-by-id
|
|
(fn [db]
|
|
(when (:user db)
|
|
(:clients db))))
|
|
|
|
(re-frame/reg-sub
|
|
::menu-active?
|
|
(fn [db [_ id]]
|
|
(-> db :menu (get id) :active?)))
|
|
|
|
(re-frame/reg-sub
|
|
::menu
|
|
(fn [db]
|
|
(:menu db)))
|
|
|
|
(re-frame/reg-sub
|
|
::modal-state
|
|
(fn [db [_ id status-from]]
|
|
(if status-from
|
|
(assoc (get (:modal-state db) id)
|
|
:error-message (get-in db [:auto-ap.forms/forms status-from :error])
|
|
:saving? (= (get-in db [:auto-ap.forms/forms status-from :status]) :loading))
|
|
(get (:modal-state db) id))))
|
|
|
|
(re-frame/reg-sub
|
|
::token
|
|
(fn [db]
|
|
(:user db)))
|
|
|
|
(re-frame/reg-sub
|
|
::vendors
|
|
(fn [db]
|
|
(vals (:vendors db))))
|
|
|
|
(re-frame/reg-sub
|
|
::sorted-vendors
|
|
:<- [::vendors]
|
|
(fn [vendors]
|
|
(sort-by :name vendors)))
|
|
|
|
(re-frame/reg-sub
|
|
::admin
|
|
(fn [db]
|
|
(:admin db)))
|
|
|
|
(re-frame/reg-sub
|
|
::user-editing-vendor
|
|
(fn [db]
|
|
(-> db :user-editing-vendor)))
|
|
|
|
(re-frame/reg-sub
|
|
::user
|
|
(fn [db]
|
|
(when (:user db)
|
|
(js->clj (.parse js/JSON (base64/decodeString (second (str/split (:user db) #"\.")))) :keywordize-keys true))))
|
|
|
|
(re-frame/reg-sub
|
|
::active-page
|
|
(fn [db]
|
|
(:active-page db)))
|
|
|
|
(re-frame/reg-sub
|
|
::pending-invoices
|
|
(fn [db]
|
|
(:pending (:invoices db))))
|
|
|
|
|
|
(re-frame/reg-sub
|
|
::status
|
|
(fn [db]
|
|
(:status db)))
|
|
|
|
(re-frame/reg-sub
|
|
::new-invoice-form
|
|
(fn [db]
|
|
(:new-invoice db)))
|
|
|
|
|
|
(re-frame/reg-sub
|
|
::expense-accounts
|
|
(fn [db]
|
|
(map (fn [[k v]] (assoc v :id k))
|
|
expense-accounts)))
|
|
|
|
(re-frame/reg-sub
|
|
::query-params
|
|
(fn [db]
|
|
(:query-params db)))
|
|
|
|
(re-frame/reg-sub
|
|
::chooseable-expense-accounts
|
|
(fn [db]
|
|
(map (fn [[k v]] (assoc v :id k))
|
|
chooseable-expense-accounts)))
|
|
|
|
(re-frame/reg-sub
|
|
::page-failure
|
|
(fn [db]
|
|
(when-let [error (-> db :page-failure first)]
|
|
(if (= 500 (:status error))
|
|
"System error occured. If you are stuck, please notify ben@integreatconsult.com."
|
|
(:message error)))))
|