reminders have been graphqld
This commit is contained in:
@@ -1,17 +1,22 @@
|
||||
(ns auto-ap.db.reminders
|
||||
(:require [auto-ap.db.utils :refer [clj->db db->clj get-conn]]
|
||||
(:require [auto-ap.db.utils :refer [clj->db db->clj get-conn query]]
|
||||
[clj-time.core :as time]
|
||||
[amazonica.aws.simpleemail :as ses]
|
||||
[clojure.java.jdbc :as j]
|
||||
[config.core :refer [env]]
|
||||
[clj-time.jdbc :as jdbc]
|
||||
[clojure.string :as str]))
|
||||
[clojure.string :as str]
|
||||
[honeysql.core :as sql]
|
||||
[honeysql.helpers :as helpers]))
|
||||
|
||||
(defn insert [row]
|
||||
(db->clj (first (j/insert! (get-conn)
|
||||
:reminders
|
||||
(clj->db row)))))
|
||||
|
||||
(def base-query (sql/build :select :reminders.*
|
||||
:from :reminders))
|
||||
|
||||
(defn get-all []
|
||||
(map db->clj (j/query (get-conn)
|
||||
(str
|
||||
@@ -43,6 +48,36 @@
|
||||
(defn finish [id]
|
||||
(j/update! (get-conn) :reminders {:sent (time/now)} ["id = ?" id] ))
|
||||
|
||||
(def all-keys #{:id :vendor-id :email :body :subject :sent :scheduled})
|
||||
|
||||
(defn add-sort-by [q sort-by asc]
|
||||
(let [sort-by-key (keyword sort-by)]
|
||||
(cond (all-keys sort-by-key)
|
||||
(helpers/merge-order-by q [sort-by-key (when-not asc :desc)])
|
||||
|
||||
(= :vendor sort-by-key)
|
||||
(-> q
|
||||
(helpers/merge-left-join [:vendors :v] [:= :v.id :reminders.vendor-id] )
|
||||
(helpers/merge-order-by [:v.name (when-not asc :desc)]))
|
||||
|
||||
:else
|
||||
q)))
|
||||
|
||||
|
||||
(defn base-graphql [{:keys [imported company-id]}]
|
||||
base-query)
|
||||
|
||||
(defn get-graphql [{:keys [start sort-by asc] :as args}]
|
||||
(query
|
||||
(cond-> (base-graphql args)
|
||||
(not (nil? sort-by) ) (add-sort-by sort-by asc)
|
||||
true (assoc :limit 20)
|
||||
start (assoc :offset start))))
|
||||
|
||||
(defn count-graphql [args]
|
||||
(:count (first (query
|
||||
(assoc (base-graphql args) :select [:%count.*])))))
|
||||
|
||||
(defn template []
|
||||
{:subject "Reminder to send invoices"
|
||||
:body (str "This is a reminder to please reply with a [format of invoice: pdf/excel]"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
[auto-ap.db.invoices :as invoices]
|
||||
[auto-ap.db.vendors :as vendors]
|
||||
[auto-ap.db.companies :as companies]
|
||||
[auto-ap.db.reminders :as reminders]
|
||||
[auto-ap.db.utils :as utils]
|
||||
[clojure.walk :as walk]
|
||||
[clojure.string :as str])
|
||||
@@ -26,6 +27,16 @@
|
||||
{:fields {:id {:type 'Int}
|
||||
:name {:type 'String}
|
||||
:invoice_reminder_schedule {:type 'String}}}
|
||||
:reminder
|
||||
{:fields {:id {:type 'Int}
|
||||
:email {:type 'String}
|
||||
:subject {:type 'String}
|
||||
:body {:type 'String}
|
||||
:scheduled {:type 'String}
|
||||
:sent {:type 'String}
|
||||
:vendor {:type :vendor
|
||||
:resolve :get-vendor-for-invoice}}
|
||||
}
|
||||
:invoice
|
||||
{:fields {:id {:type 'Int}
|
||||
:total {:type 'String}
|
||||
@@ -42,7 +53,13 @@
|
||||
:count {:type 'Int}
|
||||
:total {:type 'Int}
|
||||
:start {:type 'Int}
|
||||
:end {:type 'Int}}}}
|
||||
:end {:type 'Int}}}
|
||||
|
||||
:reminder_page {:fields {:reminders {:type '(list :reminder)}
|
||||
:count {:type 'Int}
|
||||
:total {:type 'Int}
|
||||
:start {:type 'Int}
|
||||
:end {:type 'Int}}}}
|
||||
:queries
|
||||
{:invoice_page {:type '(list :invoice_page)
|
||||
:args {:imported {:type 'Boolean}
|
||||
@@ -52,6 +69,12 @@
|
||||
:asc {:type 'Boolean}}
|
||||
|
||||
:resolve :get-invoice-page}
|
||||
:reminder_page {:type '(list :reminder_page)
|
||||
:args {:start {:type 'Int}
|
||||
:sort_by {:type 'String}
|
||||
:asc {:type 'Boolean}}
|
||||
|
||||
:resolve :get-reminder-page}
|
||||
:company {:type '(list :company)
|
||||
:resolve :get-company}
|
||||
:vendor {:type '(list :vendor)
|
||||
@@ -117,6 +140,22 @@
|
||||
:start (:start args 0)
|
||||
:end (+ (:start args 0) (count invoices))}] extra-context)))
|
||||
|
||||
(defn get-reminder-page [context args value]
|
||||
(let [extra-context
|
||||
(cond-> {}
|
||||
(executor/selects-field? context :reminder/vendor) (assoc :vendor-cache (by (vendors/get-all) :id )))
|
||||
|
||||
reminders (map
|
||||
->graphql
|
||||
(reminders/get-graphql (<-graphql args)))
|
||||
reminder-count (reminders/count-graphql (<-graphql args))]
|
||||
(resolve/with-context
|
||||
[{:reminders reminders
|
||||
:total reminder-count
|
||||
:count (count reminders)
|
||||
:start (:start args 0)
|
||||
:end (+ (:start args 0) (count reminders))}] extra-context)))
|
||||
|
||||
(defn get-vendor-for-invoice [context args value]
|
||||
(->graphql
|
||||
(if-let [vendor-cache (:vendor-cache context)]
|
||||
@@ -140,6 +179,7 @@
|
||||
(def schema
|
||||
(-> integreat-schema
|
||||
(attach-resolvers {:get-invoice-page get-invoice-page
|
||||
:get-reminder-page get-reminder-page
|
||||
:get-vendor-for-invoice get-vendor-for-invoice
|
||||
:get-company-for-invoice get-company-for-invoice
|
||||
:get-company get-company
|
||||
|
||||
@@ -7,14 +7,19 @@
|
||||
(re-frame/reg-event-fx
|
||||
::mounted
|
||||
(fn [{:keys [db]} _]
|
||||
{:http {:method :get
|
||||
:token (:user db)
|
||||
:uri "/api/reminders"
|
||||
:on-success [::received]}}))
|
||||
{:graphql {:token (:user db)
|
||||
:query-obj {:venia/queries [[:reminder_page
|
||||
|
||||
[[:reminders [:id :email :sent :scheduled :subject :body [:vendor [:name :id]] ]]
|
||||
:total
|
||||
:start
|
||||
:end]]]}
|
||||
|
||||
:on-success [::received]}}))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::received
|
||||
(fn [db [_ reminders]]
|
||||
(assoc db :reminders reminders)))
|
||||
(assoc db :reminders (:reminders (first (:reminder-page reminders))))))
|
||||
|
||||
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
[:th "Scheduled Date"]
|
||||
[:th "Status"]
|
||||
[:th "Email"]]]
|
||||
[:tbody (for [{:keys [id vendor-name scheduled sent email ]} reminders]
|
||||
[:tbody (for [{:keys [id vendor scheduled sent email ]} reminders]
|
||||
^{:key id}
|
||||
[:tr
|
||||
[:td vendor-name]
|
||||
[:td (:name vendor)]
|
||||
[:td (date->str scheduled)]
|
||||
[:td (when sent
|
||||
[:span [:span.icon [:i.fa.fa-check]] "Sent " (date-time->str sent)]) ]
|
||||
|
||||
Reference in New Issue
Block a user