From 1d312dd55d1784b802d867d5f59ee47ef894e81b Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Thu, 16 Dec 2021 07:26:02 -0800 Subject: [PATCH] Adds the ability to suppress transactions --- src/clj/auto_ap/datomic/migrate.clj | 6 +++++- src/clj/auto_ap/datomic/transactions.clj | 3 ++- src/clj/auto_ap/graphql.clj | 1 + src/clj/auto_ap/graphql/transactions.clj | 3 ++- src/clj/auto_ap/ledger.clj | 1 + src/clj/auto_ap/yodlee/import.clj | 20 ++++++++++++------- .../auto_ap/views/pages/transactions.cljs | 6 +++--- 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/clj/auto_ap/datomic/migrate.clj b/src/clj/auto_ap/datomic/migrate.clj index a73d839a..44c71e5f 100644 --- a/src/clj/auto_ap/datomic/migrate.clj +++ b/src/clj/auto_ap/datomic/migrate.clj @@ -422,7 +422,11 @@ :db/doc "Who triggred this import" :db/valueType :db.type/string :db/cardinality :db.cardinality/one}]] - :depends-on [:auto-ap/base-schema]}} + :depends-on [:auto-ap/base-schema]} + :auto-ap/add-suppression {:txes [[{:db/ident :transaction-approval-status/suppressed} + {:db/ident :transaction/approval-status + :db/index true}]] + :depends-on [:auto-ap/base-schema]}} diff --git a/src/clj/auto_ap/datomic/transactions.clj b/src/clj/auto_ap/datomic/transactions.clj index b69c9cc6..c0db2345 100644 --- a/src/clj/auto_ap/datomic/transactions.clj +++ b/src/clj/auto_ap/datomic/transactions.clj @@ -148,7 +148,8 @@ true (merge-query {:query {:find ['?sort-default '?e] :where ['[?e :transaction/id] - '[?e :transaction/date ?sort-default]]}}))] + '[?e :transaction/date ?sort-default] + '(not [?e :transaction/approval-status :transaction-approval-status/suppressed])]}}))] (log/info "query is" query) (cond->> query true (d/query) diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 1521667a..2b05e45d 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -995,6 +995,7 @@ {:enum-value :revenue}]} :transaction_approval_status {:values [{:enum-value :approved} {:enum-value :unapproved} + {:enum-value :suppressed} {:enum-value :requires_feedback} {:enum-value :excluded}]}} :mutations diff --git a/src/clj/auto_ap/graphql/transactions.clj b/src/clj/auto_ap/graphql/transactions.clj index 8997b46f..f10ffd6f 100644 --- a/src/clj/auto_ap/graphql/transactions.clj +++ b/src/clj/auto_ap/graphql/transactions.clj @@ -78,7 +78,8 @@ (log/info "Deleting " (count all-ids) args) (audit-transact-batch (mapcat (fn [i] - [[:db/retractEntity i] + [{:db/id i + :transaction/approval-status :transaction-approval-status/suppressed} [:db/retractEntity [:journal-entry/original-entity i]]]) all-ids) (:id context)) diff --git a/src/clj/auto_ap/ledger.clj b/src/clj/auto_ap/ledger.clj index e852eb77..90a2f6b2 100644 --- a/src/clj/auto_ap/ledger.clj +++ b/src/clj/auto_ap/ledger.clj @@ -87,6 +87,7 @@ credit-from-bank? decreasing? debit-from-bank? (not decreasing?)] (when-not (or (= :transaction-approval-status/excluded (:db/ident (:transaction/approval-status entity))) + (= :transaction-approval-status/suppressed (:db/ident (:transaction/approval-status entity))) (dollars-0? (:transaction/amount entity))) (remove-nils {:journal-entry/source "transaction" diff --git a/src/clj/auto_ap/yodlee/import.clj b/src/clj/auto_ap/yodlee/import.clj index f9de2aee..cc557a7a 100644 --- a/src/clj/auto_ap/yodlee/import.clj +++ b/src/clj/auto_ap/yodlee/import.clj @@ -185,9 +185,13 @@ client-id (:db/id client) valid-locations (or (:bank-account/locations bank-account) (:client/locations client)) - date (time/parse date "YYYY-MM-dd")] + date (time/parse date "YYYY-MM-dd") + id (sha-256 (str id))] - (cond (existing (sha-256 (str id))) + (cond (= :transaction-approval-status/suppressed (existing id)) + :suppressed + + (existing id) :extant (not client-id) @@ -293,11 +297,13 @@ (defn get-existing [] - (transduce (map first) conj #{} - (d/query {:query {:find ['?tid] - :in ['$] - :where ['[_ :transaction/id ?tid]]} - :args [(d/db (d/connect uri))]}))) + (into {} + (d/query {:query {:find ['?tid '?as2] + :in ['$] + :where ['[?e :transaction/id ?tid] + '[?e :transaction/approval-status ?as] + '[?as :db/ident ?as2]]} + :args [(d/db (d/connect uri))]}))) (defn get-all-bank-accounts [] (->> (d-clients/get-all) diff --git a/src/cljs/auto_ap/views/pages/transactions.cljs b/src/cljs/auto_ap/views/pages/transactions.cljs index 62269501..93b593df 100644 --- a/src/cljs/auto_ap/views/pages/transactions.cljs +++ b/src/cljs/auto_ap/views/pages/transactions.cljs @@ -95,7 +95,6 @@ (let [checked @(re-frame/subscribe [::data-page/checked ::page]) checked-params (get checked "header") specific-transactions (map :id (vals (dissoc checked "header")))] - (println checked-params) {:db (-> (:db cofx) (assoc-in [:status :loading] true)) :graphql {:token (-> cofx :db :user) @@ -109,7 +108,8 @@ :ids specific-transactions} [:message]]}]} :on-success (fn [result] - [::params-change params])}}))) + [::params-change params])} + :dispatch [::data-page/reset-checked ::page]}))) (re-frame/reg-event-fx ::unmounted @@ -186,7 +186,7 @@ :class (status/class-for @(re-frame/subscribe [::status/single ::delete-selected])) :disabled (or (status/disabled-for @(re-frame/subscribe [::status/single ::delete-selected])) (not (seq checked)))} - "Delete selected"]]]) + "Suppress selected"]]]) [table/table {:id :transactions :check-boxes? is-admin? :data-page ::page}]]))