From 5fb5b2d412ef48867cc3873cd5c615672da6b955 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Thu, 10 May 2018 21:08:45 -0700 Subject: [PATCH] starting to be able to choose invoices --- resources/public/index.html | 53 ++--- resources/public/micrenc.ttf | Bin 0 -> 15580 bytes src/clj/auto_ap/db/invoices.clj | 4 + src/clj/auto_ap/handler.clj | 2 + src/clj/auto_ap/routes/checks.clj | 21 ++ src/cljs/auto_ap/routes.cljs | 1 + .../views/components/invoice_table.cljs | 12 +- src/cljs/auto_ap/views/main.cljs | 1 + src/cljs/auto_ap/views/pages.cljs | 4 + src/cljs/auto_ap/views/pages/check.cljs | 187 ++++++++++++++++++ .../auto_ap/views/pages/unpaid_invoices.cljs | 43 ++-- 11 files changed, 269 insertions(+), 59 deletions(-) create mode 100755 resources/public/micrenc.ttf create mode 100644 src/clj/auto_ap/routes/checks.clj create mode 100644 src/cljs/auto_ap/views/pages/check.cljs diff --git a/resources/public/index.html b/resources/public/index.html index 37eb6a23..e528250a 100644 --- a/resources/public/index.html +++ b/resources/public/index.html @@ -245,8 +245,20 @@ } .card.active { background-color:#F5F5F5; +} + @media print { + footer { + page-break-after: always; + } + } +@font-face { + font-family: 'MICR'; + src: url("/micrenc.ttf") format("truetype"); + font-weight: normal; + font-style: normal; } +
@@ -279,47 +291,6 @@
- - - diff --git a/resources/public/micrenc.ttf b/resources/public/micrenc.ttf new file mode 100755 index 0000000000000000000000000000000000000000..b5028902e44f885590a600795eac077ee8602691 GIT binary patch literal 15580 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 Tg|TSn base-query + (helpers/merge-where [:in :id ids])))) + (defn approve [] (j/update! (get-conn) :invoices {:imported true} [] )) diff --git a/src/clj/auto_ap/handler.clj b/src/clj/auto_ap/handler.clj index 2654f37e..0895ce55 100644 --- a/src/clj/auto_ap/handler.clj +++ b/src/clj/auto_ap/handler.clj @@ -6,6 +6,7 @@ [auto-ap.routes.reminders :as reminders] [auto-ap.routes.graphql :as graphql] [auto-ap.routes.vendors :as vendors] + [auto-ap.routes.checks :as checks] [buddy.auth.backends.token :refer [jws-backend]] [buddy.auth.middleware :refer [wrap-authentication wrap-authorization]] @@ -31,6 +32,7 @@ companies/routes vendors/routes reminders/routes + checks/routes graphql/routes auth/routes)) diff --git a/src/clj/auto_ap/routes/checks.clj b/src/clj/auto_ap/routes/checks.clj new file mode 100644 index 00000000..6ae1be12 --- /dev/null +++ b/src/clj/auto_ap/routes/checks.clj @@ -0,0 +1,21 @@ +(ns auto-ap.routes.checks + (:require [auto-ap.db.companies :as companies] + [auto-ap.db.vendors :as vendors] + [auto-ap.db.invoices :as invoices] + [auto-ap.db.utils :refer [query]] + [auto-ap.parse :as parse] + [auto-ap.routes.utils :refer [wrap-secure]] + [compojure.core :refer [GET POST context defroutes + wrap-routes]] + [clojure.string :as str])) + +(defroutes routes + (wrap-routes + (context "/checks" [] + (POST "/" {:keys [edn-params]} + (invoices/get-multi (:invoice-ids edn-params)) + + {:status 200 + :body (pr-str (invoices/get-multi (:invoice-ids edn-params))) + :headers {"Content-Type" "application/edn"}})) + wrap-secure)) diff --git a/src/cljs/auto_ap/routes.cljs b/src/cljs/auto_ap/routes.cljs index d94c8135..7dca3a47 100644 --- a/src/cljs/auto_ap/routes.cljs +++ b/src/cljs/auto_ap/routes.cljs @@ -3,6 +3,7 @@ (def routes ["/" {"" :index "login/" :login + "check/" :check "admin/" {"" :admin "companies" :admin-companies "reminders" :admin-reminders diff --git a/src/cljs/auto_ap/views/components/invoice_table.cljs b/src/cljs/auto_ap/views/components/invoice_table.cljs index 82208b31..06eacd57 100644 --- a/src/cljs/auto_ap/views/components/invoice_table.cljs +++ b/src/cljs/auto_ap/views/components/invoice_table.cljs @@ -24,12 +24,12 @@ -(defn invoice-table [{:keys [id invoice-page status on-params-change vendors params check-boxes on-check-changed]}] +(defn invoice-table [{:keys [id invoice-page status on-params-change vendors params check-boxes checked on-check-changed]}] (let [state (reagent/atom (or @params {})) opc (fn [p] (swap! state merge p) (on-params-change p))] - (fn [{:keys [id invoice-page status on-params-change vendors]}] + (fn [{:keys [id invoice-page status on-params-change vendors checked]}] (let [{:keys [sort-by asc]} @state {:keys [invoices start end count total]} @invoice-page] [:div @@ -82,8 +82,12 @@ ^{:key id} [:tr (when check-boxes - [:td [:input.checkbox {:type "checkbox" :on-change (fn [x e] (when on-check-changed - (on-check-changed id)))} ]]) + [:td [:input.checkbox {:type "checkbox" + :checked (if (get checked id) + "checked" + "") + :on-change (fn [x e] (when on-check-changed + (on-check-changed id)))} ]]) [:td (:name vendor)] [:td (:name company)] [:td invoice-number] diff --git a/src/cljs/auto_ap/views/main.cljs b/src/cljs/auto_ap/views/main.cljs index 065ef025..ab6f4513 100644 --- a/src/cljs/auto_ap/views/main.cljs +++ b/src/cljs/auto_ap/views/main.cljs @@ -11,6 +11,7 @@ (defn page->layout [page] ({:login :blank + :check :blank :index :left-panel :invoices :left-panel :import-invoices :left-panel diff --git a/src/cljs/auto_ap/views/pages.cljs b/src/cljs/auto_ap/views/pages.cljs index 73c26761..f0ca284d 100644 --- a/src/cljs/auto_ap/views/pages.cljs +++ b/src/cljs/auto_ap/views/pages.cljs @@ -7,6 +7,7 @@ [auto-ap.views.pages.login :refer [login-page]] [auto-ap.views.pages.index :refer [index-page]] [auto-ap.views.pages.admin :refer [admin-page]] + [auto-ap.views.pages.check :refer [check-page]] [auto-ap.views.pages.admin.companies :refer [admin-companies-page]] [auto-ap.views.pages.admin.vendors :refer [admin-vendors-page]] [auto-ap.views.pages.admin.reminders :refer [admin-reminders-page]] @@ -34,6 +35,9 @@ (defmethod active-page :admin [] [admin-page]) +(defmethod active-page :check [] + [check-page]) + (defmethod active-page :admin-companies [] [admin-companies-page]) diff --git a/src/cljs/auto_ap/views/pages/check.cljs b/src/cljs/auto_ap/views/pages/check.cljs new file mode 100644 index 00000000..d3c70d09 --- /dev/null +++ b/src/cljs/auto_ap/views/pages/check.cljs @@ -0,0 +1,187 @@ +(ns auto-ap.views.pages.check + (: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] + [goog.string :as gstring])) + +(defn check-page [] + [:div + (for [{:keys [vendor-name paid-to company check date amount memo]} + [{:vendor-name "Covert Affairs, INC" + :paid-to "Covert Affairs, INC" + :amount 1234.56 + :check "1234" + :memo "Invoice #'s: 870034 ($400.34), 77335 ($732.55), 76668 ($101.67)" + :date "5/10/2018" + :company {:name "Campbell Brewing Company LLC" + :address1 "200 E Campbell Ave" + :city "Campbell" + :state "CA" + :zip "95008" + :bank {:name "Bank of America, NA" + :acct "11-35/2010" + :acct-number "123456789"}}} + + {:vendor-name "Good meat, INC" + :paid-to "Good meat, INC" + :amount 973.45 + :check "1235" + :memo "Invoice #'s: 070034 ($400.34), 77335 ($732.55), 76668 ($101.67)" + :date "5/10/2018" + :company {:name "Campbell Brewing Company LLC" + :address1 "200 E Campbell Ave" + :city "Campbell" + :state "CA" + :zip "95008" + :bank {:name "Bank of America, NA" + :acct "11-35/2010" + :acct-number "123456789"}}}] + + :let [amount (gstring/format "--%.2f--" amount)]] + [:div + [:div.columns + (let [{:keys [name address1 city state zip bank]} company] + (list + [:div.column.is-4 + [:p name] + [:p address1] + [:p city ", " state zip]] + [:div.column.is-7 + + [:p.has-text-centered (:name bank)] + [:p.has-text-centered (:acct bank)] + ])) + + [:div.column + check] + ] + [:div.columns + [:div.column.is-11] + [:div.column date] + ] + [:div.columns + [:div.column + "PAY" + ] + [:div.column + "TO THE ORDER OF"] + [:div.column.is-9 + vendor-name] + [:div.column + + amount]] + + [:div.columns + [:div.column] + [:div.column.is-8 {:style {"border-bottom" "1px solid black"}} "One thousand two hundred thirty four and fifty six cents"] + [:div.column.is-3]] + + [:div.columns + [:div.column ""]] + [:div.columns + [:div.column " "]] + + + [:div.columns + [:div.column + "MEMO"] + [:div.column.is-7 {:style {"border-bottom" "1px solid black"}} + memo] + [:div.column.is-4]] + + [:div.columns + [:div.column.is-2 ] + [:div.column.is-10 {:style {"font-family" "MICR" "font-size" "20pt"}} + (str "c" check "c a" (:acct-number (:bank company)) "a 10302c")]] + + + [:div.columns + [:div.column " "]] + + [:div.columns + [:div.column " "]] + + [:div.columns + [:div.column " "]] + + [:div.columns + [:div.column " "]] + + [:div.columns + [:div.column] + [:div.column.is-10 + (let [{:keys [name address1 city state zip bank]} company] + (list + [:p name] + [:p address1] + [:p city ", " state zip] + )) + + + + ] + [:div.column + check]] + + [:div.columns + [:div.column " "]] + [:div.columns + [:div.column " "]] + [:div.columns + [:div.column " "]] + [:div.columns + [:div.column " "]] + [:div.columns + [:div.column " "]] + + [:div.columns + [:div.column] + [:div.column.is-5 + vendor-name] + [:div.column + [:p.has-text-right "Paid to:"] + [:p.has-text-right "Amount:"] + [:p.has-text-right "Date:"]] + + [:div.column.is-5 + [:p paid-to] + [:p amount] + [:p date]]] + + [:div.columns + [:div.column "MEMO"] + [:div.column.is-11 + memo + ]] + + [:div.columns + [:div.column " "]] + + [:div.columns + [:div.column.is-6] + [:div.column + [:p.has-text-right "Check:"] + [:p.has-text-right "Vendor:"] + [:p.has-text-right "Bank Account:"] + [:p.has-text-right "Paid To:"] + [:p.has-text-right "Amount:"] + [:p.has-text-right "Date:"]] + + [:div.column.is-5 + [:p check] + [:p vendor-name] + [:p (:name (:bank company))] + [:p paid-to] + [:p amount] + [:p date]]] + [:div.columns + [:div.column "MEMO"] + [:div.column.is-11 + memo]] + [:footer]])]) diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 272a6c9e..ec165ec9 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -3,6 +3,7 @@ [auto-ap.entities.companies :as company] [auto-ap.entities.vendors :as vendor] [auto-ap.events :as events] + [auto-ap.views.utils :refer [dispatch-event]] [auto-ap.views.components.invoice-table :refer [invoice-table] :as invoice-table] [auto-ap.subs :as subs] [auto-ap.events :as events])) @@ -44,6 +45,18 @@ (disj x data) (conj x data))))))) +(re-frame/reg-event-fx + ::print-checks + (fn [{:keys [db]} [_ data]] + {:db (assoc-in db [::invoice-page :checked] nil) + :http {:method :post + :token (:user db) + :body (pr-str {:invoice-ids (get-in db [::invoice-page :checked])}) + :headers {"Content-Type" "application/edn"} + :uri (str "/api/checks/") + :on-success [::save-complete] + :on-error [::save-error]}})) + (re-frame/reg-event-fx ::invalidated (fn [cofx [_ params]] @@ -52,18 +65,20 @@ (def unpaid-invoices-page (with-meta (fn [] - [:div - [:h1.title "Unpaid invoices"] - [:div.is-pulled-right - [:button.button.is-primary "Print check(s)"]] - - [invoice-table {:id :unpaid - :params (re-frame/subscribe [::params]) - :invoice-page (re-frame/subscribe [::invoice-page]) - :status (re-frame/subscribe [::subs/status]) - :on-params-change (fn [params] - (re-frame/dispatch [::params-change params])) - :check-boxes true - :on-check-changed (fn [which] - (re-frame/dispatch [::toggle-check which]))}]]) + (let [checked (:checked @(re-frame/subscribe [::invoice-page]))] + [:div + [:h1.title "Unpaid invoices"] + [:div.is-pulled-right + [:button.button.is-primary {:on-click (dispatch-event [::print-checks ])} "Print check(s)"]] + + [invoice-table {:id :unpaid + :params (re-frame/subscribe [::params]) + :invoice-page (re-frame/subscribe [::invoice-page]) + :status (re-frame/subscribe [::subs/status]) + :on-params-change (fn [params] + (re-frame/dispatch [::params-change params])) + :check-boxes true + :checked checked + :on-check-changed (fn [which] + (re-frame/dispatch [::toggle-check which]))}]])) {:component-will-mount #(re-frame/dispatch-sync [::params-change {}]) }))