removed old database stuff, just left what's needed for importing
This commit is contained in:
@@ -19,92 +19,3 @@
|
||||
|
||||
(defn get-all []
|
||||
(query base-query))
|
||||
|
||||
(defn get-by-id [id]
|
||||
(first (query (-> base-query
|
||||
(helpers/merge-where [:= :id id])))))
|
||||
|
||||
(defn fields->data [x]
|
||||
(-> x
|
||||
(assoc-in [:data :pdf-data] (:pdf-data x))
|
||||
(assoc-in [:data :invoices] (:invoices x))
|
||||
(dissoc :pdf-data)
|
||||
(dissoc :invoices)))
|
||||
|
||||
(defn insert! [row]
|
||||
(-> (j/insert! (get-conn)
|
||||
:checks
|
||||
(-> row
|
||||
fields->data
|
||||
clj->db))
|
||||
first
|
||||
db->clj
|
||||
data->fields))
|
||||
|
||||
(defn insert-multi! [rows]
|
||||
(->> (j/insert-multi! (get-conn)
|
||||
:checks
|
||||
(->> rows
|
||||
(map fields->data)
|
||||
(map clj->db)))
|
||||
(map db->clj)
|
||||
(map data->fields)))
|
||||
|
||||
(def all-keys #{:company-id :vendor-id :id :status :date :s3-uuid :s3-key :s3-url :check-number :memo :amount :paid-to :bank-account-id :type})
|
||||
|
||||
(defn add-sort-by [q sort-by asc]
|
||||
(let [sort-by-key (keyword sort-by)]
|
||||
(cond (nil? sort-by)
|
||||
(helpers/merge-order-by q [:date])
|
||||
|
||||
(= :date sort-by-key)
|
||||
(helpers/merge-order-by q [:date (when-not asc :desc)])
|
||||
|
||||
(all-keys sort-by-key)
|
||||
(helpers/merge-order-by q
|
||||
[sort-by-key (when-not asc :desc)]
|
||||
[:date])
|
||||
|
||||
(= :vendor sort-by-key)
|
||||
(-> q
|
||||
(helpers/merge-left-join [:vendors :v] [:= :v.id :checks.vendor-id] )
|
||||
(helpers/merge-order-by [:v.name (when-not asc :desc)]
|
||||
[:date]))
|
||||
|
||||
(= :company sort-by-key)
|
||||
(-> q
|
||||
(helpers/merge-left-join [:companies :c] [:= :c.id :checks.company-id] )
|
||||
(helpers/merge-order-by [:c.name (when-not asc :desc)]
|
||||
[:date]))
|
||||
|
||||
:else
|
||||
q)))
|
||||
|
||||
(defn base-graphql [{:keys [company-id vendor-id check-number bank-account-id status amount id statuses]}]
|
||||
|
||||
(cond-> base-query
|
||||
(limited-companies id) (helpers/merge-where [:in :company-id (limited-companies id)])
|
||||
(not (nil? company-id)) (helpers/merge-where [:= :company-id company-id])
|
||||
(not (nil? bank-account-id)) (helpers/merge-where [:= :bank-account-id bank-account-id])
|
||||
(not (nil? vendor-id)) (helpers/merge-where [:= :vendor-id vendor-id])
|
||||
(not (nil? check-number)) (helpers/merge-where [:= :check-number check-number])
|
||||
(not (nil? status)) (helpers/merge-where [:= :status status])
|
||||
(not (nil? amount)) (helpers/merge-where [:= :amount amount])
|
||||
(seq statuses ) (helpers/merge-where [:in :status statuses])))
|
||||
|
||||
(defn get-graphql [{:keys [start sort-by asc id limit] :as args :or {limit 100}}]
|
||||
(query
|
||||
(cond-> (base-graphql args)
|
||||
true (add-sort-by sort-by asc)
|
||||
true (assoc :limit limit)
|
||||
start (assoc :offset start))))
|
||||
|
||||
(defn count-graphql [args]
|
||||
(:count (first (query
|
||||
(assoc (base-graphql args) :select [:%count.*])))))
|
||||
|
||||
(defn update! [row]
|
||||
(j/update! (get-conn)
|
||||
:checks
|
||||
(-> row (fields->data) (clj->db))
|
||||
["id = ?" (:id row)]))
|
||||
|
||||
@@ -26,32 +26,3 @@
|
||||
|
||||
(defn get-all []
|
||||
(map data->fields (query base-query)))
|
||||
|
||||
(defn get-by-id [id]
|
||||
(first (map data->fields
|
||||
(query (-> base-query
|
||||
(helpers/merge-where [:= :id id]))))))
|
||||
|
||||
(defn upsert [id data]
|
||||
(-> (sql/build
|
||||
:update :companies
|
||||
:set (clj->db (select-keys (fields->data data) all-fields))
|
||||
:where [:= :id (if (int? id)
|
||||
id
|
||||
(Integer/parseInt id))])
|
||||
execute!)
|
||||
(get-by-id (if (int? id)
|
||||
id
|
||||
(Integer/parseInt id))))
|
||||
|
||||
|
||||
(defn add-bank-account [id bank-account]
|
||||
(let [company (get-by-id id)
|
||||
company (update company :bank-accounts
|
||||
(fn [ba]
|
||||
(let [next-id (inc (apply max (conj (map :id ba) 0)))]
|
||||
(conj (vec ba) (assoc bank-account :id next-id)))))]
|
||||
(upsert id company)))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -62,127 +62,3 @@
|
||||
(defn get-all []
|
||||
(query base-query))
|
||||
|
||||
(defn find-conflicting [{:keys [id invoice-number company-id vendor-id] :as i}]
|
||||
(query
|
||||
(-> base-query
|
||||
(helpers/merge-where [:and [:not= :id id]
|
||||
[:= :invoice-number invoice-number]
|
||||
[:= :company-id company-id]
|
||||
[:= :vendor-id vendor-id]
|
||||
[:not= :status "voided"]]))))
|
||||
|
||||
(defn get-multi [ids]
|
||||
(query (-> base-query
|
||||
(helpers/merge-where [:in :id ids]))))
|
||||
|
||||
(defn get-by-id [id]
|
||||
(first (query (-> base-query
|
||||
(helpers/merge-where [:= :id id])))))
|
||||
|
||||
(defn approve []
|
||||
(j/update! (get-conn) :invoices {:imported true} [] ))
|
||||
|
||||
(defn update [v]
|
||||
(j/update! (get-conn) :invoices (clj->db v) ["id = ?" (:id v)])
|
||||
(get-by-id (:id v)))
|
||||
|
||||
(defn reject []
|
||||
(j/delete! (get-conn) :invoices ["imported = false"]))
|
||||
|
||||
(defn get-unpaid [company]
|
||||
(query
|
||||
(if company
|
||||
(-> base-query
|
||||
(helpers/merge-where [:= :imported true])
|
||||
(helpers/merge-where [:= :company-id (if (int? company)
|
||||
company
|
||||
(Integer/parseInt company))]))
|
||||
(-> base-query
|
||||
(helpers/merge-where [:= :imported true])))))
|
||||
|
||||
(defn get-pending [company]
|
||||
(query
|
||||
(if company
|
||||
(-> base-query
|
||||
(helpers/merge-where [:= :imported false])
|
||||
(helpers/merge-where [:= :company-id (if (int? company)
|
||||
company
|
||||
(Integer/parseInt company))]))
|
||||
(-> base-query
|
||||
(helpers/merge-where [:= :imported false])))))
|
||||
|
||||
(defn add-sort-by [q sort-by asc]
|
||||
(let [sort-by-key (keyword sort-by)]
|
||||
(cond (nil? sort-by)
|
||||
(helpers/merge-order-by q [:date])
|
||||
|
||||
(= :date sort-by-key)
|
||||
(helpers/merge-order-by q [:date (when-not asc :desc)])
|
||||
|
||||
(all-keys sort-by-key)
|
||||
(helpers/merge-order-by q
|
||||
[sort-by-key (when-not asc :desc)]
|
||||
[:date])
|
||||
|
||||
(= :vendor sort-by-key)
|
||||
(-> q
|
||||
(helpers/merge-left-join [:vendors :v] [:= :v.id :invoices.vendor-id] )
|
||||
(helpers/merge-order-by [:v.name (when-not asc :desc)]
|
||||
[:date]))
|
||||
|
||||
(= :company sort-by-key)
|
||||
(-> q
|
||||
(helpers/merge-left-join [:companies :c] [:= :c.id :invoices.company-id] )
|
||||
(helpers/merge-order-by [:c.name (when-not asc :desc)]
|
||||
[:date]))
|
||||
|
||||
:else
|
||||
q)))
|
||||
|
||||
|
||||
|
||||
(defn base-graphql [{:keys [imported company-id status id statuses]}]
|
||||
(cond-> base-query
|
||||
(limited-companies id) (helpers/merge-where [:in :company-id (limited-companies id)])
|
||||
(seq statuses ) (helpers/merge-where [:in :status statuses])
|
||||
(not (nil? imported)) (helpers/merge-where [:= :imported imported])
|
||||
(not (nil? status)) (helpers/merge-where [:= :status status])
|
||||
(not (nil? company-id)) (helpers/merge-where [:= :company-id company-id])))
|
||||
|
||||
(defn get-graphql [{:keys [start sort-by asc limit] :as args :or {limit 100}}]
|
||||
(query
|
||||
(cond-> (base-graphql args)
|
||||
|
||||
true (add-sort-by sort-by asc)
|
||||
true (assoc :limit limit)
|
||||
start (assoc :offset start))))
|
||||
|
||||
(defn count-graphql [args]
|
||||
(:count (first (query
|
||||
(assoc (base-graphql args) :select [:%count.*])))))
|
||||
|
||||
(defn import [parsed-invoices companies vendors]
|
||||
(->> (insert-multi!
|
||||
(for [{:keys [total date invoice-number customer-identifier vendor-code] :as row} parsed-invoices]
|
||||
(do
|
||||
(dissoc (assoc row
|
||||
:company-id (:id (parse/best-match companies customer-identifier))
|
||||
:vendor-id (:id (first (filter #(= (:code %) vendor-code) vendors)))
|
||||
:imported false
|
||||
:potential-duplicate false)
|
||||
:vendor-code))))
|
||||
|
||||
(map db->clj)))
|
||||
|
||||
(defn apply-payment [invoice-id amount]
|
||||
(j/db-do-prepared (get-conn)
|
||||
(-> (helpers/update :invoices)
|
||||
(helpers/sset {:outstanding-balance (sql/call :- :outstanding-balance amount)})
|
||||
(helpers/where [:= :id invoice-id])
|
||||
(sql/format)))
|
||||
(j/db-do-prepared (get-conn)
|
||||
(-> (helpers/update :invoices)
|
||||
(helpers/sset {:status "paid"})
|
||||
(helpers/where [:and [:< :outstanding-balance 0.01]
|
||||
[:= :id invoice-id]])
|
||||
(sql/format))))
|
||||
|
||||
@@ -6,47 +6,3 @@
|
||||
(defn get-all []
|
||||
(query {:select [:*]
|
||||
:from [:invoices-expense-accounts]}))
|
||||
|
||||
(defn get-missing []
|
||||
(query {:select [:i.id :v.default-expense-account :i.total]
|
||||
:from [[:invoices :i]]
|
||||
:join [[:vendors :v]
|
||||
[:= :v.id :i.vendor-id]]
|
||||
:left-join [[:invoices-expense-accounts :nonexist]
|
||||
[:= :i.id :nonexist.invoice-id]]
|
||||
:where [:and [:= :nonexist.id nil]
|
||||
[:not= :v.default-expense-account nil]] }))
|
||||
|
||||
(defn get-for-invoice [id]
|
||||
(query {:select [:*]
|
||||
:from [:invoices-expense-accounts]
|
||||
:where [:= :invoice-id id]}))
|
||||
|
||||
(defn assign-defaults! []
|
||||
(j/db-do-prepared (get-conn)
|
||||
(doto
|
||||
(sql/format {:insert-into [[:invoices-expense-accounts [:invoice-id :expense-account-id :amount :location]]
|
||||
{:select [:i.id (sql/raw "COALESCE (i.default_expense_account, v.default_expense_account)") :i.total :i.default_location]
|
||||
:from [[:invoices :i]]
|
||||
:left-join [[:vendors :v]
|
||||
[:= :v.id :i.vendor-id]
|
||||
[:invoices-expense-accounts :nonexist]
|
||||
[:= :i.id :nonexist.invoice-id]]
|
||||
:where [:and [:= :nonexist.id nil]
|
||||
[:or [:not= :v.default-expense-account nil]
|
||||
[:not= :i.default-expense-account nil]]] }] })
|
||||
println)
|
||||
))
|
||||
|
||||
(defn replace-for-invoice [invoice-id expense-accounts]
|
||||
(j/db-do-prepared (get-conn)
|
||||
(sql/format {:delete-from [:invoices-expense-accounts :i]
|
||||
:where [:= :i.invoice-id invoice-id] }))
|
||||
|
||||
(println expense-accounts)
|
||||
(j/insert-multi! (get-conn)
|
||||
:invoices_expense_accounts
|
||||
(doto (->> expense-accounts
|
||||
(map (fn [x] (assoc x :invoice-id invoice-id)))
|
||||
(map clj->db ))
|
||||
println)) )
|
||||
|
||||
@@ -8,99 +8,3 @@
|
||||
[clojure.string :as str]
|
||||
[honeysql.core :as sql]
|
||||
[honeysql.helpers :as helpers]))
|
||||
|
||||
(def all-keys #{:id :vendor-id :email :body :subject :sent :scheduled})
|
||||
|
||||
(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-by-id [id]
|
||||
(query (-> base-query
|
||||
(helpers/merge-where [:= :id id]))))
|
||||
|
||||
(defn update! [id data]
|
||||
(println data)
|
||||
(-> (sql/build
|
||||
:update :reminders
|
||||
:set (select-keys data all-keys )
|
||||
:where [:= :id id])
|
||||
execute!)
|
||||
(get-by-id id))
|
||||
|
||||
|
||||
(defn delete-all []
|
||||
(j/delete! (get-conn) :reminders []))
|
||||
|
||||
(defn find-future [vendors]
|
||||
(map db->clj (j/query (get-conn) (into [(str "SELECT * FROM reminders "
|
||||
"WHERE vendor_id in ("
|
||||
(str/join "," (take (count vendors) (repeat "?")))
|
||||
") "
|
||||
"AND "
|
||||
"sent is NULL"
|
||||
) ]
|
||||
vendors))))
|
||||
|
||||
|
||||
(defn get-ready []
|
||||
(map db->clj (j/query (get-conn)
|
||||
(str
|
||||
" SELECT reminders.*, vendors.name as vendor_name "
|
||||
" FROM reminders INNER join vendors on reminders.vendor_id = vendors.id "
|
||||
" WHERE reminders.sent IS NULL AND reminders.scheduled < NOW()"))))
|
||||
|
||||
(defn finish [id]
|
||||
(j/update! (get-conn) :reminders {:sent (time/now)} ["id = ?" id] ))
|
||||
|
||||
|
||||
|
||||
(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]"
|
||||
"version of last week's invoices for:"
|
||||
"We would greatly appreciate it if you could send that to us by end of day on"
|
||||
"Monday.")})
|
||||
|
||||
(defn send-emails [reminders]
|
||||
(doseq [{:keys [vendor-name id email subject body]} reminders]
|
||||
(when email
|
||||
(println "Sending email to" email)
|
||||
#_(ses/send-email :destination {:to-addresses [email]}
|
||||
:source (:invoice-email env)
|
||||
:message {:subject subject
|
||||
:body {:html (str "<h1>Hello " vendor-name ",</h1><p>" body "</p> <p> - Integreat. </p>")
|
||||
:text (str "Hello " vendor-name ",\r\n" body "\r\n - Integreat.")}}))
|
||||
(finish id)))
|
||||
|
||||
@@ -6,34 +6,8 @@
|
||||
[honeysql-postgres.helpers :as postgres-helpers]
|
||||
[auto-ap.db.utils :refer [clj->db kebab->snake db->clj get-conn query limited-companies] :as utils]))
|
||||
|
||||
(defn upsert! [row]
|
||||
(j/db-do-prepared (get-conn)
|
||||
(doto (sql/format (-> (helpers/insert-into :transactions)
|
||||
(helpers/values [row])
|
||||
(postgres-helpers/upsert (-> (postgres-helpers/on-conflict :id)
|
||||
|
||||
(postgres-helpers/do-update-set :post_date :status :check_id)
|
||||
(helpers/where [:<> :EXCLUDED.check_id nil])))))
|
||||
println)))
|
||||
|
||||
(def base-query (sql/build :select :*
|
||||
:from :transactions))
|
||||
|
||||
(defn get-all []
|
||||
(query base-query))
|
||||
(defn base-graphql [{:keys [company-id id]}]
|
||||
|
||||
(cond-> base-query
|
||||
(limited-companies id) (helpers/merge-where [:in :company-id (limited-companies id)])
|
||||
(not (nil? company-id)) (helpers/merge-where [:= :company-id company-id])))
|
||||
|
||||
(defn get-graphql [{:keys [start sort-by asc limit] :as args :or {limit 100}}]
|
||||
(query
|
||||
(cond-> (base-graphql args)
|
||||
#_#_(not (nil? sort-by) ) (add-sort-by sort-by asc)
|
||||
true (assoc :limit limit)
|
||||
start (assoc :offset start))))
|
||||
|
||||
(defn count-graphql [args]
|
||||
(:count (first (query
|
||||
(assoc (base-graphql args) :select [:%count.*])))))
|
||||
|
||||
@@ -24,32 +24,3 @@
|
||||
|
||||
(defn get-all []
|
||||
(map data->fields (query base-query)))
|
||||
|
||||
(defn get-by-id [id]
|
||||
(first (map data->fields (query (-> base-query
|
||||
(helpers/merge-where [:= :id id]))))))
|
||||
|
||||
(defn find-or-insert! [row]
|
||||
(let [user (-> base-query
|
||||
(helpers/merge-where [:and [:= :provider-id (:provider-id row)]
|
||||
[:= :provider (:provider row)]])
|
||||
query
|
||||
first
|
||||
data->fields)]
|
||||
(if user
|
||||
user
|
||||
(-> (j/insert! (get-conn)
|
||||
:users
|
||||
(-> row
|
||||
fields->data
|
||||
clj->db))
|
||||
first
|
||||
db->clj
|
||||
data->fields))))
|
||||
|
||||
|
||||
(defn update! [row]
|
||||
(j/update! (get-conn)
|
||||
:users
|
||||
(-> row (fields->data) (clj->db))
|
||||
["id = ?" (:id row)]))
|
||||
|
||||
@@ -43,29 +43,3 @@
|
||||
|
||||
(defn get-all []
|
||||
(map data->fields (query base-query)))
|
||||
|
||||
(defn get-by-id [id]
|
||||
(first (map data->fields
|
||||
(query (-> base-query
|
||||
(helpers/merge-where [:= :id id]))))))
|
||||
|
||||
(defn upsert [id data]
|
||||
(-> (sql/build
|
||||
:update :vendors
|
||||
:set (unparse data)
|
||||
:where [:= :id (if (int? id)
|
||||
id
|
||||
(Integer/parseInt id))])
|
||||
execute!)
|
||||
(get-by-id (if (int? id)
|
||||
id
|
||||
(Integer/parseInt id))))
|
||||
|
||||
(defn insert [data]
|
||||
(let [[{:keys [id]}] (j/insert! (get-conn) :vendors (unparse data))]
|
||||
(println "inserted vendor: " data ", id " id)
|
||||
(get-by-id id)))
|
||||
|
||||
(defn find-with-reminders []
|
||||
(query (-> base-query
|
||||
(helpers/merge-where [:= :invoice-reminder-schedule "Weekly"]))))
|
||||
|
||||
Reference in New Issue
Block a user