Creates daily sales summaries

This commit is contained in:
2024-04-24 16:15:30 -07:00
parent 53b7da9512
commit 7154d0ff21
4 changed files with 80 additions and 61 deletions

View File

@@ -17,21 +17,21 @@
(defn potential-duplicate-ids [db args] (defn potential-duplicate-ids [db args]
(when (and (:potential-duplicates args) (when (and (:potential-duplicates args)
(:bank-account-id args)) (:bank-account-id args))
(->> (dc/q '[:find ?tx ?amount ?date (->> (dc/q '[:find ?tx ?amount ?date
:in $ ?ba :in $ ?ba
:where :where
[?tx :transaction/bank-account ?ba] [?tx :transaction/bank-account ?ba]
[?tx :transaction/amount ?amount] [?tx :transaction/amount ?amount]
[?tx :transaction/date ?date] [?tx :transaction/date ?date]
(not [?tx :transaction/approval-status :transaction-approval-status/suppressed])] (not [?tx :transaction/approval-status :transaction-approval-status/suppressed])]
db db
(:bank-account-id args)) (:bank-account-id args))
(group-by (fn [[_ amount date]] (group-by (fn [[_ amount date]]
[amount date])) [amount date]))
(filter (fn [[_ txes]] (filter (fn [[_ txes]]
(> (count txes) 1))) (> (count txes) 1)))
(vals) (vals)
(mapcat identity) (mapcat identity)
(map first) (map first)
@@ -65,8 +65,8 @@
(:potential-duplicates args) (:potential-duplicates args)
(merge-query {:query {:in '[[?e ...]]} (merge-query {:query {:in '[[?e ...]]}
:args [potential-duplicates]}) :args [potential-duplicates]})
(:bank-account-id args) (:bank-account-id args)
(merge-query {:query {:in ['?bank-account-id] (merge-query {:query {:in ['?bank-account-id]
:where ['[?e :transaction/bank-account ?bank-account-id]]} :where ['[?e :transaction/bank-account ?bank-account-id]]}
:args [(:bank-account-id args)]}) :args [(:bank-account-id args)]})
@@ -76,25 +76,25 @@
:where ['[?import-batch-id :import-batch/entry ?e]]} :where ['[?import-batch-id :import-batch/entry ?e]]}
:args [(:import-batch-id args)]}) :args [(:import-batch-id args)]})
(:account-id args) (:account-id args)
(merge-query {:query {:in ['?account-id] (merge-query {:query {:in ['?account-id]
:where ['[?e :transaction/accounts ?accounts] :where ['[?e :transaction/accounts ?accounts]
'[?accounts :transaction-account/account ?account-id]]} '[?accounts :transaction-account/account ?account-id]]}
:args [(:account-id args)]}) :args [(:account-id args)]})
(:vendor-id args) (:vendor-id args)
(merge-query {:query {:in ['?vendor-id] (merge-query {:query {:in ['?vendor-id]
:where ['[?e :transaction/vendor ?vendor-id]]} :where ['[?e :transaction/vendor ?vendor-id]]}
:args [(:vendor-id args)]}) :args [(:vendor-id args)]})
(:amount-gte args) (:amount-gte args)
(merge-query {:query {:in ['?amount-gte] (merge-query {:query {:in ['?amount-gte]
:where ['[?e :transaction/amount ?a] :where ['[?e :transaction/amount ?a]
'[(>= ?a ?amount-gte)]]} '[(>= ?a ?amount-gte)]]}
:args [(:amount-gte args)]}) :args [(:amount-gte args)]})
(:amount-lte args) (:amount-lte args)
(merge-query {:query {:in ['?amount-lte] (merge-query {:query {:in ['?amount-lte]
:where ['[?e :transaction/amount ?a] :where ['[?e :transaction/amount ?a]
'[(<= ?a ?amount-lte)]]} '[(<= ?a ?amount-lte)]]}
@@ -103,7 +103,7 @@
(:approval-status args) (:approval-status args)
(merge-query {:query {:in ['?approval-status] (merge-query {:query {:in ['?approval-status]
:where ['[?e :transaction/approval-status ?approval-status]]} :where ['[?e :transaction/approval-status ?approval-status]]}
:args [(:approval-status args)]}) :args [(:approval-status args)]})
(= (:linked-to args) :payment) (= (:linked-to args) :payment)
(merge-query {:query {:where ['[?e :transaction/payment]]}}) (merge-query {:query {:where ['[?e :transaction/payment]]}})
@@ -125,20 +125,20 @@
'[?c :client/original-id ?original-id]]} '[?c :client/original-id ?original-id]]}
:args [(:original-id args)]}) :args [(:original-id args)]})
(seq (:location args)) (seq (:location args))
(merge-query {:query {:in ['?location] (merge-query {:query {:in ['?location]
:where ['[?e :transaction/accounts ?tas] :where ['[?e :transaction/accounts ?tas]
'[?tas :transaction-account/location ?location]]} '[?tas :transaction-account/location ?location]]}
:args [(:location args)]}) :args [(:location args)]})
(:unresolved args) (:unresolved args)
(merge-query {:query {:where ['[?e :transaction/date] (merge-query {:query {:where ['[?e :transaction/date]
'(or-join [?e] '(or-join [?e]
(not [?e :transaction/accounts]) (not [?e :transaction/accounts])
(and [?e :transaction/accounts ?tas] (and [?e :transaction/accounts ?tas]
(not [?tas :transaction-account/account])))]}}) (not [?tas :transaction-account/account])))]}})
(:description args) (:description args)
(merge-query {:query {:in ['?description] (merge-query {:query {:in ['?description]
:where ['[?e :transaction/description-original ?do] :where ['[?e :transaction/description-original ?do]
'[(clojure.string/lower-case ?do) ?do2] '[(clojure.string/lower-case ?do) ?do2]
@@ -146,21 +146,21 @@
:args [(clojure.string/lower-case (:description args))]}) :args [(clojure.string/lower-case (:description args))]})
(:sort args) (add-sorter-fields {"client" ['[?e :transaction/client ?c] (:sort args) (add-sorter-fields {"client" ['[?e :transaction/client ?c]
'[?c :client/name ?sort-client]] '[?c :client/name ?sort-client]]
"account" ['[?e :transaction/date] "account" ['[?e :transaction/date]
'(or-join [?e ?sort-account] '(or-join [?e ?sort-account]
(and [?e :transaction/bank-account ?c] (and [?e :transaction/bank-account ?c]
[?c :bank-account/name ?sort-account]) [?c :bank-account/name ?sort-account])
(and (and
(not [?e :transaction/bank-account]) (not [?e :transaction/bank-account])
[(ground "") ?sort-account]))] [(ground "") ?sort-account]))]
"description-original" ['[?e :transaction/description-original ?sort-description-original]] "description-original" ['[?e :transaction/description-original ?sort-description-original]]
"date" ['[?e :transaction/date ?sort-date]] "date" ['[?e :transaction/date ?sort-date]]
"vendor" ['(or-join [?e ?sort-vendor] "vendor" ['(or-join [?e ?sort-vendor]
(and [(missing? $ ?e :transaction/vendor)] (and [(missing? $ ?e :transaction/vendor)]
[?e :transaction/description-original ?sort-vendor]) [?e :transaction/description-original ?sort-vendor])
(and [?e :transaction/vendor ?v] (and [?e :transaction/vendor ?v]
[?v :vendor/name ?sort-vendor]))] [?v :vendor/name ?sort-vendor]))]
"amount" ['[?e :transaction/amount ?sort-amount]] "amount" ['[?e :transaction/amount ?sort-amount]]
"status" ['[?e :transaction/status ?sort-status]]} "status" ['[?e :transaction/status ?sort-status]]}
args) args)
@@ -194,8 +194,8 @@
:transaction/payment [:db/id :payment/date] :transaction/payment [:db/id :payment/date]
:transaction/expected-deposit [:db/id :expected-deposit/date] :transaction/expected-deposit [:db/id :expected-deposit/date]
:transaction/accounts [:transaction-account/amount :transaction/accounts [:transaction-account/amount
:db/id :db/id
:transaction-account/location :transaction-account/location
{:transaction-account/account [:account/name :db/id {:transaction-account/account [:account/name :db/id
:account/location :account/location
{:account/client-overrides [:account-client-override/name {:account/client-overrides [:account-client-override/name
@@ -209,17 +209,16 @@
(map #(update % :transaction/accounts (map #(update % :transaction/accounts
(fn [tas] (fn [tas]
(map (map
(fn [ta] (fn [ta]
(update ta :transaction-account/account d-accounts/clientize (:db/id (:transaction/client %)))) (update ta :transaction-account/account d-accounts/clientize (:db/id (:transaction/client %))))
tas)))) tas))))
(map (fn [transaction] (map (fn [transaction]
(cond-> transaction (cond-> transaction
(:transaction/payment transaction) (update-in [:transaction/payment :payment/date] coerce/from-date) (:transaction/payment transaction) (update-in [:transaction/payment :payment/date] coerce/from-date)
(:transaction/expected-deposit transaction) (update-in [:transaction/expected-deposit :expected-deposit/date] coerce/from-date)) (:transaction/expected-deposit transaction) (update-in [:transaction/expected-deposit :expected-deposit/date] coerce/from-date))))
))
(map #(dissoc % :transaction/id)) (map #(dissoc % :transaction/id))
(group-by :db/id))] (group-by :db/id))]
(->> ids (->> ids
(map results) (map results)
(map first)))) (map first))))
@@ -232,7 +231,7 @@
matching-count])) matching-count]))
(defn filter-ids [ids] (defn filter-ids [ids]
(if ids (if ids
(->> (dc/q {:find ['?e] (->> (dc/q {:find ['?e]
:in ['$ '[?e ...]] :in ['$ '[?e ...]]
:where ['[?e :transaction/date]]} :where ['[?e :transaction/date]]}
@@ -242,24 +241,24 @@
[])) []))
(defn get-by-id [id] (defn get-by-id [id]
(-> (->
(dc/pull (dc/db conn) (dc/pull (dc/db conn)
'[* {:transaction/client [:client/name :db/id :client/code :client/locations :client/groups] '[* {:transaction/client [:client/name :db/id :client/code :client/locations :client/groups]
:transaction/approval-status [:db/ident :db/id] :transaction/approval-status [:db/ident :db/id]
:transaction/bank-account [:bank-account/name :bank-account/code :bank-account/yodlee-account-id :db/id :bank-account/locations :bank-account/current-balance] :transaction/bank-account [:bank-account/name :bank-account/code :bank-account/yodlee-account-id :db/id :bank-account/locations :bank-account/current-balance]
:transaction/vendor [:db/id :vendor/name] :transaction/vendor [:db/id :vendor/name]
:transaction/matched-rule [:db/id :transaction-rule/note] :transaction/matched-rule [:db/id :transaction-rule/note]
:transaction/forecast-match [:db/id :forecasted-transaction/identifier] :transaction/forecast-match [:db/id :forecasted-transaction/identifier]
:transaction/accounts [:transaction-account/amount :transaction/accounts [:transaction-account/amount
:db/id :db/id
:transaction-account/location :transaction-account/location
{ :transaction-account/account [:account/name :db/id {:transaction-account/account [:account/name :db/id
:account/location :account/location
{:account/client-overrides [:account-client-override/name {:account/client-overrides [:account-client-override/name
{:account-client-override/client [:db/id]}]}]}] {:account-client-override/client [:db/id]}]}]}]
:transaction/yodlee-merchant [:db/id :yodlee-merchant/yodlee-id :yodlee-merchant/name] :transaction/yodlee-merchant [:db/id :yodlee-merchant/yodlee-id :yodlee-merchant/name]
:transaction/plaid-merchant [:db/id :plaid-merchant/name]}] :transaction/plaid-merchant [:db/id :plaid-merchant/name]}]
id) id)
(update :transaction/date coerce/from-date) (update :transaction/date coerce/from-date)
(update :transaction/post-date coerce/from-date) (update :transaction/post-date coerce/from-date)
(dissoc :transaction/id))) (dissoc :transaction/id)))

