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 (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] [clj-time.core :as time]
[amazonica.aws.simpleemail :as ses] [amazonica.aws.simpleemail :as ses]
[clojure.java.jdbc :as j] [clojure.java.jdbc :as j]
[config.core :refer [env]] [config.core :refer [env]]
[clj-time.jdbc :as jdbc] [clj-time.jdbc :as jdbc]
[clojure.string :as str])) [clojure.string :as str]
[honeysql.core :as sql]
[honeysql.helpers :as helpers]))
(defn insert [row] (defn insert [row]
(db->clj (first (j/insert! (get-conn) (db->clj (first (j/insert! (get-conn)
:reminders :reminders
(clj->db row))))) (clj->db row)))))
(def base-query (sql/build :select :reminders.*
:from :reminders))
(defn get-all [] (defn get-all []
(map db->clj (j/query (get-conn) (map db->clj (j/query (get-conn)
(str (str
@@ -43,6 +48,36 @@
(defn finish [id] (defn finish [id]
(j/update! (get-conn) :reminders {:sent (time/now)} ["id = ?" 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 [] (defn template []
{:subject "Reminder to send invoices" {:subject "Reminder to send invoices"
:body (str "This is a reminder to please reply with a [format of invoice: pdf/excel]" :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.invoices :as invoices]
[auto-ap.db.vendors :as vendors] [auto-ap.db.vendors :as vendors]
[auto-ap.db.companies :as companies] [auto-ap.db.companies :as companies]
[auto-ap.db.reminders :as reminders]
[auto-ap.db.utils :as utils] [auto-ap.db.utils :as utils]
[clojure.walk :as walk] [clojure.walk :as walk]
[clojure.string :as str]) [clojure.string :as str])
@@ -26,6 +27,16 @@
{:fields {:id {:type 'Int} {:fields {:id {:type 'Int}
:name {:type 'String} :name {:type 'String}
:invoice_reminder_schedule {: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 :invoice
{:fields {:id {:type 'Int} {:fields {:id {:type 'Int}
:total {:type 'String} :total {:type 'String}
@@ -42,7 +53,13 @@
:count {:type 'Int} :count {:type 'Int}
:total {:type 'Int} :total {:type 'Int}
:start {: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 :queries
{:invoice_page {:type '(list :invoice_page) {:invoice_page {:type '(list :invoice_page)
:args {:imported {:type 'Boolean} :args {:imported {:type 'Boolean}
@@ -52,6 +69,12 @@
:asc {:type 'Boolean}} :asc {:type 'Boolean}}
:resolve :get-invoice-page} :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) :company {:type '(list :company)
:resolve :get-company} :resolve :get-company}
:vendor {:type '(list :vendor) :vendor {:type '(list :vendor)
@@ -117,6 +140,22 @@
:start (:start args 0) :start (:start args 0)
:end (+ (:start args 0) (count invoices))}] extra-context))) :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] (defn get-vendor-for-invoice [context args value]
(->graphql (->graphql
(if-let [vendor-cache (:vendor-cache context)] (if-let [vendor-cache (:vendor-cache context)]
@@ -140,6 +179,7 @@
(def schema (def schema
(-> integreat-schema (-> integreat-schema
(attach-resolvers {:get-invoice-page get-invoice-page (attach-resolvers {:get-invoice-page get-invoice-page
:get-reminder-page get-reminder-page
:get-vendor-for-invoice get-vendor-for-invoice :get-vendor-for-invoice get-vendor-for-invoice
:get-company-for-invoice get-company-for-invoice :get-company-for-invoice get-company-for-invoice
:get-company get-company :get-company get-company

View File

@@ -7,14 +7,19 @@
(re-frame/reg-event-fx (re-frame/reg-event-fx
::mounted ::mounted
(fn [{:keys [db]} _] (fn [{:keys [db]} _]
{:http {:method :get {:graphql {:token (:user db)
:token (:user db) :query-obj {:venia/queries [[:reminder_page
:uri "/api/reminders"
:on-success [::received]}})) [[:reminders [:id :email :sent :scheduled :subject :body [:vendor [:name :id]] ]]
:total
:start
:end]]]}
:on-success [::received]}}))
(re-frame/reg-event-db (re-frame/reg-event-db
::received ::received
(fn [db [_ reminders]] (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 "Scheduled Date"]
[:th "Status"] [:th "Status"]
[:th "Email"]]] [:th "Email"]]]
[:tbody (for [{:keys [id vendor-name scheduled sent email ]} reminders] [:tbody (for [{:keys [id vendor scheduled sent email ]} reminders]
^{:key id} ^{:key id}
[:tr [:tr
[:td vendor-name] [:td (:name vendor)]
[:td (date->str scheduled)] [:td (date->str scheduled)]
[:td (when sent [:td (when sent
[:span [:span.icon [:i.fa.fa-check]] "Sent " (date-time->str sent)]) ] [:span [:span.icon [:i.fa.fa-check]] "Sent " (date-time->str sent)]) ]