adds the ability to export vendors.
This commit is contained in:
@@ -1,24 +1,27 @@
|
||||
(ns auto-ap.routes.exports
|
||||
(:require [auto-ap.datomic :refer [conn]]
|
||||
[auto-ap.datomic.clients :as d-clients]
|
||||
[auto-ap.datomic.transactions :as d-transactions]
|
||||
[clojure.edn :refer [read-string]]
|
||||
[auto-ap.datomic.vendors :as d-vendors]
|
||||
[buddy.sign.jwt :as jwt]
|
||||
[auto-ap.graphql :as graphql]
|
||||
[auto-ap.graphql.utils :refer [->graphql <-graphql assert-admin assert-can-see-client]]
|
||||
[auto-ap.routes.utils :refer [wrap-secure]]
|
||||
[clojure.tools.logging :as log]
|
||||
[clj-time.coerce :as coerce :refer [to-date]]
|
||||
[clj-time.core :as time]
|
||||
[clojure.data.csv :as csv]
|
||||
[config.core :refer [env]]
|
||||
[compojure.core :refer [context defroutes GET wrap-routes routes]]
|
||||
[datomic.api :as d]
|
||||
[ring.middleware.json :refer [wrap-json-response]]
|
||||
[venia.core :as venia]
|
||||
[com.unbounce.dogstatsd.core :as statsd]
|
||||
[auto-ap.time :as atime]))
|
||||
(:require
|
||||
[auto-ap.datomic :refer [conn]]
|
||||
[auto-ap.datomic.accounts :as accounts]
|
||||
[auto-ap.datomic.clients :as d-clients]
|
||||
[auto-ap.datomic.transactions :as d-transactions]
|
||||
[auto-ap.datomic.vendors :as vendor]
|
||||
[auto-ap.graphql :as graphql]
|
||||
[auto-ap.graphql.utils
|
||||
:refer [->graphql <-graphql assert-admin assert-can-see-client]]
|
||||
[auto-ap.routes.utils :refer [wrap-secure]]
|
||||
[auto-ap.time :as atime]
|
||||
[buddy.sign.jwt :as jwt]
|
||||
[clj-time.coerce :as coerce :refer [to-date]]
|
||||
[clj-time.core :as time]
|
||||
[clojure.data.csv :as csv]
|
||||
[clojure.edn :refer [read-string]]
|
||||
[clojure.tools.logging :as log]
|
||||
[com.unbounce.dogstatsd.core :as statsd]
|
||||
[compojure.core :refer [context defroutes GET routes wrap-routes]]
|
||||
[config.core :refer [env]]
|
||||
[datomic.api :as d]
|
||||
[ring.middleware.json :refer [wrap-json-response]]
|
||||
[venia.core :as venia]))
|
||||
|
||||
(defn wrap-csv-response [handler]
|
||||
(fn [request]
|
||||
@@ -212,6 +215,49 @@
|
||||
:where [?e :vendor/name]]
|
||||
(d/db conn))
|
||||
(d/pull-many (d/db conn) d-vendors/default-read)))))
|
||||
|
||||
(GET "/vendors/company/export" {:keys [identity query-params]}
|
||||
(statsd/time! [(str "export.time") {:tags #{"export:company-vendors"}}]
|
||||
(let [client (:db/id (d/pull (d/db conn) [:db/id] [:client/code (get query-params "client")]))
|
||||
|
||||
_ (assert-can-see-client identity client)
|
||||
data (->> (d/q '[:find (pull ?v [:vendor/name
|
||||
:vendor/terms
|
||||
{:vendor/default-account [:account/name :account/numeric-code
|
||||
{:account/client-overrides
|
||||
[:account-client-override/client
|
||||
:account-client-override/name]}]
|
||||
:vendor/terms-overrides [:vendor-terms-override/client
|
||||
:vendor-terms-override/terms]
|
||||
:vendor/account-overrides [:vendor-account-override/client
|
||||
{:vendor-account-override/account [:account/numeric-code :account/name
|
||||
{:account/client-overrides
|
||||
[:account-client-override/client
|
||||
:account-client-override/name]}]}]
|
||||
:vendor/address [:address/street1 :address/city :address/state :address/zip]}])
|
||||
:in $ ?c
|
||||
:where [?vu :vendor-usage/client ?c]
|
||||
[?vu :vendor-usage/count ?count]
|
||||
[(>= ?vu 0)]
|
||||
[?vu :vendor-usage/vendor ?v]]
|
||||
(d/db conn)
|
||||
client)
|
||||
(map (fn [[v]]
|
||||
[(-> v :vendor/name)
|
||||
(-> v :vendor/address :address/street1)
|
||||
(-> v :vendor/address :address/city)
|
||||
(-> v :vendor/address :address/state)
|
||||
(-> v :vendor/address :address/zip)
|
||||
(-> v (vendor/terms-for-client-id client) )
|
||||
(-> v (vendor/account-for-client-id client) (accounts/clientize client) :account/name)
|
||||
(-> v (vendor/account-for-client-id client) :account/numeric-code)
|
||||
]
|
||||
))
|
||||
(into [["Vendor Name" "Address" "City" "State" "Zip" "Terms" "Account" "Account Code"]]))]
|
||||
{:body
|
||||
(with-open [w (java.io.StringWriter.)]
|
||||
(csv/write-csv w data)
|
||||
(.toString w))})))
|
||||
(GET "/ledger/export" {:keys [identity query-params]}
|
||||
(let [start-date (or (some-> (query-params "start-date")
|
||||
(atime/parse atime/iso-date))
|
||||
|
||||
Reference in New Issue
Block a user