fixes for sales summaries being automatic.
This commit is contained in:
@@ -38,21 +38,20 @@
|
|||||||
|
|
||||||
(defn regenerate-literals []
|
(defn regenerate-literals []
|
||||||
(require 'com.github.ivarref.gen-fn)
|
(require 'com.github.ivarref.gen-fn)
|
||||||
(spit
|
(spit
|
||||||
"resources/functions.edn"
|
"resources/functions.edn"
|
||||||
(let [datomic-fn @(resolve 'com.github.ivarref.gen-fn/datomic-fn)]
|
(let [datomic-fn @(resolve 'com.github.ivarref.gen-fn/datomic-fn)]
|
||||||
[(datomic-fn :pay #'iol-ion.tx.pay/pay)
|
[(datomic-fn :pay #'iol-ion.tx.pay/pay)
|
||||||
(datomic-fn :plus #'iol-ion.tx.plus/plus)
|
(datomic-fn :plus #'iol-ion.tx.plus/plus)
|
||||||
(datomic-fn :propose-invoice #'iol-ion.tx.propose-invoice/propose-invoice)
|
(datomic-fn :propose-invoice #'iol-ion.tx.propose-invoice/propose-invoice)
|
||||||
(datomic-fn :reset-rels #'iol-ion.tx.reset-rels/reset-rels)
|
(datomic-fn :reset-rels #'iol-ion.tx.reset-rels/reset-rels)
|
||||||
(datomic-fn :reset-scalars #'iol-ion.tx.reset-scalars/reset-scalars)
|
(datomic-fn :reset-scalars #'iol-ion.tx.reset-scalars/reset-scalars)
|
||||||
(datomic-fn :upsert-entity #'iol-ion.tx.upsert-entity/upsert-entity)
|
(datomic-fn :upsert-entity #'iol-ion.tx.upsert-entity/upsert-entity)
|
||||||
(datomic-fn :upsert-invoice #'iol-ion.tx.upsert-invoice/upsert-invoice)
|
(datomic-fn :upsert-invoice #'iol-ion.tx.upsert-invoice/upsert-invoice)
|
||||||
(datomic-fn :upsert-ledger #'iol-ion.tx.upsert-ledger/upsert-ledger)
|
(datomic-fn :upsert-ledger #'iol-ion.tx.upsert-ledger/upsert-ledger)
|
||||||
(datomic-fn :upsert-transaction #'iol-ion.tx.upsert-transaction/upsert-transaction)
|
(datomic-fn :upsert-transaction #'iol-ion.tx.upsert-transaction/upsert-transaction)
|
||||||
(datomic-fn :upsert-sales-summary #'iol-ion.tx.upsert-sales-summary-ledger/upsert-sales-summary)])))
|
(datomic-fn :upsert-sales-summary #'iol-ion.tx.upsert-sales-summary-ledger/upsert-sales-summary)])))
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
(regenerate-literals)
|
(regenerate-literals)
|
||||||
|
(auto-ap.datomic/install-functions))
|
||||||
(auto-ap.datomic/install-functions))
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
(ns iol-ion.tx.upsert-sales-summary-ledger
|
(ns iol-ion.tx.upsert-sales-summary-ledger
|
||||||
(:require [datomic.api :as dc]
|
(:require [datomic.api :as dc]))
|
||||||
[iol-ion.tx.upsert-entity :as upsert-entity]
|
|
||||||
[iol-ion.tx.upsert-ledger :as upsert-ledger]))
|
|
||||||
|
|
||||||
(defn summary->journal-entry [db summary-id]
|
(defn summary->journal-entry [db summary-id]
|
||||||
(let [summary (dc/pull db '[:sales-summary/client
|
(let [summary (dc/pull db '[:sales-summary/client
|
||||||
@@ -9,7 +7,7 @@
|
|||||||
{:sales-summary/items [:sales-summary-item/category
|
{:sales-summary/items [:sales-summary-item/category
|
||||||
:ledger-mapped/account
|
:ledger-mapped/account
|
||||||
:ledger-mapped/amount
|
:ledger-mapped/amount
|
||||||
:ledger-mapped/ledger-side]}]
|
{:ledger-mapped/ledger-side [:db/ident]}]}]
|
||||||
summary-id)
|
summary-id)
|
||||||
items (:sales-summary/items summary)
|
items (:sales-summary/items summary)
|
||||||
aggregated (->> items
|
aggregated (->> items
|
||||||
@@ -18,18 +16,22 @@
|
|||||||
(map (fn [[account acc-items]]
|
(map (fn [[account acc-items]]
|
||||||
(reduce
|
(reduce
|
||||||
(fn [m item]
|
(fn [m item]
|
||||||
(update m (:ledger-mapped/ledger-side item) (fnil + 0.0) (:ledger-mapped/amount item 0.0)))
|
(update m (:db/ident (:ledger-mapped/ledger-side item)) (fnil + 0.0) (:ledger-mapped/amount item 0.0)))
|
||||||
{:account account}
|
{:account account}
|
||||||
acc-items))))
|
acc-items))))
|
||||||
|
_ (clojure.pprint/pprint aggregated)
|
||||||
line-items (mapv (fn [{:keys [account] :as m}]
|
line-items (mapv (fn [{:keys [account] :as m}]
|
||||||
(cond-> {:db/id (str (java.util.UUID/randomUUID))
|
(cond-> {:db/id (str (java.util.UUID/randomUUID))
|
||||||
:journal-entry-line/account account
|
:journal-entry-line/account account
|
||||||
:journal-entry-line/location "A"}
|
:journal-entry-line/location "A"}
|
||||||
(get m :ledger-side/debit) (assoc :journal-entry-line/debit (get m :ledger-side/debit))
|
(get m :ledger-side/debit) (assoc :journal-entry-line/debit (get m :ledger-side/debit))
|
||||||
(get m :ledger-side/credit) (assoc :journal-entry-line/credit (get m :ledger-side/credit))))
|
(get m :ledger-side/credit) (assoc :journal-entry-line/credit (get m :ledger-side/credit))))
|
||||||
aggregated)
|
aggregated)
|
||||||
|
|
||||||
total-debits (reduce + 0.0 (map #(get % :ledger-side/debit 0.0) aggregated))
|
total-debits (reduce + 0.0 (map #(get % :ledger-side/debit 0.0) aggregated))
|
||||||
total-credits (reduce + 0.0 (map #(get % :ledger-side/credit 0.0) aggregated))]
|
total-credits (reduce + 0.0 (map #(get % :ledger-side/credit 0.0) aggregated))
|
||||||
|
_ (clojure.pprint/pprint [total-debits total-credits])
|
||||||
|
]
|
||||||
(when (and (seq line-items)
|
(when (and (seq line-items)
|
||||||
(= (Math/round (* 1000 total-debits))
|
(= (Math/round (* 1000 total-debits))
|
||||||
(Math/round (* 1000 total-credits))))
|
(Math/round (* 1000 total-credits))))
|
||||||
@@ -40,6 +42,14 @@
|
|||||||
:journal-entry/amount total-debits
|
:journal-entry/amount total-debits
|
||||||
:journal-entry/line-items line-items})))
|
:journal-entry/line-items line-items})))
|
||||||
|
|
||||||
|
(defn current-date [db]
|
||||||
|
(let [last-tx (dc/t->tx (dc/basis-t db))
|
||||||
|
[[date]] (seq (dc/q '[:find ?ti :in $ ?tx
|
||||||
|
:where [?tx :db/txInstant ?ti]]
|
||||||
|
db
|
||||||
|
last-tx))]
|
||||||
|
date))
|
||||||
|
|
||||||
(defn upsert-sales-summary [db summary]
|
(defn upsert-sales-summary [db summary]
|
||||||
(let [upserted-summary [[:upsert-entity summary]]
|
(let [upserted-summary [[:upsert-entity summary]]
|
||||||
db-after (-> (dc/with db upserted-summary) :db-after)
|
db-after (-> (dc/with db upserted-summary) :db-after)
|
||||||
@@ -48,13 +58,13 @@
|
|||||||
:sales-summary/client
|
:sales-summary/client
|
||||||
:db/id)
|
:db/id)
|
||||||
journal-entry (summary->journal-entry db-after summary-id)]
|
journal-entry (summary->journal-entry db-after summary-id)]
|
||||||
(into upserted-summary
|
upserted-summary
|
||||||
|
#_(into upserted-summary
|
||||||
(if journal-entry
|
(if journal-entry
|
||||||
[[:upsert-ledger journal-entry]]
|
[[:upsert-ledger journal-entry]]
|
||||||
(let [existing-je-id (ffirst (dc/q '[:find ?je . :in $ ?ss
|
(concat
|
||||||
:where [?je :journal-entry/original-entity ?ss]]
|
[[:db/retractEntity [:journal-entry/original-entity (:db/id summary)]]]
|
||||||
db-after summary-id))]
|
|
||||||
(concat
|
|
||||||
(when existing-je-id [[:db/retractEntity existing-je-id]])
|
(when client-id [{:db/id client-id
|
||||||
(when client-id [{:db/id client-id
|
:client/ledger-last-change (current-date db)}]))))))
|
||||||
:client/ledger-last-change (upsert-ledger/current-date db)}])))))))
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -334,20 +334,35 @@
|
|||||||
|
|
||||||
(apply mark-dirty [:client/code "NGDG"] (last-n-days 30))
|
(apply mark-dirty [:client/code "NGDG"] (last-n-days 30))
|
||||||
|
|
||||||
(apply mark-dirty [:client/code "NGPG"] (last-n-days 30))
|
(dirty-sales-summaries [:client/code "NGWH"])
|
||||||
|
|
||||||
(mark-all-dirty 50)
|
|
||||||
|
(apply mark-dirty [:client/code "NGWH"] (last-n-days 5))
|
||||||
|
|
||||||
|
(iol-ion.tx.upsert-sales-summary-ledger/summary->journal-entry (dc/db conn) 17592314245819)
|
||||||
|
|
||||||
|
|
||||||
|
(iol-ion.tx.upsert-sales-summary-ledger/upsert-sales-summary (dc/db conn) {:db/id 17592314241429})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(mark-all-dirty 5)
|
||||||
(delete-all)
|
(delete-all)
|
||||||
|
|
||||||
|
|
||||||
(sales-summaries-v2)
|
(sales-summaries-v2)
|
||||||
|
|
||||||
|
|
||||||
|
1
|
||||||
|
|
||||||
|
|
||||||
(dc/q '[:find (pull ?sos [* {:sales-summary/sales-items [*]}])
|
(dc/q '[:find (pull ?sos [* {:sales-summary/sales-items [*]}])
|
||||||
:in $
|
:in $
|
||||||
:where [?sos :sales-summary/client [:client/code "NGHW"]]
|
:where [?sos :sales-summary/client [:client/code "NGHW"]]
|
||||||
[?sos :sales-summary/date ?d]
|
[?sos :sales-summary/date ?d]
|
||||||
[(= ?d #inst "2024-04-10T00:00:00-07:00")]]
|
[(= ?d #inst "2024-04-10T00:00:00-07:00")]]
|
||||||
(dc/db conn))
|
(dc/db conn))
|
||||||
|
|
||||||
(dc/q '[:find ?n ?p2 (sum ?total)
|
(dc/q '[:find ?n ?p2 (sum ?total)
|
||||||
:with ?c
|
:with ?c
|
||||||
:in $ [?clients ?start-date ?end-date]
|
:in $ [?clients ?start-date ?end-date]
|
||||||
@@ -360,18 +375,21 @@
|
|||||||
(dc/db conn)
|
(dc/db conn)
|
||||||
[[(auto-ap.datomic/pull-attr (dc/db conn) :db/id [:client/code "NGHW"])] #inst "2024-04-11T00:00:00-07:00" #inst "2024-04-11T00:00:00-07:00"])
|
[[(auto-ap.datomic/pull-attr (dc/db conn) :db/id [:client/code "NGHW"])] #inst "2024-04-11T00:00:00-07:00" #inst "2024-04-11T00:00:00-07:00"])
|
||||||
|
|
||||||
(dc/q '[:find ?n
|
(dc/q '[:find ?n
|
||||||
:in $ [?clients ?start-date ?end-date]
|
:in $ [?clients ?start-date ?end-date]
|
||||||
:where [(iol-ion.query/scan-sales-orders $ ?clients ?start-date ?end-date) [[?e _ ?sort-default] ...]]
|
:where [(iol-ion.query/scan-sales-orders $ ?clients ?start-date ?end-date) [[?e _ ?sort-default] ...]]
|
||||||
[?e :sales-order/line-items ?li]
|
[?e :sales-order/line-items ?li]
|
||||||
[?li :order-line-item/item-name ?n] ]
|
[?li :order-line-item/item-name ?n]]
|
||||||
(dc/db conn)
|
(dc/db conn)
|
||||||
[[(auto-ap.datomic/pull-attr (dc/db conn) :db/id [:client/code "NGCL"])] #inst "2024-04-11T00:00:00-07:00" #inst "2024-04-24T00:00:00-07:00"])
|
[[(auto-ap.datomic/pull-attr (dc/db conn) :db/id [:client/code "NGCL"])] #inst "2024-04-11T00:00:00-07:00" #inst "2024-04-24T00:00:00-07:00"])
|
||||||
|
|
||||||
@(dc/transact conn [{:db/id :sales-summary/total-tax :db/ident :sales-summary/total-tax-legacy}
|
|
||||||
{:db/id :sales-summary/total-tip :db/ident :sales-summary/total-tip-legacy}])
|
|
||||||
|
|
||||||
(auto-ap.datomic/transact-schema conn)
|
@(dc/transact conn [{:db/id :sales-summary/total-tax :db/ident :sales-summary/total-tax-legacy}
|
||||||
|
{:db/id :sales-summary/total-tip :db/ident :sales-summary/total-tip-legacy}])
|
||||||
|
|
||||||
|
(auto-ap.datomic/transact-schema conn)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user