slightly improved excel import.
This commit is contained in:
@@ -22,9 +22,12 @@
|
||||
n))))
|
||||
|
||||
(defn assoc-client-code [i]
|
||||
(-> i
|
||||
(assoc :client-code (first (str/split (:location i) #"-" )))
|
||||
(assoc :default-location (second (str/split (:location i) #"-" )))))
|
||||
(let [[client-code default-location] (str/split (:location i) #"-" )]
|
||||
(cond-> i
|
||||
client-code (assoc :client-code client-code)
|
||||
default-location (assoc :default-location default-location)
|
||||
(not client-code) (update :errors conj {:info "No client code found"})
|
||||
(not default-location) (update :errors conj {:info "No default location found"}))))
|
||||
|
||||
(defn parse-client [{:keys [client-code client]} clients]
|
||||
(if-let [id (:db/id (or (clients client-code)
|
||||
@@ -105,6 +108,8 @@
|
||||
(map (parse-or-error :invoice-number parse-invoice-number))
|
||||
(map (parse-or-error :total parse-amount))
|
||||
(map (parse-or-error :date parse-date)))]
|
||||
|
||||
(println "ROWS" rows)
|
||||
rows))
|
||||
|
||||
(defn invoice-rows->transaction [rows]
|
||||
@@ -229,6 +234,7 @@
|
||||
:bank-account-id (:db/id (all-bank-accounts bank-account-code))}))))]
|
||||
|
||||
(manual-import raw-transactions)
|
||||
|
||||
|
||||
{:status 200
|
||||
:body (pr-str {:imported (count raw-transactions)
|
||||
@@ -272,10 +278,11 @@
|
||||
set)
|
||||
|
||||
inserted-rows @(d/transact (d/connect uri) (invoice-rows->transaction (:new grouped-rows)))]
|
||||
|
||||
{:status 200
|
||||
:body (pr-str {:imported (count (:new grouped-rows))
|
||||
:already-imported (count (:exists grouped-rows))
|
||||
:vendors-not-found vendors-not-found
|
||||
:errors (:error grouped-rows)})
|
||||
:errors (map #(dissoc % :date) (:error grouped-rows))})
|
||||
:headers {"Content-Type" "application/edn"}}))))
|
||||
wrap-secure))
|
||||
|
||||
@@ -56,9 +56,11 @@
|
||||
(re-frame/reg-event-db
|
||||
::save-error
|
||||
(fn [db [_ form result]]
|
||||
|
||||
(-> db
|
||||
(assoc-in [::forms form :status] :error)
|
||||
(assoc-in [::forms form :error] (:message (first result))))))
|
||||
(assoc-in [::forms form :error] (or (:message (first result))
|
||||
result)))))
|
||||
|
||||
(defn side-bar-form [{:keys [form]} children]
|
||||
[:div [:a.delete.is-pulled-right {:on-click (dispatch-event [::form-closing form])}] [:div children]])
|
||||
@@ -67,3 +69,8 @@
|
||||
(-> db
|
||||
(assoc-in [::forms id :status] :loading)
|
||||
(assoc-in [::forms id :error] nil)))
|
||||
|
||||
(defn save-succeeded [db id]
|
||||
(-> db
|
||||
(assoc-in [::forms id :status] nil)
|
||||
(assoc-in [::forms id :error] nil)))
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
[auto-ap.events :as all-events]
|
||||
[auto-ap.events.admin.clients :as events]
|
||||
[auto-ap.entities.clients :as entity]
|
||||
[auto-ap.forms :as forms]
|
||||
|
||||
[auto-ap.views.components.layouts :refer [side-bar-layout]]
|
||||
[auto-ap.views.components.admin.side-bar :refer [admin-side-bar]]
|
||||
@@ -31,39 +32,36 @@
|
||||
(fn [db [_ field v]]
|
||||
(assoc-in db (into [::excel-import] field) v)))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::edit
|
||||
(fn [db [_ field v]]
|
||||
(assoc db ::excel-import nil )
|
||||
db))
|
||||
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::save
|
||||
(fn [{:keys [db]}]
|
||||
(let [excel-import (::excel-import db)]
|
||||
{:http {:token (:user db)
|
||||
[(forms/in-form ::excel-import)]
|
||||
(fn [{{excel-import-data :data :as excel-import-form} :db}]
|
||||
(let [user @(re-frame/subscribe [::subs/token])]
|
||||
{:db (-> excel-import-form
|
||||
(assoc :status :loading)
|
||||
(assoc :error nil))
|
||||
:http {:token user
|
||||
:method :post
|
||||
:body (pr-str excel-import)
|
||||
:body (pr-str excel-import-data)
|
||||
:headers {"Content-Type" "application/edn"}
|
||||
:uri (str "/api/invoices/upload-integreat")
|
||||
:on-success [::save-complete]
|
||||
:on-error [::save-error]}
|
||||
:db (-> db
|
||||
(assoc-in [::excel-import :rows] nil)
|
||||
(assoc-in [::excel-import :saving?] true))})))
|
||||
:on-error [::forms/save-error ::excel-import]}})))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::save-complete
|
||||
(fn [{:keys [db]} [_ rows]]
|
||||
{:dispatch [::edit nil]
|
||||
:db
|
||||
{:db
|
||||
(-> db
|
||||
(assoc-in [::excel-import :rows] rows)
|
||||
(assoc-in [::excel-import :saving?] false))}))
|
||||
(forms/save-succeeded ::excel-import)
|
||||
(assoc-in [::excel-import :rows] rows))}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::save-error
|
||||
(fn [{:keys [db]}]
|
||||
(println "ERROR")
|
||||
{:dispatch [::change [:error] true]
|
||||
:db (-> db
|
||||
(assoc-in [::excel-import :rows] nil)
|
||||
@@ -82,14 +80,20 @@
|
||||
(fn [{:keys [db]}]
|
||||
(let [excel-import (::excel-import db)]
|
||||
(println (::expense-accounts db))
|
||||
{:https {:requests (map (fn [v]
|
||||
{:token (:user db)
|
||||
:method :post
|
||||
:body (pr-str {:name v :default-expense-account (-> db ::expense-accounts (get v) :default-expense-account) })
|
||||
:headers {"Content-Type" "application/edn"}
|
||||
:uri (str "/api/vendors/")})
|
||||
(doto (get-in db [::excel-import :create-vendors])
|
||||
println))
|
||||
{:graphql {:token (:user db)
|
||||
:query-obj {:venia/operation {:operation/type :mutation
|
||||
:operation/name "UpsertVendor"}
|
||||
|
||||
:venia/queries (map (fn [v ]
|
||||
{:query/data [:upsert-vendor
|
||||
{:vendor {:name v :default-expense-account (-> db ::expense-accounts (get v) :default-expense-account)}}
|
||||
[:id :name :default-expense-account
|
||||
[:primary-contact [:name :phone :email :id]]
|
||||
[:secondary-contact [:id :name :phone :email]]
|
||||
:print-as :invoice-reminder-schedule :code
|
||||
[:address [:street1 :street2 :city :state :zip]]]]})
|
||||
|
||||
(get-in db [::excel-import :create-vendors]))}
|
||||
:on-success [::create-vendor-complete]
|
||||
:on-error [::create-vendor-error]}
|
||||
:db (-> db
|
||||
@@ -112,9 +116,12 @@
|
||||
:or {create-vendors #{}}
|
||||
:as excel-import-data} @(re-frame/subscribe [::excel-import])
|
||||
data @(re-frame/subscribe [::expense-accounts])
|
||||
form @(re-frame/subscribe [::forms/form ::excel-import])
|
||||
|
||||
|
||||
chooseable-expense-accounts @(re-frame/subscribe [::subs/chooseable-expense-accounts])
|
||||
change-event [::all-events/change-form [::expense-accounts]]]
|
||||
(println form)
|
||||
[:div
|
||||
[:h1.title "Import Invoices from Integreat Excel"]
|
||||
(when (seq vendors-not-found)
|
||||
@@ -161,13 +168,13 @@
|
||||
[:textarea.textarea {:rows "20"
|
||||
:field :excel-rows
|
||||
:type "text"
|
||||
:event ::change
|
||||
:subscription excel-import-data}]]
|
||||
:event [::forms/change ::excel-import]
|
||||
:subscription (:data form)}]]
|
||||
|
||||
[:button.button.is-large.is-pulled-right.is-primary {:on-click (dispatch-event [::save])
|
||||
:class (when (:saving? excel-import-data)
|
||||
"is-loading")
|
||||
:disabled (when (:saving? excel-import-data) "disabled")} "Import"]
|
||||
:class (str @(re-frame/subscribe [::forms/loading-class ::excel-import])
|
||||
(when (:error form) " animated shake"))
|
||||
:disabled (when (= :saving (:status form)) "disabled")} "Import"]
|
||||
|
||||
[:div.is-clearfix]
|
||||
[:div.is-clearfix
|
||||
|
||||
Reference in New Issue
Block a user