allows adding

This commit is contained in:
Bryce Covert
2018-08-05 19:51:18 -07:00
parent a9d8bf21f9
commit 2e8a7b4648
8 changed files with 183 additions and 25 deletions

View File

@@ -340,6 +340,9 @@
/* background-clip: padding-box; */
}
.modal-card {
overflow: auto;
}
.typeahead-suggestion {
display: block;

View File

@@ -45,4 +45,13 @@
(Integer/parseInt id))))
(defn add-bank-account [id bank-account]
(let [company (get-by-id id)
company (update company :bank-accounts
(fn [ba]
(let [next-id (inc (apply max (conj (map :id ba) 0)))]
(conj (vec ba) (assoc bank-account :id next-id)))))]
(upsert id company)))

View File

@@ -36,6 +36,7 @@
{:fields {:id {:type 'Int}
:name {:type 'String}
:email {:type 'String}
:address {:type :address}
:locations {:type '(list String)}
:bank_accounts {:type '(list :bank_account)}}}
@@ -49,6 +50,7 @@
:bank_name {:type 'String}}}
:address
{:fields {:street1 {:type 'String}
:street2 {:type 'String}
:city {:type 'String}
:state {:type 'String}
:zip {:type 'String}}}

View File

@@ -15,10 +15,19 @@
:body (pr-str (filter #(can-see-company? (:identity r) (:id %)) (companies/get-all)))
:headers {"Content-Type" "application/edn"}})
(wrap-spec
(PUT "/:id" {:keys [edn-params] {:keys [id]} :route-params :as r}
(PUT "/:id" {{:keys [address email locations new-bank-accounts]} :edn-params :keys [edn-params] {:keys [id ]} :route-params :as r}
(assert-can-see-company (:identity r) id)
{:status 200
:body (pr-str (companies/upsert id edn-params))
:headers {"Content-Type" "application/edn"}})
(let [id (Integer/parseInt id)
company (companies/get-by-id id)
updated-company (merge company {:address address
:email email
:locations locations})]
(companies/upsert id updated-company)
(doseq [bank-account new-bank-accounts]
(companies/add-bank-account id bank-account))
{:status 200
:body (pr-str (companies/get-by-id id))
:headers {"Content-Type" "application/edn"}}))
::entity/company))
wrap-secure))

View File

@@ -8,7 +8,7 @@
(s/def ::id int)
(s/def ::name ::shared/required-identifier)
(s/def ::address ::address/address)
(s/def ::address (s/nilable ::address/address))
(s/def ::location string?)
(s/def ::locations (s/coll-of ::location))

View File

@@ -37,7 +37,8 @@
:graphql {:token token
:query-obj {:venia/queries [[:company
[:id :name :locations [:bank-accounts [:id :number :check-number :name :type] ]]]
[:id :name :locations [:bank-accounts [:id :number :check-number :name :type] ]
[:address [:street1 :street2 :city :state :zip]]]]
[:vendor
[:id :name :default-expense-account :primary-contact :primary-email :primary-phone :secondary-contact :secondary-email :secondary-phone :print-as :invoice-reminder-schedule :code]]]}

View File

@@ -3,6 +3,7 @@
[auto-ap.views.utils :refer [dispatch-value-change dispatch-event bind-field horizontal-field]]))
(defn address-field [{:keys [event field subscription]}]
(println "sub" subscription)
[:span
[horizontal-field
nil

View File

@@ -3,7 +3,7 @@
(:require [re-frame.core :as re-frame]
[reagent.core :as reagent]
[auto-ap.subs :as subs]
[auto-ap.events.admin.companies :as events]
[auto-ap.events :as events]
[auto-ap.entities.companies :as entity]
[auto-ap.views.components.address :refer [address-field]]
[auto-ap.views.utils :refer [login-url dispatch-event dispatch-value-change bind-field horizontal-field]]
@@ -12,6 +12,51 @@
[auto-ap.routes :as routes]
[bidi.bidi :as bidi]))
(re-frame/reg-event-fx
::edit
(fn [{:keys [db]} [_ company-id]]
{:dispatch [::events/modal-status :auto-ap.views.pages.admin.companies/edit {:visible? true}]
:db (assoc-in db [:admin :company]
(get (:companies db) company-id))}))
(re-frame/reg-event-fx
::save
(fn [{:keys [db]} _]
(let [edited-company (-> (get-in db [:admin :company])
(dissoc :location)
(dissoc :new-account))]
{:db (assoc-in db [:admin :company :saving?] true)
:http {:method :put
:token (:user db)
:body (pr-str edited-company)
:headers {"Content-Type" "application/edn"}
:uri (str "/api/companies/" (:id edited-company))
:on-success [::save-complete]
:on-error [::save-error]}})))
(re-frame/reg-event-fx
::save-complete
(fn [{:keys [db]} [_ company]]
{:dispatch [::events/modal-completed :auto-ap.views.pages.admin.companies/edit]
:db (-> db
(assoc-in [:admin :company] nil)
(assoc-in [:companies (:id company)] company))}))
(re-frame/reg-event-db
::save-error
(fn [db [_ company]]
(-> db
(assoc-in [:admin :company :saving?] false)
(assoc-in [:admin :company :error] true))))
(re-frame/reg-event-db
::change
(fn [db [_ path value]]
(assoc-in db (concat [:admin :company] path)
value)))
(re-frame/reg-event-fx
::add-location
(fn [{:keys [db]} _]
@@ -20,6 +65,28 @@
(update-in [:admin :company :locations] conj (:location company))
(update-in [:admin :company] dissoc :location))})))
(re-frame/reg-event-fx
::add-new-bank-account
(fn [{:keys [db]} _]
(let [company (:company @(re-frame/subscribe [::subs/admin]))
new-bank-account (:new-account company)
new-bank-account (-> new-bank-account
(update :check-number #(if (seq %) (js/parseInt %) nil))
(update :yodlee-account-id #(if (seq %) (js/parseInt %) nil))
(assoc :is-new? true))]
{:db (-> db
(update-in [:admin :company :new-bank-accounts] (fn [bank-accounts]
(conj bank-accounts new-bank-account)))
(update-in [:admin :company] dissoc :new-account))})))
(re-frame/reg-event-db
::remove-new-bank-account
(fn [db [_ index]]
(update-in db [:admin :company :new-bank-accounts]
(fn [bas]
(vec (concat (take index bas)
(drop (inc index) bas)))))))
(defn companies-table []
(let [companies (re-frame/subscribe [::subs/companies])
editing-company (:company @(re-frame/subscribe [::subs/admin]))]
@@ -30,7 +97,7 @@
[:th "Email"]]]
[:tbody (for [{:keys [id name email] :as c} @companies]
^{:key (str name "-" id )}
[:tr {:on-click (fn [] (re-frame/dispatch [::events/edit id]))
[:tr {:on-click (fn [] (re-frame/dispatch [::edit id]))
:style {"cursor" "pointer"}}
[:td name]
[:td email]])]]))
@@ -47,7 +114,7 @@
[action-modal {:id ::edit
:title (str "Edit " (:name editing-company))
:action-text "Save"
:save-event [::events/save]}
:save-event [::save]}
[horizontal-field
[:label.label "Name"]
[:div.control
@@ -55,7 +122,7 @@
[:input.input {:type "text"
:field :name
:spec ::entity/name
:event ::events/change
:event ::change
:subscription editing-company}]]]]
[horizontal-field
@@ -65,22 +132,9 @@
[:input.input {:type "email"
:field :email
:spec ::entity/name
:event ::events/change
:event ::change
:subscription editing-company}]]]]
[:h2.subtitle "Address"]
[address-field {:field [:address]
:event ::events/change
:subscription editing-company}]
[horizontal-field
[:label.label "Bank Accounts"]
[:div.control
[:ul
(for [{:keys [number check-number id]} (:bank-accounts editing-company)]
^{:key id} [:li number " - " check-number])]]]
[horizontal-field
[:label.label "Locations"]
[:div.control
@@ -89,12 +143,91 @@
[bind-field
[:input.input {:type "text"
:field :location
:event ::events/change
:event ::change
:subscription editing-company}]]]
[:p.control [:button.button.is-primary {:on-click (dispatch-event [::add-location])} "Add"]]]
[:ul
(for [location (:locations editing-company)]
^{:key location} [:li location ])]]]
[:h2.subtitle "Address"]
[address-field {:field [:address]
:event ::change
:subscription editing-company}]
[:h2.subtitle "Add account"]
[horizontal-field
[:label.label "Bank"]
[:div.control
[bind-field
[:input.input {:placeholder "Bank Name"
:type "text"
:field [:new-account :bank-name]
:event ::change
:subscription editing-company}]]]
[:div.control
[bind-field
[:input.input {:placeholder "Routing"
:type "text"
:field [:new-account :routing]
:event ::change
:subscription editing-company}]]]
[:div.control
[bind-field
[:input.input {:placeholder "Code"
:type "text"
:field [:new-account :bank-code]
:event ::change
:subscription editing-company}]]]]
[horizontal-field
[:label.label "Account"]
[:div.control
[bind-field
[:input.input {:placeholder "Nickname"
:type "text"
:field [:new-account :name]
:event ::change
:subscription editing-company}]]]
[:div.control
[bind-field
[:input.input {:placeholder "Acct #"
:type "text"
:field [:new-account :number]
:event ::change
:subscription editing-company}]]]
[:div.control
[bind-field
[:input.input {:placeholder "Check #"
:type "text"
:field [:new-account :check-number]
:event ::change
:subscription editing-company}]]]]
[horizontal-field
[:label.label "Yodlee Account"]
[:div.control
[bind-field
[:input.input {:placeholder "Yodlee Account #"
:type "text"
:field [:new-account :yodlee-account-id]
:event ::change
:subscription editing-company}]]]
[:div.control
[:button.button.is-primary.is-pulled-right {:on-click (dispatch-event [::add-new-bank-account])} "Add"]]]
[:h2.subtitle "Bank Accounts"]
[horizontal-field
nil
[:div.control
[:ul
(for [{:keys [name number check-number id]} (:bank-accounts editing-company)]
^{:key id} [:li name])
(for [[index {:keys [name number check-number]}] (map vector (range) (:new-bank-accounts editing-company))]
^{:key index} [:li [:strong "* " name] [:button.button {:on-click (dispatch-event [::remove-new-bank-account index])} [:span.icon [:i.fa.fa-times]]]])]]]
(when (:saving? editing-company) [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])]])])