73 lines
2.9 KiB
Clojure
73 lines
2.9 KiB
Clojure
(ns auto-ap.handler
|
|
(:require [compojure.core :refer :all]
|
|
[compojure.route :as route]
|
|
[clojure.java.io :as io]
|
|
[clojure.string :as str]
|
|
[auto-ap.db.invoices :as invoices]
|
|
[auto-ap.parse :as parse]
|
|
[ring.middleware.multipart-params :as mp]
|
|
[ring.util.response :as response]
|
|
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]
|
|
[ring.middleware.reload :refer [wrap-reload]]
|
|
[ring.middleware.json :refer [wrap-json-response]]
|
|
[ring.middleware.edn :refer [wrap-edn-params]]
|
|
[clojure.java.jdbc :as j]))
|
|
|
|
(defroutes app-routes
|
|
(GET "/" [] (response/resource-response "index.html" {:root "public"}))
|
|
(GET "/api/invoices" []
|
|
{:status 200
|
|
:body (pr-str (invoices/get-all))
|
|
:headers {"Content-Type" "application/edn"}})
|
|
|
|
(GET "/api/invoices/unpaid" []
|
|
{:status 200
|
|
:body (pr-str (invoices/get-unpaid))
|
|
:headers {"Content-Type" "application/edn"}})
|
|
|
|
(GET "/api/invoices/pending" []
|
|
{:status 200
|
|
:body (pr-str (invoices/get-pending))
|
|
:headers {"Content-Type" "application/edn"}})
|
|
|
|
(POST "/api/invoices" {:keys [edn-params]}
|
|
(invoices/insert-multi! (:rows edn-params))
|
|
{:status 200
|
|
:body (pr-str (invoices/get-all))
|
|
:headers {"Content-Type" "application/edn"}})
|
|
(POST "/api/invoices/approve" []
|
|
(invoices/approve)
|
|
(println (invoices/get-pending))
|
|
{:status 200
|
|
:body (pr-str (invoices/get-pending))
|
|
:headers {"Content-Type" "application/edn"}})
|
|
(POST "/api/invoices/reject" []
|
|
(invoices/reject)
|
|
(println (invoices/get-pending))
|
|
{:status 200
|
|
:body (pr-str (invoices/get-pending))
|
|
:headers {"Content-Type" "application/edn"}})
|
|
(POST "/pdf-upload"
|
|
{{ files "file"} :params :as params}
|
|
(let [{:keys [filename tempfile]} files
|
|
existing-invoices (invoices/get-all)]
|
|
(println existing-invoices)
|
|
(invoices/insert-multi!
|
|
(for [{:keys [total date invoice-number customer-identifier vendor] :as row}
|
|
(parse/parse-file (.getPath tempfile) filename)]
|
|
(assoc row
|
|
:imported false
|
|
:potential-duplicate (boolean (seq (filter #(and (= vendor (:vendor %))
|
|
(= invoice-number (:invoice-number %)))
|
|
existing-invoices)))
|
|
)))
|
|
{:status 200
|
|
:body (pr-str (invoices/get-pending))
|
|
:headers {"Content-Type" "application/edn"}}))
|
|
(route/resources "/")
|
|
(routes (ANY "*" [] (response/resource-response "index.html" {:root "public"})))
|
|
(route/not-found "Not Found"))
|
|
|
|
(def app
|
|
(wrap-edn-params (mp/wrap-multipart-params (wrap-reload #'app-routes))))
|