Makes insights work
This commit is contained in:
@@ -1,17 +1,18 @@
|
||||
(ns auto-ap.ssr.transaction.insights
|
||||
(:require
|
||||
[auto-ap.client-routes :as client-routes]
|
||||
[auto-ap.datomic :refer [conn visible-clients]]
|
||||
[auto-ap.rule-matching :refer [spread-cents]]
|
||||
[auto-ap.ssr-routes :as ssr-routes]
|
||||
[auto-ap.ssr.components :as com]
|
||||
[auto-ap.ssr.svg :as svg]
|
||||
[auto-ap.ssr.ui :refer [base-page]]
|
||||
[auto-ap.ssr.utils :refer [html-response]]
|
||||
[auto-ap.time :as atime]
|
||||
[bidi.bidi :as bidi]
|
||||
[clj-time.coerce :as coerce]
|
||||
[datomic.api :as dc]
|
||||
[hiccup2.core :as hiccup]
|
||||
[auto-ap.ssr.components :as com]
|
||||
[auto-ap.client-routes :as client-routes]
|
||||
[auto-ap.ssr.svg :as svg]))
|
||||
[iol-ion.tx :refer [random-tempid]]))
|
||||
|
||||
(def pull-expr [:transaction/description-original
|
||||
:db/id
|
||||
@@ -93,9 +94,9 @@
|
||||
:color :primary-light}
|
||||
svg/thumbs-up)
|
||||
(com/icon-button {:hx-delete (bidi/path-for ssr-routes/only-routes
|
||||
:transaction-insight-approve
|
||||
:transaction-insight-disapprove
|
||||
:transaction-id (:db/id r))
|
||||
:hx-swap "closest tr"
|
||||
:hx-target "closest tr"
|
||||
:color :danger-light}
|
||||
svg/thumbs-down)
|
||||
(com/icon-button {:hx-get (bidi/path-for ssr-routes/only-routes
|
||||
@@ -106,13 +107,47 @@
|
||||
svg/question)]))))
|
||||
|
||||
(defn approve [{:keys [identity session] {:keys [transaction-id]} :route-params}]
|
||||
(html-response (transaction-row
|
||||
(dc/pull (dc/db conn)
|
||||
pull-expr
|
||||
(Long/parseLong transaction-id))
|
||||
:auto-remove? true
|
||||
:hide-actions? true
|
||||
:class "live-added")))
|
||||
(let [approval-details (dc/pull (dc/db conn) [{:transaction/recommended-account [:account/location :db/id]}
|
||||
:transaction/recommended-vendor
|
||||
:transaction/amount
|
||||
:db/id
|
||||
{:transaction/client [:client/locations]} ]
|
||||
(cond-> transaction-id
|
||||
string? (Long/parseLong)))
|
||||
cents-to-distribute (int (Math/round (Math/abs (* (:transaction/amount approval-details) 100))))
|
||||
valid-locations (or
|
||||
(some-> approval-details :transaction/recommended-account :account/location vector)
|
||||
(->> approval-details
|
||||
:transaction/client
|
||||
:client/locations))
|
||||
updated-transaction [:upsert-transaction {:db/id (:db/id approval-details)
|
||||
:transaction/approval-status :transaction-approval-status/approved
|
||||
:transaction/vendor (:transaction/recommended-vendor approval-details)
|
||||
:transaction/accounts (->> valid-locations
|
||||
(map
|
||||
(fn [cents location]
|
||||
{:db/id (random-tempid)
|
||||
:transaction-account/account (-> approval-details :transaction/recommended-account :db/id)
|
||||
:transaction-account/amount (* 0.01 cents)
|
||||
:transaction-account/location location})
|
||||
(spread-cents cents-to-distribute (count valid-locations))))}]]
|
||||
@(dc/transact conn [updated-transaction])
|
||||
(html-response (transaction-row
|
||||
(dc/pull (dc/db conn)
|
||||
pull-expr
|
||||
(Long/parseLong transaction-id))
|
||||
:auto-remove? true
|
||||
:hide-actions? true
|
||||
:class "live-added"))))
|
||||
|
||||
(defn disapprove [{:keys [identity session] {:keys [transaction-id]} :route-params}]
|
||||
(let [transaction-id (cond-> transaction-id string? (Long/parseLong))]
|
||||
@(dc/transact conn [[:upsert-transaction {:db/id transaction-id :transaction/recommended-account nil :transaction/recommended-vendor nil}]])
|
||||
(html-response (transaction-row
|
||||
(dc/pull (dc/db conn) pull-expr transaction-id)
|
||||
:auto-remove? true
|
||||
:hide-actions? true
|
||||
:class "live-removed"))))
|
||||
|
||||
(defn explain [{:keys [identity session] {:keys [transaction-id]} :route-params}]
|
||||
(let [r (dc/pull (dc/db conn)
|
||||
|
||||
Reference in New Issue
Block a user