diff --git a/src/clj/auto_ap/datomic.clj b/src/clj/auto_ap/datomic.clj index f365dd9d..395a58d1 100644 --- a/src/clj/auto_ap/datomic.clj +++ b/src/clj/auto_ap/datomic.clj @@ -762,7 +762,6 @@ (defn add-sorter-field [q sort-map args] - (println sort-map) (merge-query q {:query {:find ['?sorter] :where (sort-map @@ -774,19 +773,21 @@ sort-fn (sort-by sort-fn) (= (:asc args) false) (reverse))) -(defn apply-sort-2 [args results ] - (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)))] +(defn apply-sort-2 [args default-sort results ] + (let [sort-bys (if (:sort-by args) + (conj (seq default-sort) (if (:asc args) + :asc + :desc)) + (seq default-sort)) + comparator (fn [xs ys] + (or (->> (map vector sort-bys xs ys) + (map (fn [[asc x y]] + (if (= :asc asc) + (compare x y) + (compare y x)))) + (drop-while #(= 0 %)) + first) + 0))] (sort comparator results ))) (defn apply-pagination [args results] diff --git a/src/clj/auto_ap/datomic/checks.clj b/src/clj/auto_ap/datomic/checks.clj index 87b41aeb..2ff31a3a 100644 --- a/src/clj/auto_ap/datomic/checks.clj +++ b/src/clj/auto_ap/datomic/checks.clj @@ -33,9 +33,7 @@ '[?v :vendor/name ?sorter]] "bank-account" ['[?e :payment/bank-account ?c] '[?c :bank-account/name ?sorter]] - "check-number" ['(or-join [?e ?sorter] - [?e :payment/check-number ?sorter] - [(ground "" ?sorter)])] + "check-number" ['[?e :payment/check-number ?sorter]] "date" ['[?e :payment/date ?sorter]] "amount" ['[?e :payment/amount ?sorter]] "status" ['[?e :payment/status ?sorter]]} @@ -113,7 +111,7 @@ (cond->> query true (d/query) - true (apply-sort-2 args) + true (apply-sort-2 args [:desc :asc]) true (apply-pagination args)))) (defn graphql-results [ids db args] diff --git a/src/clj/auto_ap/datomic/invoices.clj b/src/clj/auto_ap/datomic/invoices.clj index 16ac5f52..3a13fd75 100644 --- a/src/clj/auto_ap/datomic/invoices.clj +++ b/src/clj/auto_ap/datomic/invoices.clj @@ -92,7 +92,7 @@ (merge-query {:query {:find ['?base-date '?e] :where ['[?e :invoice/date ?base-date]]}}) ) (d/query) - (apply-sort-2 args) + (apply-sort-2 args [:asc :asc]) (apply-pagination args))) diff --git a/src/clj/auto_ap/datomic/ledger.clj b/src/clj/auto_ap/datomic/ledger.clj index 4631e7a6..89880601 100644 --- a/src/clj/auto_ap/datomic/ledger.clj +++ b/src/clj/auto_ap/datomic/ledger.clj @@ -75,21 +75,24 @@ :args [(:location args)]}) true - (merge-query {:query {:find ['?e] :where ['[?e :journal-entry/date]]}}))] - (cond->> query - true (d/query) - (:sort-by args) (apply-sort-2 args) - true (apply-pagination args)))) + (merge-query {:query {:find ['?base-date '?e] :where ['[?e :journal-entry/date ?base-date]]}}))] + (->> query + (d/query) + (apply-sort-2 args [:desc :asc]) + (apply-pagination args)))) (defn graphql-results [ids db args] - (->> (d/pull-many db '[* {:journal-entry/client [:client/name :client/code :db/id] - :journal-entry/vendor [:vendor/name :db/id] - :journal-entry/line-items [* {:journal-entry-line/account [* - {:account/type [*]} - {:bank-account/type [*]}]}]}] - ids) - (map #(update % :journal-entry/date c/from-date)) - (apply-sort args (some-> (:sort-by args) sort-fn)))) + (let [results (->> (d/pull-many db '[* {:journal-entry/client [:client/name :client/code :db/id] + :journal-entry/vendor [:vendor/name :db/id] + :journal-entry/line-items [* {:journal-entry-line/account [* + {:account/type [*]} + {:bank-account/type [*]}]}]}] + ids) + (map #(update % :journal-entry/date c/from-date)) + (group-by :db/id))] + (->> ids + (map results) + (map first)))) (defn get-graphql [args] (let [db (d/db (d/connect uri)) diff --git a/src/clj/auto_ap/datomic/transactions.clj b/src/clj/auto_ap/datomic/transactions.clj index 893f3593..b2a03e33 100644 --- a/src/clj/auto_ap/datomic/transactions.clj +++ b/src/clj/auto_ap/datomic/transactions.clj @@ -83,7 +83,7 @@ '[?e :transaction/date ?base-date]]}}))] (cond->> query true (d/query) - true (apply-sort-2 args) + true (apply-sort-2 args [:desc :asc]) true (apply-pagination args)))) (defn graphql-results [ids db args] diff --git a/src/clj/auto_ap/routes/invoices.clj b/src/clj/auto_ap/routes/invoices.clj index d1b684ef..a69043e7 100644 --- a/src/clj/auto_ap/routes/invoices.clj +++ b/src/clj/auto_ap/routes/invoices.clj @@ -262,7 +262,8 @@ {{:keys [excel-rows]} :edn-params user :identity} (assert-admin user) (let [parsed-invoice-rows (parse-invoice-rows excel-rows) - existing-rows (->> (d-invoices/raw-graphql {}) + existing-rows (->> (d-invoices/get-graphql {:count Integer/MAX_VALUE}) + first (filter (fn [i] (not= :invoice-status/voided (:invoice/status i)))) (map (fn [{:keys [:invoice/vendor :invoice/client :invoice/invoice-number]}] [(:db/id vendor) (:db/id client) invoice-number])) diff --git a/src/clj/auto_ap/yodlee/import.clj b/src/clj/auto_ap/yodlee/import.clj index 2a7599c2..c16a1a2d 100644 --- a/src/clj/auto_ap/yodlee/import.clj +++ b/src/clj/auto_ap/yodlee/import.clj @@ -24,14 +24,15 @@ :check-number check-number :amount (- amount) :status :payment-status/pending}) + first first) (and client-id bank-account-id amount) - (let [matching-checks (d-checks/get-graphql {:client-id client-id - :bank-account-id bank-account-id - :amount (- amount) - :status :payment-status/pending})] + (let [[matching-checks] (d-checks/get-graphql {:client-id client-id + :bank-account-id bank-account-id + :amount (- amount) + :status :payment-status/pending})] (if (= 1 (count matching-checks)) (first matching-checks) nil))