slightly improved excel import.

This commit is contained in:
Bryce Covert
2019-03-20 22:35:43 -07:00
parent 2727573a96
commit a55e6d890f
3 changed files with 56 additions and 35 deletions

View File

@@ -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))

View File

@@ -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)))

View File

@@ -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