big updates for re-org.

This commit is contained in:
Bryce Covert
2017-12-19 22:00:46 -08:00
parent b1414ebe60
commit 2af3752041
12 changed files with 456 additions and 356 deletions

View File

@@ -0,0 +1,86 @@
(ns auto-ap.views.pages.import-invoices
(:require [re-frame.core :as re-frame]
[reagent.core :as reagent]
[auto-ap.events :as events]
[auto-ap.subs :as subs]
[cljsjs.dropzone :as dropzone]
[cljs.reader :as edn]))
(def dropzone
(let [company (re-frame/subscribe [::subs/company])
token (re-frame/subscribe [::subs/token])]
(with-meta
(fn []
[:form.dz {:action "/pdf-upload"}
[:div.tile.notification
[:div.has-text-centered {:style {:padding "80px 0px" :width "100%"}}
[:span
[:span {:class "icon"}
[:i {:class "fa fa-cloud-download"}]]
"Drop any invoices you want to process here"]]]])
{:component-did-mount (fn [this]
(js/Dropzone. (reagent/dom-node this)
(clj->js {:init (fn []
(.on (js-this) "success" (fn [_ files]
(re-frame/dispatch [::events/received-invoices :pending (edn/read-string files)]))))
:paramName "file"
:headers {"Authorization" (str "Token " @token)}
:url (str "/pdf-upload"
(when-let [company-name (-> @company :name)]
(str "?company=" company-name)))
:previewsContainer "#dz-hidden"
:previewTemplate "<div class='dz-hidden-preview'></div>"})))})))
(def import-invoices-page
(with-meta
(fn []
(let [invoices (re-frame/subscribe [::subs/pending-invoices])
status (re-frame/subscribe [::subs/status])]
[:div {:class "inbox-messages"}
[:h1.title "Upload invoices"]
[dropzone]
[:div {:class "section"}]
[:div {:class "card found-invoices",}
[:div {:class "card-header"}
[:span {:class "card-header-title"} "Found Invoices"]]
[:div {:class "card-content"}
(if (:loading @status)
[:h1.title
[:i.fa.fa-spin.fa-spinner]]
(if (seq @invoices)
[:table {:class "table", :style {:width "100%"}}
[:thead
[:tr
[:th "Vendor"]
[:th "Customer"]
[:th "Invoice #"]
[:th "Date"]
[:th "Amount"]
[:th]]]
[:tbody (for [{:keys [vendor potential-duplicate company customer-identifier invoice-number date total id] :as i} @invoices]
^{:key (str company "-" invoice-number "-" date "-" total "-" id)}
[:tr
[:td vendor]
(if company
[:td company]
[:td [:i.icon.fa.fa-warning {:title "potential duplicate"}]
(str "'" customer-identifier "' doesn't match any known company")])
[:td invoice-number]
[:td date]
[:td total]
[:td (when potential-duplicate
[:i.icon.fa.fa-warning {:title "potential duplicate"}])]])]]
[:span "No pending invoices"]))]
(if (and (seq @invoices) (not (:loading @status)))
[:div.card-footer
[:a.card-footer-item
{:on-click (fn [e]
(.preventDefault e)
(re-frame/dispatch [::events/approve-invoices]))}
"Accept all"]
[:a.card-footer-item
{:on-click (fn [e]
(.preventDefault e)
(re-frame/dispatch [::events/reject-invoices]))}
"Reject all"]])]]))
{:component-will-mount (fn []
(re-frame/dispatch [::events/view-pending-invoices]))}))

View File

@@ -0,0 +1,12 @@
(ns auto-ap.views.pages.index
(:require [bidi.bidi :as bidi]
[auto-ap.routes :as routes]))
(defn index-page []
[:div {:class "inbox-messages"}
[:div.hero
[:div.hero-body
[:div.container
[:h1.title "Dashboard"]
[:h2.subtitle "To get started, "
[:a {:href (bidi/path-for routes/routes :import-invoices)} "Import some invoices"]]]]]])

View File

@@ -0,0 +1,19 @@
(ns auto-ap.views.pages.login
(:require-macros [cljs.core.async.macros :refer [go]])
(:require [re-frame.core :as re-frame]
[reagent.core :as reagent]
[auto-ap.subs :as subs]
[auto-ap.events :as events]
[auto-ap.views.utils :refer [login-url]]
[cljs.reader :as edn]
[auto-ap.routes :as routes]
[bidi.bidi :as bidi]))
(defn login-page []
[:div {:class "inbox-messages"}
[:div.hero
[:div.hero-body
[:div.container
[:h1.title "Login"]
[:h2.subtitle "To get started, "
[:a {:href login-url} "Login with Google"]]]]]])

View File

