improvements for invoices.

This commit is contained in:
Bryce Covert
2020-01-25 10:37:44 -08:00
parent fe8256a488
commit 3c47bd1f0e
4 changed files with 101 additions and 28 deletions

View File

@@ -171,23 +171,36 @@
'[?vendor :vendor/default-expense-account ?default-expense-account]]}
:args [(d/db (d/connect uri)) vendor-code]})
first)
_ (when-not matching-vendor
(throw (ex-info (str "No vendor with the name " vendor-code " was found.")
{:invoice-number invoice-number
:customer-identifier customer-identifier
:vendor-code vendor-code})))
_ (println "matching" customer-identifier "-" matching-vendor)
matching-client (parse/best-match clients customer-identifier)
_ (println "New invoice matches client" matching-client)
matching-location (parse/best-location-match matching-client text full-text)
[existing-id existing-outstanding-balance existing-status import-status] (when (and matching-client matching-location)
(try
(->> (d/query
(cond-> {:query {:find ['?e '?outstanding-balance '?status '?import-status2]
: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]
[?import-status :db/ident ?import-status2]]}
:args [(d/db (d/connect uri)) invoice-number matching-vendor (:db/id matching-client)]}))
first))]
(cond-> {:query {:find ['?e '?outstanding-balance '?status '?import-status2]
: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]
[?import-status :db/ident ?import-status2]]}
:args [(d/db (d/connect uri)) invoice-number matching-vendor (:db/id matching-client)]}))
first)
(catch Exception e
(throw (ex-info (str "Failed to find potential matching invoice with"
" invoice " invoice-number
" vendor " matching-vendor
" client " (:client/name matching-client))
{:args [ invoice-number matching-vendor (:db/id matching-client)]})))
))]
(cond
(not (and matching-location matching-client))
@@ -215,6 +228,9 @@
[]
imports)]
(when-not (seq transactions)
(throw (ex-info "No invoices found."
{:imports imports})))
@(d/transact (d/connect uri) (vec (set transactions)))
))
@@ -263,10 +279,17 @@
(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"}}))
(try
(import-uploaded-invoice (parse/parse-file (.getPath tempfile) filename))
{:status 200
:body (pr-str {})
:headers {"Content-Type" "application/edn"}}
(catch Exception e
{:status 500
:body (pr-str {:message (.getMessage e)
:data (ex-data e)})
:headers {"Content-Type" "application/edn"}}))
))
(POST "/upload-integreat"
{{:keys [excel-rows]} :edn-params user :identity}
(assert-admin user)