incorporating UI feedback
This commit is contained in:
@@ -63,6 +63,7 @@
|
|||||||
existing-set (set (map :external-id (:existing (:import-ledger result))))]
|
existing-set (set (map :external-id (:existing (:import-ledger result))))]
|
||||||
|
|
||||||
{:db (-> (forms/save-succeeded db ::form )
|
{:db (-> (forms/save-succeeded db ::form )
|
||||||
|
(assoc-in [::forms/forms ::form :result] {:errors error-set :success successful-set :existing existing-set})
|
||||||
(update-in [::forms/forms ::form :data :line-items]
|
(update-in [::forms/forms ::form :data :line-items]
|
||||||
(fn [lis]
|
(fn [lis]
|
||||||
(mapv
|
(mapv
|
||||||
@@ -107,6 +108,7 @@
|
|||||||
|
|
||||||
(defn textarea->table [{:keys [headings value on-change read-only-headings]} & children]
|
(defn textarea->table [{:keys [headings value on-change read-only-headings]} & children]
|
||||||
(let [text-form (r/atom "")
|
(let [text-form (r/atom "")
|
||||||
|
include-headers (r/atom false)
|
||||||
table-form (r/atom nil)]
|
table-form (r/atom nil)]
|
||||||
(fn [{:keys [headings value on-change]}]
|
(fn [{:keys [headings value on-change]}]
|
||||||
[:form.form
|
[:form.form
|
||||||
@@ -139,48 +141,64 @@
|
|||||||
(get row k)]))]))]
|
(get row k)]))]))]
|
||||||
children]
|
children]
|
||||||
[:div
|
[:div
|
||||||
[:h1.title.is-2 "External Import"]
|
|
||||||
[:div.field
|
[:div.field
|
||||||
[:p.help "Paste manual ledger entries below."]
|
[:p.help "Paste manual ledger entries below."]
|
||||||
[:textarea.textarea {:on-change #(reset! text-form (.. % -target -value))} @text-form]]
|
[:textarea.textarea {:on-change #(reset! text-form (.. % -target -value))} @text-form]]
|
||||||
[:button.button.is-primary.is-pulled-right.is-large {:on-click (fn [e]
|
[:div.field
|
||||||
(.preventDefault e)
|
[:label.checkbox
|
||||||
(on-change
|
[:input {:type "checkbox" :checked @include-headers :on-change #(swap! include-headers (fn [x] (not x)))}
|
||||||
(->> (str/split @text-form #"\n")
|
]
|
||||||
(drop 1)
|
" Contains Header Row"]]
|
||||||
(mapv #(->> (str/split % "\t")
|
[:button.button.is-medium {:on-click (fn [e]
|
||||||
(map (fn [[_ k] v] [k v]) headings)
|
(.preventDefault e)
|
||||||
(into {}))))))}
|
(on-change
|
||||||
"Evaluate"]])])))
|
(cond->> (str/split @text-form #"\n")
|
||||||
|
@include-headers (drop 1)
|
||||||
|
true (mapv #(->> (str/split % "\t")
|
||||||
|
(map (fn [[_ k] v] [k v]) headings)
|
||||||
|
(into {}))))))}
|
||||||
|
"Parse"]
|
||||||
|
])])))
|
||||||
|
|
||||||
(def balance-sheet-content
|
(def balance-sheet-content
|
||||||
(with-meta
|
(with-meta
|
||||||
(fn []
|
(fn []
|
||||||
(let [current-client @(re-frame/subscribe [::subs/client])
|
(let [current-client @(re-frame/subscribe [::subs/client])
|
||||||
user @(re-frame/subscribe [::subs/user])
|
user @(re-frame/subscribe [::subs/user])
|
||||||
{:keys [data active? error id]} @(re-frame/subscribe [::forms/form ::form]) ]
|
{:keys [data result active? error id]} @(re-frame/subscribe [::forms/form ::form]) ]
|
||||||
(if @(re-frame/subscribe [::forms/is-loading? ::form])
|
[:div
|
||||||
[:div [:i.icon.fa.fa-spin.fa-spinner]]
|
[:div.level
|
||||||
[:div
|
[:div.level-left
|
||||||
|
[:h1.title "Eternal Import"]]
|
||||||
|
[:div.level-right
|
||||||
|
[:button.button.is-primary.is-pulled-right.is-large {:disabled (not data)
|
||||||
|
:on-click (dispatch-event [::importing])} "Import"]]]
|
||||||
|
(when result
|
||||||
|
[:div.notification
|
||||||
|
"Imported with " (count (:errors result)) " errors, " (count (:success result)) " successful."])
|
||||||
|
(if @(re-frame/subscribe [::forms/is-loading? ::form])
|
||||||
|
[:div [:i.icon.fa.fa-spin.fa-spinner]]
|
||||||
|
[:div
|
||||||
|
|
||||||
[bind-field
|
[bind-field
|
||||||
[textarea->table {:type "textarea->table"
|
[textarea->table {:type "textarea->table"
|
||||||
:field [:line-items]
|
:field [:line-items]
|
||||||
:headings [["Id" :id]
|
:headings [["Id" :id]
|
||||||
["Client" :client-code]
|
["Client" :client-code]
|
||||||
["Source" :source]
|
["Source" :source]
|
||||||
["Vendor" :vendor-name]
|
["Vendor" :vendor-name]
|
||||||
["Date" :date]
|
["Date" :date]
|
||||||
["Account" :account-identifier]
|
["Account" :account-identifier]
|
||||||
["Location" :location]
|
["Location" :location]
|
||||||
["Debit" :debit]
|
["Debit" :debit]
|
||||||
["Credit" :credit]]
|
["Credit" :credit]]
|
||||||
:read-only-headings
|
:read-only-headings
|
||||||
[["status" :status]]
|
[["status" :status]]
|
||||||
|
|
||||||
:event [::forms/change ::form]
|
:event [::forms/change ::form]
|
||||||
:subscription data}
|
:subscription data}
|
||||||
[:button.button.is-primary.is-pulled-right.is-large {:on-click (dispatch-event [::importing])} "Import"]]]])))
|
]]])]))
|
||||||
{}))
|
{}))
|
||||||
|
|
||||||
(defn external-import-page []
|
(defn external-import-page []
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
::report
|
::report
|
||||||
:comparable-balance-sheet-accounts
|
:comparable-balance-sheet-accounts
|
||||||
(map :location)))
|
(map :location)))
|
||||||
(filter #(not= "A" %))
|
#_(filter #(not= "A" %))
|
||||||
(filter identity)
|
(filter identity)
|
||||||
(set)
|
(set)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user