cleans up grids

This commit is contained in:
2024-11-18 19:41:54 -08:00
parent ad06418a69
commit a8c7c7eb8e
31 changed files with 842 additions and 714 deletions

View File

@@ -2,32 +2,31 @@
(:require
[auto-ap.datomic :refer [apply-pagination-raw conn]]
[auto-ap.graphql.utils :refer [assert-can-see-client]]
[auto-ap.query-params :refer [wrap-copy-qp-pqp]]
[auto-ap.routes.utils
:refer [wrap-client-redirect-unauthenticated wrap-secure]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.form-cursor :as fc]
[auto-ap.ssr.grid-page-helper :as helper]
[auto-ap.ssr.grid-page-helper :as helper :refer [wrap-apply-sort]]
[auto-ap.ssr.nested-form-params :refer [wrap-nested-form-params]]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils
:refer [apply-middleware-to-all-handlers
entity-id
html-response
main-transformer
modal-response
ref->enum-schema
ref->select-options
strip
wrap-entity
wrap-form-4xx-2
wrap-schema-enforce]]
:refer [apply-middleware-to-all-handlers default-grid-fields-schema
entity-id html-response main-transformer modal-response
ref->enum-schema ref->select-options strip wrap-entity
wrap-form-4xx-2 wrap-merge-prior-hx wrap-schema-enforce]]
[bidi.bidi :as bidi]
[clojure.string :as str]
[datomic.api :as dc]
[hiccup.util :refer [url]]
[malli.core :as mc]))
(def query-schema (mc/schema
[:maybe
(into [:map {} ]
default-grid-fields-schema)]))
(def vendor-read '[:db/id
:vendor/name
{:vendor/legal-entity-1099-type [:db/ident]}
@@ -59,7 +58,7 @@
client-id
vendor-id)))
(defn fetch-page [{:keys [trimmed-clients parsed-query-params] :as request user :identity}]
(defn fetch-page [{:keys [trimmed-clients query-params] :as request user :identity}]
(let [results (dc/q '[:find
(pull ?c [:client/code :db/id])
(pull ?v vendor-read)
@@ -83,8 +82,8 @@
(sort-by (fn [[client _ amount]]
[(:client/code client ) amount]))
(into []))
paginated (apply-pagination-raw {:start (:start parsed-query-params)
:per-page (:per-page parsed-query-params)} all)]
paginated (apply-pagination-raw {:start (:start query-params)
:per-page (:per-page query-params)} all)]
[(:entries paginated) (:count paginated)]))
(def grid-page
@@ -102,6 +101,7 @@
"1099 Vendor Info"]]
:title "1099 Vendors"
:entity-name "Vendors"
:query-schema query-schema
:route :company-1099-vendor-table
:row-buttons (fn [request e]
[(com/icon-button {:hx-get (url (bidi/path-for ssr-routes/only-routes
@@ -358,27 +358,31 @@
(def page (helper/page-route grid-page))
(def key->handler
(apply-middleware-to-all-handlers
(->>
{
:company-1099 page
:company-1099-vendor-table vendor-table
:company-1099-vendor-dialog (-> vendor-dialog
(wrap-entity [:route-params :vendor-id] default-vendor-read)
(wrap-schema-enforce :route-schema [:map [:vendor-id entity-id]]
:query-schema [:map [:client-id entity-id]]))
:company-1099-vendor-save (-> vendor-save
(wrap-entity [:form-params :db/id] default-vendor-read)
(wrap-schema-enforce :form-schema form-schema
:route-schema [:map [:vendor-id entity-id]]
:query-schema [:map [:client-id entity-id]])
(wrap-nested-form-params)
(wrap-form-4xx-2 (-> vendor-dialog
(wrap-entity [:form-params :db/id] default-vendor-read)
(wrap-entity [:route-params :vendor-id] default-vendor-read)
(wrap-schema-enforce :route-schema [:map [:vendor-id entity-id]]
:query-schema [:map [:client-id entity-id]]))))})
(fn [h]
(-> h
(wrap-secure)
(wrap-client-redirect-unauthenticated)))))
(apply-middleware-to-all-handlers
(->>
{:company-1099 page
:company-1099-vendor-table vendor-table
:company-1099-vendor-dialog (-> vendor-dialog
(wrap-entity [:route-params :vendor-id] default-vendor-read)
(wrap-schema-enforce :route-schema [:map [:vendor-id entity-id]]
:query-schema [:map [:client-id entity-id]]))
:company-1099-vendor-save (-> vendor-save
(wrap-entity [:form-params :db/id] default-vendor-read)
(wrap-schema-enforce :form-schema form-schema
:route-schema [:map [:vendor-id entity-id]]
:query-schema [:map [:client-id entity-id]])
(wrap-nested-form-params)
(wrap-form-4xx-2 (-> vendor-dialog
(wrap-entity [:form-params :db/id] default-vendor-read)
(wrap-entity [:route-params :vendor-id] default-vendor-read)
(wrap-schema-enforce :route-schema [:map [:vendor-id entity-id]]
:query-schema [:map [:client-id entity-id]]))))})
(fn [h]
(-> h
(wrap-copy-qp-pqp)
(wrap-apply-sort grid-page)
(wrap-merge-prior-hx)
(wrap-schema-enforce :query-schema query-schema)
(wrap-schema-enforce :hx-schema query-schema)
(wrap-secure)
(wrap-client-redirect-unauthenticated)))))

View File

@@ -1,23 +1,33 @@
(ns auto-ap.ssr.company.plaid
(:require [auto-ap.datomic
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query
pull-attr pull-many-by-id query2]]
[auto-ap.graphql.utils :refer [assert-can-see-client]]
[auto-ap.logging :as alog]
[auto-ap.plaid.core :as p]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.grid-page-helper :as helper]
[auto-ap.ssr.hx :as hx]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils :refer [html-response]]
[auto-ap.time :as atime]
[bidi.bidi :as bidi]
[clj-time.coerce :as coerce]
[clj-time.core :as time]
[clojure.string :as str]
[datomic.api :as dc]
[hiccup2.core :as hiccup]))
[auto-ap.graphql.utils :refer [assert-can-see-client]]
[auto-ap.logging :as alog]
[auto-ap.plaid.core :as p]
[auto-ap.query-params :refer [wrap-copy-qp-pqp]]
[auto-ap.routes.utils :refer [wrap-client-redirect-unauthenticated
wrap-secure]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.grid-page-helper :as helper :refer [wrap-apply-sort]]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils :refer [apply-middleware-to-all-handlers
default-grid-fields-schema html-response
wrap-merge-prior-hx wrap-schema-enforce]]
[auto-ap.time :as atime]
[bidi.bidi :as bidi]
[clj-time.coerce :as coerce]
[clj-time.core :as time]
[clojure.string :as str]
[datomic.api :as dc]
[hiccup2.core :as hiccup]
[malli.core :as mc]))
(def query-schema (mc/schema
[:maybe
(into [:map {} ]
default-grid-fields-schema)]))
(def default-read '[:db/id
:plaid-item/external-id
@@ -37,21 +47,21 @@
:plaid-account/name]}])
(defn fetch-ids [db request]
(let [query-params (:parsed-query-params request)
(let [query-params (:query-params request)
query (cond-> {:query {:find []
:in ['$ '[?xx ...]]
:where ['[?e :plaid-item/client ?xx]]}
:args [db (:trimmed-clients request)]}
(:sort query-params) (add-sorter-fields {"external-id" ['[?e :plaid-item/external-id ?sort-external-id]]
"status" ['[?e :plaid-item/status ?sort-status]]}
query-params)
"plaid-bank-status" ['[?e :plaid-item/status ?sort-plaid-bank-status]]
"status" ['[?e :plaid-item/status ?sort-status]]}
query-params)
true
(merge-query {:query {:find ['?e]
:where ['[?e :plaid-item/external-id]]}}))]
(clojure.pprint/pprint query-params)
(cond->> (query2 query)
true (apply-sort-3 query-params)
true (apply-pagination query-params))))
@@ -145,6 +155,7 @@
"Plaid"]]
:title "Plaid Accounts"
:entity-name "Plaid accounts"
:query-schema query-schema
:route :company-plaid-table
:action-buttons (fn [request]
(when-let [client-code (:client/code (:client request))]
@@ -172,7 +183,6 @@
:render :plaid-item/external-id}
{:key "integreat-plaid-status"
:name "Integreat ↔ Plaid status"
:sort-key "integreat-plaid-status"
:render (fn [e]
(let [bad-integration (->> (:plaid-item/accounts e)
@@ -229,3 +239,21 @@
(def page (helper/page-route grid-page))
(def table (helper/table-route grid-page))
(def key->handler
(apply-middleware-to-all-handlers
{
:company-plaid page
:company-plaid-table table
:company-plaid-link link
:company-plaid-relink relink
}
(fn [h]
(-> h
(wrap-copy-qp-pqp)
(wrap-apply-sort grid-page)
(wrap-merge-prior-hx)
(wrap-schema-enforce :query-schema query-schema)
(wrap-schema-enforce :hx-schema query-schema)
(wrap-client-redirect-unauthenticated)
(wrap-secure)))))

View File

@@ -1,30 +1,45 @@
(ns auto-ap.ssr.company.reports
(:require [amazonica.aws.s3 :as s3]
[auto-ap.datomic
(:require
[amazonica.aws.s3 :as s3]
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query
pull-many query2]]
[auto-ap.graphql.utils :refer [assert-can-see-client is-admin?]]
[auto-ap.routes.utils :refer [wrap-client-redirect-unauthenticated
wrap-secure]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.company.reports.expense :as company-expense-report]
[auto-ap.ssr.company.reports.reconciliation :as company-reconciliation-report]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.grid-page-helper :as helper]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils :refer [apply-middleware-to-all-handlers
html-response]]
[auto-ap.time :as atime]
[bidi.bidi :as bidi]
[clojure.set :as set]
[config.core :refer [env]]
[datomic.api :as dc]))
[auto-ap.graphql.utils :refer [assert-can-see-client is-admin?]]
[auto-ap.query-params :refer [wrap-copy-qp-pqp]]
[auto-ap.routes.utils :refer [wrap-client-redirect-unauthenticated
wrap-secure]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.company.reports.expense :as company-expense-report]
[auto-ap.ssr.company.reports.reconciliation :as company-reconciliation-report]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.grid-page-helper :as helper :refer [wrap-apply-sort]]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils :refer [apply-middleware-to-all-handlers clj-date-schema
default-grid-fields-schema html-response
wrap-merge-prior-hx wrap-schema-enforce]]
[auto-ap.time :as atime]
[bidi.bidi :as bidi]
[clojure.set :as set]
[config.core :refer [env]]
[datomic.api :as dc]
[malli.core :as mc]))
(def query-schema (mc/schema
[:maybe
(into [:map {:date-range [:date-range :start-date :end-date]}
[:start-date {:optional true}
[:maybe clj-date-schema]]
[:end-date {:optional true}
[:maybe clj-date-schema]]
[:client {:optional true :default nil} [:maybe [:entity-map {:pull [:db/id :client/name]}]]]
]
default-grid-fields-schema)]))
(def default-read '[:db/id :report/client [:report/created :xform clj-time.coerce/from-date] :report/url :report/name :report/creator])
(defn fetch-ids [db request]
(let [query-params (:parsed-query-params request)
(let [query-params (:query-params request)
query (cond-> {:query {:find []
:in '[$ [?c ...]]
:where '[[?e :report/client ?c]]}
@@ -80,6 +95,7 @@
"Reports"]]
:title "Reports"
:entity-name "Reports"
:query-schema query-schema
:route :company-reports-table
:row-buttons (fn [request e]
[(com/a-icon-button {:href (:report/url e)}
@@ -143,5 +159,10 @@
(into company-reconciliation-report/key->handler))
(fn [h]
(-> h
(wrap-copy-qp-pqp)
(wrap-apply-sort grid-page)
(wrap-merge-prior-hx)
(wrap-schema-enforce :query-schema query-schema)
(wrap-schema-enforce :hx-schema query-schema)
(wrap-secure)
(wrap-client-redirect-unauthenticated)))))

View File

@@ -1,19 +1,28 @@
(ns auto-ap.ssr.company.yodlee
(:require [auto-ap.datomic
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query
pull-attr pull-many query2]]
[auto-ap.graphql.utils :refer [assert-can-see-client is-admin?]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.grid-page-helper :as helper]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils :refer [html-response modal-response]]
[auto-ap.time :as atime]
[auto-ap.yodlee.core2 :as yodlee]
[bidi.bidi :as bidi]
[config.core :refer [env]]
[datomic.api :as dc]
[hiccup2.core :as hiccup]))
[auto-ap.graphql.utils :refer [assert-can-see-client is-admin?]]
[auto-ap.permissions :refer [wrap-must]]
[auto-ap.query-params :refer [wrap-copy-qp-pqp]]
[auto-ap.routes.utils :refer [wrap-client-redirect-unauthenticated
wrap-secure]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.grid-page-helper :as helper :refer [wrap-apply-sort]]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils :refer [apply-middleware-to-all-handlers
default-grid-fields-schema entity-id
html-response modal-response wrap-merge-prior-hx
wrap-schema-enforce]]
[auto-ap.time :as atime]
[auto-ap.yodlee.core2 :as yodlee]
[bidi.bidi :as bidi]
[config.core :refer [env]]
[datomic.api :as dc]
[hiccup2.core :as hiccup]
[malli.core :as mc]))
(def default-read '[:db/id
[:yodlee-provider-account/last-updated :xform clj-time.coerce/from-date]
@@ -23,11 +32,15 @@
{:yodlee-provider-account/accounts [:yodlee-account/name :yodlee-account/number]
:yodlee-provider-account/client [:client/code]}])
(def query-schema (mc/schema
[:maybe
(into [:map {}
[:client-id {:optional true} [:maybe entity-id]] ]
default-grid-fields-schema)]))
(defn fetch-ids [db request]
(let [query-params (:parsed-query-params request)]
(->> (cond-> {:query {:find []
(let [query-params (:query-params request)
query (cond-> {:query {:find []
:in ['$ '[?xx ...]]
:where ['[?e :yodlee-provider-account/id]
'[?e :yodlee-provider-account/client ?xx]]}
@@ -35,11 +48,15 @@
(:sort query-params) (add-sorter-fields {"status" ['[?e :yodlee-provider-account/status ?sort-status]]
"last-updated" ['[?e :yodlee-provider-account/last-updated ?sort-last-updated]]}
"client" ['[?e :yodlee-provider-account/client ?c]
'[?c :client/code ?sort-client]]
"provider-account" ['[?e :yodlee-provider-account/id ?sort-provider-account]]
"last-updated" ['[?e :yodlee-provider-account/last-updated ?sort-last-updated]]}
query-params)
true
(merge-query {:query {:find ['?e ]
:where ['[?e :yodlee-provider-account/id]]}}))
:where ['[?e :yodlee-provider-account/id]]}}))]
(->> query
(query2)
(apply-sort-3 query-params)
@@ -133,6 +150,7 @@ fastlink.open({fastLinkURL: '%s',
"Yodlee"]]
:title "Yodlee Accounts"
:entity-name "Yodlee accounts"
:query-schema query-schema
:route :company-yodlee-table
:action-buttons (fn [request]
[[:div.flex.flex-col.flex-shrink
@@ -211,3 +229,21 @@ fastlink.open({fastLinkURL: '%s',
identity
provider-account
{:flash? true}))))
(def key->handler
(apply-middleware-to-all-handlers
{
:company-yodlee page
:company-yodlee-table table
:company-yodlee-fastlink-dialog fastlink-dialog
}
(fn [h]
(-> h
(wrap-copy-qp-pqp)
(wrap-apply-sort grid-page)
(wrap-merge-prior-hx)
(wrap-schema-enforce :query-schema query-schema)
(wrap-schema-enforce :hx-schema query-schema)
(wrap-client-redirect-unauthenticated)
(wrap-secure)))))