51 lines
2.9 KiB
Clojure
51 lines
2.9 KiB
Clojure
(ns auto-ap.graphql.accounts
|
|
(:require [datomic.api :as d]
|
|
[auto-ap.datomic.accounts :as d-accounts]
|
|
[auto-ap.graphql.utils :refer [->graphql <-graphql enum->keyword] ]
|
|
[auto-ap.datomic :refer [uri merge-query remove-nils audit-transact]]
|
|
[clojure.tools.logging :as log]))
|
|
|
|
|
|
|
|
(defn get-accounts [context args value]
|
|
(->graphql (d-accounts/get-accounts (<-graphql args))))
|
|
|
|
(defn upsert-account [context args value]
|
|
(let [{{:keys [id client-overrides numeric-code location applicability account-set name type]} :account} (<-graphql args)]
|
|
(when-not id
|
|
(when (seq (d/query {:query {:find ['?e]
|
|
:in '[$ ?account-set ?numeric-code]
|
|
:where ['[?e :account/account-set ?account-set]
|
|
'[?e :account/numeric-code ?numeric-code]]}
|
|
:args [(d/db (d/connect uri)) account-set numeric-code]}))
|
|
|
|
(throw (ex-info (str "Account set " account-set " already has an account for code " numeric-code)
|
|
{} ))))
|
|
|
|
(let [original (if id (d/entity (d/db (d/connect uri)) id))
|
|
result (audit-transact (cond->
|
|
[(remove-nils
|
|
{:db/id (or id "new-account")
|
|
:account/name name
|
|
:account/type (keyword "account-type" (clojure.core/name type))
|
|
:account/applicability (enum->keyword applicability "account-applicability")
|
|
:account/account-set account-set
|
|
:account/location location
|
|
:account/numeric-code (if-not id
|
|
numeric-code)
|
|
:account/code (if-not id
|
|
(str numeric-code))})
|
|
[:reset (or id "new-account") :account/client-overrides
|
|
(mapv
|
|
(fn [client-override]
|
|
(remove-nils
|
|
{:db/id (:id client-override)
|
|
:account-client-override/client (:client-id client-override)
|
|
:account-client-override/name (:name client-override)}))
|
|
client-overrides)]]
|
|
(and (not location) (:account/location original)) (conj [:db/retract (or id "new-account") :account/location (:account/location original)]))
|
|
(:id context))]
|
|
(->graphql
|
|
(d-accounts/get-by-id (or id (get-in result [:tempids "new-account"])))))))
|
|
|