diff --git a/scratch-sessions/fix-invoices-with-splits.clj b/scratch-sessions/fix-invoices-with-splits.clj new file mode 100644 index 00000000..1bfc2ded --- /dev/null +++ b/scratch-sessions/fix-invoices-with-splits.clj @@ -0,0 +1,98 @@ +;; This buffer is for Clojure experiments and evaluation. + +;; Press C-j to evaluate the last expression. + +;; You can also press C-u C-j to evaluate the expression and pretty-print its result. + +(def g (auto-ap.ledger/unbalanced-invoices)) + +(count g) + +(take 3 g) + +(clojure.data.csv/write-csv *out* + (->> g + (map (fn [i] + (let [e (d/pull (d/db auto-ap.datomic/conn) + '[:invoice/total + :db/id + {:invoice/client [:client/code] + :invoice/expense-accounts [*]} + {:journal-entry/_original-entity [:journal-entry/amount + {:journal-entry/line-items [*]} ]}] + i) + je (first (:journal-entry/_original-entity e))] + + [(:db/id e) + (:client/code (:invoice/client e)) + (:invoice/total e) + (:journal-entry/amount je) + (clojure.string/join ", " (filter identity (map :journal-entry-line/credit (:journal-entry/line-items je)))) + (clojure.string/join ", " (filter identity (map :journal-entry-line/debit (:journal-entry/line-items je)))) + (count (:invoice/expense-accounts e)) + (count (:journal-entry/line-items je))] + )))) + :separator \tab) + + +(clojure.pprint/pprint (d/pull (d/db auto-ap.datomic/conn) '[*] 17592232790166)) + +(clojure.pprint/pprint (user/entity-history 17592232790174)) + + + +(user/tx-detail 13194187889225) + +(defn updated-recently? [i] + (d/q '[:find ?i + :in $ ?i + :where [?i :invoice/date]] + (d/since (d/db auto-ap.datomic/conn) #inst "2021-11-20") + i)) + + +(def z (for [[client] (d/q '[:find ?c + :in $ [?code ...] + :where + [?c :client/code ?code]] + (d/db auto-ap.datomic/conn) + ["MDB" "NGT" "AFH" "WGC" "RCI" "MVSC" "OMG" "BSG" "BCBG" "NGMJ" "BCBC"]) + :let [results (d/q '[:find ?i ?z ?a ?b + :in $ ?c + :where + [?i :invoice/client ?c] + [?i :invoice/total ?a] + [?i :invoice/expense-accounts ?z] + [?z :invoice-expense-account/amount ?b]] + (d/db auto-ap.datomic/conn) client) + results (->> results + (group-by first) + (map (fn [[i v]] + (let [[[_ _ total]] v] + [i total (reduce + 0 + (map (fn [[_ _ _ a]] + a) + v))]))) + (filter (fn [[i total ea ]] + (not (auto-ap.utils/dollars= total ea)))))] + [i _ ea] results + :when (updated-recently? i)] + {:db/id i + :invoice/total ea})) + +(clojure.pprint/pprint z) + +@(d/transact auto-ap.datomic/conn (conj z + {:db/id "datomic.tx" + :db/doc "Fixing issue where invoice amounts are not adding up"}) ) + +(count (auto-ap.ledger/unbalanced-invoices)) + + + + +(clojure.pprint/pprint (d/pull (d/db auto-ap.datomic/conn) '[*] 17592204815836)) + +(entity-history 17592204815839) + +(d/pull (d/db auto-ap.datomic/conn) [:client/locations] [:client/code "WGC"] ) diff --git a/src/clj/user.clj b/src/clj/user.clj index 83290748..15d81481 100644 --- a/src/clj/user.clj +++ b/src/clj/user.clj @@ -657,7 +657,6 @@ invoice (d/entity db invoice-id) current-total (:invoice/total invoice) target-total (invoice-totals invoice-id) ;; TODO should include expense accounts not visible - _ (println current-total target-total) new-account? (not (boolean (or (some-> invoice-expense-account-id not-empty Long/parseLong) (:db/id (first (:invoice/expense-accounts invoice))))))