supports location matches, adds invoice types

This commit is contained in:
Bryce Covert
2019-10-10 20:09:47 -07:00
parent 1e37a71a4c
commit 8df6fb0279
8 changed files with 78 additions and 9 deletions

View File

@@ -8,6 +8,11 @@
:where [?e :client/name]]
(d/db (d/connect uri)))
(map first)
(map (fn [c]
(update c :client/location-matches
(fn [lms]
(map #(assoc % :location-match/match (first (:location-match/matches %))) lms)))))
(map (fn [c]
(update c :client/bank-accounts
(fn [bas]

View File

@@ -38,12 +38,17 @@
:serialize (schema/as-conformer #(or (:ident %) (:db/ident %) %))}}
:objects
{
:location_match
{:fields {:location {:type 'String}
:match {:type 'String}}}
:client
{:fields {:id {:type :id}
:name {:type 'String}
:code {:type 'String}
:email {:type 'String}
:address {:type :address}
:location_matches {:type '(list :location_match)}
:locations {:type '(list String)}
:bank_accounts {:type '(list :bank_account)}}}
:contact
@@ -284,6 +289,8 @@
{
:invoice_payment_amount {:fields {:invoice_id {:type :id}
:amount {:type 'Float}}}
:edit_location_match {:fields {:location {:type 'String}
:match {:type 'String}}}
:edit_client {:fields {:id {:type :id}
:name {:type 'String}
@@ -291,6 +298,7 @@
:email {:type 'String}
:address {:type :add_address}
:locations {:type '(list String)}
:location_matches {:type '(list :edit_location_match)}
:bank_accounts {:type '(list :edit_bank_account)}}}
:edit_bank_account
{:fields {:id {:type :id }

View File

@@ -32,6 +32,10 @@
:client/name (:name edit_client)
:client/email (:email edit_client)
:client/locations (filter identity (:locations edit_client))
:client/location-matches (->> (:location_matches edit_client)
(filter (fn [lm] (and (:location lm) (:match lm))))
(map (fn [lm] {:location-match/location (:location lm)
:location-match/matches [(:match lm)]})))
:client/address (remove-nils {
:address/street1 (:street1 (:address edit_client))
:address/street2 (:street2 (:address edit_client))

View File

@@ -26,6 +26,8 @@
[_ _ value]
value)
(def last-text (atom nil))
(defn template-applies? [text {:keys [keywords]}]
(every? #(re-find % text) keywords))
@@ -49,7 +51,7 @@
:text text}))])))
(defn parse [text]
(println text)
(reset! last-text text)
(->> t/pdf-templates
(filter (partial template-applies? text))
first

View File

@@ -34,6 +34,20 @@
:customer-identifier #"Bill To[^\n]+\n[^\n]*\n([\w ]+)\s{2,}"
:date #"Invoice #\s*\n\s*[\w\.]+\s+([\w\./]+)"
:total #"Total\s+\$([0-9.]+)"}
:parser {:date [:clj-time "MM/dd/yy"]}}
{:vendor "DVW Commercial"
:keywords [#"DVW Commercial"]
:extract {:date #"\s*([0-9]+/[0-9]+/[0-9]+)"
:customer-identifier #"Bill To:[^\n]+\n[^\n]*\n\s*([\w ]+) \("
:invoice-number #"Invoice\s*\n\s*([\w\./]+)*"
:total #"Total:\s+\$ ([0-9.]+)"}
:parser {:date [:clj-time "MM/dd/yy"]}}
{:vendor "Daylight Foods"
:keywords [#"DAYLIGHT FOODS"]
:extract {:date #"\n\s*Date[^\n]+\n\s*([0-9]+/[0-9]+/[0-9]+)"
:customer-identifier #"Bill To:[^\n]+\n\s*([\w ]+)"
:invoice-number #"Invoice\s([\w\./]+)*"
:total #"Total Invoice\s+([0-9.]+)"}
:parser {:date [:clj-time "MM/dd/yy"]}}])
(def excel-templates

View File

@@ -163,13 +163,15 @@
_ (println imports)
transactions (reduce (fn [result {:keys [invoice-number customer-identifier total date vendor-code text] :as info}]
(println "searching for" vendor-code)
(let [[matching-vendor default-expense-account] (->> (d/query
(cond-> {:query {:find ['?vendor '?default-expense-account]
:in ['$ '?vendor-name]
:where ['[?vendor :vendor/name ?vendor-name]
'[?vendor :vendor/default-expense-account ?default-expense-account]]}
:args [(d/db (d/connect uri)) vendor-code]}))
{:query {:find ['?vendor '?default-expense-account]
:in ['$ '?vendor-name]
:where ['[?vendor :vendor/name ?vendor-name]
'[?vendor :vendor/default-expense-account ?default-expense-account]]}
:args [(d/db (d/connect uri)) vendor-code]})
first)
_ (println matching-vendor)
matching-client (parse/best-match clients customer-identifier)
_ (println "New invoice matches client" matching-client)
matching-location (parse/best-location-match matching-client text )