From 1320667e6928872b6e2a3e5ab645d933f72dac1e Mon Sep 17 00:00:00 2001 From: Bryce Date: Thu, 28 Sep 2023 22:42:21 -0700 Subject: [PATCH] Everything should be migrated over great --- src/clj/auto_ap/datomic/yodlee2.clj | 69 --------------- src/clj/auto_ap/ssr/company/company_1099.clj | 91 +++++--------------- src/clj/auto_ap/ssr/company/reports.clj | 90 ++++++++++++++----- src/clj/auto_ap/ssr/company/yodlee.clj | 60 ++++++++++--- 4 files changed, 137 insertions(+), 173 deletions(-) delete mode 100644 src/clj/auto_ap/datomic/yodlee2.clj diff --git a/src/clj/auto_ap/datomic/yodlee2.clj b/src/clj/auto_ap/datomic/yodlee2.clj deleted file mode 100644 index 4692d37e..00000000 --- a/src/clj/auto_ap/datomic/yodlee2.clj +++ /dev/null @@ -1,69 +0,0 @@ -(ns auto-ap.datomic.yodlee2 - (:require - [auto-ap.datomic - :refer [add-sorter-fields - apply-pagination - apply-sort-3 - conn - merge-query - pull-many - query2]] - [auto-ap.graphql.utils :refer [extract-client-ids]] - [clj-time.coerce :as c] - [datomic.api :as dc])) - -(def default-read '[* {:yodlee-provider-account/client [:client/code]}]) - -(defn <-datomic [x] - (-> x (update :yodlee-provider-account/last-updated c/from-date))) - -(defn raw-graphql-ids [db args] - (let [valid-clients (extract-client-ids (:clients args) - (:client-id args) - (when (:client-code args) - [:client/code (:client-code args)]))] - (->> (cond-> {:query {:find [] - :in ['$ '[?xx ...]] - :where ['[?e :yodlee-provider-account/id] - '[?e :yodlee-provider-account/client ?xx]]} - :args [db valid-clients]} - - - (:client-id args) - (merge-query {:query {:in ['?client-id] - :where ['[?e :yodlee-provider-account/client ?client-id]]} - :args [ (:client-id args)]}) - - (:client-code args) - (merge-query {:query {:in ['?client-code] - :where ['[?e :yodlee-provider-account/client ?client-id] - '[?client-id :client/code ?client-code]]} - :args [ (:client-code args)]}) - - (:sort args) (add-sorter-fields {"status" ['[?e :yodlee-provider-account/status ?sort-status]] - "last-updated" ['[?e :yodlee-provider-account/last-updated ?sort-last-updated]]} - args) - true - (merge-query {:query {:find ['?e ] - :where ['[?e :yodlee-provider-account/id]]}}) ) - - (query2) - (apply-sort-3 args) - (apply-pagination args)))) - - -(defn graphql-results [ids db _] - (let [results (->> (pull-many db default-read ids) - (group-by :db/id))] - (->> ids - (map results) - (map first) - (mapv <-datomic)))) - - -(defn get-graphql [args] - (let [db (dc/db conn) - {ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)] - [(->> (graphql-results ids-to-retrieve db args)) - matching-count])) - diff --git a/src/clj/auto_ap/ssr/company/company_1099.clj b/src/clj/auto_ap/ssr/company/company_1099.clj index b2095d9c..f994d169 100644 --- a/src/clj/auto_ap/ssr/company/company_1099.clj +++ b/src/clj/auto_ap/ssr/company/company_1099.clj @@ -44,75 +44,32 @@ client-id vendor-id))) -(defn get-1099-companies [user {:keys [clients] :as args}] - (let [valid-clients (extract-client-ids (:clients args) - (:client-id args) - (when (:client-code args) - [:client/code (:client-code args)])) - results (cond - clients - (dc/q '[:find - (pull ?c [:client/code :db/id]) - (pull ?v vendor-read) - (sum ?a) - :with ?d - :in $ [?c ...] vendor-read - :where - [?p :payment/client ?c] - [?p :payment/date ?d ] - [(>= ?d #inst "2022-01-01T08:00")] - [(< ?d #inst "2023-01-01T08:00")] - [?p :payment/type :payment-type/check] - [?p :payment/amount ?a] - [?p :payment/vendor ?v]] - (dc/db conn) - valid-clients - vendor-read) - - (is-admin? user) - (dc/q '[:find - (pull ?c [:client/code :db/id]) - (pull ?v vendor-read) - (sum ?a) - :with ?d - :in $ vendor-read - :where - [?p :payment/date ?d ] - [(>= ?d #inst "2022-01-01T08:00")] - [(< ?d #inst "2023-01-01T08:00")] - [?p :payment/type :payment-type/check] - [?p :payment/client ?c] - [?p :payment/amount ?a] - [?p :payment/vendor ?v]] - (dc/db conn) - vendor-read) - - :else - (dc/q '[:find - (pull ?c [:client/code :db/id]) - (pull ?v vendor-read) - (sum ?a) - :with ?d - :in $ [?c ...] vendor-read - :where - [?p :payment/client ?c] - [?p :payment/date ?d ] - [(>= ?d #inst "2022-01-01T08:00")] - [(< ?d #inst "2023-01-01T08:00")] - [?p :payment/type :payment-type/check] - [?p :payment/amount ?a] - [?p :payment/vendor ?v]] - (dc/db conn) - valid-clients - vendor-read)) +(defn fetch-page [{:keys [trimmed-clients parsed-query-params] :as request user :identity}] + (let [results (dc/q '[:find + (pull ?c [:client/code :db/id]) + (pull ?v vendor-read) + (sum ?a) + :with ?d + :in $ [?c ...] vendor-read + :where + [?p :payment/client ?c] + [?p :payment/date ?d ] + [(>= ?d #inst "2022-01-01T08:00")] + [(< ?d #inst "2023-01-01T08:00")] + [?p :payment/type :payment-type/check] + [?p :payment/amount ?a] + [?p :payment/vendor ?v]] + (dc/db conn) + trimmed-clients + vendor-read) all (->> results (filter (fn [[_ _ a]] (>= (or a 0.0) 600.0))) (sort-by (fn [[client _ amount]] [(:client/code client ) amount])) (into [])) - paginated (apply-pagination-raw {:start (:start (:parsed-query-params args)) - :per-page (:per-page (:parsed-query-params args))} all)] + paginated (apply-pagination-raw {:start (:start parsed-query-params) + :per-page (:per-page parsed-query-params)} all)] [(:entries paginated) (:count paginated)])) (def grid-page @@ -120,9 +77,7 @@ {:id "vendor-table" :nav (com/company-aside-nav) :id-fn (comp :db/id second) - :fetch-page (fn [user args] - (get-1099-companies user args) - #_(r/get-graphql (into args {:id user}))) + :fetch-page fetch-page :breadcrumbs [[:a {:href (bidi/path-for ssr-routes/only-routes :company)} "My Company"] @@ -133,9 +88,7 @@ :title "1099 Vendors" :entity-name "Vendors" :route :company-1099-vendor-table - :action-buttons (fn [user _] - nil) - :row-buttons (fn [user e] + :row-buttons (fn [request e] [(com/icon-button {:hx-get (str (bidi/path-for ssr-routes/only-routes :company-1099-vendor-dialog :vendor-id (:db/id (second e))) diff --git a/src/clj/auto_ap/ssr/company/reports.clj b/src/clj/auto_ap/ssr/company/reports.clj index af41992a..2b764d0e 100644 --- a/src/clj/auto_ap/ssr/company/reports.clj +++ b/src/clj/auto_ap/ssr/company/reports.clj @@ -1,7 +1,14 @@ (ns auto-ap.ssr.company.reports (:require [amazonica.aws.s3 :as s3] - [auto-ap.datomic :refer [conn]] + [auto-ap.datomic + :refer [add-sorter-fields + apply-pagination + apply-sort-3 + conn + merge-query + pull-many + query2]] [auto-ap.datomic.reports :as r] [auto-ap.graphql.utils :refer [assert-can-see-client is-admin?]] [auto-ap.ssr-routes :as ssr-routes] @@ -11,22 +18,61 @@ [auto-ap.ssr.utils :refer [html-response]] [auto-ap.time :as atime] [bidi.bidi :as bidi] + [clojure.set :as set] [config.core :refer [env]] - [datomic.api :as dc] - [com.brunobonacci.mulog :as mu])) + [datomic.api :as dc])) + +(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) + query (cond-> {:query {:find [] + :in '[$ [?c ...]] + :where '[[?e :report/client ?c]]} + :args [db (:trimmed-clients request)]} + + + (:sort query-params) (add-sorter-fields {"client" ['[?e :report/client ?c] + '[?c :client/name ?sort-client]] + "created" ['[?e :report/created ?sort-created]] + "creator" ['[?e :report/creator ?sort-creator]] + "name" ['[?e :report/name ?sort-name] + ]} + query-params) + + true + (merge-query {:query {:find ['?sort-default '?e] :where ['[?e :report/created ?sort-default]]}}))] + (->> (query2 query) + (apply-sort-3 (update query-params :sort conj {:sort-key "default-2" :asc true})) + (apply-pagination query-params)))) + +(defn hydrate-results [ids db request] + (let [results (->> (pull-many db default-read ids) + (group-by :db/id)) + valid-clients (:trimmed-clients request)] + (->> ids + (map results) + (filter identity) + + (map first) + (filter (fn [r] + (let [used-clients (set (map :db/id (:report/client r)))] + (= used-clients + (set/intersection valid-clients + used-clients)))))))) + +(defn fetch-page [args] + (let [db (dc/db conn) + {ids-to-retrieve :ids matching-count :count} (fetch-ids db args)] + + [(->> (hydrate-results ids-to-retrieve db args)) + matching-count])) (def grid-page (helper/build {:id "report-table" :nav (com/company-aside-nav) - :id-fn :db/id - :fetch-page (fn [user args] - (prn args) - (r/get-graphql {:client (:client args) - :clients (:clients args) - :start (:start (:parsed-query-params args)) - :per-page (:per-page (:parsed-query-params args)) - :sort (:sort (:parsed-query-params args)) - })) + :fetch-page fetch-page :breadcrumbs [[:a {:href (bidi/path-for ssr-routes/only-routes :company)} "My Company"] @@ -37,17 +83,15 @@ :title "Reports" :entity-name "Reports" :route :company-reports-table - :action-buttons (fn [user _] - nil) - :row-buttons (fn [user e] - (com/a-icon-button {:href (:report/url e)} - svg/download)[ - (when (is-admin? user) - (com/icon-button {:hx-delete (str (bidi/path-for ssr-routes/only-routes - :company-reports-delete - :request-method :delete)) - :hx-target "closest tr"} - svg/trash))]) + :row-buttons (fn [request e] + [(com/a-icon-button {:href (:report/url e)} + svg/download) + (when (is-admin? (:identity request)) + (com/icon-button {:hx-delete (str (bidi/path-for ssr-routes/only-routes + :company-reports-delete + :request-method :delete)) + :hx-target "closest tr"} + svg/trash))]) :headers [{:key "name" :name "Name" :sort-key "name" diff --git a/src/clj/auto_ap/ssr/company/yodlee.clj b/src/clj/auto_ap/ssr/company/yodlee.clj index 71d58936..eb619894 100644 --- a/src/clj/auto_ap/ssr/company/yodlee.clj +++ b/src/clj/auto_ap/ssr/company/yodlee.clj @@ -1,7 +1,14 @@ (ns auto-ap.ssr.company.yodlee (:require - [auto-ap.datomic :refer [conn pull-attr]] - [auto-ap.datomic.yodlee2 :as yodlee2] + [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 [is-admin?]] [auto-ap.ssr-routes :as ssr-routes] [auto-ap.ssr.components :as com] @@ -16,15 +23,51 @@ [hiccup2.core :as hiccup])) (def default-read '[:db/id - :yodlee-provider-account/last-updated + [:yodlee-provider-account/last-updated :xform clj-time.coerce/from-date] :yodlee-provider-account/status :yodlee-provider-account/id :yodlee-provider-account/detailed-status {:yodlee-provider-account/accounts [:yodlee-account/name :yodlee-account/number] - :yodlee-provider-account/client [:client/code]}]) + :yodlee-provider-account/client [:client/code]}]) +(defn fetch-ids [db request] + (let [query-params (:parsed-query-params request)] + (->> (cond-> {:query {:find [] + :in ['$ '[?xx ...]] + :where ['[?e :yodlee-provider-account/id] + '[?e :yodlee-provider-account/client ?xx]]} + :args [db (:trimmed-clients request)]} + + + (: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]]} + query-params) + true + (merge-query {:query {:find ['?e ] + :where ['[?e :yodlee-provider-account/id]]}})) + + (query2) + (apply-sort-3 query-params) + (apply-pagination query-params)))) + + +(defn hydrate-results [ids db _] + (let [results (->> (pull-many db default-read ids) + (group-by :db/id))] + (->> ids + (map results) + (map first)))) + + +(defn fetch-page [request] + (let [db (dc/db conn) + {ids-to-retrieve :ids matching-count :count} (fetch-ids db request)] + [(->> (hydrate-results ids-to-retrieve db request)) + matching-count])) + + (defn fastlink-dialog [{:keys [client]}] (html-response (com/modal @@ -85,14 +128,7 @@ fastlink.open({fastLinkURL: '%s', {:id "yodlee-table" :nav (com/company-aside-nav) :id-fn :db/id - :fetch-page (fn [request] - (println (count (:clients request))) - (yodlee2/get-graphql - {:client (:client request) - :clients (:clients request) - :sort (:sort (:parsed-query-params request)) - :start (:start (:parsed-query-params request)) - :per-page (:per-page (:parsed-query-params request))})) + :fetch-page fetch-page :breadcrumbs [[:a {:href (bidi/path-for ssr-routes/only-routes :company)} "My Company"]