you can now create cash payments.

This commit is contained in:
Bryce Covert
2018-07-27 16:39:44 -07:00
parent 4a0f7d7f77
commit 4069f731e9
10 changed files with 75 additions and 32 deletions

View File

@@ -1,6 +1,6 @@
-- 1531519712 UP add-real-cbc-banks
update companies set data ='{:locations ["CB"] :bank-accounts [{:number "03103062" :id 1 :check-number 10000 :bank-name "United Security Bank" :bank-code "90-4149/1211" :routing "121141495" :name "A1123 USB Operating 3062" :yodlee-account-id 0} {:number "03103070" :id 2 :check-number 10000 :bank-name "United Security Bank" :bank-code "90-4149/1211" :routing "121141495" :name "A1125 USB Operating 3070" :yodlee-account-id 0} {:number "930545652" :id 3 :check-number 10000 :bank-name "Chase Bank" :bank-code "90-3913/1222" :routing "322271627" :name "A1126 Rent Impound Chase Acct" :yodlee-account-id 0} {:number "1812" :id 4 :check-number 10000 :bank-name "Chase Credit Card" :bank-code "" :routing "" :name "A1127 Chase Card 1812" :yodlee-account-id 0}]}' where name = 'Campbell Brewing Co';
update companies set data ='{:locations ["CB"] :bank-accounts [{:id 0 :type "cash" :name "Cash"} {:number "03103062" :id 1 :check-number 10000 :bank-name "United Security Bank" :bank-code "90-4149/1211" :routing "121141495" :name "A1123 USB Operating 3062" :yodlee-account-id 0} {:number "03103070" :id 2 :check-number 10000 :bank-name "United Security Bank" :bank-code "90-4149/1211" :routing "121141495" :name "A1125 USB Operating 3070" :yodlee-account-id 0} {:number "930545652" :id 3 :check-number 10000 :bank-name "Chase Bank" :bank-code "90-3913/1222" :routing "322271627" :name "A1126 Rent Impound Chase Acct" :yodlee-account-id 0} {:number "1812" :id 4 :check-number 10000 :bank-name "Chase Credit Card" :bank-code "" :routing "" :name "A1127 Chase Card 1812" :yodlee-account-id 0}]}' where name = 'Campbell Brewing Co';
delete from transactions;

View File

@@ -1,2 +1,2 @@
-- 1532704782 UP fix-iguanas-locations
update companies set data = '{:locations ["DT" "EG" "SC" "SG" "CB" "BH"] :bank-accounts [{:number "000158443280" :id 1 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1120 BofA Exp and Main - 3280" :yodlee-account-id 16279663} {:number "" :id 2 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1122 BofA Squirrel - 5255" :yodlee-account-id 16279666} {:number "000158743279" :id 3 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1121 BofA Tax & SLO - 3279" :yodlee-account-id 16279664} {:number "" :id 4 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1123 BofA Paychecks - 5250" :yodlee-account-id 16279665} {:number "" :id 5 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1125 BofA EG Exp - 5598" :yodlee-account-id 16279667} {:number "" :id 6 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1126 BofA SC Exp - 5318" :yodlee-account-id 16279668} {:number "" :id 7 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1127 BofA SG Exp - 8407" :yodlee-account-id 16279669} {:number "" :id 8 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1124 BofA DT Exp - 8279" :yodlee-account-id 16279670} {:number "" :id 9 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1128 BofA CB Exp - 2495" :yodlee-account-id 16279671} {:number "" :id 10 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1129 BofA BH Exp - 1665" :yodlee-account-id 16279672}]}' where id = 39;
update companies set data = '{:locations ["DT" "EG" "SC" "SG" "CB" "BH"] :bank-accounts [{:id 0 :type "cash" :name "Cash"} {:number "000158443280" :id 1 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1120 BofA Exp and Main - 3280" :yodlee-account-id 16279663} {:number "" :id 2 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1122 BofA Squirrel - 5255" :yodlee-account-id 16279666} {:number "000158743279" :id 3 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1121 BofA Tax & SLO - 3279" :yodlee-account-id 16279664} {:number "" :id 4 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1123 BofA Paychecks - 5250" :yodlee-account-id 16279665} {:number "" :id 5 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1125 BofA EG Exp - 5598" :yodlee-account-id 16279667} {:number "" :id 6 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1126 BofA SC Exp - 5318" :yodlee-account-id 16279668} {:number "" :id 7 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1127 BofA SG Exp - 8407" :yodlee-account-id 16279669} {:number "" :id 8 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1124 BofA DT Exp - 8279" :yodlee-account-id 16279670} {:number "" :id 9 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1128 BofA CB Exp - 2495" :yodlee-account-id 16279671} {:number "" :id 10 :check-number 10000 :bank-name "Bank of America" :bank-code "11-35/1210" :routing "121000358" :name "A1129 BofA BH Exp - 1665" :yodlee-account-id 16279672}]}' where id = 39;