View File

@@ -32,6 +32,15 @@
(apply mark-dirty c (last-n-days days)))) (apply mark-dirty c (last-n-days days))))
(defn delete-all []
@(dc/transact conn
(->>
(dc/q '[:find ?ss
:where [?ss :sales-summary/date]]
(dc/db conn))
(map (fn [[ ss]]
[:db/retractEntity ss])))))
(defn dirty-sales-summaries [c] (defn dirty-sales-summaries [c]
@@ -58,7 +67,7 @@
:in $ [?clients ?start-date ?end-date] :in $ [?clients ?start-date ?end-date]
:where [(iol-ion.query/scan-sales-orders $ ?clients ?start-date ?end-date) [[?e _ ?sort-default] ...]] :where [(iol-ion.query/scan-sales-orders $ ?clients ?start-date ?end-date) [[?e _ ?sort-default] ...]]
[?e :sales-order/line-items ?li] [?e :sales-order/line-items ?li]
[?li :order-line-item/item-name ?item-name] [(get-else $ ?li :order-line-item/item-name "Unknown") ?item-name]
[?li :order-line-item/category ?category] [?li :order-line-item/category ?category]
[?li :order-line-item/total ?total] [?li :order-line-item/total ?total]
[?li :order-line-item/tax ?tax] [?li :order-line-item/tax ?tax]
@@ -259,9 +268,12 @@
:db/valueType :db.type/double :db/valueType :db.type/double
:db/cardinality :db.cardinality/one}]) :db/cardinality :db.cardinality/one}])
(apply mark-dirty [:client/code "NGCL"] (last-n-days 12)) (apply mark-dirty [:client/code "NGCL"] (last-n-days 14))
(apply mark-dirty [:client/code "NGDG"] (last-n-days 14))
(apply mark-dirty [:client/code "NGPG"] (last-n-days 14))
(mark-all-dirty 50) (mark-all-dirty 50)
(delete-all)
(sales-summaries) (sales-summaries)
@@ -284,6 +296,15 @@
(dc/db conn) (dc/db conn)
[[(auto-ap.datomic/pull-attr (dc/db conn) :db/id [:client/code "NGHW"])] #inst "2024-04-11T00:00:00-07:00" #inst "2024-04-11T00:00:00-07:00"]) [[(auto-ap.datomic/pull-attr (dc/db conn) :db/id [:client/code "NGHW"])] #inst "2024-04-11T00:00:00-07:00" #inst "2024-04-11T00:00:00-07:00"])
(dc/q '[:find ?n
:in $ [?clients ?start-date ?end-date]
:where [(iol-ion.query/scan-sales-orders $ ?clients ?start-date ?end-date) [[?e _ ?sort-default] ...]]
[?e :sales-order/line-items ?li]
[?li :order-line-item/item-name ?n] ]
(dc/db conn)
[[(auto-ap.datomic/pull-attr (dc/db conn) :db/id [:client/code "NGCL"])] #inst "2024-04-11T00:00:00-07:00" #inst "2024-04-24T00:00:00-07:00"])
) )

View File

@@ -41,7 +41,7 @@
(de/chain (de/chain
(de/loop [attempt 0] (de/loop [attempt 0]
(-> (de/chain (de/future-with (ex/execute-pool) (-> (de/chain (de/future-with (ex/execute-pool)
(log/info ::request-started #_(log/info ::request-started
:url (:url request) :url (:url request)
:attempt attempt :attempt attempt
:source "Square 3" :source "Square 3"
@@ -1008,6 +1008,7 @@
(require 'auto-ap.time-reader) (require 'auto-ap.time-reader)
@(upsert-all "NGPG")
(clojure.pprint/pprint (let [[c [l]] (get-square-client-and-location "NGHW")] (clojure.pprint/pprint (let [[c [l]] (get-square-client-and-location "NGHW")]

View File

@@ -223,9 +223,7 @@
(defn cell [params] (defn cell [params]
(apply r/create-element "td" #js {:className (:class params) :style (some-> (:style params) clj->js)} (apply r/create-element "td" #js {:className (:class params) :style (some-> (:style params) clj->js)}
(map r/as-element (r/children (r/current-component)))) (map r/as-element (r/children (r/current-component)))))
)
(defn body [] (defn body []
(let [children (r/children (r/current-component)) (let [children (r/children (r/current-component))