From b0afa05c2eb1f54780e808b0ad852c40c3b185ea Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Thu, 25 Nov 2021 07:52:15 -0800 Subject: [PATCH] Preventing bad imports --- src/clj/auto_ap/routes/invoices.clj | 22 +++++++++++-------- .../auto_ap/views/pages/transactions.cljs | 7 +++++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/clj/auto_ap/routes/invoices.clj b/src/clj/auto_ap/routes/invoices.clj index 8b4ccb22..d0a4243a 100644 --- a/src/clj/auto_ap/routes/invoices.clj +++ b/src/clj/auto_ap/routes/invoices.clj @@ -448,19 +448,23 @@ (map #(str/split % #"\t")) (map #(into {} (filter identity (map (fn [c k] [k c] ) % columns)))) (map (parse-or-error :amount parse-amount)) - (map (parse-or-error :date parse-date))) + (map (parse-or-error :date parse-date)) + (map (fn [{:keys [bank-account-code] :as row}] + (if-let [bank-account-id (:db/id (all-bank-accounts bank-account-code))] + (assoc row :bank-account-id bank-account-id) + (update row :errors conj {:info (str "Cannot find bank by code " bank-account-code) + :details (str "Cannot find bank by code " bank-account-code)})))) + (map (fn [{:keys [client-code] :as row}] + (if-let [client-id (:db/id (all-clients client-code))] + (assoc row :client-id client-id) + (update row :errors conj {:info (str "Cannot find client by code " client-code) + :details (str "Cannot find client by code " client-code)}))))) error-rows (filter :errors rows) _ (log/info "Importing " (count rows) "raw transactions") raw-transactions (vec (->> rows (filter #(not (seq (:errors %))) ) - (map (fn [{:keys [description-original client-code status high-level-category amount bank-account-code date]}] - {:description-original description-original - :date date - :status status - :high-level-category high-level-category - :amount amount - :client-id (:db/id (all-clients client-code)) - :bank-account-id (:db/id (all-bank-accounts bank-account-code))}))))] + (map (fn [row] + (select-keys row [:description-original :client-code :status :high-level-category :amount :bank-account-id :date])))))] (manual-import raw-transactions) {:status 200 diff --git a/src/cljs/auto_ap/views/pages/transactions.cljs b/src/cljs/auto_ap/views/pages/transactions.cljs index a33d1aac..a98d89e2 100644 --- a/src/cljs/auto_ap/views/pages/transactions.cljs +++ b/src/cljs/auto_ap/views/pages/transactions.cljs @@ -133,7 +133,12 @@ {:id ::manual-import :events #{::manual/import-completed} :event-fn (fn [[_ {:keys [imported errors] :as result}]] - [::status/info ::manual-import (str "Successfully imported " imported " transactions")])}]})) + [::status/info ::manual-import (str "Successfully imported " imported " transactions" + + (when (seq errors) + (str + ", " (count errors) " errors. " + "Example: '" (str (:info (first (:errors (first errors))))) "'")))])}]})) (defn content []