intuit import button and sysco importing.
This commit is contained in:
42
src/clj/auto_ap/background/requests.clj
Normal file
42
src/clj/auto_ap/background/requests.clj
Normal file
@@ -0,0 +1,42 @@
|
||||
(ns auto-ap.background.requests
|
||||
(:require
|
||||
[amazonica.aws.sqs :as sqs]
|
||||
[config.core :refer [env]]
|
||||
[mount.core :as mount]
|
||||
[clojure.tools.logging :as log]
|
||||
[auto-ap.intuit.import :as i]
|
||||
[unilog.context :as lc]))
|
||||
|
||||
(def stopped? (atom false))
|
||||
|
||||
(defn process-1 []
|
||||
(let [[{:keys [message-id receipt-handle body]}] (:messages (sqs/receive-message {:queue-url (:requests-queue-url env)
|
||||
:count 1}))]
|
||||
(when message-id
|
||||
(log/infof "processing message %s with body %s" message-id body )
|
||||
(if (= ":intuit" body)
|
||||
(try
|
||||
(i/upsert-transactions)
|
||||
(catch Exception e
|
||||
(log/error e))))
|
||||
(sqs/delete-message {:queue-url (:requests-queue-url env)
|
||||
:receipt-handle receipt-handle} ))))
|
||||
|
||||
(defn fake-message []
|
||||
(sqs/send-message {:queue-url (:requests-queue-url env)
|
||||
:message-body ":intuit"} ))
|
||||
|
||||
(defn listen-sqs []
|
||||
(lc/with-context {:source "Request poller"}
|
||||
(loop []
|
||||
(process-1)
|
||||
(log/info "Checking SQS....")
|
||||
(Thread/sleep 5000)
|
||||
(when-not @stopped?
|
||||
(log/info "stopping")
|
||||
(recur)))))
|
||||
|
||||
(mount/defstate request-listener
|
||||
:start (future (listen-sqs))
|
||||
:stop (reset! stopped? true))
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
[config.core :refer [env]]
|
||||
[datomic.api :as d]
|
||||
[unilog.context :as lc]
|
||||
[clj-time.core :as time]))
|
||||
[clj-time.core :as time]
|
||||
[mount.core :as mount]
|
||||
[yang.scheduler :as scheduler]))
|
||||
|
||||
(def bucket-name (:data-bucket env))
|
||||
|
||||
@@ -130,10 +132,10 @@
|
||||
))
|
||||
keys))]
|
||||
(log/infof "Imported %d invoices" (/ (count (:tempids result)) 2)))
|
||||
#_(doseq [k keys]
|
||||
(doseq [k keys]
|
||||
(mark-key k)))))
|
||||
|
||||
|
||||
(mount/defstate sysco-invoice-importer
|
||||
:start (scheduler/every (* 1000 60 60) import)
|
||||
:start (scheduler/every (* 1000 60 60) import-sysco)
|
||||
:stop (scheduler/stop sysco-invoice-importer))
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
[auto-ap.graphql.intuit-bank-accounts :as gq-intuit-bank-accounts]
|
||||
[auto-ap.graphql.invoices :as gq-invoices]
|
||||
[auto-ap.graphql.ledger :as gq-ledger]
|
||||
[auto-ap.graphql.requests :as gq-requests]
|
||||
[auto-ap.graphql.sales-orders :as gq-sales-orders]
|
||||
[auto-ap.graphql.transaction-rules :as gq-transaction-rules]
|
||||
[auto-ap.graphql.transactions :as gq-transactions]
|
||||
@@ -999,7 +1000,11 @@
|
||||
{:enum-value :requires_feedback}
|
||||
{:enum-value :excluded}]}}
|
||||
:mutations
|
||||
{:reject_invoices {:type '(list :id)
|
||||
{:request_intuit_import {:type 'String
|
||||
:args {}
|
||||
:resolve :mutation/request-intuit-import}
|
||||
|
||||
:reject_invoices {:type '(list :id)
|
||||
:args {:invoices {:type '(list :id)}}
|
||||
:resolve :mutation/reject-invoices}
|
||||
|
||||
@@ -1408,6 +1413,7 @@
|
||||
:mutation/void-payment gq-checks/void-check
|
||||
:mutation/edit-expense-accounts gq-invoices/edit-expense-accounts
|
||||
:mutation/import-ledger gq-ledger/import-ledger
|
||||
:mutation/request-intuit-import gq-requests/request-intuit-import
|
||||
:get-vendor gq-vendors/get-graphql})
|
||||
schema/compile))
|
||||
|
||||
|
||||
11
src/clj/auto_ap/graphql/requests.clj
Normal file
11
src/clj/auto_ap/graphql/requests.clj
Normal file
@@ -0,0 +1,11 @@
|
||||
(ns auto-ap.graphql.requests
|
||||
(:require
|
||||
[amazonica.aws.sqs :as sqs]
|
||||
[auto-ap.graphql.utils :refer [assert-admin]]
|
||||
[config.core :refer [env]]))
|
||||
|
||||
(defn request-intuit-import [context value args]
|
||||
(assert-admin (:id context))
|
||||
(:message-id (sqs/send-message {:queue-url (:requests-queue-url env)
|
||||
:message-body ":intuit"} )))
|
||||
|
||||
@@ -55,6 +55,11 @@
|
||||
:input-stream (io/make-input-stream (.getBytes t) {})
|
||||
:metadata {:content-type "application/text"}))
|
||||
|
||||
(defn copy-prod-refresh-token []
|
||||
(set-refresh-token (slurp (:object-content (s3/get-object
|
||||
:bucket-name "data.prod.app.integreatconsult.com"
|
||||
:key "intuit/refresh-token")))))
|
||||
|
||||
(defn init-tokens [access refresh]
|
||||
(set-access-token access)
|
||||
(set-refresh-token refresh))
|
||||
|
||||
@@ -25,6 +25,18 @@
|
||||
[?iab :intuit-bank-account/external-id ?external-id]]
|
||||
db #_client-whitelist)))
|
||||
|
||||
|
||||
(defn allow-once [f]
|
||||
(let [in-progress? (atom false)]
|
||||
(fn []
|
||||
(println in-progress?)
|
||||
(when (= false @in-progress?)
|
||||
(try
|
||||
(reset! in-progress? true)
|
||||
(f)
|
||||
(finally
|
||||
(reset! in-progress? false)))))))
|
||||
|
||||
(defn upsert-transactions []
|
||||
(let [db (d/db conn)
|
||||
import-id (y/start-import :import-source/intuit "Automated Intuit User")
|
||||
@@ -56,7 +68,7 @@
|
||||
:import-batch/suppressed (count (:suppressed result))}))))))
|
||||
(y/finish-import (assoc @stats :db/id import-id))))
|
||||
|
||||
|
||||
(def upsert-transactions (allow-once upsert-transactions))
|
||||
|
||||
|
||||
(defn dry-run-upsert-transactions []
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
[auto-ap.yodlee.core2 :as yodlee2]
|
||||
[auto-ap.graphql.clients :as gq-clients]
|
||||
[auto-ap.background.invoices]
|
||||
[auto-ap.background.requests :as requests]
|
||||
[auto-ap.background.sysco :as sysco]
|
||||
[auto-ap.background.vendor :as vendor]
|
||||
[auto-ap.square.core :as square]
|
||||
[auto-ap.datomic.migrate :as migrate]
|
||||
@@ -40,6 +42,8 @@
|
||||
#'ledger/touch-broken-ledger-worker
|
||||
#'ledger/process-txes-worker
|
||||
#'ledger/ledger-reconciliation-worker
|
||||
#'requests/request-listener
|
||||
#'sysco/sysco-invoice-importer
|
||||
#'auto-ap.background.invoices/close-auto-invoices-worker
|
||||
#'gq-clients/current-balance-worker
|
||||
#'yodlee/import-transaction-worker
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
[auto-ap.effects.forward :as forward]
|
||||
[auto-ap.views.pages.data-page :as data-page]
|
||||
[clojure.set :as set]
|
||||
[auto-ap.views.components.buttons :as buttons]))
|
||||
[auto-ap.views.components.buttons :as buttons]
|
||||
[clojure.string :as str]))
|
||||
|
||||
|
||||
(def default-read [:user-name :date :source :status :id :imported :suppressed :extant])
|
||||
@@ -39,6 +40,25 @@
|
||||
(set/rename-keys (:result result)
|
||||
{:import-batches :data})])}}))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::success-intuit
|
||||
(fn [db [_ n]]
|
||||
(assoc db ::msg (str "Your job " (:request-intuit-import n) " has been scheduled." ))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::msg
|
||||
(fn [db]
|
||||
(::msg db)))
|
||||
|
||||
(re-frame/reg-event-fx ::request-intuit
|
||||
[with-user ]
|
||||
(fn [{:keys [db user] :as cofx} [_ params]]
|
||||
{:graphql {:token user
|
||||
:owns-state {:single ::intuit}
|
||||
:query "mutation RequestIntuitImport{request_intuit_import}"
|
||||
:on-success [::success-intuit]
|
||||
}}))
|
||||
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::mounted
|
||||
@@ -52,18 +72,32 @@
|
||||
::unmounted
|
||||
(fn [{:keys [db]}]
|
||||
{:dispatch [::data-page/dispose ::page]
|
||||
::track/dispose {:id ::params}}))
|
||||
::track/dispose {:id ::params}
|
||||
:db (dissoc db ::msg)}))
|
||||
|
||||
;; VIEWS
|
||||
(def import-batch-content
|
||||
(with-meta
|
||||
(fn []
|
||||
(let [user @(re-frame/subscribe [::subs/user])]
|
||||
(let [user @(re-frame/subscribe [::subs/user])
|
||||
request-import-status @(re-frame/subscribe [::status/single ::intuit])
|
||||
message @(re-frame/subscribe [::msg])]
|
||||
[:div
|
||||
[:h1.title "Import Batches"]
|
||||
(when message
|
||||
[:div.notification.is-info.is-light message])
|
||||
(when (= "admin" (:user/role user))
|
||||
[table/table {:id :import-batches
|
||||
:data-page ::page}])]))
|
||||
[:div
|
||||
[:div.is-pulled-right
|
||||
[:div.buttons
|
||||
[:button.button.is-primary-two.is-medium {:aria-haspopup true
|
||||
:type "button"
|
||||
:on-click (dispatch-event [::request-intuit])
|
||||
:disabled (status/disabled-for request-import-status)
|
||||
:class (status/class-for request-import-status)}
|
||||
"Start Intuit Import"]]]
|
||||
[table/table {:id :import-batches
|
||||
:data-page ::page}]])]))
|
||||
{:component-did-mount (dispatch-event [::mounted ])
|
||||
:component-will-unmount #(re-frame/dispatch-sync [::unmounted])}))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user