Files
integreat/src/clj/auto_ap/datomic/migrate/clients.clj

81 lines
4.4 KiB
Clojure

(ns auto-ap.datomic.migrate.clients
(:require [datomic.api :as d]))
(defn migrate-bank-account-numeric-codes [conn]
(let [existing-accounts (->> (d/query {:query {:find ['?c '?t2 '?e]
:in ['$]
:where ['[?c :client/bank-accounts ?e]
'[?e :bank-account/type ?t]
'[?t :db/ident ?t2]
'(not [?e :bank-account/numeric-code])]}
:args [(d/db conn)]})
(group-by (fn [[client type]]
[client type]))
(map second)
(mapcat (fn [account-set]
(map (fn [[_ type bank-account] idx]
[bank-account (+ (condp = type
:bank-account-type/check 11300
:bank-account-type/cash 11100
:bank-account-type/credit 20100)
1
idx)])
account-set (range))
))
(mapv (fn [[bank-account numeric-code]]
{:db/id bank-account
:bank-account/numeric-code numeric-code}))
)]
[existing-accounts])
)
(def norms-map {::add-bank-account-start-date
{:txes [[{:db/ident :bank-account/start-date
:db/doc "Setting this date prevents older transactions from being imported"
:db/valueType :db.type/instant
:db/cardinality :db.cardinality/one}]]}
::add-bank-account-current-balance
{:txes [[{:db/ident :bank-account/current-balance
:db/doc "A precomputed balance for the account"
:db/valueType :db.type/double
:db/cardinality :db.cardinality/one
:db/noHistory true}]]}
::add-bank-account-numeric-codes
{:txes [[{:db/ident :bank-account/numeric-code
:db/doc "The numeric code for the balance sheet"
:db/valueType :db.type/long
:db/cardinality :db.cardinality/one}]]}
::migrate-bank-account-numeric-codes
{:txes-fn `migrate-bank-account-numeric-codes
:requires [::add-bank-account-current-balance
::add-bank-account-numeric-codes]}
::add-locked-until
{:txes [[{:db/ident :client/locked-until
:db/doc "No new data before this date can be added/changed"
:db/valueType :db.type/instant
:db/cardinality :db.cardinality/one}]]}
::add-email-contacts
{:txes [[{:db/ident :email-contact/email
:db/doc "Email contact's email"
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}
{:db/ident :email-contact/description
:db/doc "Manager, Owner, etc"
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}
{:db/ident :client/emails
:db/doc "collection of email contacts"
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many}]]}
::add-use-date
{:txes [[{:db/ident :bank-account/use-date-instead-of-post-date?
:db/doc "Yodlee amex works weird"
:db/valueType :db.type/boolean
:db/cardinality :db.cardinality/one}]]}
})