Makes integreat run on datomic cloud

This commit is contained in:
2022-08-23 12:13:12 -07:00
parent 58b9dcf272
commit d02fba2b44
58 changed files with 2163 additions and 1257 deletions

View File

@@ -1,9 +1,9 @@
(ns auto-ap.datomic.accounts
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query uri]]
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query conn pull-many]]
[clojure.string :as str]
[datomic.api :as d]
[datomic.client.api :as dc]
[clojure.tools.logging :as log]))
(defn <-datomic [a]
@@ -37,21 +37,21 @@
(let [query (cond-> {:query {:find [(list 'pull '?e default-read)]
:in ['$]
:where [['?e :account/name]]}
:args [(d/db (d/connect uri))]}
:args [(dc/db conn)]}
(:account-set args) (merge-query {:query {:in ['?account-set]
:where [['?e :account/account-set '?account-set]]}
:args [(:account-set args)]}))]
(->>
(d/query query)
(dc/q query)
(map first)
(map <-datomic)))))
(defn get-by-id [id]
(let [query {:query {:find [(list 'pull '?e default-read)]
:in ['$ '?e]}
:args [(d/db (d/connect uri) ) id]}]
:args [(dc/db conn ) id]}]
(->>
(d/query query)
(dc/q query)
(map first)
(map <-datomic)
first)))
@@ -59,38 +59,40 @@
(defn get-for-vendor [vendor-id client-id]
(if client-id
(->>
(d/q [:find (list 'pull '?e default-read)
:in '$ '?v '?c
:where '(or-join [?v ?c ?e]
(and [?v :vendor/account-overrides ?ao]
[?ao :vendor-account-override/client ?c]
[?ao :vendor-account-override/account ?e])
(and [?v :vendor/account-overrides ?ao]
(not [?ao vendor-account-override/client ?c])
[?v :vendor/default-account ?e])
(and (not [?v :vendor/account-overrides])
[?v :vendor/default-account ?e]))]
(dc/q '[:find (pull ?e r)
:in $ ?v ?c r
:where (or-join [?v ?c ?e]
(and [?v :vendor/account-overrides ?ao]
[?ao :vendor-account-override/client ?c]
[?ao :vendor-account-override/account ?e])
(and [?v :vendor/account-overrides ?ao]
(not [?ao :vendor-account-override/client ?c])
[?v :vendor/default-account ?e])
(and (not [?v :vendor/account-overrides])
[?v :vendor/default-account ?e]))]
(d/db conn )
(dc/db conn )
vendor-id
client-id)
client-id
default-read)
(map first)
(map <-datomic)
first)
(d/q [:find (list 'pull '?e default-read)
:in '$ '?v
:where '[?v :vendor/default-account ?e]]
(<-datomic (dc/q '[:find (pull ?e r)
:in $ ?v r
:where [?v :vendor/default-account ?e]]
(d/db conn )
vendor-id)))
(dc/db conn )
vendor-id
default-read))))
(defn get-account-by-numeric-code-and-sets [numeric-code _]
(let [query (cond-> {:query {:find ['(pull ?e [* {:account/type [:db/ident :db/id]}])]
:in ['$ '?numeric-code]
:where ['[?e :account/numeric-code ?numeric-code]]}
:args [(d/db (d/connect uri)) numeric-code]})]
:args [(dc/db conn) numeric-code]})]
(->>
(d/query query)
(dc/q query)
(map first)
(map <-datomic)
(first))))
@@ -121,13 +123,13 @@
(cond->> query
true (d/query)
true (dc/q)
true (apply-sort-3 args)
true (apply-pagination args))))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db default-read ids)
(let [results (->> (pull-many db default-read ids)
(group-by :db/id))
accounts (->> ids
(map results)
@@ -137,7 +139,7 @@
(defn get-graphql [args]
(log/info "ARGS" args)
(let [db (d/db conn)
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))
matching-count]))

View File

@@ -1,7 +1,7 @@
(ns auto-ap.datomic.bank-accounts
(:require
[auto-ap.datomic :refer [uri]]
[datomic.api :as d]))
[auto-ap.datomic :refer [conn]]
[datomic.client.api :as dc]))
(defn add-arg [query name value where & rest]
(let [query (-> query
@@ -21,10 +21,10 @@
(defn get-by-id [id]
(->>
(d/query (-> {:query {:find [default-read]
(dc/q (-> {:query {:find [default-read]
:in ['$]
:where []}
:args [(d/db (d/connect uri))]}
:args [(dc/db conn)]}
(add-arg '?e id ['?e])))
(map first)
(<-datomic)

View File

@@ -1,10 +1,17 @@
(ns auto-ap.datomic.checks
(:require [datomic.api :as d]
[auto-ap.datomic :refer [merge-query apply-sort-3 apply-pagination add-sorter-fields conn]]
[auto-ap.graphql.utils :refer [limited-clients]]
[clojure.set :refer [rename-keys]]
[clj-time.coerce :as c]
[clojure.tools.logging :as log]))
(:require
[auto-ap.datomic
:refer [add-sorter-fields
apply-pagination
apply-sort-3
conn
merge-query
pull-many]]
[auto-ap.graphql.utils :refer [limited-clients]]
[clj-time.coerce :as c]
[datomic.client.api :as dc]
[clojure.set :refer [rename-keys]]
[clojure.tools.logging :as log]))
(defn <-datomic [result]
(-> result
@@ -28,7 +35,7 @@
{:transaction/_payment [:db/id :transaction/date]}])
(defn raw-graphql-ids
([args] (raw-graphql-ids (d/db conn) args))
([args] (raw-graphql-ids (dc/db conn) args))
([db args]
(let [check-number-like (try (Long/parseLong (:check-number-like args)) (catch Exception _ nil))
query (cond-> {:query {:find []
@@ -148,12 +155,12 @@
(log/info query)
(cond->> query
true (d/query)
true (apply-sort-3 args)
true (dc/q)
true (apply-sort-3 (assoc args :default-asc? false))
true (apply-pagination args)))))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db default-read ids)
(let [results (->> (pull-many db default-read ids)
(group-by :db/id))
payments (->> ids
(map results)
@@ -163,7 +170,7 @@
(defn get-graphql [args]
(log/info (:id args))
(let [db (d/db conn)
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))
@@ -174,13 +181,21 @@
(->> {:query {:find ['?e]
:in ['$ '[?e ...]]
:where ['[?e :payment/date]]}
:args [(d/db conn) ids]}
(d/query)
:args [(dc/db conn) ids]}
(dc/q)
(map first)
vec)
[]))
(defn get-by-id [id]
(->>
(d/pull (d/db conn) default-read id)
(dc/pull (dc/db conn) default-read id)
(<-datomic)))
(defn pay [db e amount]
(let [current-outstanding-balance (-> (dc/pull db [:invoice/outstanding-balance] e) :invoice/outstanding-balance)
new-outstanding-balance (- current-outstanding-balance amount)]
[[:db/add e :invoice/outstanding-balance new-outstanding-balance]
[:db/add e :invoice/status (if (> new-outstanding-balance 0)
:invoice-status/unpaid
:invoice-status/paid)]]))

View File

@@ -1,8 +1,10 @@
(ns auto-ap.datomic.clients
(:require
[auto-ap.datomic :refer [conn uri]]
[auto-ap.datomic :refer [conn]]
[auto-ap.search :as search]
[clj-time.coerce :as coerce]
[datomic.api :as d]))
[clojure.string :as str]
[datomic.client.api :as dc]))
(defn cleanse [e]
(-> e
@@ -27,7 +29,7 @@
(update :bank-account/sort-order (fn [so] (or so i)))))
(range) bas)))))
(defn get-all []
(->> (d/q '[:find (pull ?e [*
(->> (dc/q '[:find (pull ?e [*
{:client/square-integration-status [:integration-status/message
:integration-status/last-attempt
:integration-status/last-updated
@@ -56,14 +58,13 @@
{:plaid-item/_client [*]}
{:client/emails [:db/id :email-contact/email :email-contact/description]}])
:where [?e :client/name]]
(d/db (d/connect uri)))
(dc/db conn))
(map first)
(map cleanse)))
(defn get-by-id [id]
(->>
(d/pull (d/db conn )
(dc/pull (dc/db conn )
'[* {:client/bank-accounts [* {:bank-account/type [*]
:bank-account/yodlee-account [:yodlee-account/name :yodlee-account/id :yodlee-account/number]
:bank-account/intuit-bank-account [:intuit-bank-account/name :intuit-bank-account/external-id :db/id]
@@ -79,9 +80,28 @@
(defn code->id [code]
(->>
(d/query (-> {:query {:find ['?e]
(dc/q (-> {:query {:find ['?e]
:in ['$ '?code]
:where [['?e :client/code '?code ]]}
:args [(d/db (d/connect uri)) code]}))
:args [(dc/db conn) code]}))
(first)
(first)))
(defn best-match [identifier]
(first (search/search-ids {:q (str/replace identifier #"[\(\)\-/\*\]\[\#:\&]" " ")} "client")))
(defn exact-match [identifier]
(first (search/search-ids {:exact-match (str/upper-case identifier)} "client")))
(defn rebuild-search-index []
(search/full-index-query
(for [result (map first (dc/qseq '[:find (pull ?v [:client/name :client/matches :db/id])
:in $
:where [?v :client/code]]
(dc/db conn)))
match (conj (or (:client/matches result) [])
(:client/name result))]
{:id (:db/id result)
:text match
:exact-match (str/upper-case match)})
"client"))

View File

@@ -1,10 +1,10 @@
(ns auto-ap.datomic.expected-deposit
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query]]
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query pull-many]]
[auto-ap.graphql.utils :refer [limited-clients]]
[clj-time.coerce :as c]
[datomic.api :as d]))
[datomic.client.api :as dc]))
(defn <-datomic [result]
(let [transaction (first (:transaction/_expected-deposit result))
@@ -88,12 +88,12 @@
:where ['[?e :expected-deposit/date ?sort-default]]}}))]
(cond->> query
true (d/query)
true (dc/q)
true (apply-sort-3 args)
true (apply-pagination args))))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db default-read ids)
(let [results (->> (pull-many db default-read ids)
(group-by :db/id))
payments (->> ids
(map results)
@@ -101,7 +101,7 @@
(mapv <-datomic)
(map (fn get-totals [ed]
(assoc ed :totals
(->> (d/q '[:find ?d4 (count ?c) (sum ?a)
(->> (dc/q '[:find ?d4 (count ?c) (sum ?a)
:in $ ?ed
:where [?ed :expected-deposit/charges ?c]
[?c :charge/total ?a]
@@ -110,7 +110,7 @@
[(clj-time.coerce/from-date ?d) ?d2]
[(auto-ap.time/localize ?d2) ?d3]
[(clj-time.coerce/to-local-date ?d3) ?d4]]
(d/db conn)
(dc/db conn)
(:db/id ed))
(map (fn [[date count amount]]
{:date (c/to-date-time date)
@@ -119,7 +119,7 @@
payments))
(defn get-graphql [args]
(let [db (d/db conn)
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))

View File

@@ -1,7 +1,13 @@
(ns auto-ap.datomic.invoices
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query uri]]
:refer [add-sorter-fields
apply-pagination
apply-sort-3
conn
merge-query
pull-many
remove-nils]]
[auto-ap.datomic.accounts :as d-accounts]
[auto-ap.datomic.vendors :as d-vendors]
[auto-ap.graphql.utils :refer [limited-clients]]
@@ -9,7 +15,7 @@
[clj-time.coerce :as coerce]
[clj-time.core :as time]
[clojure.set :refer [rename-keys]]
[datomic.api :as d]))
[datomic.client.api :as dc]))
(def default-read '[*
{:invoice/client [:client/name :db/id :client/locations :client/code]}
@@ -37,7 +43,7 @@
(defn raw-graphql-ids
([args]
(raw-graphql-ids (d/db conn) args))
(raw-graphql-ids (dc/db conn) args))
([db args]
(->> (cond-> {:query {:find []
:in ['$]
@@ -164,13 +170,13 @@
(merge-query {:query {:find ['?sort-default '?e ]
:where ['[?e :invoice/client]
'[?e :invoice/date ?sort-default]]}}) )
(d/query)
(dc/q)
(apply-sort-3 args)
(apply-pagination args))))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db default-read ids)
(let [results (->> (pull-many db default-read ids)
(group-by :db/id))
invoices (->> ids
@@ -182,11 +188,11 @@
(defn sum-outstanding [ids]
(->>
(d/query {:query {:find ['?id '?o]
(dc/q {:query {:find ['?id '?o]
:in ['$ '[?id ...]]
:where ['[?id :invoice/outstanding-balance ?o]]
}
:args [(d/db conn)
:args [(dc/db conn)
ids]})
(map last)
(reduce
@@ -196,11 +202,11 @@
(defn sum-total-amount [ids]
(->>
(d/query {:query {:find ['?id '?o]
(dc/q {:query {:find ['?id '?o]
:in ['$ '[?id ...]]
:where ['[?id :invoice/total ?o]]
}
:args [(d/db conn)
:args [(dc/db conn)
ids]})
(map last)
(reduce
@@ -209,7 +215,7 @@
(defn get-graphql [args]
(let [db (d/db (d/connect uri))
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)
outstanding (sum-outstanding ids-to-retrieve)
total-amount (sum-total-amount ids-to-retrieve)]
@@ -221,34 +227,34 @@
total-amount]))
(defn get-by-id [id]
(-> (d/db (d/connect uri))
(d/pull default-read id)
(-> (dc/db conn)
(dc/pull default-read id)
(<-datomic)))
(defn get-multi [ids]
(map <-datomic
(-> (d/db (d/connect uri))
(d/pull-many default-read ids))))
(pull-many (dc/db conn) default-read ids )))
(defn find-conflicting [{:keys [:invoice/invoice-number :invoice/vendor :invoice/client :db/id]}]
(->> (d/query
(cond-> {:query {:find [(list 'pull '?e default-read)]
:in ['$ '?invoice-number '?vendor '?client '?invoice-id]
:where '[[?e :invoice/invoice-number ?invoice-number]
[?e :invoice/vendor ?vendor]
[?e :invoice/client ?client]
(not [?e :invoice/status :invoice-status/voided])
[(not= ?e ?invoice-id)]]}
:args [(d/db (d/connect uri)) invoice-number vendor client (or id 0)]}))
(->> (dc/q
(cond-> {:query {:find [(list 'pull '?e default-read)]
:in ['$ '?invoice-number '?vendor '?client '?invoice-id]
:where '[[?e :invoice/invoice-number ?invoice-number]
[?e :invoice/vendor ?vendor]
[?e :invoice/client ?client]
(not [?e :invoice/status :invoice-status/voided])
[(not= ?e ?invoice-id)]]}
:args [(dc/db conn) invoice-number vendor client (or id 0)]}))
(map first)
(map <-datomic)))
(defn get-existing-set []
(let [vendored-results (set (d/query {:query {:find ['?vendor '?client '?invoice-number]
(let [vendored-results (set (dc/q {:query {:find ['?vendor '?client '?invoice-number]
:in ['$]
:where '[[?e :invoice/invoice-number ?invoice-number]
[?e :invoice/vendor ?vendor]
@@ -256,8 +262,8 @@
(not [?e :invoice/status :invoice-status/voided])
]}
:args [(d/db (d/connect uri))]}))
vendorless-results (->> (d/query {:query {:find ['?client '?invoice-number]
:args [(dc/db conn)]}))
vendorless-results (->> (dc/q {:query {:find ['?client '?invoice-number]
:in ['$]
:where '[[?e :invoice/invoice-number ?invoice-number]
(not [?e :invoice/vendor])
@@ -265,7 +271,7 @@
(not [?e :invoice/status :invoice-status/voided])
]}
:args [(d/db (d/connect uri))]})
:args [(dc/db conn)]})
(mapv (fn [[client invoice-number]]
[nil client invoice-number]) )
set)]
@@ -276,37 +282,37 @@
(->> {:query {:find ['?e]
:in ['$ '[?e ...]]
:where ['[?e :invoice/date]]}
:args [(d/db conn) ids]}
(d/query)
:args [(dc/db conn) ids]}
(dc/q)
(map first)
vec)
[]))
(defn code-invoice [invoice]
(let [db (d/db auto-ap.datomic/conn)
(let [db (dc/db auto-ap.datomic/conn)
client-id (:invoice/client invoice)
vendor-id (:invoice/vendor invoice)
date (:invoice/date invoice)
vendor (d/pull db '[*] vendor-id)
vendor (dc/pull db '[*] vendor-id)
due (when (:vendor/terms vendor)
(-> date
(coerce/to-date-time)
(time/plus (time/days (d-vendors/terms-for-client-id vendor client-id)))
coerce/to-date))
automatically-paid? (boolean (seq (d/q '[:find [?c ...]
:in $ ?v ?c
:where [?v :vendor/automatically-paid-when-due ?c]]
automatically-paid? (boolean (seq (map first (dc/q '[:find ?c
:in $ ?v ?c
:where [?v :vendor/automatically-paid-when-due ?c]]
db
vendor-id
client-id))))
[schedule-payment-dom] (map first (dc/q '[:find ?dom
:in $ ?v ?c
:where [?v :vendor/schedule-payment-dom ?sp ]
[?sp :vendor-schedule-payment-dom/client ?c]
[?sp :vendor-schedule-payment-dom/dom ?dom]]
db
vendor-id
client-id)))
[schedule-payment-dom] (d/q '[:find [?dom ...]
:in $ ?v ?c
:where [?v :vendor/schedule-payment-dom ?sp ]
[?sp :vendor-schedule-payment-dom/client ?c]
[?sp :vendor-schedule-payment-dom/dom ?dom]]
db
vendor-id
client-id)
client-id))
scheduled-payment (cond automatically-paid?
due
@@ -324,3 +330,19 @@
true (assoc :invoice/expense-accounts [default-expense-account])
due (assoc :invoice/due due)
scheduled-payment (assoc :invoice/scheduled-payment scheduled-payment))))
(defn propose-invoice [db invoice]
(let [existing? (boolean (seq (dc/q '[:find ?i
:in $ ?invoice-number ?client ?vendor
:where
[?i :invoice/invoice-number ?invoice-number]
[?i :invoice/client ?client]
[?i :invoice/vendor ?vendor]
(not [?i :invoice/status :invoice-status/voided])]
db
(:invoice/invoice-number invoice)
(:invoice/client invoice)
(:invoice/vendor invoice))))]
(if existing?
[]
[(doto (remove-nils invoice) println)])))

View File

@@ -1,9 +1,16 @@
(ns auto-ap.datomic.ledger
(:require [datomic.api :as d]
[auto-ap.graphql.utils :refer [limited-clients]]
[auto-ap.datomic :refer [merge-query apply-sort-3 apply-pagination add-sorter-fields conn]]
[clj-time.coerce :as c]
[auto-ap.datomic.accounts :as d-accounts]))
(:require
[auto-ap.datomic
:refer [add-sorter-fields
apply-pagination
apply-sort-3
conn
merge-query
pull-many]]
[auto-ap.datomic.accounts :as d-accounts]
[auto-ap.graphql.utils :refer [limited-clients]]
[clj-time.coerce :as c]
[datomic.client.api :as dc]))
(defn raw-graphql-ids [db args]
(let [query (cond-> {:query {:find []
@@ -120,12 +127,12 @@
true
(merge-query {:query {:find ['?sort-default '?e] :where ['[?e :journal-entry/date ?sort-default]]}}))]
(->> query
(d/query)
(dc/q)
(apply-sort-3 (update args :sort conj {:sort-key "default-2" :asc true}))
(apply-pagination args))))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db '[* {:journal-entry/client [:client/name :client/code :db/id]
(let [results (->> (pull-many db '[* {:journal-entry/client [:client/name :client/code :db/id]
:journal-entry/vendor [:vendor/name :db/id]
:journal-entry/line-items [* {:journal-entry-line/account [*
{:account/type [*]}
@@ -154,7 +161,7 @@
(map first))))
(defn get-graphql [args]
(let [db (d/db conn)
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))
matching-count]))
@@ -164,8 +171,8 @@
(->> {:query {:find ['?e]
:in ['$ '[?e ...]]
:where ['[?e :journal-entry/date]]}
:args [(d/db conn) ids]}
(d/query)
:args [(dc/db conn) ids]}
(dc/q)
(map first)
vec)
[]))

View File

@@ -1,10 +1,15 @@
(ns auto-ap.datomic.reports
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query]]
:refer [add-sorter-fields
apply-pagination
apply-sort-3
conn
merge-query
pull-many]]
[auto-ap.graphql.utils :refer [can-see-client? limited-clients]]
[clj-time.coerce :as c]
[datomic.api :as d]))
[datomic.client.api :as dc]))
(defn raw-graphql-ids [db args]
(let [query (cond-> {:query {:find []
@@ -33,12 +38,12 @@
true
(merge-query {:query {:find ['?sort-default '?e] :where ['[?e :report/created ?sort-default]]}}))]
(->> query
(d/query)
(dc/q)
(apply-sort-3 (update args :sort conj {:sort-key "default-2" :asc true}))
(apply-pagination args))))
(defn graphql-results [ids db args]
(let [results (->> (d/pull-many db '[:db/id :report/client :report/created :report/url :report/name :report/creator]
(let [results (->> (pull-many db '[:db/id :report/client :report/created :report/url :report/name :report/creator]
ids)
(map #(update % :report/created c/from-date))
(group-by :db/id))]
@@ -53,7 +58,7 @@
(map :db/id (:report/client r))))))))
(defn get-graphql [args]
(let [db (d/db conn)
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))

View File

@@ -1,10 +1,18 @@
(ns auto-ap.datomic.sales-orders
(:require [auto-ap.datomic :refer [add-sorter-fields apply-pagination apply-sort-3 merge-query uri]]
[auto-ap.graphql.utils :refer [limited-clients]]
[clj-time.coerce :as c]
[datomic.api :as d]
[clojure.tools.logging :as log]
[clojure.set :as set]))
(:require
[auto-ap.datomic
:refer [add-sorter-fields-2
apply-pagination
apply-sort-3
merge-query
pull-many
conn]]
[auto-ap.graphql.utils :refer [limited-clients]]
[clj-time.coerce :as c]
[clojure.set :as set]
[clojure.tools.logging :as log]
[datomic.client.api :as dc]
))
(defn <-datomic [result]
(-> result
@@ -21,12 +29,96 @@
{:sales-order/client [:client/name :db/id :client/code]
:sales-order/charges [* {:charge/processor [:db/ident]} {:expected-deposit/_charges [:db/id]}]}])
#_(defn client-index-search [db attr client-ids [start end]]
(for [c client-ids
d
(dc/q '[:find ?e
:in $ ?start ?end
:where [?e :sales-order/client+date ?g]
[(>= ?g ?start)]
[(<= ?g ?end)]]
db [c start] [c end])
#_(dc/index-range db {:attrid attr
:start [c start]
:end [c end]})]
(first d)))
#_(comment
(do
(println "starting")
(doseq [n (partition-all 500 (dc/q '[:find ?s ?d
:where [?s :sales-order/date ?d]]
(dc/db conn)))]
(print ".")
(dc/transact conn {:tx-data (map (fn [[n d]] {:db/id n :sales-order/date d}) n)}))
(println "done"))
(time (count (client-index-search (dc/db conn)
:sales-order/client+date
[3575611821801781]
[#inst "2021-05-21T18:06:02.000-00:00"
#inst "2022-09-25T18:06:02.000-00:00"]
)))
(time (count (dc/q '[:find ?e
:in $ ?client ?start ?end
:where [?e :sales-order/client ?client]
[?e :sales-order/date ?date]
[(>= ?date ?start)]
[(<= ?date ?end)]]
(dc/db conn)
3575611821801781
#inst "2021-05-21T18:06:02.000-00:00"
#inst "2022-09-25T18:06:02.000-00:00"
)))
(time (do (count (dc/q '[:find ?e,
:in $ [[?s1 ?e1]]
:where
#_[(untuple ?period) [?s1 ?e1]]
[(q '[:find ?e
:in $ ?s1 ?e1
:where [?e :sales-order/client+date ?g]
[(>= ?g ?s1)]
[(<= ?g ?e1)]]
$ ?s1 ?e1) [?e ...]]
]
(dc/db conn) [[[3575611821801781 #inst "2022-08-21T18:06:02.000-00:00" ] [3575611821801781 #inst "2022-09-25T18:06:02.000-00:00"]]
[[3575611821801766 #inst "2022-08-21T18:06:02.000-00:00" ] [3575611821801766 #inst "2022-09-25T18:06:02.000-00:00"]]]))
(println "done")))
(dc/index-range (dc/db conn) {:attrid :sales-order/date+client3
:start [#inst "2022-08-25T18:06:02.000-00:00" ]
:end [#inst "2022-08-25T20:06:02.000-00:00" ]})
(dc/pull (dc/db conn) '[*] :sales-order/date+client3)
(dc/pull (dc/db conn) '[*] 5040161313201309)
#_(time (do (dc/q {:query '{:find [(count ?x)],
:in [$ ?client-id],
:where [[?e :sales-order/date+client3 ?x]]},
:args [(dc/db conn) 3575611821801781]})
(println "done")))
#_(datomic.dev-local.async/return-1)
(clojure.core.async/<!! (dca/transact conn {:tx-data [{:db/ident :sales-order/client+date
:db/valueType :db.type/tuple
:db/tupleAttrs [:sales-order/client :sales-order/date]
:db/cardinality :db.cardinality/one}]
:timeout 600000}))
)
(defn raw-graphql-ids [db args]
(let [query (cond-> {:query {:find []
:in ['$]
:where []}
:args [db]}
(:sort args) (add-sorter-fields {"client" ['[?e :sales-order/client ?c]
(:sort args) (add-sorter-fields-2 {"client" ['[?e :sales-order/client ?c]
'[?c :client/name ?sort-client]]
"location" ['[?e :sales-order/location ?sort-location]]
"source" ['[?e :sales-order/source ?sort-source]]
@@ -100,17 +192,17 @@
:args [(:total args)]})
true
(merge-query {:query {:find ['?sort-default '?e]
:where ['[?e :sales-order/date ?sort-default]]}}))]
(merge-query {:query {:find ['?date '?e]
:where ['[?e :sales-order/date ?date]]}}))]
(log/info "Sales query" query)
(cond->> query
true (d/query)
true (dc/q)
true (apply-sort-3 (assoc args :default-asc? false))
true (apply-pagination args))))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db default-read ids)
(let [results (->> (pull-many db default-read ids)
(group-by :db/id))
payments (->> ids
(map results)
@@ -121,19 +213,19 @@
(defn summarize-orders [ids]
(let [[total tax] (->>
(d/query {:query {:find ['(sum ?t) '(sum ?tax)]
(dc/q {:query {:find ['(sum ?t) '(sum ?tax)]
:with ['?id]
:in ['$ '[?id ...]]
:where ['[?id :sales-order/total ?t]
'[?id :sales-order/tax ?tax]]}
:args [(d/db (d/connect uri))
:args [(dc/db conn)
ids]})
first)]
{:total total
:tax tax}))
(defn get-graphql [args]
(let [db (d/db (d/connect uri))
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))
matching-count

View File

@@ -1,10 +1,15 @@
(ns auto-ap.datomic.transaction-rules
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 merge-query uri]]
:refer [add-sorter-fields
apply-pagination
apply-sort-3
conn
merge-query
pull-many]]
[auto-ap.graphql.utils :refer [limited-clients]]
[clojure.string :as str]
[datomic.api :as d]))
[datomic.client.api :as dc]))
(defn <-datomic [result]
result)
@@ -72,12 +77,12 @@
(cond->> query
true (d/query)
true (dc/q)
true (apply-sort-3 args)
true (apply-pagination args))))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db default-read ids)
(let [results (->> (pull-many db default-read ids)
(group-by :db/id))
transaction-rules (->> ids
(map results)
@@ -86,19 +91,19 @@
transaction-rules))
(defn get-graphql [args]
(let [db (d/db (d/connect uri))
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))
matching-count]))
(defn get-by-id [id]
(->>
(d/pull (d/db (d/connect uri)) default-read id)
(dc/pull (dc/db conn) default-read id)
(<-datomic)))
(defn get-all []
(mapv first
(d/query {:query {:find [(list 'pull '?e default-read )]
:in ['$]
:where ['[?e :transaction-rule/transaction-approval-status]]}
:args [(d/db (d/connect uri))]})))
(dc/q {:query {:find [(list 'pull '?e default-read )]
:in ['$]
:where ['[?e :transaction-rule/transaction-approval-status]]}
:args [(dc/db conn)]})))

View File

@@ -1,18 +1,18 @@
(ns auto-ap.datomic.transactions
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query uri]]
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query conn pull-many]]
[auto-ap.datomic.accounts :as d-accounts]
[auto-ap.graphql.utils :refer [limited-clients]]
[clj-time.coerce :as coerce]
[clojure.string :as str]
[clojure.tools.logging :as log]
[datomic.api :as d]))
[datomic.client.api :as dc]))
(defn potential-duplicate-ids [db args]
(when (and (:potential-duplicates args)
(:bank-account-id args))
(->> (d/q '[:find ?tx ?amount ?date
(->> (dc/q '[:find ?tx ?amount ?date
:in $ ?ba
:where
[?tx :transaction/bank-account ?ba]
@@ -33,7 +33,7 @@
(defn raw-graphql-ids
([args] (raw-graphql-ids (d/db conn) args))
([args] (raw-graphql-ids (dc/db conn) args))
([db args]
(let [potential-duplicates (potential-duplicate-ids db args)
query (cond-> {:query {:find []
@@ -169,28 +169,28 @@
'(not [?e :transaction/approval-status :transaction-approval-status/suppressed])]}}))]
(log/info "query is" query)
(cond->> query
true (d/query)
true (dc/q)
true (apply-sort-3 (assoc args :default-asc? false))
true (apply-pagination args)))))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db '[* {:transaction/client [:client/name :db/id :client/code]
:transaction/approval-status [:db/ident :db/id]
:transaction/bank-account [:bank-account/name :bank-account/code :bank-account/yodlee-account-id :db/id :bank-account/locations :bank-account/current-balance]
:transaction/forecast-match [:db/id :forecasted-transaction/identifier]
:transaction/vendor [:db/id :vendor/name]
:transaction/matched-rule [:db/id :transaction-rule/note]
:transaction/payment [:db/id :payment/date]
:transaction/expected-deposit [:db/id :expected-deposit/date]
:transaction/accounts [:transaction-account/amount
:db/id
:transaction-account/location
{:transaction-account/account [:account/name :db/id
:account/location
{:account/client-overrides [:account-client-override/name
{:account-client-override/client [:db/id]}]}]}]
:transaction/yodlee-merchant [:db/id :yodlee-merchant/yodlee-id :yodlee-merchant/name]}]
ids)
(let [results (->> (pull-many db '[* {:transaction/client [:client/name :db/id :client/code]
:transaction/approval-status [:db/ident :db/id]
:transaction/bank-account [:bank-account/name :bank-account/code :bank-account/yodlee-account-id :db/id :bank-account/locations :bank-account/current-balance]
:transaction/forecast-match [:db/id :forecasted-transaction/identifier]
:transaction/vendor [:db/id :vendor/name]
:transaction/matched-rule [:db/id :transaction-rule/note]
:transaction/payment [:db/id :payment/date]
:transaction/expected-deposit [:db/id :expected-deposit/date]
:transaction/accounts [:transaction-account/amount
:db/id
:transaction-account/location
{:transaction-account/account [:account/name :db/id
:account/location
{:account/client-overrides [:account-client-override/name
{:account-client-override/client [:db/id]}]}]}]
:transaction/yodlee-merchant [:db/id :yodlee-merchant/yodlee-id :yodlee-merchant/name]}]
ids)
(map #(update % :transaction/date coerce/from-date))
(map #(update % :transaction/post-date coerce/from-date))
(map #(update % :transaction/accounts
@@ -203,7 +203,7 @@
(cond-> transaction
(:transaction/payment transaction) (update-in [:transaction/payment :payment/date] coerce/from-date)
(:transaction/expected-deposit transaction) (update-in [:transaction/expected-deposit :expected-deposit/date] coerce/from-date))
))
))
(map #(dissoc % :transaction/id))
(group-by :db/id))]
@@ -212,7 +212,7 @@
(map first))))
(defn get-graphql [args]
(let [db (d/db (d/connect uri))
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))
@@ -223,15 +223,15 @@
(->> {:query {:find ['?e]
:in ['$ '[?e ...]]
:where ['[?e :transaction/date]]}
:args [(d/db conn) ids]}
(d/query)
:args [(dc/db conn) ids]}
(dc/q)
(map first)
vec)
[]))
(defn get-by-id [id]
(->
(d/pull (d/db (d/connect uri))
(dc/pull (dc/db conn)
'[* {:transaction/client [:client/name :db/id :client/code :client/locations]
:transaction/approval-status [:db/ident :db/id]
:transaction/bank-account [:bank-account/name :bank-account/code :bank-account/yodlee-account-id :db/id :bank-account/locations :bank-account/current-balance]

View File

@@ -1,7 +1,7 @@
(ns auto-ap.datomic.users
(:require
[auto-ap.datomic :refer [uri]]
[datomic.api :as d]))
[auto-ap.datomic :refer [conn]]
[datomic.client.api :as dc]))
(defn add-arg [query name value where & rest]
(let [query (-> query
@@ -16,35 +16,35 @@
{:user/role [:db/ident]}])]
:in ['$]
:where []}
:args [(d/db (d/connect uri))]}
:args [(dc/db conn)]}
(add-arg '?e id ['?e]))]
(->> (d/query query)
(->> (dc/q query)
(map first)
(map #(update % :user/role :db/ident))
first)))
(defn find-or-insert! [{:keys [:user/provider :user/provider-id] :as new-user}]
(let [is-first-user? (not (seq (d/query {:query [:find '?e
(let [is-first-user? (not (seq (dc/q {:query [:find '?e
:in '$
:where '[?e :user/provider]]
:args [(d/db (d/connect uri))]})))
:args [(dc/db conn)]})))
user (some-> {:query [:find '(pull ?e [*
{:user/clients [*]}
{:user/role [:db/ident]}])
:in '$ '?provider '?provider-id
:where '[?e :user/provider ?provider]
'[?e :user/provider-id ?provider-id]]
:args [(d/db (d/connect uri)) provider provider-id]}
(d/query)
:args [(dc/db conn) provider provider-id]}
(dc/q)
first
first
(update :user/role :db/ident))]
(if user
user
(let [new-user-trans @(d/transact (d/connect uri) [(cond-> new-user
true (assoc :db/id "user")
is-first-user? (assoc :user/role :user-role/admin))])]
(let [new-user-trans (dc/transact conn {:tx-data [(cond-> new-user
true (assoc :db/id "user")
is-first-user? (assoc :user/role :user-role/admin))]})]
(get-by-id (-> new-user-trans :tempids (get "user")))))))
(defn raw-graphql [_]
@@ -53,9 +53,9 @@
{:user/role [:db/ident]}])]
:in ['$]
:where ['[?e :user/role]]}
:args [(d/db (d/connect uri))]})]
:args [(dc/db conn)]})]
(->> (d/query query)
(->> (dc/q query)
(map first)
(map #(update % :user/role :db/ident))
)))

View File

@@ -1,9 +1,9 @@
(ns auto-ap.datomic.vendors
(:require
[auto-ap.datomic :refer [conn merge-query uri add-sorter-fields apply-pagination merge-query apply-sort-3]]
[auto-ap.datomic :refer [conn merge-query add-sorter-fields apply-pagination merge-query apply-sort-3 pull-many]]
[auto-ap.graphql.utils :refer [limited-clients]]
[clojure.string :as str]
[datomic.api :as d]
[datomic.client.api :as dc]
[auto-ap.datomic.accounts :as d-accounts]))
(defn <-datomic [a]
@@ -63,7 +63,7 @@
(cond->> query
true (d/query)
true (dc/q)
true (apply-sort-3 args)
true (apply-pagination args))))
@@ -83,7 +83,7 @@
))
(defn graphql-results [ids db args]
(let [results (->> (d/pull-many db default-read ids)
(let [results (->> (pull-many db default-read ids)
(group-by :db/id))
vendors (->> ids
(map results)
@@ -93,7 +93,7 @@
vendors))
(defn get-graphql [args]
(let [db (d/db conn)
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))
matching-count])
@@ -104,8 +104,8 @@
(->> (cond-> {:query {:find [(list 'pull '?e default-read)]
:in ['$ '?e]
:where ['[?e :vendor/name]]}
:args [(d/db (d/connect uri)) id]})
(d/query)
:args [(dc/db conn) id]})
(dc/q)
(map first)
(map #(cleanse (:id args) %))
(map <-datomic)
@@ -114,7 +114,7 @@
(defn get-by-id [id]
(->> (d/q '[:find (pull ?e [*
(->> (dc/q '[:find (pull ?e [*
{:vendor/default-account [:account/name :db/id :account/location]
:vendor/legal-entity-tin-type [:db/ident :db/id]
:vendor/legal-entity-1099-type [:db/ident :db/id]
@@ -125,7 +125,7 @@
:vendor/automatically-paid-when-due [:db/id :client/name]}])
:in $ ?e
:where [?e]]
(d/db (d/connect uri))
(dc/db conn)
id)
(map first)
(map <-datomic)
@@ -165,3 +165,5 @@
client-id)))
first
boolean))

View File

@@ -1,10 +1,10 @@
(ns auto-ap.datomic.yodlee2
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 merge-query uri]]
:refer [add-sorter-fields apply-pagination apply-sort-3 merge-query conn pull-many]]
[auto-ap.graphql.utils :refer [limited-clients]]
[clj-time.coerce :as c]
[datomic.api :as d]))
[datomic.client.api :as dc]))
(def default-read '[*])
@@ -39,13 +39,13 @@
(merge-query {:query {:find ['?e ]
:where ['[?e :yodlee-provider-account/id]]}}) )
(d/query)
(dc/q)
(apply-sort-3 args)
(apply-pagination args)))
(defn graphql-results [ids db _]
(let [results (->> (d/pull-many db default-read ids)
(let [results (->> (pull-many db default-read ids)
(group-by :db/id))]
(->> ids
(map results)
@@ -54,7 +54,7 @@
(defn get-graphql [args]
(let [db (d/db (d/connect uri))
(let [db (dc/db conn)
{ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)]
[(->> (graphql-results ids-to-retrieve db args))
matching-count]))

View File

@@ -1,14 +1,14 @@
(ns auto-ap.datomic.yodlee-merchants
(:require
[auto-ap.datomic :refer [uri]]
[datomic.api :as d]))
[auto-ap.datomic :refer [conn]]
[datomic.client.api :as dc]))
(defn get-merchants [_]
;; TODO admin?
(let [query {:query {:find ['(pull ?e [:yodlee-merchant/name :yodlee-merchant/yodlee-id :db/id])]
:in ['$]
:where [['?e :yodlee-merchant/name]]}
:args [(d/db (d/connect uri))]}]
:args [(dc/db conn)]}]
(->>
(d/query query)
(dc/q query)
(mapv first))))