added support for merging vendors.
This commit is contained in:
@@ -384,6 +384,11 @@
|
||||
:args {:invoices {:type '(list :id)}}
|
||||
:resolve :mutation/approve-invoices}
|
||||
|
||||
:merge_vendors {:type :id
|
||||
:args {:from {:type :id}
|
||||
:to {:type :id}}
|
||||
:resolve :mutation/merge-vendors}
|
||||
|
||||
:add_and_print_invoice {:type :check_result
|
||||
:args {:invoice {:type :add_invoice}
|
||||
:bank_account_id {:type :id}
|
||||
@@ -588,6 +593,7 @@
|
||||
:mutation/edit-invoice gq-invoices/edit-invoice
|
||||
:mutation/edit-client gq-clients/edit-client
|
||||
:mutation/upsert-vendor gq-vendors/upsert-vendor
|
||||
:mutation/merge-vendors gq-vendors/merge-vendors
|
||||
:mutation/void-invoice gq-invoices/void-invoice
|
||||
:mutation/unvoid-invoice gq-invoices/unvoid-invoice
|
||||
:mutation/void-payment gq-checks/void-check
|
||||
|
||||
@@ -50,4 +50,18 @@
|
||||
id))
|
||||
(->graphql))))
|
||||
|
||||
(defn merge-vendors [context {:keys [from to]} value]
|
||||
(let [conn (d/connect uri)
|
||||
transaction (->> (d/query {:query {:find '[?x ?a2]
|
||||
:in '[$ ?vendor-from ]
|
||||
:where ['[?x ?a ?vendor-from]
|
||||
'[?a :db/ident ?a2]]}
|
||||
:args [(d/db conn)
|
||||
from]})
|
||||
(mapcat (fn [[src attr]]
|
||||
|
||||
[[:db/retract src attr from]
|
||||
[:db/add src attr to]])))
|
||||
transaction (conj transaction [:db/retractEntity from])]
|
||||
@(d/transact conn transaction)
|
||||
to))
|
||||
|
||||
@@ -96,10 +96,9 @@
|
||||
::modal-status
|
||||
(fn [db [_ id state]]
|
||||
(println "changing modal status" id "to")
|
||||
(println (:auto-ap.forms/forms db))
|
||||
(-> db
|
||||
(update-in [:modal-state id] #(merge % state))
|
||||
(dissoc :auto-ap.forms/forms)
|
||||
#_(dissoc :auto-ap.forms/forms)
|
||||
)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
@@ -112,7 +111,6 @@
|
||||
(re-frame/reg-event-db
|
||||
::modal-completed
|
||||
(fn [db [_ id state]]
|
||||
(println (:auto-ap.forms/forms db))
|
||||
(-> db
|
||||
(update-in [:modal-state] #(dissoc % id))
|
||||
(dissoc :auto-ap.forms/forms))))
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
[auto-ap.db :as db]
|
||||
[auto-ap.routes :as routes]
|
||||
[auto-ap.effects :as effects]
|
||||
[auto-ap.forms :as forms]
|
||||
[auto-ap.subs :as subs]
|
||||
[auto-ap.entities.vendors :as entity]
|
||||
[auto-ap.events :as events]
|
||||
[auto-ap.utils :refer [by]]
|
||||
@@ -31,6 +33,29 @@
|
||||
{})
|
||||
:dispatch [::events/modal-status :auto-ap.views.pages.admin.vendors/admin-vendor {:visible? true}]}))
|
||||
|
||||
|
||||
|
||||
#_(re-frame/reg-event-fx
|
||||
::merge-submit-clicked
|
||||
[(forms/in-form :auto-ap.views.pages.admin.vendors/merge-vendors)]
|
||||
(fn [{{{:keys [from-id to-id]} :data :as merge-vendors-form} :db :as g} _]
|
||||
(println g)
|
||||
(let [user @(re-frame/subscribe [::subs/token])]
|
||||
(if (and from-id to-id)
|
||||
{:db (-> merge-vendors-form
|
||||
(assoc :status :loading)
|
||||
(assoc :error nil))
|
||||
:graphql
|
||||
{:token user
|
||||
:query-obj {:venia/operation {:operation/type :mutation
|
||||
:operation/name "MergeVendors"}
|
||||
:venia/queries [{:query/data [:merge-vendors
|
||||
{:from from-id :to to-id}
|
||||
[:id]]}]}
|
||||
:on-success [::merge-vendors-complete]
|
||||
:on-error [::forms/save-error :auto-ap.views.pages.admin.vendors/merge-vendors]}}
|
||||
{:db merge-vendors-form}))))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::save
|
||||
(fn [{:keys [db]} _]
|
||||
|
||||
@@ -53,8 +53,12 @@
|
||||
|
||||
(re-frame/reg-sub
|
||||
::modal-state
|
||||
(fn [db [_ id]]
|
||||
(get (:modal-state db) id)))
|
||||
(fn [db [_ id status-from]]
|
||||
(if status-from
|
||||
(assoc (get (:modal-state db) id)
|
||||
:error-message (get-in db [:auto-ap.forms/forms status-from :error])
|
||||
:saving? (= (get-in db [:auto-ap.forms/forms status-from :status]) :loading))
|
||||
(get (:modal-state db) id))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::token
|
||||
|
||||
@@ -21,35 +21,26 @@
|
||||
[:footer.modal-card-foot
|
||||
foot])]])
|
||||
|
||||
(defn action-modal [{:keys [title action-text id save-event can-submit?] :or {can-submit? true}} & rest]
|
||||
(let [{:keys [visible? saving? error-message]} @(re-frame/subscribe [::subs/modal-state id])]
|
||||
(defn action-modal [{:keys [title action-text id save-event can-submit? status-from] :or {can-submit? true}} & rest]
|
||||
(let [{:keys [visible? saving? error-message]} @(re-frame/subscribe [::subs/modal-state id status-from])]
|
||||
(when visible?
|
||||
(-> [modal {:title [:span title
|
||||
[:form {:id id
|
||||
:on-submit (fn [e]
|
||||
(.preventDefault e)
|
||||
(re-frame/dispatch [::events/modal-status id {:saving? true :error-message nil}])
|
||||
(re-frame/dispatch save-event))}
|
||||
(-> [modal {:title [:span title]
|
||||
:foot [:input.button.is-primary (cond-> {:type "submit"
|
||||
:form id
|
||||
:class (when saving?
|
||||
"is-loading")
|
||||
:value action-text}
|
||||
saving? (assoc :disabled "disabled")
|
||||
(not can-submit?) (assoc :disabled "disabled"))
|
||||
]
|
||||
:foot [:input.button.is-primary {:type "submit"
|
||||
:tabindex "1"
|
||||
:form id
|
||||
:disabled (cond saving?
|
||||
"disabled"
|
||||
|
||||
(not can-submit?)
|
||||
"disabled"
|
||||
|
||||
:else
|
||||
"")
|
||||
:class (when saving?
|
||||
"is-loading")
|
||||
:value action-text}
|
||||
]
|
||||
:id id
|
||||
:hide-event [::events/modal-status id {:visible? false}]}
|
||||
(into [:form {:id id
|
||||
:on-submit (fn [e]
|
||||
(.preventDefault e)
|
||||
(re-frame/dispatch [::events/modal-status id {:saving? true :error-message nil}])
|
||||
(re-frame/dispatch save-event))}
|
||||
(when error-message
|
||||
[:div.notification.is-warning error-message])]
|
||||
|
||||
(r/children (r/current-component)) )]
|
||||
(into [(when saving? [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])])))))
|
||||
:id id
|
||||
:hide-event [::events/modal-status id {:visible? false}]}
|
||||
(when error-message
|
||||
[:div.notification.is-warning error-message])]
|
||||
(into (r/children (r/current-component)))
|
||||
(into [(when saving? [:div.is-overlay {:style {"backgroundColor" "rgba(150,150,150, 0.5)"}}])]))])))
|
||||
|
||||
@@ -4,11 +4,13 @@
|
||||
[reagent.core :as reagent]
|
||||
[clojure.string :as str]
|
||||
[auto-ap.subs :as subs]
|
||||
[auto-ap.events :as e]
|
||||
[auto-ap.forms :as forms]
|
||||
[auto-ap.events.admin.vendors :as events]
|
||||
[auto-ap.entities.vendors :as entity]
|
||||
[auto-ap.views.components.address :refer [address-field]]
|
||||
[auto-ap.views.components.vendor-dialog :refer [vendor-dialog]]
|
||||
[auto-ap.views.components.modal :refer [modal]]
|
||||
[auto-ap.views.components.modal :refer [modal action-modal]]
|
||||
[auto-ap.views.components.admin.side-bar :refer [admin-side-bar]]
|
||||
[auto-ap.views.components.layouts :refer [side-bar-layout]]
|
||||
[clojure.spec.alpha :as s]
|
||||
@@ -56,6 +58,72 @@
|
||||
keys (dissoc keys :field :subscription)]
|
||||
(vec (concat [dom keys] rest))))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::merge-clicked
|
||||
(fn [{:keys [db]} _]
|
||||
{:db (forms/start-form db ::merge-vendors {})
|
||||
:dispatch [::e/modal-status ::merge-vendors {:visible? true :saving? false}]}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::merge-vendors-complete
|
||||
(fn [{:keys [db]} _]
|
||||
{:db (forms/stop-form db ::merge-vendors)
|
||||
:dispatch-n (list [::e/modal-status ::merge-vendors {:visible? false}]
|
||||
[::events/mounted])}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::merge-submit-clicked
|
||||
[(forms/in-form ::merge-vendors)]
|
||||
(fn [{{{:keys [from-id to-id]} :data :as merge-vendors-form} :db :as g} _]
|
||||
(let [user @(re-frame/subscribe [::subs/token])]
|
||||
(if (and from-id to-id)
|
||||
{:db (-> merge-vendors-form
|
||||
(assoc :status :loading)
|
||||
(assoc :error nil))
|
||||
:graphql
|
||||
{:token user
|
||||
:query-obj {:venia/operation {:operation/type :mutation
|
||||
:operation/name "MergeVendors"}
|
||||
:venia/queries [{:query/data [:merge-vendors
|
||||
{:from from-id :to to-id}
|
||||
[]]}]}
|
||||
:on-success [::merge-vendors-complete]
|
||||
:on-error [::forms/save-error ::merge-vendors]}}
|
||||
{:db merge-vendors-form}))))
|
||||
|
||||
(defn merge-vendors-dialog []
|
||||
(let [{:keys [data active? error id]} @(re-frame/subscribe [::forms/form ::merge-vendors])
|
||||
change-event [::forms/change ::merge-vendors]]
|
||||
|
||||
[action-modal {:id ::merge-vendors
|
||||
:title "Merge Vendors"
|
||||
:action-text "Merge"
|
||||
:save-event [::merge-submit-clicked]
|
||||
:status-from ::merge-vendors}
|
||||
[:div.field
|
||||
[:label.label
|
||||
"From Vendor (will be deleted)"]
|
||||
[:div.control
|
||||
[bind-field
|
||||
[typeahead {:matches (map (fn [x] [(:id x) (:name x)]) @(re-frame/subscribe [::subs/vendors]))
|
||||
:type "typeahead"
|
||||
:auto-focus true
|
||||
:field [:from-id]
|
||||
:text-field [:from-name]
|
||||
:event change-event
|
||||
:subscription data}]]]]
|
||||
[:div.field
|
||||
[:label.label
|
||||
"To Vendor"]
|
||||
[:div.control
|
||||
[bind-field
|
||||
[typeahead {:matches (map (fn [x] [(:id x) (:name x)]) @(re-frame/subscribe [::subs/vendors]))
|
||||
:type "typeahead"
|
||||
:field [:to-id]
|
||||
:text-field [:to-name]
|
||||
:event change-event
|
||||
:subscription data}]]]]]))
|
||||
|
||||
|
||||
(defn admin-vendors-content []
|
||||
[(with-meta
|
||||
@@ -65,15 +133,15 @@
|
||||
[:div.notification banner])
|
||||
(let [vendors (re-frame/subscribe [::subs/vendors])
|
||||
editing-vendor (:vendor @(re-frame/subscribe [::subs/admin]))]
|
||||
|
||||
|
||||
[:div
|
||||
[:h1.title "Vendors"]
|
||||
[:a.button.is-primary.is-large {:on-click (dispatch-event [::merge-clicked])} "Merge vendors"]
|
||||
[vendors-table]
|
||||
|
||||
[:div.is-pulled-right
|
||||
[:a.button.is-primary.is-large {:on-click (dispatch-event [::events/new])} "New vendor"]]
|
||||
|
||||
[merge-vendors-dialog]
|
||||
[vendor-dialog {:vendor editing-vendor
|
||||
:save-event [::events/save]
|
||||
:change-event ::events/change
|
||||
|
||||
Reference in New Issue
Block a user