84 lines
4.0 KiB
Clojure
84 lines
4.0 KiB
Clojure
(ns auto-ap.ssr.company.reports
|
|
(:require
|
|
[amazonica.aws.s3 :as s3]
|
|
[auto-ap.datomic :refer [conn]]
|
|
[auto-ap.datomic.reports :as r]
|
|
[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]]
|
|
[auto-ap.time :as atime]
|
|
[bidi.bidi :as bidi]
|
|
[config.core :refer [env]]
|
|
[datomic.api :as dc]))
|
|
|
|
(def grid-page {:id "report-table"
|
|
:nav (com/company-aside-nav)
|
|
:id-fn :db/id
|
|
:fetch-page (fn [user args]
|
|
(r/get-graphql (into args {:id user})))
|
|
:breadcrumbs [[:a {:href (bidi/path-for ssr-routes/only-routes
|
|
:company)}
|
|
"My Company"]
|
|
|
|
[:a {:href (bidi/path-for ssr-routes/only-routes
|
|
:company-reports)}
|
|
"Reports"]]
|
|
: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))])
|
|
:headers [{:key "name"
|
|
:name "Name"
|
|
:sort-key "name"
|
|
:render :report/name}
|
|
{:key "created-by"
|
|
:name "Created by"
|
|
:sort-key "creator"
|
|
:render (fn [report]
|
|
(when (:report/creator report)
|
|
(com/pill {:color :primary }
|
|
(:report/creator report))))}
|
|
{:key "created"
|
|
:name "Created"
|
|
:sort-key "created"
|
|
:render #(atime/unparse-local (:report/created %)
|
|
atime/normal-date)}]})
|
|
|
|
(def row* (partial helper/row* grid-page))
|
|
(def table* (partial helper/table* grid-page))
|
|
(def table (partial helper/table grid-page))
|
|
(def page (partial helper/page grid-page))
|
|
|
|
(defn delete-report [{:keys [form-params identity]}]
|
|
|
|
(let [[id-to-delete key] (first (dc/q '[:find ?i ?k
|
|
:in $ ?i
|
|
:where [?i :report/key ?k]]
|
|
(dc/db conn)
|
|
(some-> (get form-params "id") not-empty Long/parseLong)))
|
|
report (dc/pull (dc/db conn) r/default-read id-to-delete)]
|
|
(assert-can-see-client identity (:report/client report))
|
|
(when id-to-delete
|
|
(s3/delete-object :bucket-name (:data-bucket env)
|
|
:key key)
|
|
@(dc/transact conn [[:db/retractEntity id-to-delete]]))
|
|
(html-response
|
|
(row* identity
|
|
report
|
|
{:flash? true
|
|
:delete-after-settle? true}))))
|
|
|