reminders have been graphqld

This commit is contained in:
Bryce Covert
2018-04-13 20:46:27 -07:00
parent 431c2883e2
commit 5e14ecd005
4 changed files with 90 additions and 10 deletions

View File

@@ -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]"

View File

@@ -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

View File

@@ -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))))))

View File

@@ -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)]) ]