Move sales summaries from admin to pos menu

- Move SSR handler from auto-ap.ssr.admin.sales-summaries to auto-ap.ssr.pos.sales-summaries
- Move route namespace from auto-ap.routes.admin.sales-summaries to auto-ap.routes.pos.sales-summaries
- Update nav to use main-aside-nav with POS breadcrumbs
- Use pos.common date-range-field* filter component
- Remove wrap-admin/wrap-client-redirect-unauthenticated from middleware
- Add Summaries to Sales sidebar menu
This commit is contained in:
Bryce
2026-05-16 00:13:42 -07:00
parent 5a39a0c762
commit b02aec3546
5 changed files with 41 additions and 59 deletions

View File

@@ -6,7 +6,8 @@
[auto-ap.routes.admin.excel-invoices :as ei-routes] [auto-ap.routes.admin.excel-invoices :as ei-routes]
[auto-ap.routes.admin.import-batch :as ib-routes] [auto-ap.routes.admin.import-batch :as ib-routes]
[auto-ap.routes.admin.transaction-rules :as transaction-rules] [auto-ap.routes.admin.transaction-rules :as transaction-rules]
[auto-ap.routes.admin.vendors :as v-routes] [auto-ap.routes.admin.vendors :as v-routes]
[auto-ap.routes.pos.sales-summaries :as ss-routes]
[auto-ap.routes.invoice :as invoice-route] [auto-ap.routes.invoice :as invoice-route]
[auto-ap.routes.ledger :as ledger-routes] [auto-ap.routes.ledger :as ledger-routes]
[auto-ap.routes.outgoing-invoice :as oi-routes] [auto-ap.routes.outgoing-invoice :as oi-routes]
@@ -90,8 +91,8 @@
(#{::invoice-route/all-page ::invoice-route/unpaid-page ::invoice-route/voided-page ::invoice-route/paid-page ::oi-routes/new ::invoice-route/import-page :invoice-glimpse :invoice-glimpse-textract-invoice} (:matched-route request)) (#{::invoice-route/all-page ::invoice-route/unpaid-page ::invoice-route/voided-page ::invoice-route/paid-page ::oi-routes/new ::invoice-route/import-page :invoice-glimpse :invoice-glimpse-textract-invoice} (:matched-route request))
"invoices" "invoices"
(#{:pos-sales :pos-expected-deposits :pos-tenders :pos-refunds :pos-cash-drawer-shifts} (:matched-route request)) (#{:pos-sales :pos-expected-deposits :pos-tenders :pos-refunds :pos-cash-drawer-shifts ::ss-routes/page} (:matched-route request))
"sales" "sales"
(#{::payment-routes/all-page ::payment-routes/pending-page ::payment-routes/cleared-page ::payment-routes/voided-page} (:matched-route request)) (#{::payment-routes/all-page ::payment-routes/pending-page ::payment-routes/cleared-page ::payment-routes/voided-page} (:matched-route request))
"payments" "payments"
(#{::ledger-routes/all-page ::ledger-routes/external-page ::ledger-routes/external-import-page ::ledger-routes/balance-sheet ::ledger-routes/cash-flows ::ledger-routes/profit-and-loss} (:matched-route request)) (#{::ledger-routes/all-page ::ledger-routes/external-page ::ledger-routes/external-import-page ::ledger-routes/balance-sheet ::ledger-routes/cash-flows ::ledger-routes/profit-and-loss} (:matched-route request))
@@ -207,12 +208,18 @@
:hx-boost "true"} :hx-boost "true"}
"Refunds") "Refunds")
(menu-button- {:href (str (bidi/path-for ssr-routes/only-routes
:pos-cash-drawer-shifts)
"?date-range=week")
:active? (= :pos-cash-drawer-shifts (:matched-route request))
:hx-boost "true"}
"Cash drawer shifts")
(menu-button- {:href (str (bidi/path-for ssr-routes/only-routes (menu-button- {:href (str (bidi/path-for ssr-routes/only-routes
:pos-cash-drawer-shifts) ::ss-routes/page)
"?date-range=week") "?date-range=week")
:active? (= :pos-cash-drawer-shifts (:matched-route request)) :active? (= ::ss-routes/page (:matched-route request))
:hx-boost "true"} :hx-boost "true"}
"Cash drawer shifts")))) "Summaries"))))
(menu-button- {"@click.prevent" "if (selected == 'payments') {selected = null } else { selected = 'payments'} " (menu-button- {"@click.prevent" "if (selected == 'payments') {selected = null } else { selected = 'payments'} "
:icon svg/payments} :icon svg/payments}

View File

@@ -12,7 +12,7 @@
[auto-ap.ssr.admin.excel-invoice :as admin-excel-invoices] [auto-ap.ssr.admin.excel-invoice :as admin-excel-invoices]
[auto-ap.ssr.admin.history :as history] [auto-ap.ssr.admin.history :as history]
[auto-ap.ssr.admin.import-batch :as import-batch] [auto-ap.ssr.admin.import-batch :as import-batch]
[auto-ap.ssr.admin.sales-summaries :as admin-sales-summaries] [auto-ap.ssr.pos.sales-summaries :as pos-sales-summaries]
[auto-ap.ssr.admin.transaction-rules :as admin-rules] [auto-ap.ssr.admin.transaction-rules :as admin-rules]
[auto-ap.ssr.admin.vendors :as admin-vendors] [auto-ap.ssr.admin.vendors :as admin-vendors]
[auto-ap.ssr.auth :as auth] [auto-ap.ssr.auth :as auth]
@@ -85,17 +85,17 @@
(into company-1099/key->handler) (into company-1099/key->handler)
(into invoice/key->handler) (into invoice/key->handler)
(into import-batch/key->handler) (into import-batch/key->handler)
(into pos-sales/key->handler) (into pos-sales/key->handler)
(into pos-expected-deposits/key->handler) (into pos-expected-deposits/key->handler)
(into pos-tenders/key->handler) (into pos-tenders/key->handler)
(into pos-cash-drawer-shifts/key->handler) (into pos-cash-drawer-shifts/key->handler)
(into pos-refunds/key->handler) (into pos-refunds/key->handler)
(into users/key->handler) (into pos-sales-summaries/key->handler)
(into admin-accounts/key->handler) (into users/key->handler)
(into admin-excel-invoices/key->handler) (into admin-accounts/key->handler)
(into admin/key->handler) (into admin-excel-invoices/key->handler)
(into admin-jobs/key->handler) (into admin/key->handler)
(into admin-sales-summaries/key->handler) (into admin-jobs/key->handler)
(into admin-vendors/key->handler) (into admin-vendors/key->handler)
(into admin-clients/key->handler) (into admin-clients/key->handler)
(into admin-rules/key->handler) (into admin-rules/key->handler)

View File

@@ -1,4 +1,4 @@
(ns auto-ap.ssr.admin.sales-summaries (ns auto-ap.ssr.pos.sales-summaries
(:require (:require
[auto-ap.datomic [auto-ap.datomic
:refer [apply-pagination apply-sort-3 conn merge-query pull-many :refer [apply-pagination apply-sort-3 conn merge-query pull-many
@@ -6,9 +6,7 @@
[auto-ap.datomic.accounts :as d-accounts] [auto-ap.datomic.accounts :as d-accounts]
[auto-ap.graphql.utils :refer [extract-client-ids]] [auto-ap.graphql.utils :refer [extract-client-ids]]
[auto-ap.query-params :refer [wrap-copy-qp-pqp]] [auto-ap.query-params :refer [wrap-copy-qp-pqp]]
[auto-ap.routes.admin.sales-summaries :as route] [auto-ap.routes.pos.sales-summaries :as route]
[auto-ap.routes.utils
:refer [wrap-admin wrap-client-redirect-unauthenticated]]
[auto-ap.ssr-routes :as ssr-routes] [auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.common-handlers :refer [add-new-entity-handler]] [auto-ap.ssr.common-handlers :refer [add-new-entity-handler]]
[auto-ap.ssr.components :as com] [auto-ap.ssr.components :as com]
@@ -16,6 +14,8 @@
[auto-ap.ssr.form-cursor :as fc] [auto-ap.ssr.form-cursor :as fc]
[auto-ap.ssr.grid-page-helper :as helper :refer [wrap-apply-sort]] [auto-ap.ssr.grid-page-helper :as helper :refer [wrap-apply-sort]]
[auto-ap.ssr.hx :as hx] [auto-ap.ssr.hx :as hx]
[auto-ap.ssr.pos.common
:refer [date-range-field*]]
[auto-ap.ssr.svg :as svg] [auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils [auto-ap.ssr.utils
:refer [apply-middleware-to-all-handlers clj-date-schema :refer [apply-middleware-to-all-handlers clj-date-schema
@@ -48,24 +48,8 @@
"hx-target" "#entity-table" "hx-target" "#entity-table"
"hx-indicator" "#entity-table"} "hx-indicator" "#entity-table"}
#_[:fieldset.space-y-6 [:fieldset.space-y-6
(date-range-field {:value {:start (:start-date (:query-params request)) (date-range-field* request)]])
:end (:end-date (:query-params request))}
:id "date-range"})
(com/field {:label "Source"}
(com/select {:name "source"
:class "hot-filter w-full"
:value (:source (:query-params request))
:placeholder ""
:options (ref->select-options "import-source" :allow-nil? true)}))
#_(com/field {:label "Code"}
(com/text-input {:name "code"
:id "code"
:class "hot-filter"
:value (:code (:query-params request))
:placeholder "11101"
:size :small}))]])
(def default-read '[:db/id (def default-read '[:db/id
* *
@@ -134,6 +118,7 @@
(defn total-debits [items] (defn total-debits [items]
(->> items (->> items
(filter #(= :ledger-side/debit (:ledger-mapped/ledger-side %))) (filter #(= :ledger-side/debit (:ledger-mapped/ledger-side %)))
@@ -149,7 +134,7 @@
(def grid-page (def grid-page
(helper/build {:id "entity-table" (helper/build {:id "entity-table"
:id-fn :db/id :id-fn :db/id
:nav com/admin-aside-nav :nav com/main-aside-nav
:fetch-page fetch-page :fetch-page fetch-page
:page-specific-nav filters :page-specific-nav filters
:query-schema query-schema :query-schema query-schema
@@ -159,11 +144,11 @@
:db/id (:db/id entity))} :db/id (:db/id entity))}
svg/pencil)]) svg/pencil)])
:oob-render :oob-render
(fn [_request] (fn [request]
[]) [(assoc-in (date-range-field* request) [1 :hx-swap-oob] true)])
:breadcrumbs [[:a {:href (bidi/path-for ssr-routes/only-routes :breadcrumbs [[:a {:href (bidi/path-for ssr-routes/only-routes
:admin)} :company)}
"Admin"] "POS"]
[:a {:href (bidi/path-for ssr-routes/only-routes [:a {:href (bidi/path-for ssr-routes/only-routes
::route/page)} ::route/page)}
@@ -219,10 +204,6 @@
:primary :primary
:red)} "Total: " (format "$%,.2f" total-credits))]]))}]})) :red)} "Total: " (format "$%,.2f" total-credits))]]))}]}))
;; Architecture: Sales summary maintains granular detail (line items, fee types)
;; and is aggregated into ledger entries by account/location. Manual adjustments
;; are preserved during automatic recalculation.
(def row* (partial helper/row* grid-page)) (def row* (partial helper/row* grid-page))
(def table* (partial helper/table* grid-page)) (def table* (partial helper/table* grid-page))
@@ -526,8 +507,4 @@
(wrap-apply-sort grid-page) (wrap-apply-sort grid-page)
(wrap-merge-prior-hx) (wrap-merge-prior-hx)
(wrap-schema-enforce :query-schema query-schema) (wrap-schema-enforce :query-schema query-schema)
(wrap-schema-enforce :hx-schema query-schema) (wrap-schema-enforce :hx-schema query-schema)))))
(wrap-admin)
(wrap-client-redirect-unauthenticated)))))

