Makes browsing work rigth

This commit is contained in:
Bryce
2024-03-20 15:47:00 -07:00
parent 8af5713ba2
commit 0cdf908acd
7 changed files with 92 additions and 46 deletions

View File

@@ -104,14 +104,21 @@
match->handler)) match->handler))
(defn wrap-guess-route [handler] (defn wrap-guess-route [handler]
(fn [{:keys [uri request-method] :as request}] (fn [{:keys [uri request-method headers] :as request}]
(let [matched-route (:handler (let [matched-route (:handler
(bidi.bidi/match-route all-routes (bidi.bidi/match-route all-routes
uri uri
:request-method request-method))] :request-method request-method))
matched-hx-current-url-route (some->> (get headers "hx-current-url")
url/url
:path
(bidi/match-route ssr-routes/only-routes)
:handler)]
(handler (assoc request (handler (assoc request
:matched-route :matched-route
matched-route))))) matched-route
:matched-current-page-route
matched-hx-current-url-route)))))
(defn test-match-route [method uri] (defn test-match-route [method uri]
(bidi.bidi/match-route all-routes (bidi.bidi/match-route all-routes

View File

@@ -78,12 +78,12 @@
[:ul {:class "space-y-1" [:ul {:class "space-y-1"
:x-data (hx/json {:selected :x-data (hx/json {:selected
(cond (cond
(#{::invoice-route/page} (:matched-route request)) (#{::invoice-route/all-page ::invoice-route/unpaid-page ::invoice-route/voided-page ::invoice-route/paid-page} (: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} (:matched-route request))
"sales" "sales"
(#{::payment-routes/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"
:else :else
nil)})} nil)})}
@@ -99,25 +99,25 @@
(sub-menu- (sub-menu-
{:selector "invoices"} {:selector "invoices"}
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes (menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::invoice-route/page) ::invoice-route/all-page)
{:date-range "month"}) {:date-range "month"})
:active? (= ::invoice-route/page (:matched-route request))} :active? (= ::invoice-route/all-page (:matched-route request))}
"All") "All")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes (menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::invoice-route/page) ::invoice-route/paid-page)
{:date-range "month"}) {:date-range "month"})
:active? (= ::invoice-route/page (:matched-route request))} :active? (= ::invoice-route/paid-page (:matched-route request))}
"Paid") "Paid")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes (menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::invoice-route/unpaid-page) ::invoice-route/unpaid-page)
{:date-range "month"}) {:date-range "month"})
:active? (= ::invoice-route/page (:matched-route request))} :active? (= ::invoice-route/unpaid-page (:matched-route request))}
"Unpaid") "Unpaid")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes (menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::invoice-route/voided-page) ::invoice-route/voided-page)
{:date-range "month"}) {:date-range "month"})
:active? (= ::invoice-route/page (:matched-route request))} :active? (= ::invoice-route/voided-page (:matched-route request))}
"Voided")) "Voided"))
(menu-button- {:icon svg/receipt-register-1 (menu-button- {:icon svg/receipt-register-1
@@ -155,25 +155,22 @@
"Payments") "Payments")
(sub-menu- {:selector "payments"} (sub-menu- {:selector "payments"}
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes (menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::payment-routes/page) ::payment-routes/all-page)
{:date-range "month"}) {:date-range "month"})
:active? (= ::payment-routes/page (:matched-route request))} "All") :active? (= ::payment-routes/all-page (:matched-route request))} "All")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes (menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::payment-routes/page) ::payment-routes/pending-page)
{:status "pending" { :date-range "month"})
:date-range "month"}) :active? (= ::payment-routes/pending-page (:matched-route request))} "Pending")
:active? (= ::payment-routes/page (:matched-route request))} "Pending")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes (menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::payment-routes/page) ::payment-routes/cleared-page)
{:status "cleared" { :date-range "month"})
:date-range "month"}) :active? (= ::payment-routes/cleared-page (:matched-route request))} "Cleared")
:active? (= ::payment-routes/page (:matched-route request))} "Cleared")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes (menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::payment-routes/page) ::payment-routes/voided-page)
{:status "voided" { :date-range "month"})
:date-range "month"}) :active? (= ::payment-routes/voided-page (:matched-route request))} "Voided"))
:active? (= ::payment-routes/page (:matched-route request))} "Voided"))
[:li {:x-data (hx/json {:open false})} [:li {:x-data (hx/json {:open false})}
(menu-button- {"@click.prevent" "if (selected == 'transactions') {selected = null } else { selected = 'transactions'} " (menu-button- {"@click.prevent" "if (selected == 'transactions') {selected = null } else { selected = 'transactions'} "

View File

@@ -35,8 +35,8 @@
:refer [apply-middleware-to-all-handlers clj-date-schema :refer [apply-middleware-to-all-handlers clj-date-schema
dissoc-nil-transformer entity-id html-response dissoc-nil-transformer entity-id html-response
main-transformer modal-response money ref->enum-schema main-transformer modal-response money ref->enum-schema
round-money strip wrap-entity wrap-merge-prior-hx round-money strip wrap-entity wrap-implied-route-param
wrap-schema-enforce]] wrap-merge-prior-hx wrap-schema-enforce]]
[auto-ap.time :as atime] [auto-ap.time :as atime]
[auto-ap.utils :refer [by dollars=]] [auto-ap.utils :refer [by dollars=]]
[bidi.bidi :as bidi] [bidi.bidi :as bidi]
@@ -132,13 +132,13 @@
{:account-client-override/client [:db/id]}]}]}] {:account-client-override/client [:db/id]}]}]}]
[:transaction/_invoices :as :invoice/transaction] [:db/id] [:transaction/_invoices :as :invoice/transaction] [:db/id]
[:payment/_invoices :as :invoice/payments] [:db/id :payment/date :payment/amount [:payment/_invoices :as :invoice/payments] [:db/id :payment/date :payment/amount
{[:transaction/_payment :as :payment/transaction] [:db/id] {[:transaction/_payment :as :payment/transaction] [:db/id]
[ :payment/status :xform iol-ion.query/ident] [:db/ident] }] [:payment/status :xform iol-ion.query/ident] [:db/ident]}]
[:invoice/status :xform iol-ion.query/ident] [:db/ident] [:invoice/status :xform iol-ion.query/ident] [:db/ident]
:invoice/vendor [:vendor/name :db/id]}]) :invoice/vendor [:vendor/name :db/id]}])
(defn fetch-ids [db {:keys [query-params] :as request}] (defn fetch-ids [db {:keys [query-params route-params] :as request}]
(let [valid-clients (extract-client-ids (:clients request) (let [valid-clients (extract-client-ids (:clients request)
(:client-id request) (:client-id request)
(when (:client-code request) (when (:client-code request)
@@ -187,10 +187,10 @@
(merge-query {:query {:in ['?import-status] (merge-query {:query {:in ['?import-status]
:where ['[?e :invoice/import-status ?import-status]]} :where ['[?e :invoice/import-status ?import-status]]}
:args [(:import-status query-params)]}) :args [(:import-status query-params)]})
(:status query-params) (:status route-params)
(merge-query {:query {:in ['?status] (merge-query {:query {:in ['?status]
:where ['[?e :invoice/status ?status]]} :where ['[?e :invoice/status ?status]]}
:args [(:status query-params)]}) :args [(:status route-params)]})
(:vendor query-params) (:vendor query-params)
(merge-query {:query {:in ['?vendor-id] (merge-query {:query {:in ['?vendor-id]
:where ['[?e :invoice/vendor ?vendor-id]]} :where ['[?e :invoice/vendor ?vendor-id]]}
@@ -476,7 +476,7 @@
(concat (->> i (concat (->> i
:invoice/payments :invoice/payments
(filter (fn [p] (filter (fn [p]
(not= :payment-status/voided (not= :payment-status/voided
(:payment/status p)))) (:payment/status p))))
(mapcat (fn [p] (mapcat (fn [p]
(cond-> [{:link (hu/url (bidi/path-for ssr-routes/only-routes (cond-> [{:link (hu/url (bidi/path-for ssr-routes/only-routes
@@ -1028,9 +1028,26 @@
(->PayWizard nil nil nil)) (->PayWizard nil nil nil))
(defn wrap-status-from-source [handler]
(fn [{:keys [matched-current-page-route] :as request}]
(let [ request (cond-> request
(= ::route/paid-page matched-current-page-route) (assoc-in [:route-params :status] :invoice-status/paid)
(= ::route/unpaid-page matched-current-page-route) (assoc-in [:route-params :status] :invoice-status/unpaid)
(= ::route/voided-page matched-current-page-route) (assoc-in [:route-params :status] :invoice-status/voided)
(= ::route/all-page matched-current-page-route) (assoc-in [:route-params :status] nil))]
(handler request))))
(def key->handler (def key->handler
(apply-middleware-to-all-handlers (apply-middleware-to-all-handlers
{::route/page (helper/page-route grid-page) {::route/all-page (-> (helper/page-route grid-page)
(wrap-implied-route-param :status nil))
::route/paid-page (-> (helper/page-route grid-page)
(wrap-implied-route-param :status :invoice-status/paid))
::route/unpaid-page (-> (helper/page-route grid-page)
(wrap-implied-route-param :status :invoice-status/unpaid))
::route/voided-page (-> (helper/page-route grid-page)
(wrap-implied-route-param :status :invoice-status/voided))
::route/pay-button (-> pay-button ::route/pay-button (-> pay-button
(wrap-schema-enforce :query-schema query-schema)) (wrap-schema-enforce :query-schema query-schema))
::route/delete (-> delete ::route/delete (-> delete
@@ -1096,6 +1113,7 @@
::route/table (helper/table-route grid-page)} ::route/table (helper/table-route grid-page)}
(fn [h] (fn [h]
(-> h (-> h
(wrap-status-from-source)
(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)

View File

@@ -9,8 +9,8 @@
extract-client-ids notify-if-locked]] extract-client-ids notify-if-locked]]
[auto-ap.logging :as alog] [auto-ap.logging :as alog]
[auto-ap.permissions :refer [can?]] [auto-ap.permissions :refer [can?]]
[auto-ap.routes.payments :as route]
[auto-ap.routes.invoice :as invoice-route] [auto-ap.routes.invoice :as invoice-route]
[auto-ap.routes.payments :as route]
[auto-ap.routes.utils [auto-ap.routes.utils
:refer [wrap-admin wrap-client-redirect-unauthenticated]] :refer [wrap-admin wrap-client-redirect-unauthenticated]]
[auto-ap.ssr-routes :as ssr-routes] [auto-ap.ssr-routes :as ssr-routes]
@@ -25,7 +25,8 @@
:refer [apply-middleware-to-all-handlers clj-date-schema :refer [apply-middleware-to-all-handlers clj-date-schema
dissoc-nil-transformer entity-id html-response dissoc-nil-transformer entity-id html-response
main-transformer modal-response ref->enum-schema strip main-transformer modal-response ref->enum-schema strip
wrap-entity wrap-merge-prior-hx wrap-schema-enforce]] wrap-entity wrap-implied-route-param wrap-merge-prior-hx
wrap-schema-enforce]]
[auto-ap.time :as atime] [auto-ap.time :as atime]
[bidi.bidi :as bidi] [bidi.bidi :as bidi]
[clj-time.coerce :as coerce] [clj-time.coerce :as coerce]
@@ -128,9 +129,8 @@
{:payment/type [:db/ident]} {:payment/type [:db/ident]}
{:transaction/_payment [:db/id :transaction/date]}]) {:transaction/_payment [:db/id :transaction/date]}])
(defn fetch-ids [db {:keys [query-params] :as request}] (defn fetch-ids [db {:keys [query-params route-params] :as request}]
(let [_ (alog/peek :qp (pr-str query-params)) (let [ valid-clients (extract-client-ids (:clients request)
valid-clients (extract-client-ids (:clients request)
(:client request) (:client request)
(:client-id query-params) (:client-id query-params)
(when (:client-code query-params) (when (:client-code query-params)
@@ -213,10 +213,10 @@
:args [(:amount query-params)]}) :args [(:amount query-params)]})
(:status query-params) (:status route-params)
(merge-query {:query {:in ['?status] (merge-query {:query {:in ['?status]
:where ['[?e :payment/status ?status]]} :where ['[?e :payment/status ?status]]}
:args [(:status query-params)]}) :args [(:status route-params)]})
(:payment-type query-params) (:payment-type query-params)
(merge-query {:query {:in '[?payment-type] (merge-query {:query {:in '[?payment-type]
@@ -517,11 +517,26 @@
updated-count updated-count
(count ids))})}))) (count ids))})})))
(defn wrap-status-from-source [handler]
(fn [{:keys [matched-current-page-route] :as request}]
(let [ request (cond-> request
(= ::route/cleared-page matched-current-page-route) (assoc-in [:route-params :status] :payment-status/cleared)
(= ::route/pending-page matched-current-page-route) (assoc-in [:route-params :status] :payment-status/pending)
(= ::route/voided-page matched-current-page-route) (assoc-in [:route-params :status] :payment-status/voided)
(= ::route/all-page matched-current-page-route) (assoc-in [:route-params :status] nil))]
(handler request))))
(def key->handler (def key->handler
(apply-middleware-to-all-handlers (apply-middleware-to-all-handlers
{::route/page (helper/page-route grid-page) {::route/cleared-page (-> (helper/page-route grid-page)
(wrap-implied-route-param :status :payment-status/cleared))
::route/pending-page (-> (helper/page-route grid-page)
(wrap-implied-route-param :status :payment-status/pending))
::route/voided-page (-> (helper/page-route grid-page)
(wrap-implied-route-param :status :payment-status/voided))
::route/all-page (-> (helper/page-route grid-page)
(wrap-implied-route-param :status nil))
::route/delete (-> delete ::route/delete (-> delete
(wrap-entity [:route-params :db/id] default-read) (wrap-entity [:route-params :db/id] default-read)
(wrap-schema-enforce :route-params [:map [:db/id entity-id]])) (wrap-schema-enforce :route-params [:map [:db/id entity-id]]))
@@ -537,6 +552,7 @@
(-> h (-> h
(wrap-apply-sort grid-page) (wrap-apply-sort grid-page)
(wrap-merge-prior-hx) (wrap-merge-prior-hx)
(wrap-status-from-source)
(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-client-redirect-unauthenticated))))) (wrap-client-redirect-unauthenticated)))))

View File

@@ -575,5 +575,7 @@
(with-precision 2 (with-precision 2
(double (.setScale (bigdec d) 2 java.math.RoundingMode/HALF_UP)))) (double (.setScale (bigdec d) 2 java.math.RoundingMode/HALF_UP))))
(defn wrap-implied-route-param [handler & {:as route-params}]
(fn [request]
(handler (update-in request [:route-params] merge route-params))))

View File

@@ -1,5 +1,8 @@
(ns auto-ap.routes.invoice) (ns auto-ap.routes.invoice)
(def routes {"" {:get ::page} (def routes {"" {:get ::all-page
"/unpaid" ::unpaid-page
"/paid" ::paid-page
"/voided" ::voided-page }
"/pay-button" ::pay-button "/pay-button" ::pay-button
"/pay" {:get ::pay-wizard "/pay" {:get ::pay-wizard
"/navigate" ::pay-wizard-navigate "/navigate" ::pay-wizard-navigate

View File

@@ -1,5 +1,8 @@
(ns auto-ap.routes.payments) (ns auto-ap.routes.payments)
(def routes {"" {:get ::page} (def routes {"" {:get ::all-page
"/pending" ::pending-page
"/voided" ::voided-page
"/cleared" ::cleared-page}
"/bulk-delete" {:get ::bulk-delete "/bulk-delete" {:get ::bulk-delete
:delete ::bulk-delete-confirm} :delete ::bulk-delete-confirm}
["/" [#"\d+" :db/id]] {:delete ::delete} ["/" [#"\d+" :db/id]] {:delete ::delete}