switching to use real dates.
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
-- 1523595957 DOWN switch-date-format
|
||||||
|
alter table invoices drop column date;
|
||||||
|
alter table invoices add column date varchar(255);
|
||||||
3
migrator/migrations/1523595957-UP-switch-date-format.sql
Normal file
3
migrator/migrations/1523595957-UP-switch-date-format.sql
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
-- 1523595957 UP switch-date-format
|
||||||
|
alter table invoices drop column date;
|
||||||
|
alter table invoices add column date timestamp with time zone;
|
||||||
@@ -35,7 +35,9 @@
|
|||||||
(if company
|
(if company
|
||||||
(-> base-query
|
(-> base-query
|
||||||
(helpers/merge-where [:= :imported true])
|
(helpers/merge-where [:= :imported true])
|
||||||
(helpers/merge-where [:= :company-id company]))
|
(helpers/merge-where [:= :company-id (if (int? company)
|
||||||
|
company
|
||||||
|
(Integer/parseInt company))]))
|
||||||
(-> base-query
|
(-> base-query
|
||||||
(helpers/merge-where [:= :imported true])))))
|
(helpers/merge-where [:= :imported true])))))
|
||||||
|
|
||||||
@@ -44,7 +46,9 @@
|
|||||||
(if company
|
(if company
|
||||||
(-> base-query
|
(-> base-query
|
||||||
(helpers/merge-where [:= :imported false])
|
(helpers/merge-where [:= :imported false])
|
||||||
(helpers/merge-where [:= :company-id company]))
|
(helpers/merge-where [:= :company-id (if (int? company)
|
||||||
|
company
|
||||||
|
(Integer/parseInt company))]))
|
||||||
(-> base-query
|
(-> base-query
|
||||||
(helpers/merge-where [:= :imported false])))))
|
(helpers/merge-where [:= :imported false])))))
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,23 @@
|
|||||||
[auto-ap.parse.templates :as t]
|
[auto-ap.parse.templates :as t]
|
||||||
[clj-fuzzy.metrics :as m]
|
[clj-fuzzy.metrics :as m]
|
||||||
[clojure.java.shell :as sh]
|
[clojure.java.shell :as sh]
|
||||||
[clojure.string :as str]))
|
[clojure.string :as str]
|
||||||
|
[clj-time.format :as f]
|
||||||
|
[clj-time.core :as time]))
|
||||||
|
|
||||||
|
|
||||||
|
(defmulti parse-value (fn [method _ _]
|
||||||
|
method))
|
||||||
|
|
||||||
|
(defmethod parse-value :clj-time
|
||||||
|
[_ format value]
|
||||||
|
(time/from-time-zone (f/parse (f/formatter format) value)
|
||||||
|
(time/time-zone-for-id "America/Los_Angeles")))
|
||||||
|
|
||||||
|
(defmethod parse-value nil
|
||||||
|
[_ _ value]
|
||||||
|
value)
|
||||||
|
|
||||||
|
|
||||||
(defn template-applies? [text {:keys [keywords]}]
|
(defn template-applies? [text {:keys [keywords]}]
|
||||||
(every? #(re-find % text) keywords))
|
(every? #(re-find % text) keywords))
|
||||||
@@ -20,8 +34,10 @@
|
|||||||
:extract
|
:extract
|
||||||
(reduce-kv
|
(reduce-kv
|
||||||
(fn [result k v]
|
(fn [result k v]
|
||||||
(assoc result k (some-> (first (map second (re-seq v text)))
|
(let [value (some-> (first (map second (re-seq v text)))
|
||||||
str/trim )))
|
str/trim )
|
||||||
|
[value-parser parser-params] (-> template :parser k)]
|
||||||
|
(assoc result k (parse-value value-parser parser-params value))))
|
||||||
{:vendor-code (:vendor template)}))]))
|
{:vendor-code (:vendor template)}))]))
|
||||||
|
|
||||||
(defn parse [text]
|
(defn parse [text]
|
||||||
|
|||||||
@@ -1,19 +1,22 @@
|
|||||||
(ns auto-ap.parse.templates)
|
(ns auto-ap.parse.templates)
|
||||||
|
|
||||||
|
|
||||||
(def pdf-templates
|
(def pdf-templates
|
||||||
[{:vendor "CHFW"
|
[{:vendor "CHFW"
|
||||||
:keywords [#"CHEF'S WAREHOUSE"]
|
:keywords [#"CHEF'S WAREHOUSE"]
|
||||||
:extract {:total #"2 WKS C\.C\.\s+([\d.,]+)"
|
:extract {:total #"2 WKS C\.C\.\s+([\d.,]+)"
|
||||||
:customer-identifier #"\n([A-Z][A-Z ]+)\s{2,}"
|
:customer-identifier #"\n([A-Z][A-Z ]+)\s{2,}"
|
||||||
:date #"\s+([0-9]+/[0-9]+/[0-9]+)"
|
:date #"\s+([0-9]+/[0-9]+/[0-9]+)"
|
||||||
:invoice-number #"\s+[0-9]+/[0-9]+/[0-9]+\s+([0-9]+)"}}
|
:invoice-number #"\s+[0-9]+/[0-9]+/[0-9]+\s+([0-9]+)"}
|
||||||
|
:parser {:date [:clj-time "MM/dd/yyyy"]}}
|
||||||
|
|
||||||
{:vendor "GGM"
|
{:vendor "GGM"
|
||||||
:keywords [#"Golden Gate Meat"]
|
:keywords [#"Golden Gate Meat"]
|
||||||
:extract {:total #"Invoice Total\:\s+\$([\d.,]+)"
|
:extract {:total #"Invoice Total\:\s+\$([\d.,]+)"
|
||||||
:customer-identifier #"Bill To\s*:\s*([\w ]+)\s{2,}"
|
:customer-identifier #"Bill To\s*:\s*([\w ]+)\s{2,}"
|
||||||
:date #"Printed:\s+([0-9]+/[0-9]+/[0-9]+)"
|
:date #"Printed:\s+([0-9]+/[0-9]+/[0-9]+)"
|
||||||
:invoice-number #"Invoice\s+[^\n]+\n[^\n]+\n\s+([0-9]+)"}}
|
:invoice-number #"Invoice\s+[^\n]+\n[^\n]+\n\s+([0-9]+)"}
|
||||||
|
:parser {:date [:clj-time "MM/dd/yyyy"]}}
|
||||||
|
|
||||||
{:vendor "CINTAS"
|
{:vendor "CINTAS"
|
||||||
:keywords [#"CINTAS CORPORATION"]
|
:keywords [#"CINTAS CORPORATION"]
|
||||||
@@ -21,6 +24,7 @@
|
|||||||
:customer-identifier #"BILL TO\s*:\s{2,}([\w ]+)\s{2,}"
|
:customer-identifier #"BILL TO\s*:\s{2,}([\w ]+)\s{2,}"
|
||||||
:date #"INVOICE DATE\s*\n.*\s+([0-9]+/[0-9]+/[0-9]+)"
|
:date #"INVOICE DATE\s*\n.*\s+([0-9]+/[0-9]+/[0-9]+)"
|
||||||
:total #"INVOICE TOTAL\s+([0-9.]+)"}
|
:total #"INVOICE TOTAL\s+([0-9.]+)"}
|
||||||
|
:parser {:date [:clj-time "MM/dd/yy"]}
|
||||||
:multi #"\f\f"}])
|
:multi #"\f\f"}])
|
||||||
|
|
||||||
(def excel-templates
|
(def excel-templates
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
[cljs-http.client :as http]
|
[cljs-http.client :as http]
|
||||||
[cljs-time.coerce :as c]
|
[cljs-time.coerce :as c]
|
||||||
[cljs-time.core :as time]
|
[cljs-time.core :as time]
|
||||||
|
[cljs-time.format :as format]
|
||||||
[cljs.core.async :refer [<!]]
|
[cljs.core.async :refer [<!]]
|
||||||
[clojure.string :as str]
|
[clojure.string :as str]
|
||||||
[clojure.walk :as walk]
|
[clojure.walk :as walk]
|
||||||
@@ -23,16 +24,25 @@
|
|||||||
(if value
|
(if value
|
||||||
(.setItem js/localStorage name value)
|
(.setItem js/localStorage name value)
|
||||||
(.removeItem js/localStorage name ))))
|
(.removeItem js/localStorage name ))))
|
||||||
|
(def is-8601 #"^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$")
|
||||||
|
|
||||||
(defn dates->date-times [x]
|
(defn dates->date-times [x]
|
||||||
(cond (map? x)
|
(walk/postwalk
|
||||||
(into {} (map (fn [[k v]]
|
(fn [node]
|
||||||
[k (if (instance? js/Date v)
|
(cond
|
||||||
(time/to-default-time-zone (c/from-date v))
|
|
||||||
v)])
|
(and (string? node)
|
||||||
x))
|
(re-matches is-8601 node))
|
||||||
(list? x)
|
(do
|
||||||
(map dates->date-times x)))
|
(format/parse (format/formatters :date-time) node))
|
||||||
|
|
||||||
|
(instance? js/Date node)
|
||||||
|
(time/to-default-time-zone (c/from-date node))
|
||||||
|
|
||||||
|
|
||||||
|
:else
|
||||||
|
node))
|
||||||
|
x))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
:http
|
:http
|
||||||
@@ -74,6 +84,7 @@
|
|||||||
(keyword? node)
|
(keyword? node)
|
||||||
(snake node)
|
(snake node)
|
||||||
|
|
||||||
|
|
||||||
:else
|
:else
|
||||||
node))
|
node))
|
||||||
m))
|
m))
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
(ns auto-ap.views.components.invoice-table
|
(ns auto-ap.views.components.invoice-table
|
||||||
(:require [re-frame.core :as re-frame]
|
(:require [re-frame.core :as re-frame]
|
||||||
[auto-ap.subs :as subs]
|
[auto-ap.subs :as subs]
|
||||||
[reagent.core :as reagent]))
|
[auto-ap.views.utils :refer [date->str]]
|
||||||
|
[reagent.core :as reagent]
|
||||||
|
[cljs-time.format :as format]))
|
||||||
|
|
||||||
(defn toggle-sort-by [params key]
|
(defn toggle-sort-by [params key]
|
||||||
|
|
||||||
@@ -58,5 +60,5 @@
|
|||||||
[:td (:name vendor)]
|
[:td (:name vendor)]
|
||||||
[:td (:name company)]
|
[:td (:name company)]
|
||||||
[:td invoice-number]
|
[:td invoice-number]
|
||||||
[:td date]
|
[:td (date->str date) ]
|
||||||
[:td total]]))]]))))
|
[:td total]]))]]))))
|
||||||
|
|||||||
@@ -25,10 +25,12 @@
|
|||||||
(def pretty (format/formatter "MM/dd/yyyy"))
|
(def pretty (format/formatter "MM/dd/yyyy"))
|
||||||
|
|
||||||
(defn date->str [d]
|
(defn date->str [d]
|
||||||
(format/unparse pretty d))
|
(when d
|
||||||
|
(format/unparse pretty d)))
|
||||||
|
|
||||||
(defn date-time->str [d]
|
(defn date-time->str [d]
|
||||||
(format/unparse pretty-long d))
|
(when d
|
||||||
|
(format/unparse pretty-long d)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user