merged.
This commit is contained in:
@@ -8,6 +8,11 @@
|
|||||||
:where [?e :client/name]]
|
:where [?e :client/name]]
|
||||||
(d/db (d/connect uri)))
|
(d/db (d/connect uri)))
|
||||||
(map first)
|
(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]
|
(map (fn [c]
|
||||||
(update c :client/bank-accounts
|
(update c :client/bank-accounts
|
||||||
(fn [bas]
|
(fn [bas]
|
||||||
|
|||||||
@@ -58,12 +58,17 @@
|
|||||||
%))}}
|
%))}}
|
||||||
:objects
|
:objects
|
||||||
{
|
{
|
||||||
|
:location_match
|
||||||
|
{:fields {:location {:type 'String}
|
||||||
|
:match {:type 'String}}}
|
||||||
|
|
||||||
:client
|
:client
|
||||||
{:fields {:id {:type :id}
|
{:fields {:id {:type :id}
|
||||||
:name {:type 'String}
|
:name {:type 'String}
|
||||||
:code {:type 'String}
|
:code {:type 'String}
|
||||||
:email {:type 'String}
|
:email {:type 'String}
|
||||||
:address {:type :address}
|
:address {:type :address}
|
||||||
|
:location_matches {:type '(list :location_match)}
|
||||||
:locations {:type '(list String)}
|
:locations {:type '(list String)}
|
||||||
:bank_accounts {:type '(list :bank_account)}}}
|
:bank_accounts {:type '(list :bank_account)}}}
|
||||||
:contact
|
:contact
|
||||||
@@ -442,6 +447,8 @@
|
|||||||
{
|
{
|
||||||
:invoice_payment_amount {:fields {:invoice_id {:type :id}
|
:invoice_payment_amount {:fields {:invoice_id {:type :id}
|
||||||
:amount {:type 'Float}}}
|
:amount {:type 'Float}}}
|
||||||
|
:edit_location_match {:fields {:location {:type 'String}
|
||||||
|
:match {:type 'String}}}
|
||||||
|
|
||||||
:date_range {:fields {:start {:type :iso_date}
|
:date_range {:fields {:start {:type :iso_date}
|
||||||
:end {:type :iso_date}}}
|
:end {:type :iso_date}}}
|
||||||
@@ -466,6 +473,7 @@
|
|||||||
:email {:type 'String}
|
:email {:type 'String}
|
||||||
:address {:type :add_address}
|
:address {:type :add_address}
|
||||||
:locations {:type '(list String)}
|
:locations {:type '(list String)}
|
||||||
|
:location_matches {:type '(list :edit_location_match)}
|
||||||
:bank_accounts {:type '(list :edit_bank_account)}}}
|
:bank_accounts {:type '(list :edit_bank_account)}}}
|
||||||
:edit_bank_account
|
:edit_bank_account
|
||||||
{:fields {:id {:type :id }
|
{:fields {:id {:type :id }
|
||||||
|
|||||||
@@ -65,9 +65,9 @@
|
|||||||
[:table {:num-cols 12 :border false :leading 11 :widths (distribute [2 3 3 3 3 3 3 3 3 2 2 2])}
|
[:table {:num-cols 12 :border false :leading 11 :widths (distribute [2 3 3 3 3 3 3 3 3 2 2 2])}
|
||||||
[(let [{:keys [:client/name] {:keys [:address/street1 :address/street2 :address/city :address/state :address/zip]} :client/address} client]
|
[(let [{:keys [:client/name] {:keys [:address/street1 :address/street2 :address/city :address/state :address/zip]} :client/address} client]
|
||||||
|
|
||||||
[:cell {:colspan 3 } [:paragraph {:leading 14} name "\n" street1 "\n" (str city ", " state " " zip)] ])
|
[:cell {:colspan 4 } [:paragraph {:leading 14} name "\n" street1 "\n" (str city ", " state " " zip)] ])
|
||||||
(let [{:keys [:bank-account/bank-name :bank-account/bank-code] } bank-account]
|
(let [{:keys [:bank-account/bank-name :bank-account/bank-code] } bank-account]
|
||||||
[:cell {:colspan 7 :align :center} [:paragraph {:style :bold} bank-name] [:paragraph {:size 8 :leading 8} bank-code]])
|
[:cell {:colspan 6 :align :center} [:paragraph {:style :bold} bank-name] [:paragraph {:size 8 :leading 8} bank-code]])
|
||||||
[:cell {:colspan 2 :size 13}
|
[:cell {:colspan 2 :size 13}
|
||||||
check]]
|
check]]
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,10 @@
|
|||||||
:client/name (:name edit_client)
|
:client/name (:name edit_client)
|
||||||
:client/email (:email edit_client)
|
:client/email (:email edit_client)
|
||||||
:client/locations (filter identity (:locations 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 {
|
:client/address (remove-nils {
|
||||||
:address/street1 (:street1 (:address edit_client))
|
:address/street1 (:street1 (:address edit_client))
|
||||||
:address/street2 (:street2 (:address edit_client))
|
:address/street2 (:street2 (:address edit_client))
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
[_ _ value]
|
[_ _ value]
|
||||||
value)
|
value)
|
||||||
|
|
||||||
|
(def last-text (atom nil))
|
||||||
|
|
||||||
|
|
||||||
(defn template-applies? [text {:keys [keywords]}]
|
(defn template-applies? [text {:keys [keywords]}]
|
||||||
(every? #(re-find % text) keywords))
|
(every? #(re-find % text) keywords))
|
||||||
@@ -49,7 +51,7 @@
|
|||||||
:text text}))])))
|
:text text}))])))
|
||||||
|
|
||||||
(defn parse [text]
|
(defn parse [text]
|
||||||
(println text)
|
(reset! last-text text)
|
||||||
(->> t/pdf-templates
|
(->> t/pdf-templates
|
||||||
(filter (partial template-applies? text))
|
(filter (partial template-applies? text))
|
||||||
first
|
first
|
||||||
|
|||||||
@@ -34,6 +34,20 @@
|
|||||||
:customer-identifier #"Bill To[^\n]+\n[^\n]*\n([\w ]+)\s{2,}"
|
:customer-identifier #"Bill To[^\n]+\n[^\n]*\n([\w ]+)\s{2,}"
|
||||||
:date #"Invoice #\s*\n\s*[\w\.]+\s+([\w\./]+)"
|
:date #"Invoice #\s*\n\s*[\w\.]+\s+([\w\./]+)"
|
||||||
:total #"Total\s+\$([0-9.]+)"}
|
: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"]}}])
|
:parser {:date [:clj-time "MM/dd/yy"]}}])
|
||||||
|
|
||||||
(def excel-templates
|
(def excel-templates
|
||||||
|
|||||||
@@ -271,6 +271,7 @@
|
|||||||
7450 {:name "Building Cleaning & Maintenance" :parent 7400}
|
7450 {:name "Building Cleaning & Maintenance" :parent 7400}
|
||||||
7455 {:name "Pest Control" :parent 7400}
|
7455 {:name "Pest Control" :parent 7400}
|
||||||
7460 {:name "Repairs to Equipment" :parent 7400}
|
7460 {:name "Repairs to Equipment" :parent 7400}
|
||||||
|
7461 {:name "Contract Labor" :parent 7400}
|
||||||
7500 {:name "Office / Management Related" :parent nil}
|
7500 {:name "Office / Management Related" :parent nil}
|
||||||
7510 {:name "Office Supplies" :parent 7500}
|
7510 {:name "Office Supplies" :parent 7500}
|
||||||
7520 {:name "Printing - Internal" :parent 7500}
|
7520 {:name "Printing - Internal" :parent 7500}
|
||||||
@@ -298,6 +299,7 @@
|
|||||||
8430 {:name "Other Rental" :parent 8400 }
|
8430 {:name "Other Rental" :parent 8400 }
|
||||||
8500 {:name "Taxes and Insurance" :parent nil }
|
8500 {:name "Taxes and Insurance" :parent nil }
|
||||||
8510 {:name "Liability Insurance" :parent 8500 }
|
8510 {:name "Liability Insurance" :parent 8500 }
|
||||||
|
8511 {:name "Workers Comp Insurance" :parent 8500 }
|
||||||
8610 {:name "Business License" :parent 8500 }
|
8610 {:name "Business License" :parent 8500 }
|
||||||
8620 {:name "Health Permit" :parent 8500 }
|
8620 {:name "Health Permit" :parent 8500 }
|
||||||
8710 {:name "Personal Property Taxes" :parent nil }
|
8710 {:name "Personal Property Taxes" :parent nil }
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
:graphql {:token token
|
:graphql {:token token
|
||||||
:query-obj {:venia/queries [[:client
|
:query-obj {:venia/queries [[:client
|
||||||
|
|
||||||
[:id :name :code :email :locations [:bank-accounts [:id :code :number :bank-name :bank-code :check-number :name :routing :type :sort-order :visible :yodlee-account-id :locations] ]
|
[:id :name :code :email :locations [:location-matches [:location :match]] [:bank-accounts [:id :code :number :bank-name :bank-code :check-number :name :routing :type :sort-order :visible :yodlee-account-id :locations] ]
|
||||||
[:address [:street1 :street2 :city :state :zip]]]]
|
[:address [:street1 :street2 :city :state :zip]]]]
|
||||||
[:vendor
|
[:vendor
|
||||||
[:id :name :hidden [:default-account [:name :id :location]] [:primary-contact [:name :phone :email :id]] [:secondary-contact [:id :name :phone :email]] :print-as :invoice-reminder-schedule :code]]
|
[:id :name :hidden [:default-account [:name :id :location]] [:primary-contact [:name :phone :email :id]] [:secondary-contact [:id :name :phone :email]] :print-as :invoice-reminder-schedule :code]]
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
(fn [{:keys [db]} [_ token user]]
|
(fn [{:keys [db]} [_ token user]]
|
||||||
{:graphql {:token token
|
{:graphql {:token token
|
||||||
:query-obj {:venia/queries [[:client
|
:query-obj {:venia/queries [[:client
|
||||||
[:id :name :code [:address [:street1 :street2 :city :state :zip]] [:bank-accounts [:id :code :number :bank-name :bank-code :check-number :name :routing :type :sort-order :visible :yodlee-account-id :locations] ]]]
|
[:id :name :code [:location-matches [:location :match]] [:address [:street1 :street2 :city :state :zip]] [:bank-accounts [:id :code :number :bank-name :bank-code :check-number :name :routing :type :sort-order :visible :yodlee-account-id :locations] ]]]
|
||||||
[:vendor
|
[:vendor
|
||||||
[:id :name :hidden [:default-account [:name :id :location]] [:primary-contact [:name :phone :email :id]] [:secondary-contact [:id :name :phone :email]] :print-as :invoice-reminder-schedule :code]]
|
[:id :name :hidden [:default-account [:name :id :location]] [:primary-contact [:name :phone :email :id]] [:secondary-contact [:id :name :phone :email]] :print-as :invoice-reminder-schedule :code]]
|
||||||
[:accounts [:numeric-code :name :location :type :account_set :id]]]}
|
[:accounts [:numeric-code :name :location :type :account_set :id]]]}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
:code (:code new-client-data) ;; TODO add validation can't change
|
:code (:code new-client-data) ;; TODO add validation can't change
|
||||||
:email (:email new-client-data)
|
:email (:email new-client-data)
|
||||||
:locations (:locations new-client-data)
|
:locations (:locations new-client-data)
|
||||||
|
:location-matches (:location-matches new-client-data)
|
||||||
:address {:street1 (:street1 (:address new-client-data))
|
:address {:street1 (:street1 (:address new-client-data))
|
||||||
:street2 (:street2 (:address new-client-data)),
|
:street2 (:street2 (:address new-client-data)),
|
||||||
:city (:city (:address new-client-data))
|
:city (:city (:address new-client-data))
|
||||||
@@ -86,7 +87,7 @@
|
|||||||
:operation/name "EditClient"}
|
:operation/name "EditClient"}
|
||||||
:venia/queries [{:query/data [:edit-client
|
:venia/queries [{:query/data [:edit-client
|
||||||
{:edit-client new-client-req}
|
{:edit-client new-client-req}
|
||||||
[:id :name :code :email :locations [:address [:street1 :street2 :city :state :zip]] [:bank-accounts [:id :number :check-number :name :code :bank-code :bank-name :routing :type :visible :yodlee-account-id :sort-order :locations]]]]}]}
|
[:id :name :code :email :locations [:location-matches [:location :match]] [:address [:street1 :street2 :city :state :zip]] [:bank-accounts [:id :number :check-number :name :code :bank-code :bank-name :routing :type :visible :yodlee-account-id :sort-order :locations]]]]}]}
|
||||||
:on-success [::save-complete]
|
:on-success [::save-complete]
|
||||||
:on-error [::forms/save-error ::new-client]}}
|
:on-error [::forms/save-error ::new-client]}}
|
||||||
{:db new-client-form}))))
|
{:db new-client-form}))))
|
||||||
@@ -117,6 +118,14 @@
|
|||||||
(update-in [:bank-accounts which-account :locations] #(conj (or % #{}) (get-in client [:bank-accounts which-account :location-select])))
|
(update-in [:bank-accounts which-account :locations] #(conj (or % #{}) (get-in client [:bank-accounts which-account :location-select])))
|
||||||
(update-in [:bank-accounts which-account] dissoc :location-select))))
|
(update-in [:bank-accounts which-account] dissoc :location-select))))
|
||||||
|
|
||||||
|
(re-frame/reg-event-db
|
||||||
|
::add-new-location-match
|
||||||
|
[(forms/in-form ::new-client) (re-frame/path [:data])]
|
||||||
|
(fn [client _]
|
||||||
|
(-> client
|
||||||
|
(update :location-matches conj (:location-match client))
|
||||||
|
(dissoc :location-match))))
|
||||||
|
|
||||||
(re-frame/reg-event-db
|
(re-frame/reg-event-db
|
||||||
::add-new-bank-account
|
::add-new-bank-account
|
||||||
[(forms/in-form ::new-client) (re-frame/path [:data])]
|
[(forms/in-form ::new-client) (re-frame/path [:data])]
|
||||||
@@ -440,6 +449,31 @@
|
|||||||
(for [location (:locations new-client)]
|
(for [location (:locations new-client)]
|
||||||
^{:key location} [:li location ])]]]
|
^{:key location} [:li location ])]]]
|
||||||
|
|
||||||
|
[:div.field
|
||||||
|
[:p.help "Location matches"]
|
||||||
|
[:div.control
|
||||||
|
[:div.field.has-addons
|
||||||
|
|
||||||
|
[:p.control
|
||||||
|
|
||||||
|
[bind-field
|
||||||
|
[:input.input {:type "text"
|
||||||
|
:placeholder "San Jose"
|
||||||
|
:field [:location-match :match]
|
||||||
|
:event change-event
|
||||||
|
:subscription new-client}]]]
|
||||||
|
[:p.control
|
||||||
|
[bind-field
|
||||||
|
[:input.input {:type "text"
|
||||||
|
:placeholder "DT"
|
||||||
|
:field [:location-match :location]
|
||||||
|
:event change-event
|
||||||
|
:subscription new-client}]]]
|
||||||
|
[:p.control [:button.button.is-primary {:on-click (dispatch-event [::add-new-location-match])} "Add"]]]
|
||||||
|
[:ul
|
||||||
|
(for [{:keys [location match]} (:location-matches new-client)]
|
||||||
|
^{:key location} [:li match "->" location ])]]]
|
||||||
|
|
||||||
[:div {:style {:padding-bottom "0.75em" :padding-top "0.75em"}}
|
[:div {:style {:padding-bottom "0.75em" :padding-top "0.75em"}}
|
||||||
[:h2.subtitle "Address"]
|
[:h2.subtitle "Address"]
|
||||||
[address-field {:field [:address]
|
[address-field {:field [:address]
|
||||||
|
|||||||
Reference in New Issue
Block a user