Adds the ability to export sales data

This commit is contained in:
2023-11-16 22:27:17 -08:00
parent fc9cd09533
commit d3477c3fce
3 changed files with 109 additions and 9 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
(ns auto-ap.routes.exports
(: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.clients :as d-clients]
[auto-ap.datomic.transactions :as d-transactions]
@@ -8,7 +8,9 @@
[auto-ap.graphql :as graphql]
[auto-ap.graphql.utils
:refer [->graphql <-graphql assert-admin assert-can-see-client]]
[auto-ap.logging :as alog]
[auto-ap.routes.utils :refer [wrap-secure]]
[auto-ap.ssr.utils :refer [wrap-schema-enforce wrap-form-4xx-2]]
[auto-ap.time :as atime]
[buddy.sign.jwt :as jwt]
[cheshire.generate :as generate]
@@ -19,10 +21,9 @@
[com.unbounce.dogstatsd.core :as statsd]
[config.core :refer [env]]
[datomic.api :as dc]
[malli.core :as mc]
[ring.middleware.json :refer [wrap-json-response]]
[venia.core :as venia]
[auto-ap.logging :as alog]
[com.brunobonacci.mulog :as mu]))
[venia.core :as venia]))
(defn wrap-csv-response [handler]
(fn [request]
@@ -532,6 +533,95 @@
[(:client/code client) l numeric-code (account->name a) date-str
(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]
(fn [request]
(if (= key (get (:headers request) "authorization"))
@@ -540,10 +630,12 @@
(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}}
"payments/" {#"export/?" {:get :export-payments}}
"expected-deposit/" {#"export/?" {:get :export-expected-deposits}}
"clients/" {#"export/?" {:get :export-clients}}
"vendors/" {#"export/?" {:get :export-vendors}
"company/" {#"export" {:get :export-company-vendors}}}
@@ -565,8 +657,15 @@
:export-company-vendors (-> export-company-vendors wrap-csv-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-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-accounts (-> export-accounts wrap-json-response wrap-secure)
:export-transactions (-> export-transactions 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)}) ;

View File

@@ -12,6 +12,7 @@
(com/field {:label "Processor"}
(com/radio {:size :small
:name "processor"
:value (:processor (:parsed-query-params request))
:options [{:value ""
:content "All"}
{:value "square"
@@ -35,7 +36,7 @@
(com/money-input {:name "total-gte"
:id "total-gte"
:hx-preserve "true"
:class "hot-filter"
:class "hot-filter w-20"
:value (:total-gte (:parsed-query-params request))
:placeholder "0.01"
:size :small})
@@ -44,7 +45,7 @@
(com/money-input {:name "total-lte"
:hx-preserve "true"
:id "total-lte"
:class "hot-filter"
:class "hot-filter w-20"
:value (:total-lte (:parsed-query-params request))
:placeholder "9999.34"
:size :small})]))