much better sorting.
This commit is contained in:
@@ -779,30 +779,23 @@
|
||||
(update-in [:query :where] into (get-in query-part-2 [:query :where]))
|
||||
(update-in [:args] into (get-in query-part-2 [:args]))))
|
||||
|
||||
(defn add-sorter-fields [q sort-map args]
|
||||
(reduce
|
||||
(fn [q {:keys [sort-key asc]}]
|
||||
(merge-query q
|
||||
{:query {:find [(symbol (str "?sort-" sort-key))]
|
||||
:where (sort-map
|
||||
sort-key
|
||||
(println "Warning, trying to sort by unsupported field" sort-key))}}))
|
||||
q
|
||||
(:sort args)))
|
||||
|
||||
|
||||
(defn add-sorter-field [q sort-map args]
|
||||
(merge-query q
|
||||
{:query {:find ['?sorter]
|
||||
:where (sort-map
|
||||
(:sort-by args)
|
||||
(println "Warning, trying to sort by unsupported field" (:sort-by args)))}}))
|
||||
|
||||
(defn apply-sort [args sort-fn results ]
|
||||
(cond->> results
|
||||
sort-fn (sort-by sort-fn)
|
||||
(= (:asc args) false) (reverse)))
|
||||
|
||||
(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))
|
||||
(defn apply-sort-3 [args results]
|
||||
(let [sort-bys (or (:sort args) [])
|
||||
comparator (fn [xs ys]
|
||||
(or (->> (map vector sort-bys xs ys)
|
||||
(map (fn [[asc x y]]
|
||||
(if (= :asc asc)
|
||||
(map (fn [[{:keys [asc]} x y]]
|
||||
(if asc
|
||||
(compare x y)
|
||||
(compare y x))))
|
||||
(drop-while #(= 0 %))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
(ns auto-ap.datomic.checks
|
||||
(:require [datomic.api :as d]
|
||||
[auto-ap.datomic :refer [uri merge-query apply-sort-2 apply-pagination add-sorter-field]]
|
||||
[auto-ap.datomic :refer [uri merge-query apply-sort-3 apply-pagination add-sorter-fields]]
|
||||
[auto-ap.graphql.utils :refer [limited-clients]]
|
||||
[auto-ap.utils :refer [dollars=]]
|
||||
[clojure.set :refer [rename-keys]]
|
||||
@@ -28,16 +28,16 @@
|
||||
:in ['$]
|
||||
:where []}
|
||||
:args [db]}
|
||||
(:sort-by args) (add-sorter-field {"client" ['[?e :payment/client ?c]
|
||||
'[?c :client/name ?sorter]]
|
||||
"vendor" ['[?e :payment/vendor ?v]
|
||||
'[?v :vendor/name ?sorter]]
|
||||
"bank-account" ['[?e :payment/bank-account ?c]
|
||||
'[?c :bank-account/name ?sorter]]
|
||||
"check-number" ['[?e :payment/check-number ?sorter]]
|
||||
"date" ['[?e :payment/date ?sorter]]
|
||||
"amount" ['[?e :payment/amount ?sorter]]
|
||||
"status" ['[?e :payment/status ?sorter]]}
|
||||
(:sort args) (add-sorter-fields {"client" ['[?e :payment/client ?c]
|
||||
'[?c :client/name ?sort-client]]
|
||||
"vendor" ['[?e :payment/vendor ?v]
|
||||
'[?v :vendor/name ?sort-vendor]]
|
||||
"bank-account" ['[?e :payment/bank-account ?ba]
|
||||
'[?ba :bank-account/name ?sort-bank-account]]
|
||||
"check-number" ['[?e :payment/check-number ?sort-check-number]]
|
||||
"date" ['[?e :payment/date ?sort-date]]
|
||||
"amount" ['[?e :payment/amount ?sort-amount]]
|
||||
"status" ['[?e :payment/status ?sort-status]]}
|
||||
args)
|
||||
|
||||
(limited-clients (:id args))
|
||||
@@ -113,7 +113,7 @@
|
||||
|
||||
(cond->> query
|
||||
true (d/query)
|
||||
true (apply-sort-2 args [:desc :asc])
|
||||
true (apply-sort-3 args)
|
||||
true (apply-pagination args))))
|
||||
|
||||
(defn graphql-results [ids db args]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
(ns auto-ap.datomic.invoices
|
||||
(:require [datomic.api :as d]
|
||||
[auto-ap.datomic :refer [uri remove-nils merge-query apply-pagination apply-sort-2 add-sorter-field]]
|
||||
[auto-ap.datomic :refer [uri remove-nils merge-query apply-pagination apply-sort-3 add-sorter-fields]]
|
||||
[auto-ap.graphql.utils :refer [limited-clients]]
|
||||
[auto-ap.parse :as parse]
|
||||
[clj-time.coerce :as c]
|
||||
@@ -28,17 +28,19 @@
|
||||
:in ['$]
|
||||
:where ['[?e :invoice/invoice-number]]}
|
||||
:args [(d/db (d/connect uri))]}
|
||||
(:sort-by args) (add-sorter-field {"client" ['[?e :invoice/client ?c]
|
||||
'[?c :client/name ?sorter]]
|
||||
"vendor" ['[?e :invoice/vendor ?v]
|
||||
'[?v :vendor/name ?sorter]]
|
||||
"description-original" ['[?e :transaction/description-original ?sorter]]
|
||||
"date" ['[?e :invoice/date ?sorter]]
|
||||
"due" ['[?e :invoice/due ?sorter]]
|
||||
"invoice-number" ['[?e :invoice/invoice-number ?sorter]]
|
||||
"total" ['[?e :invoice/total ?sorter]]
|
||||
"outstanding" ['[?e :invoice/outstanding-balance ?sorter]]}
|
||||
args)
|
||||
(:sort args) (add-sorter-fields {"client" ['[?e :invoice/client ?c]
|
||||
'[?c :client/name ?sort-client]]
|
||||
"vendor" ['[?e :invoice/vendor ?v]
|
||||
'[?v :vendor/name ?sort-vendor]]
|
||||
"description-original" ['[?e :transaction/description-original ?sort-description-original]]
|
||||
"location" ['[?e :invoice/expense-accounts ?iea]
|
||||
'[?iea :invoice-expense-account/location ?sort-location]]
|
||||
"date" ['[?e :invoice/date ?sort-date]]
|
||||
"due" ['[?e :invoice/due ?sort-due]]
|
||||
"invoice-number" ['[?e :invoice/invoice-number ?sort-invoice-number]]
|
||||
"total" ['[?e :invoice/total ?sort-total]]
|
||||
"outstanding-balance" ['[?e :invoice/outstanding-balance ?sort-outstanding-balance]]}
|
||||
args)
|
||||
(limited-clients (:id args))
|
||||
(merge-query {:query {:in ['[?xx ...]]
|
||||
:where ['[?e :invoice/client ?xx]]}
|
||||
@@ -94,7 +96,7 @@
|
||||
(merge-query {:query {:find ['?base-date '?e]
|
||||
:where ['[?e :invoice/date ?base-date]]}}) )
|
||||
(d/query)
|
||||
(apply-sort-2 args [:asc :asc])
|
||||
(apply-sort-3 args)
|
||||
(apply-pagination args)))
|
||||
|
||||
|
||||
|
||||
@@ -1,22 +1,11 @@
|
||||
(ns auto-ap.datomic.ledger
|
||||
(:require [datomic.api :as d]
|
||||
[auto-ap.graphql.utils :refer [->graphql limited-clients]]
|
||||
[auto-ap.datomic :refer [merge-query apply-sort-2 apply-sort apply-pagination add-sorter-field]]
|
||||
[auto-ap.datomic :refer [merge-query apply-sort-3 apply-pagination add-sorter-fields]]
|
||||
[auto-ap.datomic :refer [uri]]
|
||||
[clj-time.coerce :as c]
|
||||
[clj-time.core :as time]))
|
||||
|
||||
(defn sort-fn [sort-by]
|
||||
(cond
|
||||
(= "client" sort-by)
|
||||
#(-> % :journal-entry/client :client/name)
|
||||
|
||||
(= "vendor" sort-by)
|
||||
#(-> % :journal-entry/vendor :vendor/name)
|
||||
|
||||
:else
|
||||
(keyword "journal-entry" sort-by)))
|
||||
|
||||
(defn raw-graphql-ids [db args]
|
||||
|
||||
(let [query (cond-> {:query {:find []
|
||||
@@ -24,12 +13,12 @@
|
||||
:where []}
|
||||
:args [db]}
|
||||
|
||||
(:sort-by args) (add-sorter-field {"client" ['[?e :journal-entry/client ?c]
|
||||
'[?c :client/name ?sorter]]
|
||||
"date" ['[?e :journal-entry/date ?sorter]]
|
||||
"vendor" ['[?e :journal-entry/vendor ?sorter]]
|
||||
"amount" ['[?e :journal-entry/amount ?sorter]]}
|
||||
args)
|
||||
(:sort args) (add-sorter-fields {"client" ['[?e :journal-entry/client ?c]
|
||||
'[?c :client/name ?sort-client]]
|
||||
"date" ['[?e :journal-entry/date ?sort-date]]
|
||||
"vendor" ['[?e :journal-entry/vendor ?sort-vendor]]
|
||||
"amount" ['[?e :journal-entry/amount ?sort-amount]]}
|
||||
args)
|
||||
|
||||
(limited-clients (:id args))
|
||||
(merge-query {:query {:in ['[?xx ...]]
|
||||
@@ -85,7 +74,7 @@
|
||||
(merge-query {:query {:find ['?base-date '?e] :where ['[?e :journal-entry/date ?base-date]]}}))]
|
||||
(->> query
|
||||
(d/query)
|
||||
(apply-sort-2 args [:desc :asc])
|
||||
(apply-sort-3 args)
|
||||
(apply-pagination args))))
|
||||
|
||||
(defn graphql-results [ids db args]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
(ns auto-ap.datomic.transaction-rules
|
||||
(:require [datomic.api :as d]
|
||||
[auto-ap.datomic :refer [uri merge-query apply-sort-2 apply-pagination add-sorter-field]]
|
||||
[auto-ap.datomic :refer [uri merge-query apply-sort-3 apply-pagination add-sorter-fields]]
|
||||
[auto-ap.graphql.utils :refer [limited-clients]]
|
||||
[clojure.set :refer [rename-keys]]
|
||||
[clj-time.coerce :as c]))
|
||||
@@ -24,18 +24,17 @@
|
||||
:in ['$]
|
||||
:where []}
|
||||
:args [db]}
|
||||
(:sort-by args) (add-sorter-field {"client" ['[?e :transaction-rule/client ?c]
|
||||
'[?c :client/name ?sorter]]
|
||||
(:sort args) (add-sorter-fields {"client" ['[?e :transaction-rule/client ?c]
|
||||
'[?c :client/name ?sort-client]]
|
||||
|
||||
"yodlee-merchant" ['[?e :transaction-rule/yodlee-merchant ?c]
|
||||
'[?c :yodlee-merchant/name ?sorter]]
|
||||
"bank-account" ['[?e :transaction-rule/bank-account ?c]
|
||||
'[?c :bank-account/name ?sorter]]
|
||||
"description" ['[?e :transaction-rule/description ?sorter]]
|
||||
"note" ['[?e :transaction-rule/note ?sorter]]
|
||||
"amount-lte" ['[?e :transaction-rule/amount-lte ?sorter]]
|
||||
"amount-gte" ['[?e :transaction-rule/amount-gte ?sorter]]
|
||||
}
|
||||
"yodlee-merchant" ['[?e :transaction-rule/yodlee-merchant ?ym]
|
||||
'[?ym :yodlee-merchant/name ?sort-yodlee-merchant]]
|
||||
"bank-account" ['[?e :transaction-rule/bank-account ?ba]
|
||||
'[?ba :bank-account/name ?sort-bank-account]]
|
||||
"description" ['[?e :transaction-rule/description ?sort-description]]
|
||||
"note" ['[?e :transaction-rule/note ?sort-note]]
|
||||
"amount-lte" ['[?e :transaction-rule/amount-lte ?sort-amount-lte]]
|
||||
"amount-gte" ['[?e :transaction-rule/amount-gte ?sort-amount-gte]]}
|
||||
args)
|
||||
|
||||
(limited-clients (:id args))
|
||||
@@ -55,7 +54,7 @@
|
||||
|
||||
(cond->> query
|
||||
true (d/query)
|
||||
true (apply-sort-2 args [:asc])
|
||||
true (apply-sort-3 args)
|
||||
true (apply-pagination args))))
|
||||
|
||||
(defn graphql-results [ids db args]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
(ns auto-ap.datomic.transactions
|
||||
(:require [datomic.api :as d]
|
||||
[auto-ap.datomic :refer [uri merge-query apply-sort-2 apply-sort apply-pagination add-sorter-field]]
|
||||
[auto-ap.datomic :refer [uri merge-query apply-sort-3 apply-pagination add-sorter-fields]]
|
||||
[auto-ap.graphql.utils :refer [limited-clients]]
|
||||
[clj-time.coerce :as c]
|
||||
[clj-time.coerce :as coerce]))
|
||||
@@ -25,25 +25,25 @@
|
||||
:where []}
|
||||
:args [db]}
|
||||
|
||||
(:sort-by args) (add-sorter-field {"client" ['[?e :transaction/client ?c]
|
||||
'[?c :client/name ?sorter]]
|
||||
"account" ['[?e :transaction/date]
|
||||
'(or-join [?e ?sorter]
|
||||
(and [?e :transaction/account ?c]
|
||||
[?c :account/name ?sorter])
|
||||
(and
|
||||
(not [?e :transaction/account])
|
||||
[(ground "") ?sorter]))]
|
||||
"description-original" ['[?e :transaction/description-original ?sorter]]
|
||||
"date" ['[?e :transaction/date ?sorter]]
|
||||
"vendor" ['(or-join [?e ?sorter]
|
||||
(and [(missing? $ ?e :transaction/vendor)]
|
||||
[?e :transaction/description-original ?sorter])
|
||||
(and [?e :transaction/vendor ?v]
|
||||
[?v :vendor/name ?sorter]))]
|
||||
"amount" ['[?e :transaction/amount ?sorter]]
|
||||
"status" ['[?e :transaction/status ?sorter]]}
|
||||
args)
|
||||
(:sort args) (add-sorter-fields {"client" ['[?e :transaction/client ?c]
|
||||
'[?c :client/name ?sort-client]]
|
||||
"account" ['[?e :transaction/date]
|
||||
'(or-join [?e ?sort-account]
|
||||
(and [?e :transaction/account ?c]
|
||||
[?c :account/name ?sort-account])
|
||||
(and
|
||||
(not [?e :transaction/account])
|
||||
[(ground "") ?sort-account]))]
|
||||
"description-original" ['[?e :transaction/description-original ?sort-description-original]]
|
||||
"date" ['[?e :transaction/date ?sort-date]]
|
||||
"vendor" ['(or-join [?e ?sort-vendor]
|
||||
(and [(missing? $ ?e :transaction/vendor)]
|
||||
[?e :transaction/description-original ?sort-vendor])
|
||||
(and [?e :transaction/vendor ?v]
|
||||
[?v :vendor/name ?sort-vendor]))]
|
||||
"amount" ['[?e :transaction/amount ?sort-amount]]
|
||||
"status" ['[?e :transaction/status ?sort-status]]}
|
||||
args)
|
||||
|
||||
(limited-clients (:id args))
|
||||
(merge-query {:query {:in ['[?xx ...]]
|
||||
@@ -118,7 +118,7 @@
|
||||
'[?e :transaction/date ?base-date]]}}))]
|
||||
(cond->> query
|
||||
true (d/query)
|
||||
true (apply-sort-2 args [:desc :asc])
|
||||
true (apply-sort-3 args)
|
||||
true (apply-pagination args)))))
|
||||
|
||||
(defn graphql-results [ids db args]
|
||||
|
||||
@@ -283,6 +283,8 @@
|
||||
:client {:type :client}}}
|
||||
|
||||
|
||||
|
||||
|
||||
:invoice_page {:fields {:invoices {:type '(list :invoice)}
|
||||
:count {:type 'Int}
|
||||
:total {:type 'Int}
|
||||
@@ -375,6 +377,8 @@
|
||||
:to_date {:type :iso_date}}
|
||||
:resolve :get-profit-and-loss}
|
||||
|
||||
|
||||
|
||||
:invoice_page {:type '(list :invoice_page)
|
||||
:args {:import_status {:type 'String}
|
||||
:date_range {:type :date_range}
|
||||
@@ -383,8 +387,7 @@
|
||||
:vendor_id {:type :id}
|
||||
:invoice_number_like {:type 'String}
|
||||
:start {:type 'Int}
|
||||
:sort_by {:type 'String}
|
||||
:asc {:type 'Boolean}}
|
||||
:sort {:type '(list :sort_item)}}
|
||||
|
||||
:resolve :get-invoice-page}
|
||||
|
||||
@@ -419,8 +422,7 @@
|
||||
:amount_gte {:type :money}
|
||||
:description {:type 'String}
|
||||
:start {:type 'Int}
|
||||
:sort_by {:type 'String}
|
||||
:asc {:type 'Boolean}
|
||||
:sort {:type '(list :sort_item)}
|
||||
:approval_status {:type :transaction_approval_status}}
|
||||
|
||||
:resolve :get-transaction-page}
|
||||
@@ -428,7 +430,7 @@
|
||||
:transaction_rule_page {:type :transaction_rule_page
|
||||
:args {:client_id {:type :id}
|
||||
:start {:type 'Int}
|
||||
:sort_by {:type 'String}
|
||||
:sort {:type '(list :sort_item)}
|
||||
:asc {:type 'Boolean}}
|
||||
:resolve :get-transaction-rule-page}
|
||||
|
||||
@@ -441,8 +443,7 @@
|
||||
:from_numeric_code {:type 'Int}
|
||||
:to_numeric_code {:type 'Int}
|
||||
:start {:type 'Int}
|
||||
:sort_by {:type 'String}
|
||||
:asc {:type 'Boolean}}
|
||||
:sort {:type '(list :sort_item)}}
|
||||
|
||||
:resolve :get-ledger-page}
|
||||
|
||||
@@ -452,8 +453,7 @@
|
||||
:date_range {:type :date_range}
|
||||
:check_number_like {:type 'String}
|
||||
:start {:type 'Int}
|
||||
:sort_by {:type 'String}
|
||||
:asc {:type 'Boolean}}
|
||||
:sort {:type '(list :sort_item)}}
|
||||
|
||||
:resolve :get-payment-page}
|
||||
|
||||
@@ -467,6 +467,10 @@
|
||||
|
||||
:input-objects
|
||||
{
|
||||
:sort_item
|
||||
{:fields {:sort_key {:type 'String}
|
||||
:sort_name {:type 'String}
|
||||
:asc {:type 'Boolean}}}
|
||||
:invoice_payment_amount {:fields {:invoice_id {:type :id}
|
||||
:amount {:type 'Float}}}
|
||||
:edit_location_match {:fields {:location {:type 'String}
|
||||
@@ -652,8 +656,7 @@
|
||||
:amount_gte {:type :money}
|
||||
:description {:type 'String}
|
||||
:start {:type 'Int}
|
||||
:sort_by {:type 'String}
|
||||
:asc {:type 'Boolean}
|
||||
:sort {:type '(list :sort_item)}
|
||||
:approval_status {:type :transaction_approval_status}}
|
||||
|
||||
:resolve :mutation/unapprove-transactions}
|
||||
|
||||
@@ -134,12 +134,10 @@
|
||||
retractions (map (fn [[_ e]] [:db/retractEntity [:journal-entry/original-entity e]]) affected-entities)]
|
||||
|
||||
(when (seq retractions)
|
||||
(println "Retracting " retractions)
|
||||
@(d/transact (d/connect uri) retractions))
|
||||
|
||||
|
||||
(doseq [d-tx d-txs]
|
||||
(clojure.pprint/pprint d-tx)
|
||||
#_(println "updating general-ledger " d-tx)
|
||||
@(d/transact (d/connect uri) [d-tx]))))
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
[clj-time.coerce :as c]
|
||||
[clj-time.core :as t]))
|
||||
|
||||
(defn exclude-until-date [client end]
|
||||
(defn mark-until-date [client end]
|
||||
(let [conn (d/connect uri)]
|
||||
(doseq [p (->>
|
||||
(d/query {:query {:find '[?e]
|
||||
@@ -47,5 +47,22 @@
|
||||
@(d/transact conn p)
|
||||
(println "process 100"))))
|
||||
|
||||
(defn unapprove-all []
|
||||
(let [conn (d/connect uri)]
|
||||
(doseq [p (->>
|
||||
(d/query {:query {:find '[?e]
|
||||
:in '[$ ]
|
||||
:where ['[?e :transaction/date ?d ]]}
|
||||
:args [(d/db conn)]})
|
||||
(mapv first)
|
||||
(mapv (fn [i]
|
||||
{:db/id i
|
||||
:transaction/approval-status :transaction-approval-status/unapproved}))
|
||||
(partition-all 100))]
|
||||
|
||||
@(d/transact conn p)
|
||||
(println "process 100"))))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user