Files
integreat/src/cljs/auto_ap/views/components/invoices/side_bar.cljs
2020-10-01 08:04:57 -07:00

101 lines
4.7 KiB
Clojure

(ns auto-ap.views.components.invoices.side-bar
(:require [re-frame.core :as re-frame]
[reagent.core :as r]
[clojure.string :as str]
[clojure.spec.alpha :as s]
[cljs-time.core :as c]
[goog.string :as gstring]
[bidi.bidi :as bidi]
[auto-ap.utils :refer [deep-merge ]]
[auto-ap.routes :as routes]
[auto-ap.views.components.date-range-filter :refer [date-range-filter]]
[auto-ap.views.components.number-filter :refer [number-filter]]
[auto-ap.views.components.typeahead :refer [typeahead-entity]]
[auto-ap.views.utils :refer [active-when dispatch-event bind-field horizontal-field date->str str->date pretty standard query-params dispatch-value-change]]
[auto-ap.subs :as subs]
[auto-ap.events :as events]
[auto-ap.views.pages.data-page :as data-page]))
(defn invoice-number-filter [{:keys [data-page]}]
[:div.field
[:div.control [:input.input {:placeholder "AP-123"
:value @(re-frame/subscribe [::data-page/filter data-page :invoice-number-like])
:on-change (dispatch-value-change [::data-page/filter-changed data-page :invoice-number-like ])} ]]])
(defn invoices-side-bar [{:keys [data-page] :as params}]
(let [ap @(re-frame/subscribe [::subs/active-page])
user @(re-frame/subscribe [::subs/user])]
[:div
[:div [:p.menu-label "Type"]
[:ul.menu-list
[:li.menu-item
[:a.item {:href (bidi/path-for routes/routes :invoices)
:class [(active-when ap = :invoices)]}
[:span {:class "icon icon-accounting-invoice-mail" :style {:font-size "25px"}}]
[:span {:class "name"} "All Invoices"]]]
[:li.menu-item
[:a.item {:href (bidi/path-for routes/routes :unpaid-invoices)
:class [(active-when ap = :unpaid-invoices)]}
[:span {:class "icon icon-accounting-invoice-mail" :style {:font-size "25px"}}]
[:span {:class "name"} "Unpaid Invoices"]]]
[:li.menu-item
[:a.item {:href (bidi/path-for routes/routes :paid-invoices)
:class [(active-when ap = :paid-invoices)]}
[:span {:class "icon icon-check-payment-give" :style {:font-size "25px"}}]
[:span {:class "name"} "Paid Invoices"]]]
[:li.menu-item
[:a.item {:href (bidi/path-for routes/routes :voided-invoices)
:class [(active-when ap = :voided-invoices)]}
[:span {:class "icon icon-bin-2" :style {:font-size "25px"}}]
[:span {:class "name"} "Voided Invoices"]]]
(when (= "admin" (:user/role user))
[:li.menu-item
[:a.item {:href (bidi/path-for routes/routes :import-invoices)
:class [(active-when ap = :import-invoices)]}
[:span {:class "icon icon-accounting-document" :style {:font-size "25px"}}]
[:span {:class "name"} "Import Invoices"]]])]]
(when (not= ap :import-invoices)
[:div
[:p.menu-label "Vendor"]
[:div
[typeahead-entity {:matches @(re-frame/subscribe [::subs/searchable-vendors])
:on-change #(re-frame/dispatch [::data-page/filter-changed data-page :vendor %])
:match->text :name
:type "typeahead-entity"
:value @(re-frame/subscribe [::data-page/filter data-page :vendor])
:include-keys [:name :id]}]]
[:p.menu-label "Date Range"]
[:div
[date-range-filter
{:on-change-event [::data-page/filter-changed data-page :date-range]
:value @(re-frame/subscribe [::data-page/filter data-page :date-range])}]]
[:p.menu-label "Due Range"]
[:div
[date-range-filter
{:on-change-event [::data-page/filter-changed data-page :due-range]
:value @(re-frame/subscribe [::data-page/filter data-page :due-range])}]]
[:p.menu-label "Amount"]
[:div
[number-filter
{:on-change-event [::data-page/filter-changed data-page :amount-range]
:value @(re-frame/subscribe [::data-page/filter data-page :amount-range])}]]
[:p.menu-label "Location"]
[:div.field
[:div.control [:input.input {:placeholder "SC"
:style {:width "3em"}
:value @(re-frame/subscribe [::data-page/filter data-page :location])
:on-change (dispatch-value-change [::data-page/filter-changed data-page :location ])} ]]]
[:p.menu-label "Invoice #"]
[:div
[invoice-number-filter params]]])]))