@@ -0,0 +1,74 @@
(ns auto-ap.views.pages.new-invoice
(:require [re-frame.core :as re-frame]
[auto-ap.subs :as subs]
[auto-ap.events :as events]))
(defn new-invoice-page []
(let [form-data (re-frame/subscribe [::subs/new-invoice-form])]
[:div {:class "inbox-messages"}
[:form
[:h1.title "New Invoice"]
[:div.field
[:label.label "Vendor"]
[:div.control
[:input.input {:type "text"
:placeholder "CINTAS"
:value (:vendor @form-data)
:on-change (fn [e]
(re-frame/dispatch [::events/change-form-state
[:new-invoice :vendor]
(.. e -target -value)]))}]]]
[:div.field
[:label.label "Customer"]
[:div.control
[:input.input {:type "text"
:placeholder "Brown Chicken Brown Cow"
:value (:company @form-data)
:on-change (fn [e]
(re-frame/dispatch [::events/change-form-state
[:new-invoice :company]
(.. e -target -value)]))}]]]
[:div.field
[:label.label "Invoice #"]
[:div.control
[:input.input {:type "text"
:placeholder "12345"
:value (:invoice-number @form-data)
:on-change (fn [e]
(re-frame/dispatch [::events/change-form-state
[:new-invoice :invoice-number]
(.. e -target -value)]))}]]]
[:div.field
[:label.label "Date"]
[:div.control
[:input.input {:type "text"
:placeholder "11/11/2011"
:value (:date @form-data)
:on-change (fn [e]
(re-frame/dispatch [::events/change-form-state
[:new-invoice :date]
(.. e -target -value)]))}]]]
[:div.field
[:label.label "Total"]
[:div.control
[:input.input {:type "text"
:placeholder "$14.50"
:value (:total @form-data)
:on-change (fn [e]
(re-frame/dispatch [::events/change-form-state
[:new-invoice :total]
(.. e -target -value)]))}]]]
[:div.control
[:submit.button.is-large.is-primary {
:disabled (if (and (:total @form-data) (:date @form-data) (:company @form-data) (:invoice-number @form-data)
(:vendor @form-data))
""
"disabled")
:on-click
(fn [x]
(.preventDefault x)
(re-frame/dispatch [::events/submit-new-invoice @form-data]))}
[:span
(when (:loading? @form-data)
[:i.fa.fa-spin.fa-spinner])
"Save"]]]]]))

View File

@@ -0,0 +1,34 @@
(ns auto-ap.views.pages.paid-invoices
(:require [re-frame.core :as re-frame]
[auto-ap.subs :as subs]
[auto-ap.events :as events]))
(def paid-invoices-page
(with-meta
(fn []
(let [invoices (re-frame/subscribe [::subs/unpaid-invoices])
status (re-frame/subscribe [::subs/status])]
[:div {:class "inbox-messages"}
[:h1.title "Paid invoices"]
(if (:loading @status)
[:div {:class "inbox-messages"}
[:h1.title
[:i.fa.fa-spin.fa-spinner]]]
[:table {:class "table", :style {:width "100%"}}
[:thead
[:tr
[:th "Vendor"]
[:th "Customer"]
[:th "Invoice #"]
[:th "Date"]
[:th "Amount"]]]
[:tbody (for [{:keys [company invoice-number date total id vendor] :as i} @invoices]
^{:key (str company "-" invoice-number "-" date "-" total "-" id)}
[:tr
[:td vendor]
[:td company]
[:td invoice-number]
[:td date]
[:td total]])]])]))
{:component-will-mount #(re-frame/dispatch-sync [::events/view-unpaid-invoices]) }))

View File

@@ -0,0 +1,35 @@
(ns auto-ap.views.pages.unpaid-invoices
(:require [re-frame.core :as re-frame]
[auto-ap.subs :as subs]
[auto-ap.events :as events]
))
(def unpaid-invoices-page
(with-meta
(fn []
(let [invoices (re-frame/subscribe [::subs/unpaid-invoices])
status (re-frame/subscribe [::subs/status])]
[:div {:class "inbox-messages"}
[:h1.title "Unpaid invoices"]
(if (:loading @status)
[:div {:class "inbox-messages"}
[:h1.title
[:i.fa.fa-spin.fa-spinner]]]
[:table {:class "table", :style {:width "100%"}}
[:thead
[:tr
[:th "Vendor"]
[:th "Customer"]
[:th "Invoice #"]
[:th "Date"]
[:th "Amount"]]]
[:tbody (for [{:keys [company invoice-number date total id vendor] :as i} @invoices]
^{:key (str company "-" invoice-number "-" date "-" total "-" id)}
[:tr
[:td vendor]
[:td company]
[:td invoice-number]
[:td date]
[:td total]])]])]))
{:component-will-mount #(re-frame/dispatch-sync [::events/view-unpaid-invoices]) }))