From 87b94f0f3fbb0fc13597ff4099ad834e109c2446 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Mon, 9 Apr 2018 08:47:46 -0700 Subject: [PATCH] many more fields. --- ...1523250939-DOWN-add-more-vendor-fields.sql | 33 ++++ .../1523250939-UP-add-more-vendor-fields.sql | 37 ++++ src/cljs/auto_ap/events/admin/vendors.cljs | 7 +- .../auto_ap/views/pages/admin/vendors.cljs | 179 ++++++++++++++---- 4 files changed, 218 insertions(+), 38 deletions(-) create mode 100644 migrator/migrations/1523250939-DOWN-add-more-vendor-fields.sql create mode 100644 migrator/migrations/1523250939-UP-add-more-vendor-fields.sql diff --git a/migrator/migrations/1523250939-DOWN-add-more-vendor-fields.sql b/migrator/migrations/1523250939-DOWN-add-more-vendor-fields.sql new file mode 100644 index 00000000..b5a27b95 --- /dev/null +++ b/migrator/migrations/1523250939-DOWN-add-more-vendor-fields.sql @@ -0,0 +1,33 @@ +-- 1523250939 DOWN add-more-vendor-fields +alter table vendors +drop column address1; + +alter table vendors +drop column address2; + +alter table vendors +drop column city; + +alter table vendors +drop column state; + +alter table vendors +drop column zip; + +alter table vendors +drop column primary_contact; + +alter table vendors +drop column primary_email; + +alter table vendors +drop column primary_phone; + +alter table vendors +drop column secondary_contact; + +alter table vendors +drop column secondary_email; + +alter table vendors +drop column secondary_phone; diff --git a/migrator/migrations/1523250939-UP-add-more-vendor-fields.sql b/migrator/migrations/1523250939-UP-add-more-vendor-fields.sql new file mode 100644 index 00000000..402fa2c9 --- /dev/null +++ b/migrator/migrations/1523250939-UP-add-more-vendor-fields.sql @@ -0,0 +1,37 @@ +-- 1523250939 UP add-more-vendor-fields +alter table vendors +add column address1 varchar (255); + +alter table vendors +add column address2 varchar (255); + +alter table vendors +add column city varchar (255); + +alter table vendors +add column state varchar (255); + +alter table vendors +add column zip varchar (255); + +alter table vendors +add column primary_contact varchar (255); + +alter table vendors +add column primary_email varchar (255); + +alter table vendors +add column primary_phone varchar (255); + + +alter table vendors +add column secondary_contact varchar (255); + +alter table vendors +add column secondary_email varchar (255); + +alter table vendors +add column secondary_phone varchar (255); + + +update vendors set primary_email=email; diff --git a/src/cljs/auto_ap/events/admin/vendors.cljs b/src/cljs/auto_ap/events/admin/vendors.cljs index 06f5dda5..f110946e 100644 --- a/src/cljs/auto_ap/events/admin/vendors.cljs +++ b/src/cljs/auto_ap/events/admin/vendors.cljs @@ -21,17 +21,18 @@ ::save (fn [{:keys [db]} _] (let [edited-vendor (get-in db [:admin :vendor]) - fx {:db (assoc-in db [:admin :vendor :saving?] true)}] + fx {:db (assoc-in db [:admin :vendor :saving?] true)} + all-fields [:name :email :data :invoice-reminder-schedule :primary-contact :primary-email :primary-phone :secondary-contact :secondary-email :secondary-phone :code :address1 :address2 :city :state :zip]] (if (:id edited-vendor) (assoc fx :http {:method :put :token (:user db) - :body (pr-str (select-keys edited-vendor [:name :email :data :invoice-reminder-schedule :code])) + :body (pr-str (select-keys edited-vendor all-fields)) :headers {"Content-Type" "application/edn"} :uri (str "/api/vendors/" (:id edited-vendor)) :on-success [::save-complete]}) (assoc fx :http {:method :post :token (:user db) - :body (pr-str (select-keys edited-vendor [:name :email :data :invoice-reminder-schedule :code])) + :body (pr-str (select-keys edited-vendor all-fields)) :headers {"Content-Type" "application/edn"} :uri (str "/api/vendors") :on-success [::save-complete]}))))) diff --git a/src/cljs/auto_ap/views/pages/admin/vendors.cljs b/src/cljs/auto_ap/views/pages/admin/vendors.cljs index a70cb0b5..fe09c97b 100644 --- a/src/cljs/auto_ap/views/pages/admin/vendors.cljs +++ b/src/cljs/auto_ap/views/pages/admin/vendors.cljs @@ -17,16 +17,16 @@ [:th "Name"] [:th "Email"] [:th "Invoice Reminders"]]] - [:tbody (for [{:keys [id name email data invoice-reminder-schedule]} @vendors] + [:tbody (for [{:keys [id name primary-email data invoice-reminder-schedule]} @vendors] ^{:key (str name "-" id )} [:tr {:on-click (fn [] (re-frame/dispatch [::events/edit id])) :style {"cursor" "pointer"}} [:td name] - [:td email] + [:td primary-email] [:td invoice-reminder-schedule]])]])) (defn edit-dialog [] - (let [{:keys [name email invoice-reminder-schedule id code] :as editing-vendor} (:vendor @(re-frame/subscribe [::subs/admin]))] + (let [{:keys [name city state zip address1 address2 primary-contact primary-email primary-phone secondary-contact secondary-email secondary-phone invoice-reminder-schedule id code] :as editing-vendor} (:vendor @(re-frame/subscribe [::subs/admin]))] [:div.modal.is-active [:div.modal-background {:on-click (fn [] (re-frame/dispatch [::events/edit nil]))}] @@ -38,39 +38,147 @@ (str "Add " (or name "")))] [:button.delete {:on-click (fn [] (re-frame/dispatch [::events/edit nil]))}]] [:section.modal-card-body - [:div.field - [:label.label "Name"] - [:div.control - [:input.input {:type "text" :value name - :on-change (dispatch-value-change [::events/change [:name]])}]]] - [:div.field - [:label.label "Code"] - [:div.control - [:input.input {:type "text" :value code - :on-change (dispatch-value-change [::events/change [:code]])}]] - [:p.help "The vendor code is used for invoice parsing. Only one vendor at a time can use a code"]] + [:div.field.is-horizontal + [:div.field-label + [:label.label "Name"]] + [:div.field-body + [:div.field + [:div.control + [:input.input {:type "text" :value name + :on-change (dispatch-value-change [::events/change [:name]])}]]]]] + [:div.field.is-horizontal + [:div.field-label + [:label.label "Code"]] + [:div.field-body + [:div.field + [:div.control + [:input.input.is-expanded {:type "text" :value code + :on-change (dispatch-value-change [::events/change [:code]])}] + [:p.help "The vendor code is used for invoice parsing. Only one vendor at a time can use a code"]]]] + ] - [:div.field - [:label.label "Email"] - [:div.control - [:input.input {:type "email" - :value email - :on-change (dispatch-value-change [::events/change [:email]])}]]] + [:h2.subtitle "Address"] + [:div.field.is-horizontal + [:div.field-label] + [:div.field-body + [:div.field + [:div.control + [:p.help "Address"] + [:input.input.is-expanded {:type "text" + :placeholder "1700 Pennsylvania Ave" + :value address1 + :on-change (dispatch-value-change [::events/change [:address1]])}]]]]] + [:div.field.is-horizontal + [:div.field-label] + [:div.field-body + [:div.field + [:div.control + + [:input.input.is-expanded {:type "text" + :placeholder "Suite 400" + :value address2 + :on-change (dispatch-value-change [::events/change [:address2]])}]]]]] + [:div.field.is-horizontal + [:div.field-label] + [:div.field-body + [:div.field + [:p.help "City"] + [:div.control + [:input.input.is-expanded {:type "text" + :value city + :placeholder "Cupertino" + :on-change (dispatch-value-change [::events/change [:city]])}]]] + [:div.field + [:div.control + + [:p.help "State"] + [:input.input {:type "email" + :value state + :placeholder "CA" + :on-change (dispatch-value-change [::events/change [:state]])}] + ]] - [:div.field - [:labal.label "Invoice Reminders"] - [:div.control - [:label.radio - [:input {:type "radio" - :name "schedule" - :value "Weekly" - :checked (if (= "Weekly" invoice-reminder-schedule) - "checked" - "") - :on-change (dispatch-value-change [::events/change [:invoice-reminder-schedule]])}] - " Send weekly"]] - [:div.control - [:label.radio + [:div.field + [:div.control + [:p.help "Zip"] + [:input.input {:type "phone" + :value zip + :placeholder "95014" + :on-change (dispatch-value-change [::events/change [:zip]])}] + ]]]] + [:h2.subtitle "Contact"] + + + [:div.field.is-horizontal + [:div.field-label + [:label.label "Primary"]] + [:div.field-body + [:div.field + [:div.control.has-icons-left + [:input.input.is-expanded {:type "text" + :value primary-contact + :on-change (dispatch-value-change [::events/change [:primary-contact]])}] + [:span.icon.is-small.is-left + [:i.fa.fa-user]]]] + [:div.field + [:div.control.has-icons-left + [:span.icon.is-small.is-left + [:i.fa.fa-envelope]] + [:input.input {:type "email" + :value primary-email + :on-change (dispatch-value-change [::events/change [:primary-email]])}]]] + + [:div.field + [:div.control.has-icons-left + [:input.input {:type "phone" + :value primary-phone + :on-change (dispatch-value-change [::events/change [:primary-phone]])}] + [:span.icon.is-small.is-left + [:i.fa.fa-phone]]]]]] + [:div.field.is-horizontal + [:div.field-label + [:label.label "Secondary"]] + [:div.field-body + [:div.field + [:div.control.has-icons-left + [:input.input.is-expanded {:type "text" + :value secondary-contact + :on-change (dispatch-value-change [::events/change [:secondary-contact]])}] + [:span.icon.is-small.is-left + [:i.fa.fa-user]]]] + [:div.field + [:div.control.has-icons-left + [:span.icon.is-small.is-left + [:i.fa.fa-envelope]] + [:input.input {:type "email" + :value secondary-email + :on-change (dispatch-value-change [::events/change [:secondary-email]])}]]] + + [:div.field + [:div.control.has-icons-left + [:input.input {:type "phone" + :value secondary-phone + :on-change (dispatch-value-change [::events/change [:secondary-phone]])}] + [:span.icon.is-small.is-left + [:i.fa.fa-phone]]]]]] + + [:div.field.is-horizontal + [:div.field-label + [:label.label "Invoice Reminders"]] + [:div.field-body + [:div.field + [:div.control + [:label.radio + [:input {:type "radio" + :name "schedule" + :value "Weekly" + :checked (if (= "Weekly" invoice-reminder-schedule) + "checked" + "") + :on-change (dispatch-value-change [::events/change [:invoice-reminder-schedule]])}] + + " Send weekly"] + [:label.radio [:input {:type "radio" :name "schedule" :value "Never" @@ -78,7 +186,8 @@ "checked" "") :on-change (dispatch-value-change [::events/change [:invoice-reminder-schedule]])}] - " Never"]]] + " Never"]]]] + ] (when (:saving? editing-vendor) [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])]