diff --git a/src/clj/auto_ap/db/checks.clj b/src/clj/auto_ap/db/checks.clj index fff1be10..9998484a 100644 --- a/src/clj/auto_ap/db/checks.clj +++ b/src/clj/auto_ap/db/checks.clj @@ -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)])) diff --git a/src/clj/auto_ap/db/companies.clj b/src/clj/auto_ap/db/companies.clj index f3d1ccba..4c40f75c 100644 --- a/src/clj/auto_ap/db/companies.clj +++ b/src/clj/auto_ap/db/companies.clj @@ -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))) - - - diff --git a/src/clj/auto_ap/db/invoices.clj b/src/clj/auto_ap/db/invoices.clj index 42536800..4a0c59f5 100644 --- a/src/clj/auto_ap/db/invoices.clj +++ b/src/clj/auto_ap/db/invoices.clj @@ -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)))) diff --git a/src/clj/auto_ap/db/invoices_expense_accounts.clj b/src/clj/auto_ap/db/invoices_expense_accounts.clj index 0e03b365..f020176f 100644 --- a/src/clj/auto_ap/db/invoices_expense_accounts.clj +++ b/src/clj/auto_ap/db/invoices_expense_accounts.clj @@ -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)) ) diff --git a/src/clj/auto_ap/db/reminders.clj b/src/clj/auto_ap/db/reminders.clj index 845f45da..93e63a1f 100644 --- a/src/clj/auto_ap/db/reminders.clj +++ b/src/clj/auto_ap/db/reminders.clj @@ -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 "
" body "
- Integreat.
") - :text (str "Hello " vendor-name ",\r\n" body "\r\n - Integreat.")}})) - (finish id))) diff --git a/src/clj/auto_ap/db/transactions.clj b/src/clj/auto_ap/db/transactions.clj index 3b5ffe22..5a101fbf 100644 --- a/src/clj/auto_ap/db/transactions.clj +++ b/src/clj/auto_ap/db/transactions.clj @@ -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.*]))))) diff --git a/src/clj/auto_ap/db/users.clj b/src/clj/auto_ap/db/users.clj index b92e154b..203369f3 100644 --- a/src/clj/auto_ap/db/users.clj +++ b/src/clj/auto_ap/db/users.clj @@ -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)])) diff --git a/src/clj/auto_ap/db/vendors.clj b/src/clj/auto_ap/db/vendors.clj index f90208b6..79c8b47a 100644 --- a/src/clj/auto_ap/db/vendors.clj +++ b/src/clj/auto_ap/db/vendors.clj @@ -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"]))))