allows adding
This commit is contained in:
@@ -340,6 +340,9 @@
|
||||
/* background-clip: padding-box; */
|
||||
|
||||
}
|
||||
.modal-card {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.typeahead-suggestion {
|
||||
display: block;
|
||||
|
||||
@@ -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)))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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}}}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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]]]}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)"}}])]])])
|
||||
|
||||
Reference in New Issue
Block a user