(ns auto-ap.datomic.migrate.add-general-ledger (:require [datomic.api :as d] [auto-ap.ledger :as ledger])) (def add-general-ledger [[{:db/ident :general-ledger/source :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/doc "The type of entity that created this entry"} {:db/ident :general-ledger/client :db/valueType :db.type/ref :db/cardinality :db.cardinality/one :db/doc "The client for the ledger"} {:db/ident :general-ledger/date :db/valueType :db.type/instant :db/cardinality :db.cardinality/one :db/doc "The time for this entry"} {:db/ident :general-ledger/original-entity :db/valueType :db.type/ref :db/unique :db.unique/identity :db/cardinality :db.cardinality/one :db/doc "The thing that created this entry"} {:db/ident :general-ledger/vendor :db/valueType :db.type/ref :db/cardinality :db.cardinality/one :db/doc "The vendor for the ledger entry"} {:db/ident :general-ledger/amount :db/valueType :db.type/double :db/cardinality :db.cardinality/one :db/doc "The amount for the entry"} {:db/ident :general-ledger/location :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/doc "Location of the entry"} {:db/ident :general-ledger/from-expense-account :db/valueType :db.type/long :db/cardinality :db.cardinality/one :db/doc "The expense account from"} {:db/ident :general-ledger/to-expense-account :db/valueType :db.type/long :db/cardinality :db.cardinality/one :db/doc "The expense account to"} {:db/ident :general-ledger/cleared :db/valueType :db.type/boolean :db/cardinality :db.cardinality/one :db/doc "Has this cleared?"}]]) (defn add-general-ledger-fns [conn] [[{:db/ident :replace-general-ledger :db/doc "Deletes the general ledger entries for an entity" :db/fn (d/function '{:lang "clojure" :params [db origin] :code (let [ids (->> (d/query {:query {:find ['?e] :in ['$ '?origin] :where [['?e :general-ledger/original-entity '?origin]]} :args [db origin]}) (map first))] (into [] (map (fn [i] [:db/retractEntity i ]) ids)))})}]] ) (defn bulk-load-invoice-ledger [conn] (let [invoice-ids (map first (d/query {:query {:find '[?e] :in '[$] :where ['[?e :invoice/total]]} :args [(d/db conn)]})) z (->> invoice-ids (mapv #(ledger/entity-change->ledger (d/db conn) [:invoice %])))] (clojure.pprint/pprint z) z)) #_(bulk-load-invoice-ledger (d/connect auto-ap.datomic/uri)) (def make-entity-not-unique [[[:db/retract :general-ledger/original-entity :db/unique]]])