allow custom sales export.

This commit is contained in:
Bryce Covert
2021-05-21 16:55:04 -07:00
parent 8aed733826
commit 4dc66f3d86
2 changed files with 221 additions and 194 deletions

View File

@@ -53,7 +53,7 @@
(defroutes api-routes (defroutes api-routes
(context "/api" [] (context "/api" []
exports/routes exports/export-routes
yodlee/routes yodlee/routes
yodlee2/routes yodlee2/routes
invoices/routes invoices/routes

View File

@@ -4,22 +4,42 @@
[auto-ap.datomic.ledger :as d-ledger] [auto-ap.datomic.ledger :as d-ledger]
[auto-ap.datomic.transactions :as d-transactions] [auto-ap.datomic.transactions :as d-transactions]
[auto-ap.datomic.vendors :as d-vendors] [auto-ap.datomic.vendors :as d-vendors]
[buddy.sign.jwt :as jwt]
[auto-ap.graphql :as graphql] [auto-ap.graphql :as graphql]
[auto-ap.graphql.utils :refer [->graphql <-graphql assert-admin]] [auto-ap.graphql.utils :refer [->graphql <-graphql assert-admin assert-can-see-client]]
[auto-ap.routes.utils :refer [wrap-secure]] [auto-ap.routes.utils :refer [wrap-secure]]
[clojure.tools.logging :as log] [clojure.tools.logging :as log]
[auto-ap.logging :refer [error-event info-event warn-event]] [auto-ap.logging :refer [error-event info-event warn-event]]
[clj-time.coerce :as coerce :refer [to-date]] [clj-time.coerce :as coerce :refer [to-date]]
[clj-time.core :as time] [clj-time.core :as time]
[compojure.core :refer [context defroutes GET wrap-routes]] [config.core :refer [env]]
[compojure.core :refer [context defroutes GET wrap-routes routes]]
[datomic.api :as d] [datomic.api :as d]
[ring.middleware.json :refer [wrap-json-response]] [ring.middleware.json :refer [wrap-json-response]]
[venia.core :as venia] [venia.core :as venia]
[yang.time :refer [time-it]])) [yang.time :refer [time-it]]))
(defroutes routes (def api-key-authed-routes
(wrap-routes (context "/" []
(wrap-routes (GET "/sales/aggregated/export" {:keys [query-params identity :as params]}
(let [client-id (Long/parseLong (get query-params "client-id"))
identity (jwt/unsign (get query-params "key") (:jwt-secret env) {:alg :hs512})]
(assert-can-see-client identity client-id)
(into (list)
(d/query {:query {:find '[?d4 (sum ?total) (sum ?tax) (sum ?tip) (sum ?service-charge)]
:in '[$ ?c]
:where '[[?s :sales-order/client ?c]
[?s :sales-order/date ?d]
[?s :sales-order/total ?total]
[?s :sales-order/tax ?tax]
[?s :sales-order/tip ?tip]
[?s :sales-order/service-charge ?service-charge]
[(clj-time.coerce/to-date-time ?d) ?d2]
[(auto-ap.time/localize ?d2) ?d3]
[(auto-ap.time/unparse ?d3 auto-ap.time/normal-date) ?d4]]}
:args [(d/db conn) client-id]}))))))
(def admin-only-routes
(context "/" [] (context "/" []
(GET "/invoices/export" {:keys [query-params identity] :as request} (GET "/invoices/export" {:keys [query-params identity] :as request}
(assert-admin identity) (assert-admin identity)
@@ -50,8 +70,9 @@
payments (graphql/query identity (venia/graphql-query {:venia/queries (->graphql query)}))] payments (graphql/query identity (venia/graphql-query {:venia/queries (->graphql query)}))]
(list (:all-payments (:data payments))))) (list (:all-payments (:data payments)))))
(GET "/sales/export" {:keys [query-params identity]} (GET "/sales/export" {:keys [query-params identity :as params]}
(assert-admin identity) (assert-admin identity)
(println params)
(let [query [[:all_sales_orders (let [query [[:all_sales_orders
(cond-> {:client-code (query-params "client-code")} (cond-> {:client-code (query-params "client-code")}
(query-params "after") (assoc :date-range {:start (query-params "after") (query-params "after") (assoc :date-range {:start (query-params "after")
@@ -98,6 +119,8 @@
charges))))) charges)))))
(:all-sales-orders (:data payments)))))) (:all-sales-orders (:data payments))))))
(GET "/expected-deposit/export" {:keys [query-params identity]} (GET "/expected-deposit/export" {:keys [query-params identity]}
(assert-admin identity) (assert-admin identity)
(let [query [[:all_expected_deposits (let [query [[:all_expected_deposits
@@ -213,8 +236,12 @@
(GET "/raw" {:keys [query-params identity]} (GET "/raw" {:keys [query-params identity]}
(assert-admin identity) (assert-admin identity)
(log/info "Executing raw query " (get query-params "query" )) (log/info "Executing raw query " (get query-params "query" ))
(into (list) (apply d/q (clojure.edn/read-string (get query-params "query" )) (into [(d/db conn)] (clojure.edn/read-string (get query-params "args" "[]"))))))) (into (list) (apply d/q (clojure.edn/read-string (get query-params "query" )) (into [(d/db conn)] (clojure.edn/read-string (get query-params "args" "[]"))))))))
(defroutes export-routes
(wrap-routes
(routes
api-key-authed-routes
(wrap-routes admin-only-routes wrap-secure))
wrap-secure)
wrap-json-response)) wrap-json-response))