Files
integreat/src/clj/auto_ap/parse/util.clj
2022-07-26 05:56:41 -07:00

59 lines
1.5 KiB
Clojure

(ns auto-ap.parse.util
(:require
[clj-time.core :as time]
[clj-time.format :as f]
[clojure.string :as str]
[clojure.tools.logging :as log]))
(defmulti parse-value (fn [method _ _]
method))
(defmethod parse-value :trim-commas
[_ _ value]
(str/replace value #"," "")
)
(defmethod parse-value :trim-commas-and-remove-dollars
[_ _ value]
(str/replace (str/replace value #"," "") #"\$" ""))
(defmethod parse-value :trim-commas-and-remove-dollars-and-invert-parentheses
[_ _ value]
(let [v (str/replace (str/replace value #"," "") #"\$" "")]
(if-let [[_ a ] (re-find #"\((.*)\)" v)]
(str "-" a)
v)))
(defmethod parse-value :trim-commas-and-negate
[_ _ value]
(let [[_ raw-value] (re-find #"([\d\.]+)"
(-> value
(str/replace #"," "")
(str/replace #"-" "")))]
(if (or (str/includes? value "-")
(str/includes? value "CR"))
(str (- (Double/parseDouble raw-value)))
(str raw-value))))
(defmethod parse-value :clj-time
[_ format value]
(let [format (if (sequential? format)
format
[format])]
(reduce
(fn [_ format]
(try
(reduced (time/from-time-zone (f/parse (f/formatter format) value)
(time/time-zone-for-id "America/Los_Angeles")))
(catch Exception e
(log/warn e)
nil)))
nil
format)
))
(defmethod parse-value nil
[_ _ value]
value)