progress on general ledger.
This commit is contained in:
@@ -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-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/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/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-ledger6 {: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/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]}
|
||||||
|
|
||||||
: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]}
|
|
||||||
|
|
||||||
|
|
||||||
}]
|
}]
|
||||||
(println "Conforming database...")
|
(println "Conforming database...")
|
||||||
|
|||||||
@@ -3,47 +3,65 @@
|
|||||||
[auto-ap.ledger :as ledger]))
|
[auto-ap.ledger :as ledger]))
|
||||||
|
|
||||||
(def add-general-ledger
|
(def add-general-ledger
|
||||||
[[{:db/ident :general-ledger/source
|
[[{:db/ident :journal-entry/source
|
||||||
:db/valueType :db.type/string
|
:db/valueType :db.type/string
|
||||||
:db/cardinality :db.cardinality/one
|
:db/cardinality :db.cardinality/one
|
||||||
:db/doc "The type of entity that created this entry"}
|
: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/valueType :db.type/ref
|
||||||
:db/cardinality :db.cardinality/one
|
:db/cardinality :db.cardinality/one
|
||||||
:db/doc "The client for the ledger"}
|
:db/doc "The client for the ledger"}
|
||||||
{:db/ident :general-ledger/date
|
{:db/ident :journal-entry/date
|
||||||
:db/valueType :db.type/instant
|
:db/valueType :db.type/instant
|
||||||
:db/cardinality :db.cardinality/one
|
:db/cardinality :db.cardinality/one
|
||||||
:db/doc "The time for this entry"}
|
: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/valueType :db.type/ref
|
||||||
:db/unique :db.unique/identity
|
:db/unique :db.unique/identity
|
||||||
:db/cardinality :db.cardinality/one
|
:db/cardinality :db.cardinality/one
|
||||||
:db/doc "The thing that created this entry"}
|
:db/doc "The thing that created this entry"}
|
||||||
{:db/ident :general-ledger/vendor
|
{:db/ident :journal-entry/vendor
|
||||||
:db/valueType :db.type/ref
|
:db/valueType :db.type/ref
|
||||||
:db/cardinality :db.cardinality/one
|
:db/cardinality :db.cardinality/one
|
||||||
:db/doc "The vendor for the ledger entry"}
|
:db/doc "The vendor for the ledger entry"}
|
||||||
{:db/ident :general-ledger/amount
|
{:db/ident :journal-entry/amount
|
||||||
:db/valueType :db.type/double
|
:db/valueType :db.type/double
|
||||||
:db/cardinality :db.cardinality/one
|
:db/cardinality :db.cardinality/one
|
||||||
:db/doc "The amount for the entry"}
|
:db/doc "The amount for the entry"}
|
||||||
{:db/ident :general-ledger/location
|
|
||||||
:db/valueType :db.type/string
|
{:db/ident :journal-entry/line-items
|
||||||
:db/cardinality :db.cardinality/one
|
:db/valueType :db.type/ref
|
||||||
:db/doc "Location of the entry"}
|
:db/cardinality :db.cardinality/many
|
||||||
{:db/ident :general-ledger/from-expense-account
|
:db/isComponent true
|
||||||
:db/valueType :db.type/long
|
:db/doc "Each of the line items in the general ledger"}
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "The expense account from"}
|
{:db/ident :journal-entry/cleared
|
||||||
{: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/valueType :db.type/boolean
|
||||||
:db/cardinality :db.cardinality/one
|
: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]
|
(defn add-general-ledger-fns [conn]
|
||||||
[[{:db/ident :replace-general-ledger
|
[[{:db/ident :replace-general-ledger
|
||||||
@@ -52,7 +70,7 @@
|
|||||||
:params [db origin]
|
:params [db origin]
|
||||||
:code (let [ids (->> (d/query {:query {:find ['?e]
|
:code (let [ids (->> (d/query {:query {:find ['?e]
|
||||||
:in ['$ '?origin]
|
:in ['$ '?origin]
|
||||||
:where [['?e :general-ledger/original-entity '?origin]]}
|
:where [['?e :journal-entry/original-entity '?origin]]}
|
||||||
:args [db origin]})
|
:args [db origin]})
|
||||||
(map first))]
|
(map first))]
|
||||||
(into []
|
(into []
|
||||||
@@ -69,8 +87,6 @@
|
|||||||
z))
|
z))
|
||||||
|
|
||||||
#_(bulk-load-invoice-ledger (d/connect auto-ap.datomic/uri))
|
#_(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]]])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,23 +30,28 @@
|
|||||||
(defmethod entity-change->ledger :invoice
|
(defmethod entity-change->ledger :invoice
|
||||||
[db [type id]]
|
[db [type id]]
|
||||||
(let [entity (d/pull db ['* {:invoice/vendor '[*] :invoice/payment '[*]}] id)]
|
(let [entity (d/pull db ['* {:invoice/vendor '[*] :invoice/payment '[*]}] id)]
|
||||||
|
(remove-nils
|
||||||
(map
|
{:journal-entry/source "invoice"
|
||||||
(fn [ea]
|
:journal-entry/client (:db/id (:invoice/client entity))
|
||||||
(remove-nils
|
:journal-entry/date (:invoice/date entity)
|
||||||
{:general-ledger/source "invoice"
|
:journal-entry/original-entity (:db/id entity)
|
||||||
:general-ledger/client (:db/id (:invoice/client entity))
|
:journal-entry/vendor (:db/id (:invoice/vendor entity))
|
||||||
:general-ledger/date (:invoice/date entity)
|
:journal-entry/amount (:invoice/total entity)
|
||||||
:general-ledger/original-entity (:db/id entity)
|
|
||||||
:general-ledger/vendor (:db/id (:invoice/vendor entity))
|
:journal-entry/line-items (mapcat (fn [ea]
|
||||||
:general-ledger/amount (- (:invoice-expense-account/amount ea))
|
[{:journal-entry-line/expense-account 2110
|
||||||
:general-ledger/location (:invoice-expense-account/location ea)
|
:journal-entry-line/location (:invoice-expense-account/location ea)
|
||||||
:general-ledger/from-expense-account 2110
|
:journal-entry-line/debit (:invoice-expense-account/amount ea)}
|
||||||
:general-ledger/to-expense-account (:invoice-expense-account/expense-account-id ea)
|
{:journal-entry-line/expense-account (:invoice-expense-account/expense-account-id ea)
|
||||||
:general-ledger/cleared (and (< (:invoice/outstanding-balance entity) 0.01)
|
:journal-entry-line/location (:invoice-expense-account/location ea)
|
||||||
(every? #(= :payment-status/cleared (:payment/status %)) (:invoice/payments entity))
|
:journal-entry-line/credit (:invoice-expense-account/amount ea)}
|
||||||
)}))
|
])
|
||||||
(:invoice/expense-accounts entity))))
|
(: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
|
(defmethod entity-change->ledger :invoice-expense-account
|
||||||
[db [entity changes]]
|
[db [entity changes]]
|
||||||
@@ -61,10 +66,11 @@
|
|||||||
[entity-id (infer-entity changes)])
|
[entity-id (infer-entity changes)])
|
||||||
|
|
||||||
(defn ledger-entries->transaction [entries]
|
(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))
|
entries))
|
||||||
|
|
||||||
(defn process-one [report-queue]
|
(defn process-one [report-queue]
|
||||||
|
(println report-queue)
|
||||||
(let [transaction (.take report-queue)
|
(let [transaction (.take report-queue)
|
||||||
db (:db-after transaction)
|
db (:db-after transaction)
|
||||||
affected-entities (->> (:tx-data transaction)
|
affected-entities (->> (:tx-data transaction)
|
||||||
@@ -81,10 +87,13 @@
|
|||||||
(filter seq))
|
(filter seq))
|
||||||
retractions (map (fn [[_ e]] [:replace-general-ledger e]) affected-entities)]
|
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]
|
(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))))
|
@(d/transact (d/connect uri) d-tx))))
|
||||||
|
|
||||||
(defn process-all []
|
(defn process-all []
|
||||||
@@ -93,10 +102,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#_(process-one)
|
#_(process-one (d/tx-report-queue (d/connect uri) ))
|
||||||
|
|
||||||
#_(process-all)
|
#_(process-all)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
[re-frame.core :as re-frame]
|
[re-frame.core :as re-frame]
|
||||||
[auto-ap.events :as events]
|
[auto-ap.events :as events]
|
||||||
[auto-ap.views.main :refer [page active-page] ]
|
[auto-ap.views.main :refer [page active-page] ]
|
||||||
|
[auto-ap.reload :as reload]
|
||||||
|
|
||||||
[auto-ap.config :as config]
|
[auto-ap.config :as config]
|
||||||
[auto-ap.effects :as effects]
|
[auto-ap.effects :as effects]
|
||||||
@@ -32,5 +33,4 @@
|
|||||||
(re-frame/dispatch-sync [::events/initialize-db (.getItem js/localStorage "jwt")])))
|
(re-frame/dispatch-sync [::events/initialize-db (.getItem js/localStorage "jwt")])))
|
||||||
(pushy/start! p/history)
|
(pushy/start! p/history)
|
||||||
(mount-root))
|
(mount-root))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
4
src/cljs/auto_ap/reload.cljs
Normal file
4
src/cljs/auto_ap/reload.cljs
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
(ns ^:figwheel-hooks auto-ap.reload)
|
||||||
|
|
||||||
|
(defn ^:after-load reload []
|
||||||
|
(@(resolve 'auto-ap.core/mount-root)))
|
||||||
Reference in New Issue
Block a user