From f8d8872131ce336f2ac12e02b93faa251d640739 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Sat, 4 May 2019 08:40:52 -0700 Subject: [PATCH] fixed sorting. --- src/clj/auto_ap/datomic.clj | 16 +++++++-- src/clj/auto_ap/datomic/transactions.clj | 36 +++++++++++-------- .../views/pages/transactions/table.cljs | 2 +- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/clj/auto_ap/datomic.clj b/src/clj/auto_ap/datomic.clj index 6e4e511e..f365dd9d 100644 --- a/src/clj/auto_ap/datomic.clj +++ b/src/clj/auto_ap/datomic.clj @@ -762,6 +762,7 @@ (defn add-sorter-field [q sort-map args] + (println sort-map) (merge-query q {:query {:find ['?sorter] :where (sort-map @@ -774,9 +775,18 @@ (= (:asc args) false) (reverse))) (defn apply-sort-2 [args results ] - (let [comparator (if (= (:asc args) false) - (fn [x y] (compare y x)) - (fn [x y] (compare x y)))] + (let [comparator + (if (:sort-by args) + (fn [[x & rest-x] [y & rest-y]] + (let [base-sort (if (:asc args) + (compare x y) + (compare y x))] + + (if (= 0 base-sort) + (compare (vec rest-y) (vec rest-x)) + base-sort))) + (fn [x y] + (compare y x)))] (sort comparator results ))) (defn apply-pagination [args results] diff --git a/src/clj/auto_ap/datomic/transactions.clj b/src/clj/auto_ap/datomic/transactions.clj index e73a7105..893f3593 100644 --- a/src/clj/auto_ap/datomic/transactions.clj +++ b/src/clj/auto_ap/datomic/transactions.clj @@ -34,6 +34,8 @@ [(ground "") ?sorter]))] "description-original" ['[?e :transaction/description-original ?sorter]] "date" ['[?e :transaction/date ?sorter]] + "vendor" ['[?e :transaction/vendor ?v] + '[?v :vendor/name ?sorter]] "amount" ['[?e :transaction/amount ?sorter]] "status" ['[?e :transaction/status ?sorter]]} args) @@ -77,26 +79,30 @@ :args [(:original-id args)]}) true - (merge-query {:query {:find ['?e] :where ['[?e :transaction/id]]}}))] + (merge-query {:query {:find ['?base-date '?e] :where ['[?e :transaction/id] + '[?e :transaction/date ?base-date]]}}))] (cond->> query true (d/query) - (:sort-by args) (apply-sort-2 args) + true (apply-sort-2 args) true (apply-pagination args)))) (defn graphql-results [ids db args] - (->> (d/pull-many db '[* {:transaction/client [:client/name :db/id :client/code] - :transaction/bank-account [:bank-account/name :bank-account/code :bank-account/yodlee-account-id :db/id] - :transaction/vendor [:db/id :vendor/name] - :transaction/accounts [:transaction-account/amount - :db/id - :transaction-account/location - {:transaction-account/account [:db/id :account/name :account/numeric-code]}] - :transaction/yodlee-merchant [:db/id :yodlee-merchant/yodlee-id :yodlee-merchant/name]}] - ids) - (map #(update % :transaction/date c/from-date)) - (map #(update % :transaction/post-date c/from-date)) - (map #(dissoc % :transaction/id)) - (apply-sort args (some-> (:sort-by args) sort-fn)))) + (let [results (->> (d/pull-many db '[* {:transaction/client [:client/name :db/id :client/code] + :transaction/bank-account [:bank-account/name :bank-account/code :bank-account/yodlee-account-id :db/id] + :transaction/vendor [:db/id :vendor/name] + :transaction/accounts [:transaction-account/amount + :db/id + :transaction-account/location + {:transaction-account/account [:db/id :account/name :account/numeric-code]}] + :transaction/yodlee-merchant [:db/id :yodlee-merchant/yodlee-id :yodlee-merchant/name]}] + ids) + (map #(update % :transaction/date c/from-date)) + (map #(update % :transaction/post-date c/from-date)) + (map #(dissoc % :transaction/id)) + (group-by :db/id))] + (->> ids + (map results) + (map first)))) (defn get-graphql [args] (let [db (d/db (d/connect uri)) diff --git a/src/cljs/auto_ap/views/pages/transactions/table.cljs b/src/cljs/auto_ap/views/pages/transactions/table.cljs index 5caa5efb..1e496adc 100644 --- a/src/cljs/auto_ap/views/pages/transactions/table.cljs +++ b/src/cljs/auto_ap/views/pages/transactions/table.cljs @@ -57,7 +57,7 @@ [sorted-column {:on-sort opc :style {:width percentage-size :cursor "pointer"} - :sort-key "description-original" + :sort-key "vendor" :sort-by sort-by :asc asc} "Vendor"]