View File

@@ -0,0 +1,2 @@
-- 1532733305 DOWN add-check-type
alter table checks drop column type;

View File

@@ -0,0 +1,2 @@
-- 1532733305 UP add-check-type
alter table checks add column type varchar(255);

View File

@@ -50,10 +50,9 @@
(map db->clj)
(map data->fields)))
(def all-keys #{:company-id :vendor-id :id :status :date :s3-uuid :s3-key :s3-url :check-number :memo :amount :paid-to :bank-account-id})
(def all-keys #{:company-id :vendor-id :id :status :date :s3-uuid :s3-key :s3-url :check-number :memo :amount :paid-to :bank-account-id :type})
(defn add-sort-by [q sort-by asc]
(println sort-by)
(let [sort-by-key (keyword sort-by)]
(cond (nil? sort-by)
(helpers/merge-order-by q [:date])

View File

@@ -41,6 +41,7 @@
:bank_account
{:fields {:id {:type 'Int}
:type {:type 'String}
:number {:type 'String}
:check_number {:type 'Int}
:name {:type 'String}
@@ -84,6 +85,7 @@
:check {:fields {:id {:type 'Int}
:type {:type 'String}
:amount {:type 'String}
:vendor {:type :vendor
:resolve :get-vendor-for-check}

View File

@@ -175,10 +175,15 @@
:content-type "application/pdf"})
(str "http://" (:data-bucket env) ".s3-website-us-east-1.amazonaws.com/merged-checks/" uuid ".pdf")))
(defn check-for-invoices [invoices vendor-id vendors company bank-account-id index invoice-amounts]
(defmulti check-for-invoices (fn [invoices vendor-id vendors company bank-account index invoice-amounts]
(:type bank-account)))
(defmethod check-for-invoices "check" [invoices vendor-id vendors company bank-account index invoice-amounts]
(let [uuid (str (UUID/randomUUID))
vendor (vendors vendor-id)
bank-account (first (filter #(= (:id %) bank-account-id) (:bank-accounts company)))
memo (str "Invoice #'s: "
(str/join ", "
@@ -189,7 +194,8 @@
:s3-key (str "checks/" uuid ".pdf")
:s3-url (str "http://" (:data-bucket env) ".s3-website-us-east-1.amazonaws.com/checks/" uuid ".pdf")
:check-number (+ index (:check-number bank-account))
:bank-account-id bank-account-id
:type "check"
:bank-account-id (:id bank-account)
:amount (reduce + 0 (map (comp invoice-amounts :id) invoices))
:memo memo
:vendor-id (:id vendor)
@@ -208,8 +214,20 @@
:acct (:bank-code bank-account)
:routing (:routing bank-account)
:acct-number (:number bank-account)}}}
:invoices (map :id invoices)}))
(defmethod check-for-invoices "cash" [invoices vendor-id vendors company bank-account index invoice-amounts]
(let [vendor (vendors vendor-id)]
{:type "cash"
:bank-account-id (:id bank-account)
:amount (reduce + 0 (map (comp invoice-amounts :id) invoices))
:status "cleared"
:memo "Cash"
:vendor-id (:id vendor)
:company-id (:id company)
:date (time/now)
:invoices (map :id invoices)}))
(defn print-checks [invoice-payments company-id bank-account-id]
(let [invoices (invoices/get-multi (map :invoice-id invoice-payments))
@@ -217,8 +235,9 @@
vendors (by :id (vendors/get-all))
invoice-amounts (by :invoice-id :amount invoice-payments)
invoices-grouped-by-vendor (group-by :vendor-id invoices)
bank-account (first (filter #(= (:id %) bank-account-id) (:bank-accounts company)))
checks (-> (for [[[vendor-id invoices] index] (map vector invoices-grouped-by-vendor (range))]
[invoices (checks/insert! (check-for-invoices invoices vendor-id vendors company bank-account-id index invoice-amounts))])
[invoices (checks/insert! (check-for-invoices invoices vendor-id vendors company bank-account index invoice-amounts))])
doall)
invoice-checks (invoices-checks/insert-multi!
(mapcat
@@ -230,20 +249,25 @@
:amount (invoice-amounts (:id i))})
invoices))
checks))
updated-company (update company :bank-accounts
(fn [bas]
(map (fn [ba]
(if (= bank-account-id (:id ba))
(update ba :check-number + (count checks))
ba))
bas)))]
updated-company (if (= (:type bank-account) "cash" )
company
(update company :bank-accounts
(fn [bas]
(map (fn [ba]
(if (= bank-account-id (:id ba))
(update ba :check-number + (count checks))
ba))
bas))))]
(make-pdfs (map second checks))
(companies/upsert company-id updated-company)
(when (not= (:type bank-account) "cash")
(make-pdfs (map second checks))
(companies/upsert company-id updated-company))
(doseq [{:keys [invoice-id amount]} invoice-payments]
(invoices/apply-payment invoice-id amount))
{:invoices (invoices/get-multi (map :id (mapcat first checks)))
:pdf-url (merge-pdfs (map (comp :s3-key second) checks))}))
:pdf-url (if (= (:type bank-account) "cash")
nil
(merge-pdfs (map (comp :s3-key second) checks)))}))
(defroutes routes

View File

@@ -37,7 +37,7 @@
:graphql {:token token
:query-obj {:venia/queries [[:company
[:id :name :locations [:bank-accounts [:id :number :check-number :name] ]]]
[:id :name :locations [:bank-accounts [:id :number :check-number :name :type] ]]]
[:vendor
[:id :name :default-expense-account :primary-contact :primary-email :primary-phone :secondary-contact :secondary-email :secondary-phone :print-as :invoice-reminder-schedule :code]]]}
@@ -53,7 +53,7 @@
(fn [{:keys [db]} [_ token user]]
{:graphql {:token token
:query-obj {:venia/queries [[:company
[:id :name [:bank-accounts [:id :number :check-number :name]]]]
[:id :name [:bank-accounts [:id :number :check-number :name :type]]]]
[:vendor
[:id :name :default-expense-account]]]}

View File

@@ -36,7 +36,7 @@
:graphql {:token (-> cofx :db :user)
:query-obj {:venia/queries [[:check_page
(assoc params :company-id (:id @(re-frame/subscribe [::subs/company])))
[[:checks [:id :status :amount :check_number :s3_url :date [:vendor [:name :id]] [:company [:name :id]]]]
[[:checks [:id :status :amount :type :check_number :s3_url :date [:vendor [:name :id]] [:company [:name :id]]]]
:total
:start
:end]]]}
@@ -107,6 +107,7 @@
:sort-by sort-by
:asc asc}
"Company"])
[sorted-column {:on-sort opc
:style {:width percentage-size :cursor "pointer"}
:sort-key "vendor"
@@ -146,14 +147,16 @@
[:tr
[:td {:col-span 5}
[:i.fa.fa-spin.fa-spinner]]]
(for [{:keys [company s3-url checks check-number date amount id vendor status] :as i} (:checks @check-page)]
(for [{:keys [company s3-url checks type check-number date amount id vendor status] :as i} (:checks @check-page)]
^{:key id}
[:tr {:class (:class i)}
(when-not selected-company
[:td (:name company)])
[:td (:name vendor)]
[:td check-number]
[:td (if (= "cash" type)
"Cash"
check-number)]
[:td (date->str date) ]
[:td (gstring/format "$%.2f" amount )]
[:td status]

View File

@@ -230,7 +230,8 @@
(fn [{:keys [db]} _]
{:dispatch [::events/modal-status ::new-invoice {:visible? true}]
:db (assoc-in db [::new-invoice] {:company-id (:id @(re-frame/subscribe [::subs/company]))
:date (date->str (c/now) standard)})}))
:date (date->str (c/now) standard)
:location (first (:locations @(re-frame/subscribe [::subs/company])))})}))
(re-frame/reg-event-fx
::edit-invoice
@@ -778,8 +779,11 @@
[:div.dropdown-menu {:role "menu"}
[:div.dropdown-content
(list
(for [{:keys [id number name]} (:bank-accounts current-company)]
^{:key id} [:a.dropdown-item {:on-click (dispatch-event [::print-checks id])} "Print checks from " name])
(for [{:keys [id number name type]} (:bank-accounts current-company)]
(do (println type)
(if (= "cash" type)
^{:key id} [:a.dropdown-item {:on-click (dispatch-event [::print-checks id])} "With cash"]
^{:key id} [:a.dropdown-item {:on-click (dispatch-event [::print-checks id])} "Print checks from " name])))
^{:key "advanced-divider"} [:hr.dropdown-divider]
(when (= 1 (count checked))
@@ -808,11 +812,18 @@
[handwrite-checks-modal]
[change-expense-accounts-modal]
(when check-results-shown?
[modal
{:title "Your checks are ready!"
:hide-event [::close-check-results]}
[:div "Click " [:a {:href pdf-url :target "_new"} "here"] " to print them."]
[:div [:em "Remember to turn off all scaling and margins."]]
])
(if pdf-url
[modal
{:title "Your checks are ready!"
:hide-event [::close-check-results]}
[:div "Click " [:a {:href pdf-url :target "_new"} "here"] " to print them."]
[:div [:em "Remember to turn off all scaling and margins."]]
]
[modal
{:title "Payment created!"
:hide-event [::close-check-results]}
[:div [:em "Your payment was created."]]
]))
]))
{:component-will-mount #(re-frame/dispatch-sync [::params-change {}]) }))