36 lines
1.3 KiB
Clojure
36 lines
1.3 KiB
Clojure
(ns auto-ap.background.vendor
|
|
(:require
|
|
[auto-ap.datomic :refer [conn]]
|
|
[auto-ap.utils :refer [heartbeat]]
|
|
[datomic.api :as d]
|
|
[mount.core :as mount]
|
|
[yang.scheduler :as scheduler]))
|
|
|
|
(defn refresh-vendor-usages []
|
|
(->> {:query {:find ['?v '?c '(count ?e)]
|
|
:in ['$]
|
|
:where ['[?v :vendor/name]
|
|
'(or-join [?v ?c ?e]
|
|
(and
|
|
[?e :invoice/vendor ?v]
|
|
[?e :invoice/client ?c])
|
|
(and
|
|
[?e :transaction/vendor ?v]
|
|
[?e :transaction/client ?c])
|
|
(and
|
|
[?e :journal-entry/vendor ?v]
|
|
[?e :journal-entry/client ?c]))]}
|
|
:args [(d/db conn)]}
|
|
(d/query)
|
|
(map (fn [[v c cnt]]
|
|
#:vendor-usage {:vendor v
|
|
:client c
|
|
:key (str v "-" c)
|
|
:count cnt}))
|
|
(d/transact conn)
|
|
deref))
|
|
|
|
(mount/defstate refresh-vendor-usages-worker
|
|
:start (scheduler/every (* 60 60 1000) (heartbeat refresh-vendor-usages "vendor-usages"))
|
|
:stop (scheduler/stop refresh-vendor-usages))
|