Check/Expense accounts much cleaner

This commit is contained in:
BC
2018-07-06 15:32:57 -07:00
parent a58f1f2c60
commit f232ca264c
7 changed files with 95 additions and 20 deletions

1
.gitignore vendored
View File

@@ -20,3 +20,4 @@ data/
private private
node_modules node_modules
**/*.swp **/*.swp
**/.DS_Store

1
resources/public/css/bulma-badge.min.css vendored Executable file

File diff suppressed because one or more lines are too long

View File

@@ -9,6 +9,7 @@
<link href="/css/font.min.css" rel="stylesheet"> <link href="/css/font.min.css" rel="stylesheet">
<link rel="stylesheet" href="/css/bulma.min.css" integrity="sha256-HEtF7HLJZSC3Le1HcsWbz1hDYFPZCqDhZa9QsCgVUdw=" crossorigin="anonymous" /> <link rel="stylesheet" href="/css/bulma.min.css" integrity="sha256-HEtF7HLJZSC3Le1HcsWbz1hDYFPZCqDhZa9QsCgVUdw=" crossorigin="anonymous" />
<link rel="stylesheet" href="/css/bulma-calendar.min.css" /> <link rel="stylesheet" href="/css/bulma-calendar.min.css" />
<link rel="stylesheet" href="/css/bulma-badge.min.css" />
<style> <style>
form.dz { border: 2px dashed lightgray;} form.dz { border: 2px dashed lightgray;}
@@ -281,7 +282,8 @@
background-color:#F5F5F5; background-color:#F5F5F5;
} }
.table { table-layout: fixed } .table { table-layout: fixed }
.table td {text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .table td {text-overflow: ellipsis; overflow: hidden; white-space: nowrap; padding: 9px; }
.table td.expandable {text-overflow: ellipsis; overflow: visible; white-space: nowrap; padding: 9px; }
.typeahead { .typeahead {
position:relative; position:relative;

View File

@@ -1,7 +1,7 @@
(ns auto-ap.views.components.invoice-table (ns auto-ap.views.components.invoice-table
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[auto-ap.subs :as subs] [auto-ap.subs :as subs]
[auto-ap.views.utils :refer [date->str dispatch-event]] [auto-ap.views.utils :refer [date->str dispatch-event delayed-dispatch]]
[auto-ap.views.components.paginator :refer [paginator]] [auto-ap.views.components.paginator :refer [paginator]]
[auto-ap.views.components.sorter :refer [sorted-column]] [auto-ap.views.components.sorter :refer [sorted-column]]
[reagent.core :as reagent] [reagent.core :as reagent]
@@ -14,6 +14,28 @@
;; TODO performance ;; TODO performance
;; TODO refactor graphql ;; TODO refactor graphql
(re-frame/reg-event-fx
::toggle-checks
(fn [{:keys [db] } [_ invoice-id]]
{:db
(update-in db [::visible-checks] (fn [i] (if (= i invoice-id) nil invoice-id) ))}))
(re-frame/reg-sub
::visible-checks
(fn [db]
(::visible-checks db)))
(re-frame/reg-event-fx
::toggle-expense-accounts
(fn [{:keys [db] } [_ invoice-id]]
{:db
(update-in db [::visible-expense-accounts] (fn [i] (if (= i invoice-id) nil invoice-id) ))}))
(re-frame/reg-sub
::visible-expense-accounts
(fn [db]
(::visible-expense-accounts db)))
(defn query [params] (defn query [params]
@@ -35,12 +57,18 @@
(defn invoice-table [{:keys [id invoice-page status on-params-change vendors params check-boxes checked on-check-changed expense-event]}] (defn invoice-table [{:keys [id invoice-page status on-params-change vendors params check-boxes checked on-check-changed expense-event]}]
(let [state (reagent/atom (or @params {})) (let [state (reagent/atom (or @params {}))
visible-checks @(re-frame/subscribe [::visible-checks])
visible-expense-accounts @(re-frame/subscribe [::visible-expense-accounts])
opc (fn [p] opc (fn [p]
(swap! state merge p) (swap! state merge p)
(on-params-change p))] (on-params-change p))]
(fn [{:keys [id invoice-page status on-params-change vendors checked]}] (fn [{:keys [id invoice-page status on-params-change vendors checked]}]
(let [{:keys [sort-by asc]} @state (let [{:keys [sort-by asc]} @state
{:keys [invoices start end count total]} @invoice-page] {:keys [invoices start end count total]} @invoice-page
visible-checks @(re-frame/subscribe [::visible-checks])
visible-expense-accounts @(re-frame/subscribe [::visible-expense-accounts])
]
[:div [:div
[paginator {:start start :end end :count count :total total [paginator {:start start :end end :count count :total total
:on-change (fn [p ] :on-change (fn [p ]
@@ -96,13 +124,12 @@
:asc asc} :asc asc}
"Outstanding"] "Outstanding"]
[sorted-column {:on-sort opc [:th {
:style {:width "8em" :cursor "pointer"} :style {:width "15em" :cursor "pointer"}
:sort-key "total"
:sort-by sort-by
:asc asc} }
"Expense Accounts"] ""]]]
[:th {:style {:width "10em"}} "" ]]]
[:tbody [:tbody
(if (:loading @status) (if (:loading @status)
[:tr [:tr
@@ -126,13 +153,51 @@
[:td (gstring/format "$%.2f" total )] [:td (gstring/format "$%.2f" total )]
[:td (gstring/format "$%.2f" outstanding-balance )] [:td (gstring/format "$%.2f" outstanding-balance )]
[:td (for [e expense-accounts] [:td.expandable
^{:key (:id e)} (when (seq expense-accounts)
[:a.tag {:on-click (dispatch-event (conj expense-event id))} (:name (:expense-account e)) " "(gstring/format "$%.2f" (:amount e) ) ])]
[:td (for [check checks]
(if (:s3-url (:check check))
^{:key (:id check)}
[:a.tag {:href (:s3-url (:check check)) :target "_new"} [:i.fa.fa-money-check] [:span.icon [:i.fa.fa-money]] (str " " (:check-number (:check check)) " (" (gstring/format "$%.2f" (:amount check) ) ")")]
^{:key (:id check)} [:div.dropdown.is-right {:class (if (= id visible-expense-accounts)
[:span.tag [:i.fa.fa-money-check] [:span.icon [:i.fa.fa-money]] (str " " (:check-number (:check check)) " (" (gstring/format "$%.2f" (:amount check) ) ")")]))]]))]]])))) "is-active"
"")}
[:div.dropdown-trigger
[:a.button.badge {:data-badge (str (clojure.core/count expense-accounts))
:aria-haspopup true
:tab-index "0"
:on-blur (delayed-dispatch [::toggle-expense-accounts id])
:on-focus (dispatch-event [::toggle-expense-accounts id])
} "Accounts"]]
[:div.dropdown-menu {:role "menu"}
[:div.dropdown-content
(for [e expense-accounts]
^{:key (:id e)}
[:span.dropdown-item (:name (:expense-account e)) " "(gstring/format "$%.2f" (:amount e) ) ])
[:hr.dropdown-divider]
[:a.dropdown-item.is-primary {:on-click (dispatch-event (conj expense-event id))} "Change"]]]])
[:span {:style {:margin-left "1em"}}]
(when (seq checks)
[:div.dropdown.is-right {:class (if (= id visible-checks)
"is-active"
"")}
[:div.dropdown-trigger
[:a.button.badge {:data-badge (str (clojure.core/count checks))
:aria-haspopup true
:tab-index "0"
:on-blur (delayed-dispatch [::toggle-checks id])
:on-focus (dispatch-event [::toggle-checks id])
} "Checks"]]
[:div.dropdown-menu {:role "menu"}
[:div.dropdown-content
(for [check checks]
(if (:s3-url (:check check))
^{:key (:id check)}
[:a.dropdown-item {:href (:s3-url (:check check)) :target "_new"} [:i.fa.fa-money-check] [:span.icon [:i.fa.fa-money]] (str " " (:check-number (:check check)) " (" (gstring/format "$%.2f" (:amount check) ) ")")]
^{:key (:id check)}
[:span.dropdown-item [:i.fa.fa-money-check] [:span.icon [:i.fa.fa-money]] (str " " (:check-number (:check check)) " (" (gstring/format "$%.2f" (:amount check) ) ")")]))]]])
]]))]]]))))

View File

@@ -31,7 +31,7 @@
(do (do
(select [nil "" nil]) (select [nil "" nil])
true) true)
true))} false))}
[:div.control [:div.control
[:div.tags.has-addons [:div.tags.has-addons
[:span.tag @text] [:span.tag @text]

View File

@@ -290,6 +290,7 @@
(re-frame/reg-event-fx (re-frame/reg-event-fx
::change-expense-accounts ::change-expense-accounts
(fn [{:keys [db]} [_ id]] (fn [{:keys [db]} [_ id]]
(println "HELLLO")
{:dispatch [::events/modal-status ::change-expense-accounts {:visible? true}] {:dispatch [::events/modal-status ::change-expense-accounts {:visible? true}]
:db (assoc-in db [::change-expense-accounts :invoice] (get (by :id (get-in db [::invoice-page :invoices])) id))})) :db (assoc-in db [::change-expense-accounts :invoice] (get (by :id (get-in db [::invoice-page :invoices])) id))}))

View File

@@ -20,6 +20,11 @@
(.preventDefault e) (.preventDefault e)
(re-frame/dispatch (conj event (.. e -target -value))))) (re-frame/dispatch (conj event (.. e -target -value)))))
(defn delayed-dispatch [e]
(fn [x]
(js/setTimeout #(re-frame/dispatch e) 150)
false))
(defn dispatch-event [event] (defn dispatch-event [event]
(fn [e] (fn [e]
(when (.-stopPropagation e) (when (.-stopPropagation e)