Adds the ability to export sales data
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
|||||||
(ns auto-ap.routes.exports
|
(ns auto-ap.routes.exports
|
||||||
(:require
|
(:require
|
||||||
[auto-ap.datomic :refer [conn pull-many pull-attr]]
|
[auto-ap.datomic :refer [conn pull-attr pull-many]]
|
||||||
[auto-ap.datomic.accounts :as accounts]
|
[auto-ap.datomic.accounts :as accounts]
|
||||||
[auto-ap.datomic.clients :as d-clients]
|
[auto-ap.datomic.clients :as d-clients]
|
||||||
[auto-ap.datomic.transactions :as d-transactions]
|
[auto-ap.datomic.transactions :as d-transactions]
|
||||||
@@ -8,7 +8,9 @@
|
|||||||
[auto-ap.graphql :as graphql]
|
[auto-ap.graphql :as graphql]
|
||||||
[auto-ap.graphql.utils
|
[auto-ap.graphql.utils
|
||||||
:refer [->graphql <-graphql assert-admin assert-can-see-client]]
|
:refer [->graphql <-graphql assert-admin assert-can-see-client]]
|
||||||
|
[auto-ap.logging :as alog]
|
||||||
[auto-ap.routes.utils :refer [wrap-secure]]
|
[auto-ap.routes.utils :refer [wrap-secure]]
|
||||||
|
[auto-ap.ssr.utils :refer [wrap-schema-enforce wrap-form-4xx-2]]
|
||||||
[auto-ap.time :as atime]
|
[auto-ap.time :as atime]
|
||||||
[buddy.sign.jwt :as jwt]
|
[buddy.sign.jwt :as jwt]
|
||||||
[cheshire.generate :as generate]
|
[cheshire.generate :as generate]
|
||||||
@@ -19,10 +21,9 @@
|
|||||||
[com.unbounce.dogstatsd.core :as statsd]
|
[com.unbounce.dogstatsd.core :as statsd]
|
||||||
[config.core :refer [env]]
|
[config.core :refer [env]]
|
||||||
[datomic.api :as dc]
|
[datomic.api :as dc]
|
||||||
|
[malli.core :as mc]
|
||||||
[ring.middleware.json :refer [wrap-json-response]]
|
[ring.middleware.json :refer [wrap-json-response]]
|
||||||
[venia.core :as venia]
|
[venia.core :as venia]))
|
||||||
[auto-ap.logging :as alog]
|
|
||||||
[com.brunobonacci.mulog :as mu]))
|
|
||||||
|
|
||||||
(defn wrap-csv-response [handler]
|
(defn wrap-csv-response [handler]
|
||||||
(fn [request]
|
(fn [request]
|
||||||
@@ -532,6 +533,95 @@
|
|||||||
[(:client/code client) l numeric-code (account->name a) date-str
|
[(:client/code client) l numeric-code (account->name a) date-str
|
||||||
(format "%.2f" balance)]))}))
|
(format "%.2f" balance)]))}))
|
||||||
|
|
||||||
|
(defn export-ntg-sales-snapshot [{:keys [query-params]}]
|
||||||
|
(let [clients (->> (dc/q '[:find (pull ?e [:db/id :client/code :client/locations])
|
||||||
|
:in $
|
||||||
|
:where [?e :client/feature-flags "include-in-ntg-corp-reports"]]
|
||||||
|
(dc/db conn))
|
||||||
|
(map first))
|
||||||
|
_ (alog/peek query-params)
|
||||||
|
date (:date query-params)
|
||||||
|
|
||||||
|
end (time/plus date (time/days 1))]
|
||||||
|
|
||||||
|
{:status 200
|
||||||
|
:body
|
||||||
|
(into [["Client" "Date" "Total" "Tip" "Service Charge" "Reference Link" "Tender Total" "Tender Tax" "Tender Tip" "Tender Type" "Tender Processor" "Tender Reference Link" "Line Item Name" "Line Item Category" "Line Item Total"]]
|
||||||
|
(for [client clients
|
||||||
|
:let [all-entries (->> (dc/index-pull (dc/db conn)
|
||||||
|
{:index :avet
|
||||||
|
:selector '[:db/id :sales-order/client+date {:sales-order/client [:client/name :client/code]}
|
||||||
|
:sales-order/date
|
||||||
|
:sales-order/total
|
||||||
|
:sales-order/tax
|
||||||
|
:sales-order/tip
|
||||||
|
:sales/reference-link
|
||||||
|
:sales-order/service-charge
|
||||||
|
|
||||||
|
{:sales-order/charges [:charge/total :charge/tax :charge/tip
|
||||||
|
:charge/type-name
|
||||||
|
:charge/reference-link
|
||||||
|
{[:charge/processor :xform iol-ion.query/ident] [:db/ident]}]
|
||||||
|
:sales-order/line-items [:order-line-item/item-name
|
||||||
|
:order-line-item/category
|
||||||
|
:order-line-item/total]}
|
||||||
|
]
|
||||||
|
:start [:sales-order/client+date [(:db/id client) (coerce/to-date date)]]
|
||||||
|
:end [:sales-order/client+date [(:db/id client) (coerce/to-date end)]]
|
||||||
|
:reverse false
|
||||||
|
:limit 100})
|
||||||
|
(take-while (fn matches-client [curr]
|
||||||
|
(and
|
||||||
|
(= (first (:sales-order/client+date curr))
|
||||||
|
(:db/id client))
|
||||||
|
(< (compare (:sales-order/date curr)
|
||||||
|
(coerce/to-date end))
|
||||||
|
0))
|
||||||
|
)))
|
||||||
|
]
|
||||||
|
entry all-entries
|
||||||
|
:let [sales-columns [(-> entry :sales-order/client :client/name)
|
||||||
|
(atime/unparse-local (coerce/from-date (-> entry :sales-order/date)) atime/standard-time)
|
||||||
|
(-> entry :sales-order/total)
|
||||||
|
(-> entry :sales-order/tip)
|
||||||
|
(-> entry :sales-order/service-charge)
|
||||||
|
(-> entry :sales-order/reference-link)
|
||||||
|
]
|
||||||
|
sales-column-count (count sales-columns)
|
||||||
|
tender-column-count 6]
|
||||||
|
row (concat [sales-columns]
|
||||||
|
(map (fn [tender]
|
||||||
|
(concat
|
||||||
|
(take sales-column-count (repeat nil))
|
||||||
|
[
|
||||||
|
(-> tender :charge/total)
|
||||||
|
(-> tender :charge/tax)
|
||||||
|
(-> tender :charge/tip)
|
||||||
|
(-> tender :charge/type-name)
|
||||||
|
(some-> tender :charge/processor name)
|
||||||
|
(-> tender :charge/reference-link)
|
||||||
|
]))
|
||||||
|
(:sales-order/charges entry))
|
||||||
|
(map (fn [tender]
|
||||||
|
(concat
|
||||||
|
(take (+ sales-column-count tender-column-count) (repeat nil))
|
||||||
|
[
|
||||||
|
(-> tender :order-line-item/item-name)
|
||||||
|
(-> tender :order-line-item/category)
|
||||||
|
(-> tender :order-line-item/total)
|
||||||
|
]))
|
||||||
|
(:sales-order/line-items entry)))]
|
||||||
|
row
|
||||||
|
|
||||||
|
#_(let [balance (account-lookup (format "%d-%d-%s-%s" (:db/id client) numeric-code l date-str))
|
||||||
|
_ (when balance
|
||||||
|
(reset! last-used-value balance))
|
||||||
|
balance (or balance @last-used-value)]
|
||||||
|
[ l numeric-code (account->name a) date-str
|
||||||
|
(format "%.2f" balance)])))}))
|
||||||
|
|
||||||
|
#_(export-ntg-payment-snapshot nil)
|
||||||
|
|
||||||
(defn wrap-predetermined-api-key [handler key]
|
(defn wrap-predetermined-api-key [handler key]
|
||||||
(fn [request]
|
(fn [request]
|
||||||
(if (= key (get (:headers request) "authorization"))
|
(if (= key (get (:headers request) "authorization"))
|
||||||
@@ -540,10 +630,12 @@
|
|||||||
|
|
||||||
|
|
||||||
(def routes2 {"api/" {"sales/" {"aggregated/" {#"export/?" {:get :aggregated-sales-export}}
|
(def routes2 {"api/" {"sales/" {"aggregated/" {#"export/?" {:get :aggregated-sales-export}}
|
||||||
#"export/?" {:get :export-sales}}
|
#"export/?" {:get :export-sales}
|
||||||
|
"ntg-export" {:get :export-ntg-sales-snapshot}}
|
||||||
"invoices/" {#"export/?" {:get :export-invoices}}
|
"invoices/" {#"export/?" {:get :export-invoices}}
|
||||||
"payments/" {#"export/?" {:get :export-payments}}
|
"payments/" {#"export/?" {:get :export-payments}}
|
||||||
"expected-deposit/" {#"export/?" {:get :export-expected-deposits}}
|
"expected-deposit/" {#"export/?" {:get :export-expected-deposits}}
|
||||||
|
|
||||||
"clients/" {#"export/?" {:get :export-clients}}
|
"clients/" {#"export/?" {:get :export-clients}}
|
||||||
"vendors/" {#"export/?" {:get :export-vendors}
|
"vendors/" {#"export/?" {:get :export-vendors}
|
||||||
"company/" {#"export" {:get :export-company-vendors}}}
|
"company/" {#"export" {:get :export-company-vendors}}}
|
||||||
@@ -565,8 +657,15 @@
|
|||||||
:export-company-vendors (-> export-company-vendors wrap-csv-response wrap-secure)
|
:export-company-vendors (-> export-company-vendors wrap-csv-response wrap-secure)
|
||||||
:export-ledger (-> export-ledger wrap-json-response wrap-secure)
|
:export-ledger (-> export-ledger wrap-json-response wrap-secure)
|
||||||
:export-ntg-account-snapshot (-> export-ntg-account-snapshot wrap-csv-response (wrap-predetermined-api-key "fd07755a-ed4c-4c9a-ad85-fbdd8af37206"))
|
:export-ntg-account-snapshot (-> export-ntg-account-snapshot wrap-csv-response (wrap-predetermined-api-key "fd07755a-ed4c-4c9a-ad85-fbdd8af37206"))
|
||||||
|
:export-ntg-sales-snapshot (-> export-ntg-sales-snapshot wrap-csv-response
|
||||||
|
(wrap-schema-enforce :query-schema (mc/schema [:map
|
||||||
|
[:date {:required true
|
||||||
|
:decode/string #(try (atime/parse % atime/iso-date) (catch Exception e nil))} :some]]) )
|
||||||
|
(wrap-form-4xx-2 (fn [_] {:body "Invalid Date"}))
|
||||||
|
(wrap-predetermined-api-key "fd07755a-ed4c-4c9a-ad85-fbdd8af37206")
|
||||||
|
)
|
||||||
:export-trial-balance (-> export-trial-balance wrap-csv-response wrap-secure)
|
:export-trial-balance (-> export-trial-balance wrap-csv-response wrap-secure)
|
||||||
:export-accounts (-> export-accounts wrap-json-response wrap-secure)
|
:export-accounts (-> export-accounts wrap-json-response wrap-secure)
|
||||||
:export-transactions (-> export-transactions wrap-json-response wrap-secure)
|
:export-transactions (-> export-transactions wrap-json-response wrap-secure)
|
||||||
:export-transactions2 (-> export-transactions2 wrap-json-response wrap-secure)
|
:export-transactions2 (-> export-transactions2 wrap-json-response wrap-secure)
|
||||||
:export-raw (-> export-raw wrap-json-response wrap-secure)})
|
:export-raw (-> export-raw wrap-json-response wrap-secure)}) ;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
(com/field {:label "Processor"}
|
(com/field {:label "Processor"}
|
||||||
(com/radio {:size :small
|
(com/radio {:size :small
|
||||||
:name "processor"
|
:name "processor"
|
||||||
|
:value (:processor (:parsed-query-params request))
|
||||||
:options [{:value ""
|
:options [{:value ""
|
||||||
:content "All"}
|
:content "All"}
|
||||||
{:value "square"
|
{:value "square"
|
||||||
@@ -35,7 +36,7 @@
|
|||||||
(com/money-input {:name "total-gte"
|
(com/money-input {:name "total-gte"
|
||||||
:id "total-gte"
|
:id "total-gte"
|
||||||
:hx-preserve "true"
|
:hx-preserve "true"
|
||||||
:class "hot-filter"
|
:class "hot-filter w-20"
|
||||||
:value (:total-gte (:parsed-query-params request))
|
:value (:total-gte (:parsed-query-params request))
|
||||||
:placeholder "0.01"
|
:placeholder "0.01"
|
||||||
:size :small})
|
:size :small})
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
(com/money-input {:name "total-lte"
|
(com/money-input {:name "total-lte"
|
||||||
:hx-preserve "true"
|
:hx-preserve "true"
|
||||||
:id "total-lte"
|
:id "total-lte"
|
||||||
:class "hot-filter"
|
:class "hot-filter w-20"
|
||||||
:value (:total-lte (:parsed-query-params request))
|
:value (:total-lte (:parsed-query-params request))
|
||||||
:placeholder "9999.34"
|
:placeholder "9999.34"
|
||||||
:size :small})]))
|
:size :small})]))
|
||||||
|
|||||||
Reference in New Issue
Block a user