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
|
||||
(-> base-query
|
||||
(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
|
||||
(helpers/merge-where [:= :imported true])))))
|
||||
|
||||
@@ -44,7 +46,9 @@
|
||||
(if company
|
||||
(-> base-query
|
||||
(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
|
||||
(helpers/merge-where [:= :imported false])))))
|
||||
|
||||
|
||||
@@ -3,9 +3,23 @@
|
||||
[auto-ap.parse.templates :as t]
|
||||
[clj-fuzzy.metrics :as m]
|
||||
[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]}]
|
||||
(every? #(re-find % text) keywords))
|
||||
@@ -20,8 +34,10 @@
|
||||
:extract
|
||||
(reduce-kv
|
||||
(fn [result k v]
|
||||
(assoc result k (some-> (first (map second (re-seq v text)))
|
||||
str/trim )))
|
||||
(let [value (some-> (first (map second (re-seq v text)))
|
||||
str/trim )
|
||||
[value-parser parser-params] (-> template :parser k)]
|
||||
(assoc result k (parse-value value-parser parser-params value))))
|
||||
{:vendor-code (:vendor template)}))]))
|
||||
|
||||
(defn parse [text]
|
||||
|
||||
@@ -1,19 +1,22 @@
|
||||
(ns auto-ap.parse.templates)
|
||||
|
||||
|
||||
(def pdf-templates
|
||||
[{:vendor "CHFW"
|
||||
:keywords [#"CHEF'S WAREHOUSE"]
|
||||
:extract {:total #"2 WKS C\.C\.\s+([\d.,]+)"
|
||||
:customer-identifier #"\n([A-Z][A-Z ]+)\s{2,}"
|
||||
: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"
|
||||
:keywords [#"Golden Gate Meat"]
|
||||
:extract {:total #"Invoice Total\:\s+\$([\d.,]+)"
|
||||
:customer-identifier #"Bill To\s*:\s*([\w ]+)\s{2,}"
|
||||
: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"
|
||||
:keywords [#"CINTAS CORPORATION"]
|
||||
@@ -21,6 +24,7 @@
|
||||
:customer-identifier #"BILL TO\s*:\s{2,}([\w ]+)\s{2,}"
|
||||
:date #"INVOICE DATE\s*\n.*\s+([0-9]+/[0-9]+/[0-9]+)"
|
||||
:total #"INVOICE TOTAL\s+([0-9.]+)"}
|
||||
:parser {:date [:clj-time "MM/dd/yy"]}
|
||||
:multi #"\f\f"}])
|
||||
|
||||
(def excel-templates
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
[cljs-http.client :as http]
|
||||
[cljs-time.coerce :as c]
|
||||
[cljs-time.core :as time]
|
||||
[cljs-time.format :as format]
|
||||
[cljs.core.async :refer [<!]]
|
||||
[clojure.string :as str]
|
||||
[clojure.walk :as walk]
|
||||
@@ -23,16 +24,25 @@
|
||||
(if value
|
||||
(.setItem js/localStorage name value)
|
||||
(.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]
|
||||
(cond (map? x)
|
||||
(into {} (map (fn [[k v]]
|
||||
[k (if (instance? js/Date v)
|
||||
(time/to-default-time-zone (c/from-date v))
|
||||
v)])
|
||||
x))
|
||||
(list? x)
|
||||
(map dates->date-times x)))
|
||||
(walk/postwalk
|
||||
(fn [node]
|
||||
(cond
|
||||
|
||||
(and (string? node)
|
||||
(re-matches is-8601 node))
|
||||
(do
|
||||
(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
|
||||
:http
|
||||
@@ -74,6 +84,7 @@
|
||||
(keyword? node)
|
||||
(snake node)
|
||||
|
||||
|
||||
:else
|
||||
node))
|
||||
m))
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
(ns auto-ap.views.components.invoice-table
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[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]
|
||||
|
||||
@@ -58,5 +60,5 @@
|
||||
[:td (:name vendor)]
|
||||
[:td (:name company)]
|
||||
[:td invoice-number]
|
||||
[:td date]
|
||||
[:td (date->str date) ]
|
||||
[:td total]]))]]))))
|
||||
|
||||
@@ -25,10 +25,12 @@
|
||||
(def pretty (format/formatter "MM/dd/yyyy"))
|
||||
|
||||
(defn date->str [d]
|
||||
(format/unparse pretty d))
|
||||
(when d
|
||||
(format/unparse pretty 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