From 16a3b14844b9937180d11e306ad844032ba287ad Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Thu, 9 May 2019 23:32:43 -0700 Subject: [PATCH] adding day of month. --- src/clj/auto_ap/datomic.clj | 2 +- .../datomic/migrate/add_general_ledger.clj | 9 ++++ src/clj/auto_ap/graphql.clj | 6 ++- src/clj/auto_ap/graphql/transaction_rules.clj | 24 ++++++++++- .../auto_ap/entities/transaction_rule.cljc | 4 +- .../auto_ap/views/pages/admin/rules/form.cljs | 43 ++++++++++++++----- .../views/pages/admin/rules/table.cljs | 21 ++++++--- src/cljs/auto_ap/views/utils.cljs | 7 ++- 8 files changed, 95 insertions(+), 21 deletions(-) diff --git a/src/clj/auto_ap/datomic.clj b/src/clj/auto_ap/datomic.clj index 427b8763..185a1718 100644 --- a/src/clj/auto_ap/datomic.clj +++ b/src/clj/auto_ap/datomic.clj @@ -12,7 +12,7 @@ [clj-time.core :as time] [clj-time.coerce :as coerce])) - (def uri "datomic:sql://invoices?jdbc:postgresql://database:5432/datomic?user=datomic&password=datomic") + (def uri "datomic:sql://invoices-backup?jdbc:postgresql://database:5432/datomic?user=datomic&password=datomic") (defn create-database [] (d/create-database uri)) diff --git a/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj b/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj index 194e60c5..02c9cd10 100644 --- a/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj +++ b/src/clj/auto_ap/datomic/migrate/add_general_ledger.clj @@ -341,6 +341,15 @@ :db/cardinality :db.cardinality/one :db/doc "Amount has to be greater than or equal to this"} + {:db/ident :transaction-rule/dom-lte + :db/valueType :db.type/long + :db/cardinality :db.cardinality/one + :db/doc "Day of month has to be less than or equal to this"} + + {:db/ident :transaction-rule/dom-gte + :db/valueType :db.type/long + :db/cardinality :db.cardinality/one + :db/doc "Day of month has to be greater than or equal to this"} ]]) (def add-credit-bank-account diff --git a/src/clj/auto_ap/graphql.clj b/src/clj/auto_ap/graphql.clj index 0c17d499..c7f15d85 100644 --- a/src/clj/auto_ap/graphql.clj +++ b/src/clj/auto_ap/graphql.clj @@ -191,6 +191,8 @@ :description {:type 'String} :amount_lte {:type 'String} :amount_gte {:type 'String} + :dom_lte {:type 'Int} + :dom_gte {:type 'Int} :vendor {:type :vendor}}} :invoice_payment @@ -512,7 +514,9 @@ :bank_account_id {:type :id} :client_id {:type :id} :amount_lte {:type :money} - :amount_gte {:type :money}}} + :amount_gte {:type :money} + :dom_lte {:type 'Int} + :dom_gte {:type 'Int}}} :edit_account {:fields {:id {:type :id} diff --git a/src/clj/auto_ap/graphql/transaction_rules.clj b/src/clj/auto_ap/graphql/transaction_rules.clj index db83134a..de42f0ea 100644 --- a/src/clj/auto_ap/graphql/transaction_rules.clj +++ b/src/clj/auto_ap/graphql/transaction_rules.clj @@ -4,7 +4,8 @@ [datomic.api :as d] [auto-ap.datomic :refer [remove-nils uri merge-query]] [auto-ap.graphql.utils :refer [->graphql <-graphql limited-clients assert-admin result->page]] - [clj-time.coerce :as c])) + [clj-time.coerce :as c]) + (:import [java.time.temporal ChronoField])) (defn get-transaction-rule-page [context args value] (let [args (assoc args :id (:id context)) @@ -31,7 +32,8 @@ (defn tr [z x] (re-find (re-pattern z) x)) -(defn test-transaction-rule [{:keys [id]} {{:keys [description note client_id bank_account_id amount_lte amount_gte ]} :transaction_rule :as z} value] +(defn test-transaction-rule [{:keys [id]} {{:keys [description note client_id bank_account_id amount_lte amount_gte dom_lte dom_gte]} :transaction_rule :as z} value] + (prn z) (->> (d/query (cond-> {:query {:find ['(pull ?e [* {:transaction/client [:client/name] @@ -69,6 +71,24 @@ '[(<= ?ta ?amount-lte)]]} :args [amount_lte]}) + dom_lte + (merge-query {:query {:in ['?dom-lte] + :where ['[?e :transaction/date ?transaction-date] + '[(.toInstant ^java.util.Date ?transaction-date ) ?transaction-instant] + '[(.atZone ^java.time.Instant ?transaction-instant (java.time.ZoneId/of "US/Pacific")) ?transaction-local] + '[(.get ?transaction-local java.time.temporal.ChronoField/DAY_OF_MONTH) ?dom] + '[(<= ?dom ?dom-lte)]]} + :args [dom_lte]}) + + dom_gte + (merge-query {:query {:in ['?dom-gte] + :where ['[?e :transaction/date ?transaction-date] + '[(.toInstant ^java.util.Date ?transaction-date ) ?transaction-instant] + '[(.atZone ^java.time.Instant ?transaction-instant (java.time.ZoneId/of "US/Pacific")) ?transaction-local] + '[(.get ?transaction-local java.time.temporal.ChronoField/DAY_OF_MONTH) ?dom] + '[(>= ?dom ?dom-gte)]]} + :args [dom_gte]}) + client_id (merge-query {:query {:in ['?client-id] :where ['[?e :transaction/client ?client-id]]} diff --git a/src/cljc/auto_ap/entities/transaction_rule.cljc b/src/cljc/auto_ap/entities/transaction_rule.cljc index 4d1ccdbf..f4f0b5c5 100644 --- a/src/cljc/auto_ap/entities/transaction_rule.cljc +++ b/src/cljc/auto_ap/entities/transaction_rule.cljc @@ -5,7 +5,9 @@ (s/def ::description (s/nilable string?)) (s/def ::amount-gte (s/nilable double?)) (s/def ::amount-lte (s/nilable double?)) +(s/def ::dom-gte (s/nilable int?)) +(s/def ::dom-lte (s/nilable int?)) (s/def ::note (s/nilable string?)) (s/def ::bank-account (s/nilable map?)) -(s/def ::transaction-rule (s/keys :req-un [::client ::description ::amount-gte ::amount-lte ::note ::bank-account])) +(s/def ::transaction-rule (s/keys :req-un [::client ::description ::amount-gte ::amount-lte ::dom-gte ::dom-lte ::note ::bank-account])) diff --git a/src/cljs/auto_ap/views/pages/admin/rules/form.cljs b/src/cljs/auto_ap/views/pages/admin/rules/form.cljs index 79fdbe68..e8706a52 100644 --- a/src/cljs/auto_ap/views/pages/admin/rules/form.cljs +++ b/src/cljs/auto_ap/views/pages/admin/rules/form.cljs @@ -37,6 +37,8 @@ :description :amount-lte :amount-gte + :dom-lte + :dom-gte :note]) (assoc :client-id (:id (:client data))) (assoc :bank-account-id (:id (:bank-account data))))} @@ -54,6 +56,8 @@ :description :amount-lte :amount-gte + :dom-lte + :dom-gte :note]) (assoc :client-id (:id (:client data))) (assoc :bank-account-id (:id (:bank-account data))))} @@ -80,8 +84,7 @@ :bank-account nil :note nil :amount-lte nil - :amount-gte nil - ))))) + :amount-gte nil))))) (re-frame/reg-event-db ::editing @@ -156,14 +159,13 @@ accounts-by-id @(re-frame/subscribe [::subs/accounts-for-client-by-id])] ^{:key id} [form (assoc params :title "New Transaction Rule") - (when-not @(re-frame/subscribe [::subs/client]) - [field "Client" - [typeahead-entity {:matches @(re-frame/subscribe [::subs/clients]) - :match->text :name - :type "typeahead-entity" - :auto-focus (if @(re-frame/subscribe [::subs/client]) false true) - :field [:client] - :spec ::entity/client}]]) + [field "Client" + [typeahead-entity {:matches @(re-frame/subscribe [::subs/clients]) + :match->text :name + :type "typeahead-entity" + :auto-focus (if @(re-frame/subscribe [::subs/client]) false true) + :field [:client] + :spec ::entity/client}]] [field "Bank account" [typeahead-entity {:matches @(re-frame/subscribe [::subs/real-bank-accounts-for-client (:client data)]) @@ -197,6 +199,27 @@ :spec ::entity/amount-lte :step "0.01"}]]]]]] + [:div.field + [:p.help "Day of Month"] + [:div.control + [:div.columns + [:div.column + [raw-field + [:input.input {:type "number" + :placeholder ">=" + :field [:dom-gte] + :spec ::entity/dom-gte + :precision 0 + :step "1"}]]] + [:div.column + [raw-field + [:input.input {:type "number" + :placeholder "<=" + :field [:dom-lte] + :spec ::entity/dom-lte + :precision 0 + :step "1"}]]]]]] + [field "Note" [:input.input {:type "text" :field [:note] diff --git a/src/cljs/auto_ap/views/pages/admin/rules/table.cljs b/src/cljs/auto_ap/views/pages/admin/rules/table.cljs index 4cd9d9c1..6cf808ec 100644 --- a/src/cljs/auto_ap/views/pages/admin/rules/table.cljs +++ b/src/cljs/auto_ap/views/pages/admin/rules/table.cljs @@ -41,14 +41,15 @@ :asc asc} "Description"] - [sorted-column {:on-sort opc + #_[sorted-column {:on-sort opc :style {:width "8em" :cursor "pointer"} :class "has-text-right" :sort-key "amount-gte" :sort-by sort-by :asc asc} - ">="] - [sorted-column {:on-sort opc + "Amount"] + [:th.has-text-right {:style {:width "12em"}} "Amount"] + #_[sorted-column {:on-sort opc :class "has-text-right" :style {:width "8em" :cursor "pointer"} :sort-key "amount-lte" @@ -75,8 +76,18 @@ [:td (:name client)] [:td (:name bank-account)] [:td description] - [:td.has-text-right (some-> amount-gte ->$) ] - [:td.has-text-right (some-> amount-lte ->$)] + [:td.has-text-right + (cond (and amount-gte amount-lte) + (str (->$ amount-gte) " - " (->$ amount-lte)) + + amount-gte + (str ">=" (->$ amount-gte)) + + amount-lte + (str "<=" (->$ amount-lte)) + + :else + "")] [:td note] [:td [:a.button {:on-click (dispatch-event [::form/editing r])} [:span.icon [:i.fa.fa-pencil]]]]]))]]])))) diff --git a/src/cljs/auto_ap/views/utils.cljs b/src/cljs/auto_ap/views/utils.cljs index 88e992b1..98e61d88 100644 --- a/src/cljs/auto_ap/views/utils.cljs +++ b/src/cljs/auto_ap/views/utils.cljs @@ -201,8 +201,13 @@ (re-frame/dispatch (-> event (conj field) (conj (let [val (.. e -target -value)] - (if (and val (not (str/blank? val))) + (cond (and val (not (str/blank? val))) (js/parseFloat val) + + (str/blank? val ) + nil + + :else val)))))) :value (get-in subscription field)