diff --git a/src/clj/auto_ap/datomic/migrate.clj b/src/clj/auto_ap/datomic/migrate.clj index 7235faa7..82d0f0d8 100644 --- a/src/clj/auto_ap/datomic/migrate.clj +++ b/src/clj/auto_ap/datomic/migrate.clj @@ -66,13 +66,9 @@ :auto-ap/add-new-vendors {:txes-fn 'auto-ap.datomic.migrate.add-new-vendors/add-new-vendors :requires [:auto-ap/fix-check-numbers]} :auto-ap/add-account-visibility-fields {:txes-fn 'auto-ap.datomic.migrate.account-sorting/add-account-visibility-fields :requires [:auto-ap/add-new-vendors]} :auto-ap/make-every-account-visible {:txes-fn 'auto-ap.datomic.migrate.account-sorting/make-every-account-visible :requires [:auto-ap/add-account-visibility-fields]} - :auto-ap/add-general-ledger3 {:txes add-general-ledger/add-general-ledger :requires [:auto-ap/make-every-account-visible]} - :auto-ap/add-general-ledger-fns {:txes-fn 'auto-ap.datomic.migrate.add-general-ledger/add-general-ledger-fns :requires [:auto-ap/add-general-ledger3]} - - - :auto-ap/make-entity-not-unique {:txes auto-ap.datomic.migrate.add-general-ledger/make-entity-not-unique :requires [:auto-ap/add-general-ledger-fns]} - :auto-ap/bulk-load-invoice-ledger2 {:txes-fn 'auto-ap.datomic.migrate.add-general-ledger/bulk-load-invoice-ledger :requires [:auto-ap/make-entity-not-unique]} - + :auto-ap/add-general-ledger6 {:txes add-general-ledger/add-general-ledger :requires [:auto-ap/make-every-account-visible]} + :auto-ap/add-general-ledger-fns2 {:txes-fn 'auto-ap.datomic.migrate.add-general-ledger/add-general-ledger-fns :requires [:auto-ap/add-general-ledger6]} + #_#_:auto-ap/bulk-load-invoice-ledger2 {:txes-fn 'auto-ap.datomic.migrate.add-general-ledger/bulk-load-invoice-ledger :requires [:auto-ap/make-entity-not-unique]} }] (println "Conforming database...") diff --git a/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj b/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj index 1da1088c..13bd96b3 100644 --- a/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj +++ b/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj @@ -3,47 +3,65 @@ [auto-ap.ledger :as ledger])) (def add-general-ledger - [[{:db/ident :general-ledger/source + [[{:db/ident :journal-entry/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/ident :journal-entry/client :db/valueType :db.type/ref :db/cardinality :db.cardinality/one :db/doc "The client for the ledger"} - {:db/ident :general-ledger/date + {:db/ident :journal-entry/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/ident :journal-entry/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/ident :journal-entry/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/ident :journal-entry/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/ident :journal-entry/line-items + :db/valueType :db.type/ref + :db/cardinality :db.cardinality/many + :db/isComponent true + :db/doc "Each of the line items in the general ledger"} + + {:db/ident :journal-entry/cleared :db/valueType :db.type/boolean :db/cardinality :db.cardinality/one - :db/doc "Has this cleared?"}]]) + :db/doc "Has this cleared?"} + + {:db/ident :journal-entry-line/expense-account + :db/valueType :db.type/long + :db/cardinality :db.cardinality/one + :db/doc "The expense account being changed"} + {:db/ident :journal-entry-line/account + :db/valueType :db.type/ref + :db/cardinality :db.cardinality/one + :db/doc "The other type of account being changed"} + {:db/ident :journal-entry-line/debit + :db/valueType :db.type/double + :db/cardinality :db.cardinality/one + :db/doc "The amount to debit"} + {:db/ident :journal-entry-line/credit + :db/valueType :db.type/double + :db/cardinality :db.cardinality/one + :db/doc "The amount to credit"} + {:db/ident :journal-entry-line/location + :db/valueType :db.type/string + :db/cardinality :db.cardinality/one + :db/doc "Location of the entry"}] + ] + ) (defn add-general-ledger-fns [conn] [[{:db/ident :replace-general-ledger @@ -52,7 +70,7 @@ :params [db origin] :code (let [ids (->> (d/query {:query {:find ['?e] :in ['$ '?origin] - :where [['?e :general-ledger/original-entity '?origin]]} + :where [['?e :journal-entry/original-entity '?origin]]} :args [db origin]}) (map first))] (into [] @@ -69,8 +87,6 @@ z)) #_(bulk-load-invoice-ledger (d/connect auto-ap.datomic/uri)) -(def make-entity-not-unique - [[[:db/retract :general-ledger/original-entity :db/unique :db.unique/identity]]]) diff --git a/src/clj/auto_ap/ledger.clj b/src/clj/auto_ap/ledger.clj index 4136fd62..8ce794b4 100644 --- a/src/clj/auto_ap/ledger.clj +++ b/src/clj/auto_ap/ledger.clj @@ -30,23 +30,28 @@ (defmethod entity-change->ledger :invoice [db [type id]] (let [entity (d/pull db ['* {:invoice/vendor '[*] :invoice/payment '[*]}] id)] - - (map - (fn [ea] - (remove-nils - {:general-ledger/source "invoice" - :general-ledger/client (:db/id (:invoice/client entity)) - :general-ledger/date (:invoice/date entity) - :general-ledger/original-entity (:db/id entity) - :general-ledger/vendor (:db/id (:invoice/vendor entity)) - :general-ledger/amount (- (:invoice-expense-account/amount ea)) - :general-ledger/location (:invoice-expense-account/location ea) - :general-ledger/from-expense-account 2110 - :general-ledger/to-expense-account (:invoice-expense-account/expense-account-id ea) - :general-ledger/cleared (and (< (:invoice/outstanding-balance entity) 0.01) - (every? #(= :payment-status/cleared (:payment/status %)) (:invoice/payments entity)) - )})) - (:invoice/expense-accounts entity)))) + (remove-nils + {:journal-entry/source "invoice" + :journal-entry/client (:db/id (:invoice/client entity)) + :journal-entry/date (:invoice/date entity) + :journal-entry/original-entity (:db/id entity) + :journal-entry/vendor (:db/id (:invoice/vendor entity)) + :journal-entry/amount (:invoice/total entity) + + :journal-entry/line-items (mapcat (fn [ea] + [{:journal-entry-line/expense-account 2110 + :journal-entry-line/location (:invoice-expense-account/location ea) + :journal-entry-line/debit (:invoice-expense-account/amount ea)} + {:journal-entry-line/expense-account (:invoice-expense-account/expense-account-id ea) + :journal-entry-line/location (:invoice-expense-account/location ea) + :journal-entry-line/credit (:invoice-expense-account/amount ea)} + ]) + (:invoice/expense-accounts entity)) + #_#_:general-ledger/from-expense-account 2110 + #_#_:general-ledger/to-expense-account (:invoice-expense-account/expense-account-id ea) + :journal-entry/cleared (and (< (:invoice/outstanding-balance entity) 0.01) + (every? #(= :payment-status/cleared (:payment/status %)) (:invoice/payments entity)) + )}))) (defmethod entity-change->ledger :invoice-expense-account [db [entity changes]] @@ -61,10 +66,11 @@ [entity-id (infer-entity changes)]) (defn ledger-entries->transaction [entries] - (into [[:replace-general-ledger (:general-ledger/original-entity (first entries))]] + (into [[:replace-general-ledger (:journal-entry/original-entity (first entries))]] entries)) (defn process-one [report-queue] + (println report-queue) (let [transaction (.take report-queue) db (:db-after transaction) affected-entities (->> (:tx-data transaction) @@ -81,10 +87,13 @@ (filter seq)) retractions (map (fn [[_ e]] [:replace-general-ledger e]) affected-entities)] - @(d/transact (d/connect uri) retractions) + (when (seq retractions) + @(d/transact (d/connect uri) retractions)) + (println retractions d-txs) (doseq [d-tx d-txs] - (println "updating general-ledger " d-tx) + (clojure.pprint/pprint d-tx) + #_(println "updating general-ledger " d-tx) @(d/transact (d/connect uri) d-tx)))) (defn process-all [] @@ -93,10 +102,11 @@ -#_(process-one) +#_(process-one (d/tx-report-queue (d/connect uri) )) #_(process-all) + diff --git a/src/cljs/auto_ap/core.cljs b/src/cljs/auto_ap/core.cljs index 2fe65a2a..3e6c8442 100644 --- a/src/cljs/auto_ap/core.cljs +++ b/src/cljs/auto_ap/core.cljs @@ -3,6 +3,7 @@ [re-frame.core :as re-frame] [auto-ap.events :as events] [auto-ap.views.main :refer [page active-page] ] + [auto-ap.reload :as reload] [auto-ap.config :as config] [auto-ap.effects :as effects] @@ -32,5 +33,4 @@ (re-frame/dispatch-sync [::events/initialize-db (.getItem js/localStorage "jwt")]))) (pushy/start! p/history) (mount-root)) - diff --git a/src/cljs/auto_ap/reload.cljs b/src/cljs/auto_ap/reload.cljs new file mode 100644 index 00000000..f35de97c --- /dev/null +++ b/src/cljs/auto_ap/reload.cljs @@ -0,0 +1,4 @@ +(ns ^:figwheel-hooks auto-ap.reload) + +(defn ^:after-load reload [] + (@(resolve 'auto-ap.core/mount-root)))