Added the ability to import invoices again

This commit is contained in:
Bryce Covert
2019-02-11 20:48:43 -08:00
parent 085440bedd
commit 7c01a04ee8
13 changed files with 196 additions and 22 deletions

View File

@@ -114,6 +114,7 @@
:vendor vendor-id
:client client-id
:default-location default-location
:import-status :import-status/imported
:default-expense-account default-expense-account
:total total
:outstanding-balance (if (= "Cash" check)
@@ -143,6 +144,56 @@
(map remove-nils)
))
(defn import-uploaded-invoice [imports]
(let [clients (d-clients/get-all)
_ (println imports)
transactions (reduce (fn [result {:keys [invoice-number customer-identifier total date vendor-code text] :as info}]
(let [[matching-vendor default-expense-account] (->> (d/query
(cond-> {:query {:find ['?vendor '?default-expense-account]
:in ['$ '?vendor-name]
:where ['[?vendor :vendor/name ?vendor-name]
'[?vendor :vendor/default-expense-account ?default-expense-account]]}
:args [(d/db (d/connect uri)) vendor-code]}))
first)
matching-client (parse/best-match clients customer-identifier)
matching-location (parse/best-location-match matching-client text )
_ (println "LOCATION" matching-location)
[existing-id existing-outstanding-balance existing-status import-status] (->> (d/query
(cond-> {:query {:find ['?e '?outstanding-balance '?status '?import-status]
:in ['$ '?invoice-number '?vendor '?client]
:where '[[?e :invoice/invoice-number ?invoice-number]
[?e :invoice/vendor ?vendor]
[?e :invoice/client ?client]
[?e :invoice/outstanding-balance ?outstanding-balance]
[?e :invoice/status ?status]
[?e :invoice/import-status ?import-status]]}
:args [(d/db (d/connect uri)) invoice-number matching-vendor (:db/id matching-client)]}))
first)]
(if (= :import-status/imported import-status)
result
(conj result (remove-nils #:invoice {:invoice/client (:db/id matching-client)
:invoice/vendor matching-vendor
:invoice/invoice-number invoice-number
:invoice/total (Double/parseDouble total)
:invoice/date (to-date date)
:invoice/import-status :import-status/pending
:invoice/outstanding-balance (or existing-outstanding-balance (Double/parseDouble total))
:invoice/status (or existing-status :invoice-status/unpaid)
:invoice/expense-accounts (when-not existing-id [#:invoice-expense-account {:expense-account-id default-expense-account
:location matching-location
:amount (Double/parseDouble total)}])
:db/id existing-id
})))
))
[]
imports)]
(println transactions)
@(d/transact (d/connect uri) transactions)
))
(defroutes routes
(wrap-routes
(context "/" []
@@ -184,6 +235,13 @@
:headers {"Content-Type" "application/edn"}})))
(context "/invoices" []
(POST "/upload"
{{ files "file"} :params :as params}
(let [{:keys [filename tempfile]} files]
(import-uploaded-invoice (parse/parse-file (.getPath tempfile) filename))
{:status 200
:body (pr-str {})
:headers {"Content-Type" "application/edn"}}))
(POST "/upload-integreat"
{{:keys [excel-rows]} :edn-params user :identity}
(assert-admin user)