fixes for sales summaries being automatic.

This commit is contained in:
Bryce
2026-05-15 23:20:48 -07:00
parent 63eb5b5954
commit 5a49ad777c
4 changed files with 71 additions and 44 deletions

View File

@@ -38,21 +38,20 @@
(defn regenerate-literals [] (defn regenerate-literals []
(require 'com.github.ivarref.gen-fn) (require 'com.github.ivarref.gen-fn)
(spit (spit
"resources/functions.edn" "resources/functions.edn"
(let [datomic-fn @(resolve 'com.github.ivarref.gen-fn/datomic-fn)] (let [datomic-fn @(resolve 'com.github.ivarref.gen-fn/datomic-fn)]
[(datomic-fn :pay #'iol-ion.tx.pay/pay) [(datomic-fn :pay #'iol-ion.tx.pay/pay)
(datomic-fn :plus #'iol-ion.tx.plus/plus) (datomic-fn :plus #'iol-ion.tx.plus/plus)
(datomic-fn :propose-invoice #'iol-ion.tx.propose-invoice/propose-invoice) (datomic-fn :propose-invoice #'iol-ion.tx.propose-invoice/propose-invoice)
(datomic-fn :reset-rels #'iol-ion.tx.reset-rels/reset-rels) (datomic-fn :reset-rels #'iol-ion.tx.reset-rels/reset-rels)
(datomic-fn :reset-scalars #'iol-ion.tx.reset-scalars/reset-scalars) (datomic-fn :reset-scalars #'iol-ion.tx.reset-scalars/reset-scalars)
(datomic-fn :upsert-entity #'iol-ion.tx.upsert-entity/upsert-entity) (datomic-fn :upsert-entity #'iol-ion.tx.upsert-entity/upsert-entity)
(datomic-fn :upsert-invoice #'iol-ion.tx.upsert-invoice/upsert-invoice) (datomic-fn :upsert-invoice #'iol-ion.tx.upsert-invoice/upsert-invoice)
(datomic-fn :upsert-ledger #'iol-ion.tx.upsert-ledger/upsert-ledger) (datomic-fn :upsert-ledger #'iol-ion.tx.upsert-ledger/upsert-ledger)
(datomic-fn :upsert-transaction #'iol-ion.tx.upsert-transaction/upsert-transaction) (datomic-fn :upsert-transaction #'iol-ion.tx.upsert-transaction/upsert-transaction)
(datomic-fn :upsert-sales-summary #'iol-ion.tx.upsert-sales-summary-ledger/upsert-sales-summary)]))) (datomic-fn :upsert-sales-summary #'iol-ion.tx.upsert-sales-summary-ledger/upsert-sales-summary)])))
(comment (comment
(regenerate-literals) (regenerate-literals)
(auto-ap.datomic/install-functions))
(auto-ap.datomic/install-functions))

View File

@@ -1,7 +1,5 @@
(ns iol-ion.tx.upsert-sales-summary-ledger (ns iol-ion.tx.upsert-sales-summary-ledger
(:require [datomic.api :as dc] (:require [datomic.api :as dc]))
[iol-ion.tx.upsert-entity :as upsert-entity]
[iol-ion.tx.upsert-ledger :as upsert-ledger]))
(defn summary->journal-entry [db summary-id] (defn summary->journal-entry [db summary-id]
(let [summary (dc/pull db '[:sales-summary/client (let [summary (dc/pull db '[:sales-summary/client
@@ -9,7 +7,7 @@
{:sales-summary/items [:sales-summary-item/category {:sales-summary/items [:sales-summary-item/category
:ledger-mapped/account :ledger-mapped/account
:ledger-mapped/amount :ledger-mapped/amount
:ledger-mapped/ledger-side]}] {:ledger-mapped/ledger-side [:db/ident]}]}]
summary-id) summary-id)
items (:sales-summary/items summary) items (:sales-summary/items summary)
aggregated (->> items aggregated (->> items
@@ -18,18 +16,22 @@
(map (fn [[account acc-items]] (map (fn [[account acc-items]]
(reduce (reduce
(fn [m item] (fn [m item]
(update m (:ledger-mapped/ledger-side item) (fnil + 0.0) (:ledger-mapped/amount item 0.0))) (update m (:db/ident (:ledger-mapped/ledger-side item)) (fnil + 0.0) (:ledger-mapped/amount item 0.0)))
{:account account} {:account account}
acc-items)))) acc-items))))
_ (clojure.pprint/pprint aggregated)
line-items (mapv (fn [{:keys [account] :as m}] line-items (mapv (fn [{:keys [account] :as m}]
(cond-> {:db/id (str (java.util.UUID/randomUUID)) (cond-> {:db/id (str (java.util.UUID/randomUUID))
:journal-entry-line/account account :journal-entry-line/account account
:journal-entry-line/location "A"} :journal-entry-line/location "A"}
(get m :ledger-side/debit) (assoc :journal-entry-line/debit (get m :ledger-side/debit)) (get m :ledger-side/debit) (assoc :journal-entry-line/debit (get m :ledger-side/debit))
(get m :ledger-side/credit) (assoc :journal-entry-line/credit (get m :ledger-side/credit)))) (get m :ledger-side/credit) (assoc :journal-entry-line/credit (get m :ledger-side/credit))))
aggregated) aggregated)
total-debits (reduce + 0.0 (map #(get % :ledger-side/debit 0.0) aggregated)) total-debits (reduce + 0.0 (map #(get % :ledger-side/debit 0.0) aggregated))
total-credits (reduce + 0.0 (map #(get % :ledger-side/credit 0.0) aggregated))] total-credits (reduce + 0.0 (map #(get % :ledger-side/credit 0.0) aggregated))
_ (clojure.pprint/pprint [total-debits total-credits])
]
(when (and (seq line-items) (when (and (seq line-items)
(= (Math/round (* 1000 total-debits)) (= (Math/round (* 1000 total-debits))
(Math/round (* 1000 total-credits)))) (Math/round (* 1000 total-credits))))
@@ -40,6 +42,14 @@
:journal-entry/amount total-debits :journal-entry/amount total-debits
:journal-entry/line-items line-items}))) :journal-entry/line-items line-items})))
(defn current-date [db]
(let [last-tx (dc/t->tx (dc/basis-t db))
[[date]] (seq (dc/q '[:find ?ti :in $ ?tx
:where [?tx :db/txInstant ?ti]]
db
last-tx))]
date))
(defn upsert-sales-summary [db summary] (defn upsert-sales-summary [db summary]
(let [upserted-summary [[:upsert-entity summary]] (let [upserted-summary [[:upsert-entity summary]]
db-after (-> (dc/with db upserted-summary) :db-after) db-after (-> (dc/with db upserted-summary) :db-after)
@@ -48,13 +58,13 @@
:sales-summary/client :sales-summary/client
:db/id) :db/id)
journal-entry (summary->journal-entry db-after summary-id)] journal-entry (summary->journal-entry db-after summary-id)]
(into upserted-summary upserted-summary
#_(into upserted-summary
(if journal-entry (if journal-entry
[[:upsert-ledger journal-entry]] [[:upsert-ledger journal-entry]]
(let [existing-je-id (ffirst (dc/q '[:find ?je . :in $ ?ss (concat
:where [?je :journal-entry/original-entity ?ss]] [[:db/retractEntity [:journal-entry/original-entity (:db/id summary)]]]
db-after summary-id))]
(concat
(when existing-je-id [[:db/retractEntity existing-je-id]]) (when client-id [{:db/id client-id
(when client-id [{:db/id client-id :client/ledger-last-change (current-date db)}]))))))
:client/ledger-last-change (upsert-ledger/current-date db)}])))))))

File diff suppressed because one or more lines are too long

View File

@@ -334,20 +334,35 @@
(apply mark-dirty [:client/code "NGDG"] (last-n-days 30)) (apply mark-dirty [:client/code "NGDG"] (last-n-days 30))
(apply mark-dirty [:client/code "NGPG"] (last-n-days 30)) (dirty-sales-summaries [:client/code "NGWH"])
(mark-all-dirty 50)
(apply mark-dirty [:client/code "NGWH"] (last-n-days 5))
(iol-ion.tx.upsert-sales-summary-ledger/summary->journal-entry (dc/db conn) 17592314245819)
(iol-ion.tx.upsert-sales-summary-ledger/upsert-sales-summary (dc/db conn) {:db/id 17592314241429})
(mark-all-dirty 5)
(delete-all) (delete-all)
(sales-summaries-v2) (sales-summaries-v2)
1
(dc/q '[:find (pull ?sos [* {:sales-summary/sales-items [*]}]) (dc/q '[:find (pull ?sos [* {:sales-summary/sales-items [*]}])
:in $ :in $
:where [?sos :sales-summary/client [:client/code "NGHW"]] :where [?sos :sales-summary/client [:client/code "NGHW"]]
[?sos :sales-summary/date ?d] [?sos :sales-summary/date ?d]
[(= ?d #inst "2024-04-10T00:00:00-07:00")]] [(= ?d #inst "2024-04-10T00:00:00-07:00")]]
(dc/db conn)) (dc/db conn))
(dc/q '[:find ?n ?p2 (sum ?total) (dc/q '[:find ?n ?p2 (sum ?total)
:with ?c :with ?c
:in $ [?clients ?start-date ?end-date] :in $ [?clients ?start-date ?end-date]
@@ -360,18 +375,21 @@
(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 (dc/q '[:find ?n
: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 ?n] ] [?li :order-line-item/item-name ?n]]
(dc/db conn) (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"]) [[(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"])
@(dc/transact conn [{:db/id :sales-summary/total-tax :db/ident :sales-summary/total-tax-legacy}
{:db/id :sales-summary/total-tip :db/ident :sales-summary/total-tip-legacy}])
(auto-ap.datomic/transact-schema conn) @(dc/transact conn [{:db/id :sales-summary/total-tax :db/ident :sales-summary/total-tax-legacy}
{:db/id :sales-summary/total-tip :db/ident :sales-summary/total-tip-legacy}])
(auto-ap.datomic/transact-schema conn)
) )