From 7154d0ff21c924b39449dc75c9b3e788271b9cbd Mon Sep 17 00:00:00 2001 From: Bryce Date: Wed, 24 Apr 2024 16:15:30 -0700 Subject: [PATCH] Creates daily sales summaries --- src/clj/auto_ap/datomic/transactions.clj | 109 ++++++++++---------- src/clj/auto_ap/jobs/sales_summaries.clj | 25 ++++- src/clj/auto_ap/square/core3.clj | 3 +- src/cljs/auto_ap/views/components/grid.cljs | 4 +- 4 files changed, 80 insertions(+), 61 deletions(-) diff --git a/src/clj/auto_ap/datomic/transactions.clj b/src/clj/auto_ap/datomic/transactions.clj index 7ddce3df..11adc67a 100644 --- a/src/clj/auto_ap/datomic/transactions.clj +++ b/src/clj/auto_ap/datomic/transactions.clj @@ -17,21 +17,21 @@ (defn potential-duplicate-ids [db args] (when (and (:potential-duplicates args) - (:bank-account-id args)) + (:bank-account-id args)) (->> (dc/q '[:find ?tx ?amount ?date - :in $ ?ba - :where - [?tx :transaction/bank-account ?ba] - [?tx :transaction/amount ?amount] - [?tx :transaction/date ?date] - (not [?tx :transaction/approval-status :transaction-approval-status/suppressed])] - db - (:bank-account-id args)) + :in $ ?ba + :where + [?tx :transaction/bank-account ?ba] + [?tx :transaction/amount ?amount] + [?tx :transaction/date ?date] + (not [?tx :transaction/approval-status :transaction-approval-status/suppressed])] + db + (:bank-account-id args)) (group-by (fn [[_ amount date]] [amount date])) (filter (fn [[_ txes]] (> (count txes) 1))) - + (vals) (mapcat identity) (map first) @@ -65,8 +65,8 @@ (:potential-duplicates args) (merge-query {:query {:in '[[?e ...]]} :args [potential-duplicates]}) - - (:bank-account-id args) + + (:bank-account-id args) (merge-query {:query {:in ['?bank-account-id] :where ['[?e :transaction/bank-account ?bank-account-id]]} :args [(:bank-account-id args)]}) @@ -76,25 +76,25 @@ :where ['[?import-batch-id :import-batch/entry ?e]]} :args [(:import-batch-id args)]}) - (:account-id args) + (:account-id args) (merge-query {:query {:in ['?account-id] :where ['[?e :transaction/accounts ?accounts] '[?accounts :transaction-account/account ?account-id]]} :args [(:account-id args)]}) - (:vendor-id args) + (:vendor-id args) (merge-query {:query {:in ['?vendor-id] :where ['[?e :transaction/vendor ?vendor-id]]} :args [(:vendor-id args)]}) - - (:amount-gte args) + + (:amount-gte args) (merge-query {:query {:in ['?amount-gte] :where ['[?e :transaction/amount ?a] '[(>= ?a ?amount-gte)]]} :args [(:amount-gte args)]}) - (:amount-lte args) + (:amount-lte args) (merge-query {:query {:in ['?amount-lte] :where ['[?e :transaction/amount ?a] '[(<= ?a ?amount-lte)]]} @@ -103,7 +103,7 @@ (:approval-status args) (merge-query {:query {:in ['?approval-status] :where ['[?e :transaction/approval-status ?approval-status]]} - :args [(:approval-status args)]}) + :args [(:approval-status args)]}) (= (:linked-to args) :payment) (merge-query {:query {:where ['[?e :transaction/payment]]}}) @@ -125,20 +125,20 @@ '[?c :client/original-id ?original-id]]} :args [(:original-id args)]}) - (seq (:location args)) + (seq (:location args)) (merge-query {:query {:in ['?location] :where ['[?e :transaction/accounts ?tas] '[?tas :transaction-account/location ?location]]} :args [(:location args)]}) - (:unresolved args) + (:unresolved args) (merge-query {:query {:where ['[?e :transaction/date] '(or-join [?e] (not [?e :transaction/accounts]) (and [?e :transaction/accounts ?tas] (not [?tas :transaction-account/account])))]}}) - (:description args) + (:description args) (merge-query {:query {:in ['?description] :where ['[?e :transaction/description-original ?do] '[(clojure.string/lower-case ?do) ?do2] @@ -146,21 +146,21 @@ :args [(clojure.string/lower-case (:description args))]}) (:sort args) (add-sorter-fields {"client" ['[?e :transaction/client ?c] - '[?c :client/name ?sort-client]] + '[?c :client/name ?sort-client]] "account" ['[?e :transaction/date] - '(or-join [?e ?sort-account] - (and [?e :transaction/bank-account ?c] - [?c :bank-account/name ?sort-account]) - (and - (not [?e :transaction/bank-account]) - [(ground "") ?sort-account]))] + '(or-join [?e ?sort-account] + (and [?e :transaction/bank-account ?c] + [?c :bank-account/name ?sort-account]) + (and + (not [?e :transaction/bank-account]) + [(ground "") ?sort-account]))] "description-original" ['[?e :transaction/description-original ?sort-description-original]] "date" ['[?e :transaction/date ?sort-date]] "vendor" ['(or-join [?e ?sort-vendor] - (and [(missing? $ ?e :transaction/vendor)] - [?e :transaction/description-original ?sort-vendor]) - (and [?e :transaction/vendor ?v] - [?v :vendor/name ?sort-vendor]))] + (and [(missing? $ ?e :transaction/vendor)] + [?e :transaction/description-original ?sort-vendor]) + (and [?e :transaction/vendor ?v] + [?v :vendor/name ?sort-vendor]))] "amount" ['[?e :transaction/amount ?sort-amount]] "status" ['[?e :transaction/status ?sort-status]]} args) @@ -194,8 +194,8 @@ :transaction/payment [:db/id :payment/date] :transaction/expected-deposit [:db/id :expected-deposit/date] :transaction/accounts [:transaction-account/amount - :db/id - :transaction-account/location + :db/id + :transaction-account/location {:transaction-account/account [:account/name :db/id :account/location {:account/client-overrides [:account-client-override/name @@ -209,17 +209,16 @@ (map #(update % :transaction/accounts (fn [tas] (map - (fn [ta] - (update ta :transaction-account/account d-accounts/clientize (:db/id (:transaction/client %)))) - tas)))) + (fn [ta] + (update ta :transaction-account/account d-accounts/clientize (:db/id (:transaction/client %)))) + tas)))) (map (fn [transaction] (cond-> transaction (: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)) (group-by :db/id))] - + (->> ids (map results) (map first)))) @@ -232,7 +231,7 @@ matching-count])) (defn filter-ids [ids] - (if ids + (if ids (->> (dc/q {:find ['?e] :in ['$ '[?e ...]] :where ['[?e :transaction/date]]} @@ -242,24 +241,24 @@ [])) (defn get-by-id [id] - (-> + (-> (dc/pull (dc/db conn) - '[* {:transaction/client [:client/name :db/id :client/code :client/locations :client/groups] - :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/vendor [:db/id :vendor/name] - :transaction/matched-rule [:db/id :transaction-rule/note] - :transaction/forecast-match [:db/id :forecasted-transaction/identifier] - :transaction/accounts [:transaction-account/amount - :db/id - :transaction-account/location - { :transaction-account/account [:account/name :db/id + '[* {:transaction/client [:client/name :db/id :client/code :client/locations :client/groups] + :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/vendor [:db/id :vendor/name] + :transaction/matched-rule [:db/id :transaction-rule/note] + :transaction/forecast-match [:db/id :forecasted-transaction/identifier] + :transaction/accounts [:transaction-account/amount + :db/id + :transaction-account/location + {:transaction-account/account [:account/name :db/id :account/location {:account/client-overrides [:account-client-override/name {:account-client-override/client [:db/id]}]}]}] - :transaction/yodlee-merchant [:db/id :yodlee-merchant/yodlee-id :yodlee-merchant/name] - :transaction/plaid-merchant [:db/id :plaid-merchant/name]}] - id) + :transaction/yodlee-merchant [:db/id :yodlee-merchant/yodlee-id :yodlee-merchant/name] + :transaction/plaid-merchant [:db/id :plaid-merchant/name]}] + id) (update :transaction/date coerce/from-date) (update :transaction/post-date coerce/from-date) (dissoc :transaction/id))) diff --git a/src/clj/auto_ap/jobs/sales_summaries.clj b/src/clj/auto_ap/jobs/sales_summaries.clj index 676ed011..55e667a7 100644 --- a/src/clj/auto_ap/jobs/sales_summaries.clj +++ b/src/clj/auto_ap/jobs/sales_summaries.clj @@ -32,6 +32,15 @@ (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] @@ -58,7 +67,7 @@ :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 ?item-name] + [(get-else $ ?li :order-line-item/item-name "Unknown") ?item-name] [?li :order-line-item/category ?category] [?li :order-line-item/total ?total] [?li :order-line-item/tax ?tax] @@ -259,9 +268,12 @@ :db/valueType :db.type/double :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) + (delete-all) (sales-summaries) @@ -284,6 +296,15 @@ (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"]) + (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"]) + + ) diff --git a/src/clj/auto_ap/square/core3.clj b/src/clj/auto_ap/square/core3.clj index eca44ec6..2392ff0e 100644 --- a/src/clj/auto_ap/square/core3.clj +++ b/src/clj/auto_ap/square/core3.clj @@ -41,7 +41,7 @@ (de/chain (de/loop [attempt 0] (-> (de/chain (de/future-with (ex/execute-pool) - (log/info ::request-started + #_(log/info ::request-started :url (:url request) :attempt attempt :source "Square 3" @@ -1008,6 +1008,7 @@ (require 'auto-ap.time-reader) + @(upsert-all "NGPG") (clojure.pprint/pprint (let [[c [l]] (get-square-client-and-location "NGHW")] diff --git a/src/cljs/auto_ap/views/components/grid.cljs b/src/cljs/auto_ap/views/components/grid.cljs index f70cbad5..e5152f24 100644 --- a/src/cljs/auto_ap/views/components/grid.cljs +++ b/src/cljs/auto_ap/views/components/grid.cljs @@ -223,9 +223,7 @@ (defn cell [params] (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 [] (let [children (r/children (r/current-component))