reminders have been graphqld
This commit is contained in:
@@ -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]"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))))))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)]) ]
|
||||||
|
|||||||
Reference in New Issue
Block a user