allows you to use date instead of post date

This commit is contained in:
2022-06-23 08:29:55 -07:00
parent 1db8d7a52c
commit 519f88592e
6 changed files with 46 additions and 14 deletions

View File

@@ -72,4 +72,9 @@
:db/doc "collection of email contacts" :db/doc "collection of email contacts"
:db/valueType :db.type/ref :db/valueType :db.type/ref
:db/cardinality :db.cardinality/many}]]} :db/cardinality :db.cardinality/many}]]}
::add-use-date
{:txes [[{:db/ident :bank-account/use-date-instead-of-post-date?
:db/doc "Yodlee amex works weird"
:db/valueType :db.type/boolean
:db/cardinality :db.cardinality/one}]]}
}) })

View File

@@ -17,7 +17,8 @@
[datomic.api :as d] [datomic.api :as d]
[mount.core :as mount] [mount.core :as mount]
[unilog.context :as lc] [unilog.context :as lc]
[yang.scheduler :as scheduler]) [yang.scheduler :as scheduler]
[clojure.set :as set])
(:import (:import
(java.util UUID) (java.util UUID)
(org.apache.commons.codec.binary Base64))) (org.apache.commons.codec.binary Base64)))
@@ -138,6 +139,7 @@
:bank-account/numeric-code (:numeric_code %) :bank-account/numeric-code (:numeric_code %)
:bank-account/sort-order (:sort_order %) :bank-account/sort-order (:sort_order %)
:bank-account/locations (:locations %) :bank-account/locations (:locations %)
:bank-account/use-date-instead-of-post-date? (boolean (:use_date_instead_of_post_date %))
:bank-account/yodlee-account-id (:yodlee_account_id %) :bank-account/yodlee-account-id (:yodlee_account_id %)
:bank-account/type (keyword "bank-account-type" (name (:type %)))} :bank-account/type (keyword "bank-account-type" (name (:type %)))}
@@ -167,6 +169,10 @@
(when (:square_auth_token edit_client) (when (:square_auth_token edit_client)
(square/upsert-locations (-> result :tempids (get id) (or id) d-clients/get-by-id))) (square/upsert-locations (-> result :tempids (get id) (or id) d-clients/get-by-id)))
(-> (-> result :tempids (get id) (or id) d-clients/get-by-id) (-> (-> result :tempids (get id) (or id) d-clients/get-by-id)
(update :client/bank-accounts
(fn [bas]
(map #(set/rename-keys % {:bank-account/use-date-instead-of-post-date? :use-date-instead-of-post-date}) bas)))
(update :client/location-matches (update :client/location-matches
(fn [lms] (fn [lms]
(mapcat (fn [lm] (mapcat (fn [lm]
@@ -257,6 +263,9 @@
(->graphql (->graphql
(->> (d-clients/get-all) (->> (d-clients/get-all)
(filter #(can-see-client? (:id context) %)) (filter #(can-see-client? (:id context) %))
(map (fn [c]
(update c :client/bank-accounts (fn [bas]
(map #(set/rename-keys % {:bank-account/use-date-instead-of-post-date? :use-date-instead-of-post-date}) bas)))))
(map (fn [c] (map (fn [c]
(if (is-admin? (:id context)) (if (is-admin? (:id context))
c c
@@ -469,6 +478,7 @@
:yodlee_account {:type :yodlee_account} :yodlee_account {:type :yodlee_account}
:plaid_account {:type :plaid_account} :plaid_account {:type :plaid_account}
:intuit_bank_account {:type :intuit_bank_account} :intuit_bank_account {:type :intuit_bank_account}
:use_date_instead_of_post_date {:type 'Boolean}
:locations {:type '(list String)}}} :locations {:type '(list String)}}}
:forecasted_transaction {:fields {:identifier {:type 'String} :forecasted_transaction {:fields {:identifier {:type 'String}
@@ -542,6 +552,7 @@
:bank_name {:type 'String} :bank_name {:type 'String}
:locations {:type '(list String)} :locations {:type '(list String)}
:yodlee_account_id {:type 'Int} :yodlee_account_id {:type 'Int}
:use_date_instead_of_post_date {:type 'Boolean}
:intuit_bank_account {:type :id} :intuit_bank_account {:type :id}
:plaid_account {:type :id} :plaid_account {:type :id}
:yodlee_account {:type 'Int}}}}) :yodlee_account {:type 'Int}}}})

View File

@@ -12,10 +12,9 @@
[datomic.api :as d] [datomic.api :as d]
[digest :refer [sha-256]] [digest :refer [sha-256]]
[mount.core :as mount] [mount.core :as mount]
[unilog.context :as lc]
[yang.scheduler :as scheduler])) [yang.scheduler :as scheduler]))
(defn yodlee->transaction [transaction] (defn yodlee->transaction [transaction use-date-instead-of-post-date?]
(let [{post-date :postDate (let [{post-date :postDate
account-id :accountId account-id :accountId
date :date date :date
@@ -23,8 +22,6 @@
{amount :amount} :amount {amount :amount} :amount
{description-original :original {description-original :original
description-simple :simple} :description description-simple :simple} :description
{merchant-id :id
merchant-name :name} :merchant
base-type :baseType base-type :baseType
type :type type :type
status :status} transaction status :status} transaction
@@ -37,7 +34,9 @@
:id (sha-256 (str id)) :id (sha-256 (str id))
:raw-id (str id) :raw-id (str id)
:account-id account-id :account-id account-id
:date (coerce/to-date date) :date (if use-date-instead-of-post-date?
(coerce/to-date (atime/parse post-date "YYYY-MM-dd"))
(coerce/to-date date))
:amount (double amount) :amount (double amount)
:description-original (some-> description-original (str/replace #"\s+" " ")) :description-original (some-> description-original (str/replace #"\s+" " "))
:description-simple (some-> description-simple (str/replace #"\s+" " ")) :description-simple (some-> description-simple (str/replace #"\s+" " "))
@@ -51,18 +50,19 @@
nil) nil)
(let [import-batch (t/start-import-batch :import-source/yodlee "Automated yodlee user")] (let [import-batch (t/start-import-batch :import-source/yodlee "Automated yodlee user")]
(try (try
(let [account-lookup (d/q '[:find ?ya ?ba ?c (let [account-lookup (d/q '[:find ?ya ?ba ?ud ?c
:in $ :in $
:where [?ba :bank-account/yodlee-account-id ?ya] :where [?ba :bank-account/yodlee-account-id ?ya]
[(get-else $ ?ba :bank-account/use-date-instead-of-post-date? false) ?ud]
[?c :client/bank-accounts ?ba]] [?c :client/bank-accounts ?ba]]
(d/db conn))] (d/db conn))]
(doseq [[yodlee-account bank-account client-id] account-lookup (doseq [[yodlee-account bank-account use-date-instead-of-post-date? client-id] account-lookup
transaction (try transaction (try
(client/get-specific-transactions yodlee-account (client/get-auth-header)) (client/get-specific-transactions yodlee-account (client/get-auth-header))
(catch Exception e (catch Exception e
(log/warn e) (log/warn e)
[]))] []))]
(t/import-transaction! import-batch (assoc (yodlee->transaction transaction) (t/import-transaction! import-batch (assoc (yodlee->transaction transaction use-date-instead-of-post-date?)
:transaction/bank-account bank-account :transaction/bank-account bank-account
:transaction/client client-id))) :transaction/client client-id)))

View File

@@ -19,17 +19,19 @@
nil) nil)
(let [import-batch (t/start-import-batch :import-source/yodlee2 "Automated yodlee2 user")] (let [import-batch (t/start-import-batch :import-source/yodlee2 "Automated yodlee2 user")]
(try (try
(let [account-lookup (d/q '[:find ?ya ?ba ?cd (let [account-lookup (d/q '[:find ?ya ?ba ?cd ?ud
:in $ :in $
:where :where
[?ba :bank-account/yodlee-account ?y] [?ba :bank-account/yodlee-account ?y]
[(get-else $ ?ba :bank-account/use-date-instead-of-post-date? false) ?ud]
[?c :client/bank-accounts ?ba] [?c :client/bank-accounts ?ba]
[?c :client/code ?cd] [?c :client/code ?cd]
[?y :yodlee-account/id ?ya]] [?y :yodlee-account/id ?ya]
]
(d/db conn))] (d/db conn))]
(doseq [[yodlee-account bank-account client-code] account-lookup (doseq [[yodlee-account bank-account client-code use-date-instead-of-post-date?] account-lookup
transaction (client2/get-specific-transactions client-code yodlee-account)] transaction (client2/get-specific-transactions client-code yodlee-account)]
(t/import-transaction! import-batch (assoc (y/yodlee->transaction transaction) (t/import-transaction! import-batch (assoc (y/yodlee->transaction transaction use-date-instead-of-post-date?)
:transaction/bank-account bank-account :transaction/bank-account bank-account
:transaction/client [:client/code client-code]))) :transaction/client [:client/code client-code])))

View File

@@ -23,6 +23,7 @@
[:yodlee-account [:name :id :number]] [:yodlee-account [:name :id :number]]
[:plaid-account [:name :id :number]] [:plaid-account [:name :id :number]]
[:intuit-bank-account [:name :id :external-id]] [:intuit-bank-account [:name :id :external-id]]
:use-date-instead-of-post-date
:locations :include-in-reports :current-balance :yodlee-balance-old] ] :locations :include-in-reports :current-balance :yodlee-balance-old] ]
[:address [:street1 :street2 :city :state :zip]] [:address [:street1 :street2 :city :state :zip]]
[:forecasted-transactions [:id :amount :identifier :day-of-month]]] [:forecasted-transactions [:id :amount :identifier :day-of-month]]]

View File

@@ -143,7 +143,7 @@
:identifier identifier :identifier identifier
:amount amount}) :amount amount})
(:forecasted-transactions new-client-data)) (:forecasted-transactions new-client-data))
:bank-accounts (map (fn [{:keys [number name check-number plaid-account intuit-bank-account include-in-reports type id code numeric-code start-date bank-name routing bank-code new? sort-order visible yodlee-account-id locations yodlee-account]}] :bank-accounts (map (fn [{:keys [number name check-number plaid-account intuit-bank-account include-in-reports type id code numeric-code start-date bank-name routing bank-code new? sort-order visible yodlee-account-id locations yodlee-account use-date-instead-of-post-date]}]
{:number number {:number number
:name name :name name
:check-number (when-not (str/blank? check-number) :check-number (when-not (str/blank? check-number)
@@ -165,6 +165,7 @@
:sort-order sort-order :sort-order sort-order
:visible visible :visible visible
:locations (mapv :location locations) :locations (mapv :location locations)
:use-date-instead-of-post-date use-date-instead-of-post-date
:yodlee-account-id (when-not (str/blank? yodlee-account-id) :yodlee-account-id (when-not (str/blank? yodlee-account-id)
(js/parseInt yodlee-account-id)) (js/parseInt yodlee-account-id))
:yodlee-account (:id yodlee-account) :yodlee-account (:id yodlee-account)
@@ -418,6 +419,12 @@
:entity->text (fn [m] (str (:name m) " - " (:number m))) :entity->text (fn [m] (str (:name m) " - " (:number m)))
:type "typeahead-v3" :type "typeahead-v3"
:field [:bank-accounts sort-order :yodlee-account]}]] :field [:bank-accounts sort-order :yodlee-account]}]]
[:div.field
[:label.checkbox
[raw-field
[:input {:type "checkbox"
:field [:bank-accounts sort-order :use-date-instead-of-post-date]}]]
" (Yodlee only) Use 'date' instead of 'postDate'"]]
[field "Intuit Bank Account" [field "Intuit Bank Account"
[typeahead-v3 {:entities @(re-frame/subscribe [::subs/intuit-bank-accounts]) [typeahead-v3 {:entities @(re-frame/subscribe [::subs/intuit-bank-accounts])
:entity->text (fn [m] (str (:name m))) :entity->text (fn [m] (str (:name m)))
@@ -458,6 +465,12 @@
:entity->text (fn [m] (str (:name m) " - " (:number m))) :entity->text (fn [m] (str (:name m) " - " (:number m)))
:type "typeahead-v3" :type "typeahead-v3"
:field [:bank-accounts sort-order :yodlee-account]}]] :field [:bank-accounts sort-order :yodlee-account]}]]
[:div.field
[:label.checkbox
[raw-field
[:input {:type "checkbox"
:field [:bank-accounts sort-order :use-date-instead-of-post-date]}]]
" (Yodlee only) Use 'date' instead of 'postDate'"]]
[field "Intuit Bank Account" [field "Intuit Bank Account"
[typeahead-v3 {:entities @(re-frame/subscribe [::subs/intuit-bank-accounts]) [typeahead-v3 {:entities @(re-frame/subscribe [::subs/intuit-bank-accounts])
:entity->text (fn [m] (str (:name m))) :entity->text (fn [m] (str (:name m)))