(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}))))