## Summary Completes the automatic sales summary pipeline end-to-end: the `sales-summaries-v2` job now calculates aggregate totals, preserves manual adjustments, and automatically posts balanced journal entries to the ledger. ## What Changed **New Datomic transaction function** (`upsert-sales-summary-ledger`) - Transforms detailed `sales-summary-item`s into aggregated `journal-entry` lines grouped by account and ledger side - Handles the full upsert: posts a new journal entry for summaries with mapped accounts, or retracts the orphaned entry if items no longer qualify **Enhanced `sales-summaries-v2` job** - Calculates and stores 13 aggregate total attributes (card/cash/food-app/gift-card payments, refunds, fees, discounts, tax, tip, returns, unknown, net) - Preserves manual items (`manual? true`) during recalculation — only auto-calculated items are replaced **Ledger reconciliation** - `reconcile-ledger` now queries for sales summaries missing journal entries and repairs them via `:upsert-sales-summary-ledger`, alongside existing invoice and transaction repairs **Schema** - Added 13 `total-*` attributes on `sales-summary` (all `db.type/double`, no history) - Registered the new transaction function in `tx.clj` and `datomic.clj` **Admin UI cleanup** - Resolved "clientize" and HTMX `client-id` TODOs in the sales summaries admin page - `new-summary-item` now correctly passes `client-id` via `hx-vals` - Removed stale TODO comments and placeholder code ## Files Changed (8) | File | Purpose | |------|---------| | `iol_ion/.../upsert_sales_summary_ledger.clj` | New Datomic tx function | | `iol_ion/.../tx.clj` | Register new tx function | | `resources/schema.edn` | 13 new `total-*` attributes | | `src/.../datomic.clj` | Load new tx namespace | | `src/.../jobs/sales_summaries.clj` | Aggregate totals + manual item preservation | | `src/.../ledger.clj` | Sales summary repair in `reconcile-ledger` | | `src/.../ssr/admin/sales_summaries.clj` | UI TODO cleanup | | `docs/plans/...plan.md` | Implementation plan document | Co-authored-by: Bryce <bryce@integreatconsult.com> Reviewed-on: #5 Co-authored-by: Bryce <bryce@brycecovertoperations.com> Co-committed-by: Bryce <bryce@brycecovertoperations.com>
58 lines
2.1 KiB
Clojure
58 lines
2.1 KiB
Clojure
(ns iol-ion.tx
|
|
(:require [datomic.api :as dc]
|
|
[iol-ion.utils])
|
|
(:import [java.util UUID]))
|
|
|
|
(def random-tempid iol-ion.utils/random-tempid)
|
|
(defn composite-tempid [& pieces]
|
|
(format "hashed-%d" (.hashCode (set pieces))))
|
|
|
|
(def by iol-ion.utils/by)
|
|
(def pull-many iol-ion.utils/pull-many)
|
|
(def remove-nils iol-ion.utils/remove-nils)
|
|
|
|
|
|
;; TODO expected-deposit ledger entry
|
|
#_(defmethod entity-change->ledger :expected-deposit
|
|
[db [type id]]
|
|
(let [{:expected-deposit/keys [total client date]} (d/pull db '[:expected-deposit/total :expected-deposit/client :expected-deposit/date] id)]
|
|
#:journal-entry
|
|
{:source "expected-deposit"
|
|
:original-entity id
|
|
|
|
:client client
|
|
:date date
|
|
:amount total
|
|
:vendor :vendor/ccp-square
|
|
:line-items [#:journal-entry-line
|
|
{:credit total
|
|
:location "A"
|
|
:account :account/receipts-split}
|
|
#:journal-entry-line
|
|
{:debit total
|
|
:location "A"
|
|
:account :account/ccp}]}))
|
|
|
|
|
|
|
|
|
|
(defn regenerate-literals []
|
|
(require 'com.github.ivarref.gen-fn)
|
|
(spit
|
|
"resources/functions.edn"
|
|
(let [datomic-fn @(resolve 'com.github.ivarref.gen-fn/datomic-fn)]
|
|
[(datomic-fn :pay #'iol-ion.tx.pay/pay)
|
|
(datomic-fn :plus #'iol-ion.tx.plus/plus)
|
|
(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-scalars #'iol-ion.tx.reset-scalars/reset-scalars)
|
|
(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-ledger #'iol-ion.tx.upsert-ledger/upsert-ledger)
|
|
(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)])))
|
|
|
|
(comment
|
|
(regenerate-literals)
|
|
(auto-ap.datomic/install-functions))
|