diff --git a/src/clj/auto_ap/datomic/checks.clj b/src/clj/auto_ap/datomic/checks.clj index e10e1aff..dc1f1892 100644 --- a/src/clj/auto_ap/datomic/checks.clj +++ b/src/clj/auto_ap/datomic/checks.clj @@ -1,8 +1,7 @@ (ns auto-ap.datomic.checks (:require [datomic.api :as d] - [auto-ap.datomic :refer [uri merge-query apply-sort-3 apply-pagination add-sorter-fields conn]] + [auto-ap.datomic :refer [merge-query apply-sort-3 apply-pagination add-sorter-fields conn]] [auto-ap.graphql.utils :refer [limited-clients]] - [auto-ap.utils :refer [dollars=]] [clojure.set :refer [rename-keys]] [clj-time.coerce :as c] [clojure.tools.logging :as log])) @@ -29,22 +28,22 @@ {:transaction/_payment [:db/id :transaction/date]}]) (defn raw-graphql-ids [db args] - (let [check-number-like (try (Long/parseLong (:check-number-like args)) (catch Exception e nil)) + (let [check-number-like (try (Long/parseLong (:check-number-like args)) (catch Exception _ nil)) query (cond-> {:query {:find [] :in ['$] :where []} :args [db]} - (: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) + (: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" ['[(get-else $ ?e :payment/check-number 0) ?sort-check-number]] + "date" ['[?e :payment/date ?sort-date]] + "amount" ['[?e :payment/amount ?sort-amount]] + "status" ['[?e :payment/status ?sort-status]]} + args) (:exact-match-id args) (merge-query {:query {:in ['?e] :where []} @@ -151,7 +150,7 @@ true (apply-sort-3 args) true (apply-pagination args)))) -(defn graphql-results [ids db args] +(defn graphql-results [ids db _] (let [results (->> (d/pull-many db default-read ids) (group-by :db/id)) payments (->> ids @@ -161,7 +160,7 @@ payments)) (defn get-graphql [args] - (let [db (d/db (d/connect uri)) + (let [db (d/db conn) {ids-to-retrieve :ids matching-count :count} (raw-graphql-ids db args)] [(->> (graphql-results ids-to-retrieve db args)) @@ -169,5 +168,5 @@ (defn get-by-id [id] (->> - (d/pull (d/db (d/connect uri)) default-read id) + (d/pull (d/db conn) default-read id) (<-datomic))) diff --git a/src/clj/auto_ap/graphql/checks.clj b/src/clj/auto_ap/graphql/checks.clj index e59d3b98..66f6ea7b 100644 --- a/src/clj/auto_ap/graphql/checks.clj +++ b/src/clj/auto_ap/graphql/checks.clj @@ -375,7 +375,10 @@ (defn get-payment-page [context args value] (let [args (assoc args :id (:id context)) - [payments checks-count] (d-checks/get-graphql (update (<-graphql args) :payment-type enum->keyword "payment-type"))] + [payments checks-count] (d-checks/get-graphql (-> args + (<-graphql) + (update :payment-type enum->keyword "payment-type") + (update :status enum->keyword "payment-status")))] [{:payments (->> payments (map (fn [payment] @@ -511,6 +514,7 @@ :args {:client_id {:type :id} :vendor_id {:type :id} :payment_type {:type :payment_type} + :status {:type :payment_status} :exact_match_id {:type :id} :date_range {:type :date_range} :amount_lte {:type :money} @@ -550,7 +554,11 @@ {:payment_type {:values [{:enum-value :check} {:enum-value :cash} {:enum-value :debit} - {:enum-value :credit}]}}) + {:enum-value :credit}]} + :payment_status {:values [{:enum-value :voided} + {:enum-value :pending} + {:enum-value :cleared}]}}) + (def resolvers {:get-potential-payments get-potential-payments diff --git a/src/clj/auto_ap/import/transactions.clj b/src/clj/auto_ap/import/transactions.clj index 96a7e8d5..3ceb3ca3 100644 --- a/src/clj/auto_ap/import/transactions.clj +++ b/src/clj/auto_ap/import/transactions.clj @@ -345,3 +345,18 @@ (range) group))))) +(defn add-single-transaction [bank-account-code tx] + (let [bank-account (d/pull (d/db conn) + [:bank-account/code + :db/id + :bank-account/locations + :bank-account/start-date + {:client/_bank-accounts [:client/code :client/locations :db/id]} ] + [:bank-account/code bank-account-code])] + + (transaction->txs (-> (merge {:transaction/amount 100.0 :transaction/description-original "boring" :transaction/approval-status :transaction-approval-status/approved :transaction/status "POSTED"} + tx) + (assoc :transaction/bank-account (:db/id bank-account))) + bank-account + (rm/rule-applying-fn (tr/get-all))))) + diff --git a/src/cljs/auto_ap/views/pages/payments.cljs b/src/cljs/auto_ap/views/pages/payments.cljs index 4fa2ca21..9edbccad 100644 --- a/src/cljs/auto_ap/views/pages/payments.cljs +++ b/src/cljs/auto_ap/views/pages/payments.cljs @@ -38,6 +38,7 @@ :client-id (:id @(re-frame/subscribe [::subs/client])) :vendor-id (:id (:vendor params)) :payment-type (:payment-type params) + :status (:status params) :exact-match-id (some-> (:exact-match-id params) str) :date-range (:date-range params) :amount-gte (:amount-gte (:amount-range params)) diff --git a/src/cljs/auto_ap/views/pages/payments/side_bar.cljs b/src/cljs/auto_ap/views/pages/payments/side_bar.cljs index 35407125..d40ebd4b 100644 --- a/src/cljs/auto_ap/views/pages/payments/side_bar.cljs +++ b/src/cljs/auto_ap/views/pages/payments/side_bar.cljs @@ -67,6 +67,27 @@ (dispatch-event [::data-page/filter-changed data-page :payment-type nil])} "All"]]] + [:p.menu-label "Status"] + [:div.field.has-addons + [:p.control [:a.button.is-small {:on-click + (dispatch-event [::data-page/filter-changed data-page :status :voided]) + :class (when (= :voided @(re-frame/subscribe [::data-page/filter data-page :status])) + ["is-selected" "is-success"])} + "Voided" ]] + [:p.control [:a.button.is-small {:on-click + (dispatch-event [::data-page/filter-changed data-page :status :pending]) + :class (when (= :pending @(re-frame/subscribe [::data-page/filter data-page :status])) + ["is-selected" "is-success"])} + "Pending" ]] + [:p.control [:a.button.is-small {:on-click + (dispatch-event [::data-page/filter-changed data-page :status :cleared]) + :class (when (= :cleared @(re-frame/subscribe [::data-page/filter data-page :status])) + ["is-selected" "is-success"])} + "Cleared"]] + [:p.control [:a.button.is-small {:on-click + (dispatch-event [::data-page/filter-changed data-page :status nil])} + "All"]]] + (when-let [exact-match-id @(re-frame/subscribe [::data-page/filter data-page :exact-match-id])] [:div [:p.menu-label "Specific Payment"]