Files
integreat/src/clj/auto_ap/handler.clj
Bryce Covert c8bcf2aa02 added excel.
2017-12-12 09:59:24 -08:00

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))))