diff --git a/src/clj/auto_ap/datomic/ledger.clj b/src/clj/auto_ap/datomic/ledger.clj index 78412f5a..0ca08b8a 100644 --- a/src/clj/auto_ap/datomic/ledger.clj +++ b/src/clj/auto_ap/datomic/ledger.clj @@ -14,132 +14,143 @@ [datomic.api :as dc])) (defn raw-graphql-ids [db args] - (let [query (cond-> {:query {:find [] - :in ['$ ] - :where []} - :args [db]} + (let [query + (if (:exact-match-id args) + (cond-> {:query {:find '[?e] + :in '[$ ?e] + :where '[[?e :journal-entry/client ?c]]} + :args [db + (:exact-match-id args)]} + (limited-clients (:id args)) + (merge-query {:query {:in ['[?xx ...]] + :where ['[?e :journal-entry/client ?xx]]} + :args [(set (map :db/id (limited-clients (:id args))))]})) + (cond-> {:query {:find [] + :in ['$ ] + :where []} + :args [db]} - (:client-id args) - (merge-query {:query {:in ['?client-id] - :where ['[?e :journal-entry/client ?client-id]]} - :args [(:client-id args)]}) + (:client-id args) + (merge-query {:query {:in ['?client-id] + :where ['[?e :journal-entry/client ?client-id]]} + :args [(:client-id args)]}) - (:only-external args) - (merge-query {:query {:where ['(not [?e :journal-entry/original-entity ])]}}) + (:only-external args) + (merge-query {:query {:where ['(not [?e :journal-entry/original-entity ])]}}) - (seq (:external-id-like args)) - (merge-query {:query {:in ['?external-id-like] - :where ['[?e :journal-entry/external-id ?external-id] - '[(.contains ^String ?external-id ?external-id-like)]]} - :args [(:external-id-like args)]}) + (seq (:external-id-like args)) + (merge-query {:query {:in ['?external-id-like] + :where ['[?e :journal-entry/external-id ?external-id] + '[(.contains ^String ?external-id ?external-id-like)]]} + :args [(:external-id-like args)]}) - (seq (:source args)) - (merge-query {:query {:in ['?source] - :where ['[?e :journal-entry/source ?source]]} - :args [(:source args)]}) + (seq (:source args)) + (merge-query {:query {:in ['?source] + :where ['[?e :journal-entry/source ?source]]} + :args [(:source args)]}) - (:vendor-id args) - (merge-query {:query {:in ['?vendor-id] - :where ['[?e :journal-entry/vendor ?vendor-id]]} - :args [(:vendor-id args)]}) + (:vendor-id args) + (merge-query {:query {:in ['?vendor-id] + :where ['[?e :journal-entry/vendor ?vendor-id]]} + :args [(:vendor-id args)]}) - (:client-code args) - (merge-query {:query {:in ['?client-code] - :where ['[?e :journal-entry/client ?client-id] - '[?client-id :client/code ?client-code]]} - :args [(:client-code args)]}) + (:client-code args) + (merge-query {:query {:in ['?client-code] + :where ['[?e :journal-entry/client ?client-id] + '[?client-id :client/code ?client-code]]} + :args [(:client-code args)]}) - (:start (:date-range args)) - (merge-query {:query {:in ['?start-date] - :where ['[?e :journal-entry/date ?date] - '[(>= ?date ?start-date)]]} - :args [(c/to-date (:start (:date-range args)))]}) + (:start (:date-range args)) + (merge-query {:query {:in ['?start-date] + :where ['[?e :journal-entry/date ?date] + '[(>= ?date ?start-date)]]} + :args [(c/to-date (:start (:date-range args)))]}) - (:end (:date-range args)) - (merge-query {:query {:in ['?end-date] - :where ['[?e :journal-entry/date ?date] - '[(<= ?date ?end-date)]]} - :args [(c/to-date (:end (:date-range args)))]}) + (:end (:date-range args)) + (merge-query {:query {:in ['?end-date] + :where ['[?e :journal-entry/date ?date] + '[(<= ?date ?end-date)]]} + :args [(c/to-date (:end (:date-range args)))]}) - (or (seq (:numeric-code args)) - (:bank-account-id args) - (not-empty (:location args))) - (merge-query {:query {:where ['[?e :journal-entry/line-items ?li]]}}) + (or (seq (:numeric-code args)) + (:bank-account-id args) + (not-empty (:location args))) + (merge-query {:query {:where ['[?e :journal-entry/line-items ?li]]}}) - (seq (:numeric-code args)) - (merge-query {:query {:in ['[[?from-numeric-code ?to-numeric-code]]] - :where ['[?li :journal-entry-line/account ?a] - '(or-join [?a ?c] - [?a :account/numeric-code ?c] - [?a :bank-account/numeric-code ?c]) - '[(>= ?c ?from-numeric-code)] - '[(<= ?c ?to-numeric-code)]]} - :args [(vec (for [{:keys [from to]} (:numeric-code args)] - [(or from 0) (or to 99999)]))]}) + (seq (:numeric-code args)) + (merge-query {:query {:in ['[[?from-numeric-code ?to-numeric-code]]] + :where ['[?li :journal-entry-line/account ?a] + '(or-join [?a ?c] + [?a :account/numeric-code ?c] + [?a :bank-account/numeric-code ?c]) + '[(>= ?c ?from-numeric-code)] + '[(<= ?c ?to-numeric-code)]]} + :args [(vec (for [{:keys [from to]} (:numeric-code args)] + [(or from 0) (or to 99999)]))]}) - (:amount-gte args) - (merge-query {:query {:in ['?amount-gte] - :where ['[?e :journal-entry/amount ?a] - '[(>= ?a ?amount-gte)]]} - :args [(:amount-gte args)]}) + (:amount-gte args) + (merge-query {:query {:in ['?amount-gte] + :where ['[?e :journal-entry/amount ?a] + '[(>= ?a ?amount-gte)]]} + :args [(:amount-gte args)]}) - (:amount-lte args) - (merge-query {:query {:in ['?amount-lte] - :where ['[?e :journal-entry/amount ?a] - '[(<= ?a ?amount-lte)]]} - :args [(:amount-lte args)]}) + (:amount-lte args) + (merge-query {:query {:in ['?amount-lte] + :where ['[?e :journal-entry/amount ?a] + '[(<= ?a ?amount-lte)]]} + :args [(:amount-lte args)]}) - (:bank-account-id args) - (merge-query {:query {:in ['?a] - :where ['[?li :journal-entry-line/account ?a]]} - :args [(:bank-account-id args)]}) + (:bank-account-id args) + (merge-query {:query {:in ['?a] + :where ['[?li :journal-entry-line/account ?a]]} + :args [(:bank-account-id args)]}) - (:account-id args) - (merge-query {:query {:in ['?a2] - :where ['[?e :journal-entry/line-items ?li2] - '[?li2 :journal-entry-line/account ?a2]]} - :args [(:account-id args)]}) + (:account-id args) + (merge-query {:query {:in ['?a2] + :where ['[?e :journal-entry/line-items ?li2] + '[?li2 :journal-entry-line/account ?a2]]} + :args [(:account-id args)]}) - (not-empty (:location args)) - (merge-query {:query {:in ['?location] - :where ['[?li :journal-entry-line/location ?location]]} - :args [(:location args)]}) + (not-empty (:location args)) + (merge-query {:query {:in ['?location] + :where ['[?li :journal-entry-line/location ?location]]} + :args [(:location args)]}) - (not-empty (:locations args)) - (merge-query {:query {:in ['[?location ...]] - :where ['[?li :journal-entry-line/location ?location]]} - :args [(:locations args)]}) + (not-empty (:locations args)) + (merge-query {:query {:in ['[?location ...]] + :where ['[?li :journal-entry-line/location ?location]]} + :args [(:locations args)]}) - (limited-clients (:id args)) - (merge-query {:query {:in ['[?xx ...]] - :where ['[?e :journal-entry/client ?xx]]} - :args [(set (map :db/id (limited-clients (:id 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 ?v] - '[?v :vendor/name ?sort-vendor]] - "amount" ['[?e :journal-entry/amount ?sort-amount]] - "external-id" ['[?e :journal-entry/external-id ?sort-external-id]] - "source" ['[?e :journal-entry/source ?sort-source]]} - args) + (limited-clients (:id args)) + (merge-query {:query {:in ['[?xx ...]] + :where ['[?e :journal-entry/client ?xx]]} + :args [(set (map :db/id (limited-clients (:id 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 ?v] + '[?v :vendor/name ?sort-vendor]] + "amount" ['[?e :journal-entry/amount ?sort-amount]] + "external-id" ['[?e :journal-entry/external-id ?sort-external-id]] + "source" ['[?e :journal-entry/source ?sort-source]]} + args) - true - (merge-query {:query {:find ['?sort-default '?e] :where ['[?e :journal-entry/date ?sort-default]]}}))] + true + (merge-query {:query {:find ['?sort-default '?e] :where ['[?e :journal-entry/date ?sort-default]]}})))] (->> (query2 query) - (apply-sort-3 (update args :sort conj {:sort-key "default-2" :asc true})) + (apply-sort-3 (update args :sort conj {:sort-key "default-2" :asc true})) (apply-pagination args)))) (defn graphql-results [ids db _] - (let [results (->> (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 [*]} - {:account/client-overrides [:account-client-override/name - {:account-client-override/client [:db/id]}]} - {:bank-account/type [*]}]}]}] - ids) + (let [results (->> (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 [*]} + {:account/client-overrides [:account-client-override/name + {:account-client-override/client [:db/id]}]} + {:bank-account/type [*]}]}]}] + ids) (map #(update % :journal-entry/date c/from-date)) (map (fn [je] (update je :journal-entry/line-items @@ -149,11 +160,11 @@ jels))))) (filter (fn [je] (every? - (fn [jel] - (let [include-in-reports (-> jel :journal-entry-line/account :bank-account/include-in-reports)] - (or (nil? include-in-reports) - (true? include-in-reports)))) - (:journal-entry/line-items je)))) + (fn [jel] + (let [include-in-reports (-> jel :journal-entry-line/account :bank-account/include-in-reports)] + (or (nil? include-in-reports) + (true? include-in-reports)))) + (:journal-entry/line-items je)))) (group-by :db/id))] (->> ids (map results) diff --git a/src/clj/auto_ap/graphql/ledger.clj b/src/clj/auto_ap/graphql/ledger.clj index c5315d25..693e2692 100644 --- a/src/clj/auto_ap/graphql/ledger.clj +++ b/src/clj/auto_ap/graphql/ledger.clj @@ -811,6 +811,7 @@ {:fields {:client_id {:type :id} :vendor_id {:type :id} :account_id {:type :id} + :exact_match_id {:type :id} :amount_lte {:type :money} :amount_gte {:type :money} :bank_account_id {:type :id} diff --git a/src/clj/auto_ap/handler.clj b/src/clj/auto_ap/handler.clj index fee27168..54643aa9 100644 --- a/src/clj/auto_ap/handler.clj +++ b/src/clj/auto_ap/handler.clj @@ -147,14 +147,18 @@ (let [session (:session request {}) end-time (coerce/to-date-time (::idle-timeout session))] (if (and end-time (time/before? end-time (time/now))) - {:session nil - :status 302 - :headers {"Location" "/login"}} + (if (get (:headers request) "hx-request") + {:session nil + :status 200 + :headers {"hx-redirect" "/login"}} + {:session nil + :status 302 + :headers {"Location" "/login"}}) (when-let [response (handler request)] (let [session (:session response session)] (if (nil? session) response - (let [end-time (time/plus (time/now) (time/days 2))] + (let [end-time (time/plus (time/now) (time/days 14))] (assoc response :session (assoc session ::idle-timeout (coerce/to-date end-time))))))))))) #_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]} diff --git a/src/clj/auto_ap/routes/utils.clj b/src/clj/auto_ap/routes/utils.clj index c5cd60c9..ee803775 100644 --- a/src/clj/auto_ap/routes/utils.clj +++ b/src/clj/auto_ap/routes/utils.clj @@ -7,8 +7,15 @@ (defn wrap-secure [handler] (fn [request] - (if (authenticated? request) + (cond (authenticated? request) (handler request) + + + (get (:headers request) "hx-request") + {:status 401 + :headers {"hx-redirect" "/login"}} + + :else {:status 302 :headers {"Location" "/login" }}))) @@ -25,5 +32,6 @@ (fn [request] (let [response (handler request)] (if (= 401 (get response :status)) - (assoc-in response [:headers "hx-redirect"] "/login/") + (-> response + (assoc-in [:headers "hx-redirect"] "/login/")) response)))) diff --git a/src/clj/auto_ap/solr.clj b/src/clj/auto_ap/solr.clj index dd41d123..1d7c7963 100644 --- a/src/clj/auto_ap/solr.clj +++ b/src/clj/auto_ap/solr.clj @@ -1,21 +1,136 @@ (ns auto-ap.solr - (:require [clojure.data.json :as json] - [clj-http.client :as client] - [config.core :refer [env]])) + (:require + [auto-ap.datomic :refer [conn]] + [clj-http.client :as client] + [clojure.data.json :as json] + [config.core :refer [env]] + [datomic.api :as dc] + [clj-time.coerce :as c] + [auto-ap.time :as atime] + [clojure.string :as str])) (def solr-uri (:solr-uri env)) +(defn fmt-amount [a] + (with-precision 2 + (some-> a + bigdec + (.setScale 2 java.math.RoundingMode/HALF_UP) + (double)))) + +(defmulti datomic->solr (fn [d] + (let [entity (dc/pull (dc/db conn) '[:transaction/date :invoice/date :payment/date :journal-entry/date] d)] + + (cond (:transaction/date entity) + "transaction" + + (:invoice/date entity) + "invoice" + + (:payment/date entity) + "payment" + + (:journal-entry/date entity) + "journal-entry" + + :else + (throw (ex-info "Trying to index unknown entity" + {:id d})))))) + +(defmethod datomic->solr "transaction" [d] + (let [i (dc/pull (dc/db conn) '[:db/id :transaction/description-original + :transaction/amount + {:transaction/client [:client/code :db/id] + :transaction/vendor [:vendor/name :db/id]} + :transaction/date] + d)] + {"id" (-> i :db/id) + "client_id" (-> i :transaction/client :db/id) + "client_code" (-> i :transaction/client :client/code) + "date" (some-> i :transaction/date c/to-date-time (atime/unparse atime/iso-date) (str "T00:00:00Z")) + "amount" (-> i :transaction/amount fmt-amount) + "description" (-> i :transaction/description-original) + "vendor_name" (-> i :transaction/vendor :vendor/name) + "vendor_id" (-> i :transaction/vendor :db/id) + "type" "transaction"})) + +(defmethod datomic->solr "journal-entry" [d] + (let [i (dc/pull (dc/db conn) '[:db/id + :journal-entry/amount + :journal-entry/source + {:journal-entry/client [:client/code :db/id] + :journal-entry/vendor [:vendor/name :db/id] + :journal-entry/line-items [{:journal-entry-line/account [:account/name :account/numeric-code]}]} + :journal-entry/date] + d)] + {"id" (-> i :db/id) + "client_id" (-> i :journal-entry/client :db/id) + "client_code" (-> i :journal-entry/client :client/code) + "date" (some-> i :journal-entry/date c/to-date-time (atime/unparse atime/iso-date) (str "T00:00:00Z")) + "amount" (-> i :journal-entry/amount fmt-amount) + "description" (str + (when (:journal-entry/source i) + (str (:journal-entry/source i) ": ")) + (str/join ", " (set (map + (fn [li] + (format "%s (%s)" (:account/name (:journal-entry-line/account li)) + (:account/numeric-code (:journal-entry-line/account li)))) + (:journal-entry/line-items i))))) + "vendor_name" (-> i :journal-entry/vendor :vendor/name) + "vendor_id" (-> i :journal-entry/vendor :db/id) + "type" "journal-entry"})) + +(defmethod datomic->solr "invoice" [d] + (let [i (dc/pull (dc/db conn) '[:db/id :invoice/invoice-number + :invoice/total + {:invoice/client [:client/code :db/id] + :invoice/vendor [:vendor/name :db/id]} + :invoice/date] + d)] + {"id" (-> i :db/id) + "client_id" (-> i :invoice/client :db/id) + "client_code" (-> i :invoice/client :client/code) + "date" (some-> i :invoice/date c/to-date-time (atime/unparse atime/iso-date) (str "T00:00:00Z")) + "amount" (-> i :invoice/total fmt-amount) + "number" (-> i :invoice/invoice-number) + "vendor_name" (-> i :invoice/vendor :vendor/name) + "vendor_id" (-> i :invoice/vendor :db/id) + "type" "invoice"})) + +(defmethod datomic->solr "payment" [d] + (let [i (dc/pull (dc/db conn) '[:db/id :payment/check-number + :payment/amount + {:payment/client [:client/code :db/id] + :payment/vendor [:vendor/name :db/id]} + :payment/date] + d)] + {"id" (-> i :db/id) + "client_id" (-> i :payment/client :db/id) + "client_code" (-> i :payment/client :client/code) + "date" (some-> i :payment/date c/to-date-time (atime/unparse atime/iso-date) (str "T00:00:00Z")) + "amount" (-> i :payment/amount fmt-amount) + "description" (-> i :payment/check-number) + "vendor_name" (-> i :payment/vendor :vendor/name) + "vendor_id" (-> i :payment/vendor :db/id) + "type" "payment"})) + + + (defn index-documents [xs] (client/post (str solr-uri "/solr/invoices/update?commitWithin=15000") {:headers {"Content-Type" "application/json"} + :socket-timeout 30000 + :connection-timeout 30000 :method "POST" - :body (json/write-str xs)})) + :body (json/write-str (map datomic->solr xs))})) (defn query [q] (-> (client/post (str solr-uri "/solr/invoices/query") {:body (json/write-str {"query" q "fields" "id, date, amount, type, description, number, client_code, client_id, vendor_name"}) + :socket-timeout 30000 + :connection-timeout 30000 :headers {"Content-Type" "application/json"} :as :json} ) diff --git a/src/clj/auto_ap/ssr/search.clj b/src/clj/auto_ap/ssr/search.clj index 84a7af06..87741d65 100644 --- a/src/clj/auto_ap/ssr/search.clj +++ b/src/clj/auto_ap/ssr/search.clj @@ -43,6 +43,10 @@ (= "transaction" m) "type:transaction" + (= "journal-entry" m) + "type:journal-entry" + + :else (str "_text_:\"" (try-parse-number (try-cleanse-date m)) ""\")))))))) @@ -69,7 +73,13 @@ [:div.card-header-icon.icon-accounting-invoice-mail] (= "payment" (:type doc)) - [:div.card-header-icon.icon-check-payment-sign]) + [:div.card-header-icon.icon-check-payment-sign] + + (= "journal-entry" (:type doc)) + [:div.card-header-icon.icon-receipt] + + :else + nil) [:div.card-header-title (clojure.string/capitalize (:type doc)) " " " " @@ -86,6 +96,10 @@ (:type doc)) "transactions" + (= "journal-entry" + (:type doc)) + "ledger" + :else "payments") "/?exact-match-id=" (:id doc)) :target "_blank"}] @@ -121,6 +135,7 @@ :hx-indicator "#search" :value (:q (:params request)) :autofocus true}]] + [:i "Try dates, numbers, vendors. To filter to specific entity type, use 'invoice', 'transaction', 'journal-entry', 'payment'."] [:style ".htmx-request #search-results {display: none} .htmx-request .htmx-indicator { display: block !important; }"] [:div#search-results diff --git a/src/clj/user.clj b/src/clj/user.clj index 0cf198ad..5a4633ed 100644 --- a/src/clj/user.clj +++ b/src/clj/user.clj @@ -560,89 +560,51 @@ :separator \tab)))) -(defn fmt-amount [a] - (with-precision 2 - (some-> a - bigdec - (.setScale 2 java.math.RoundingMode/HALF_UP) - (double)))) (defn index-solr [] - (doseq [batch (->> (dc/qseq {:query '[:find (pull ?i [:db/id :invoice/invoice-number - :invoice/total - {:invoice/client [:client/code :db/id] - :invoice/vendor [:vendor/name :db/id]} - :invoice/date]) + (doseq [batch (->> (dc/qseq {:query '[:find ?i :in $ :where [?i :invoice/invoice-number] (not [?i :invoice/status :invoice-status/voided])] :args [ (dc/db conn)]}) - (map (fn [[i]] - {"id" (-> i :db/id) - "client_id" (-> i :invoice/client :db/id) - "client_code" (-> i :invoice/client :client/code) - "date" (some-> i :invoice/date c/to-date-time (atime/unparse atime/iso-date) (str "T00:00:00Z")) - "amount" (-> i :invoice/total fmt-amount) - "number" (-> i :invoice/invoice-number) - "vendor_name" (-> i :invoice/vendor :vendor/name) - "vendor_id" (-> i :invoice/vendor :db/id) - "type" "invoice" - })) + (map first) (partition-all 1000))] (print ".") (flush) (solr/index-documents batch)) - (doseq [batch (->> (dc/qseq {:query '[:find (pull ?i [:db/id :payment/check-number - :payment/amount - {:payment/client [:client/code :db/id] - :payment/vendor [:vendor/name :db/id]} - :payment/date]) + (doseq [batch (->> (dc/qseq {:query '[:find ?i :in $ :where [?i :payment/date] (not [?i :payment/status :payment-status/voided])] :args [(dc/db conn)]}) - (map (fn [[i]] - {"id" (-> i :db/id) - "client_id" (-> i :payment/client :db/id) - "client_code" (-> i :payment/client :client/code) - "date" (some-> i :payment/date c/to-date-time (atime/unparse atime/iso-date) (str "T00:00:00Z")) - "amount" (-> i :payment/amount fmt-amount) - "description" (-> i :payment/check-number) - "vendor_name" (-> i :payment/vendor :vendor/name) - "vendor_id" (-> i :payment/vendor :db/id) - "type" "payment"})) + (map first) (partition-all 1000))] (print ".") (flush) (solr/index-documents batch)) - (doseq [batch (->> (dc/qseq {:query '[:find (pull ?i [:db/id :transaction/description-original - :transaction/amount - {:transaction/client [:client/code :db/id] - :transaction/vendor [:vendor/name :db/id]} - :transaction/date]) + (doseq [batch (->> (dc/qseq {:query '[:find ?i :in $ :where [?i :transaction/description-original] (not [?i :transaction/approval-status :transaction-approval-status/suppressed])] :args [(dc/db conn)]}) - (map (fn [[i]] - {"id" (-> i :db/id) - "client_id" (-> i :transaction/client :db/id) - "client_code" (-> i :transaction/client :client/code) - "date" (some-> i :transaction/date c/to-date-time (atime/unparse atime/iso-date) (str "T00:00:00Z")) - "amount" (-> i :transaction/amount fmt-amount) - "description" (-> i :transaction/description-original) - "vendor_name" (-> i :transaction/vendor :vendor/name) - "vendor_id" (-> i :transaction/vendor :db/id) - "type" "transaction"})) + (map first) (partition-all 1000))] (print ".") (flush) - (solr/index-documents batch) - )) + (solr/index-documents batch)) + (doseq [batch (->> (dc/qseq {:query '[:find ?i + :in $ + :where [?i :journal-entry/date]] + :args [(dc/db conn)]}) + (map first) + (partition-all 1000))] + (print ".") + (flush) + (solr/index-documents batch))) (defn setup-sales-orders [] (doseq [n (->> (dc/qseq {:query '[:find ?s ?c :where [?s :sales-order/client ?c]] :args [(dc/db auto-ap.datomic/conn)]}) diff --git a/src/cljs/auto_ap/views/components/money_field.cljs b/src/cljs/auto_ap/views/components/money_field.cljs index b3079671..bacab8ae 100644 --- a/src/cljs/auto_ap/views/components/money_field.cljs +++ b/src/cljs/auto_ap/views/components/money_field.cljs @@ -66,7 +66,7 @@ :max max :step "0.01" :style (or style - {:width "8em"})}] + {:width "7em"})}] [:span.icon.is-left [:i.fa.fa-usd]]])) diff --git a/src/cljs/auto_ap/views/components/number_filter.cljs b/src/cljs/auto_ap/views/components/number_filter.cljs index e90ecfb0..10837b67 100644 --- a/src/cljs/auto_ap/views/components/number_filter.cljs +++ b/src/cljs/auto_ap/views/components/number_filter.cljs @@ -9,7 +9,7 @@ :on-change (fn [v] (re-frame/dispatch (conj on-change-event v)))} - [:div.columns + [:div.columns {:style {:width "80%"}} [:div.column [:div.control [form-builder/raw-field-v2 {:field :amount-gte} @@ -17,5 +17,6 @@ [:div.column [:div.control [form-builder/raw-field-v2 {:field :amount-lte} - [com/money-input {:placeholder "<="}]]]]]] + [com/money-input {:placeholder "<="}]]]] + [:div.column]]] ) diff --git a/src/cljs/auto_ap/views/pages/ledger.cljs b/src/cljs/auto_ap/views/pages/ledger.cljs index a20b098f..0be4d622 100644 --- a/src/cljs/auto_ap/views/pages/ledger.cljs +++ b/src/cljs/auto_ap/views/pages/ledger.cljs @@ -20,6 +20,7 @@ (defn data-params->query-params [params] {:start (:start params 0) :sort (:sort params) + :exact-match-id (:exact-match-id params) :per-page (:per-page params) :client-id (:id @(re-frame/subscribe [::subs/client])) :vendor-id (:id (:vendor params)) diff --git a/src/cljs/auto_ap/views/pages/ledger/side_bar.cljs b/src/cljs/auto_ap/views/pages/ledger/side_bar.cljs index 330d9f00..7eda4061 100644 --- a/src/cljs/auto_ap/views/pages/ledger/side_bar.cljs +++ b/src/cljs/auto_ap/views/pages/ledger/side_bar.cljs @@ -62,10 +62,12 @@ [:span {:class "name"} "External Ledger Import"]]])] (when (#{ :ledger :external-ledger} ap) [:div - [:p.menu-label "Bank Account"] - [bank-account-filter {:value @(re-frame/subscribe [::data-page/filter data-page :bank-account]) - :bank-accounts @(re-frame/subscribe [::subs/bank-accounts]) - :on-change-event [::data-page/filter-changed data-page :bank-account]}] + (when client + [:<> + [:p.menu-label "Bank Account"] + [bank-account-filter {:value @(re-frame/subscribe [::data-page/filter data-page :bank-account]) + :bank-accounts @(re-frame/subscribe [::subs/bank-accounts]) + :on-change-event [::data-page/filter-changed data-page :bank-account]}]]) diff --git a/src/cljs/auto_ap/views/pages/transactions/side_bar.cljs b/src/cljs/auto_ap/views/pages/transactions/side_bar.cljs index a97e3d05..36a7d887 100644 --- a/src/cljs/auto_ap/views/pages/transactions/side_bar.cljs +++ b/src/cljs/auto_ap/views/pages/transactions/side_bar.cljs @@ -62,12 +62,14 @@ [:span {:class "name"} "Insights"]]] ]] - [:p.menu-label "Bank Account"] - [:div - [bank-account-filter - {:on-change-event [::data-page/filter-changed data-page :bank-account] - :value @(re-frame/subscribe [::data-page/filter data-page :bank-account]) - :bank-accounts @(re-frame/subscribe [::subs/bank-accounts])}]] + (when client + [:<> + [:p.menu-label "Bank Account"] + [:div + [bank-account-filter + {:on-change-event [::data-page/filter-changed data-page :bank-account] + :value @(re-frame/subscribe [::data-page/filter data-page :bank-account]) + :bank-accounts @(re-frame/subscribe [::subs/bank-accounts])}]]]) [:p.menu-label "Financial Account"]