View File

@@ -1,9 +1,7 @@
(ns auto-ap.routes.admin.sales-summaries) (ns auto-ap.routes.pos.sales-summaries)
(def routes {"" {:get ::page (def routes {"" {:get ::page
:put ::edit-wizard-submit} :put ::edit-wizard-submit}
"/table" ::table "/table" ::table
["/" [#"\d+" :db/id]] {:get ::edit-wizard } ["/" [#"\d+" :db/id]] {:get ::edit-wizard }
"/edit/navigate" ::edit-wizard-navigate "/edit/navigate" ::edit-wizard-navigate
"/edit/sales-summary-item" ::new-summary-item}) "/edit/sales-summary-item" ::new-summary-item})

View File

@@ -12,7 +12,7 @@
[auto-ap.routes.transactions :as t-routes] [auto-ap.routes.transactions :as t-routes]
[auto-ap.routes.admin.clients :as ac-routes] [auto-ap.routes.admin.clients :as ac-routes]
[auto-ap.routes.admin.sales-summaries :as ss-routes] [auto-ap.routes.pos.sales-summaries :as ss-routes]
[auto-ap.routes.admin.transaction-rules :as tr-routes])) [auto-ap.routes.admin.transaction-rules :as tr-routes]))
(def routes {"impersonate" :impersonate (def routes {"impersonate" :impersonate