From ee6048329b522e3714840c128b8c7acb8f465507 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Mon, 28 Mar 2022 11:26:49 -0700 Subject: [PATCH] Fix for sysco --- src/clj/auto_ap/parse/templates.clj | 3 +- src/clj/auto_ap/pdf/ledger.clj | 53 ++++++++++++++++------------ src/cljc/auto_ap/ledger/reports.cljc | 47 ++++++++++++++++-------- 3 files changed, 65 insertions(+), 38 deletions(-) diff --git a/src/clj/auto_ap/parse/templates.clj b/src/clj/auto_ap/parse/templates.clj index 98353abd..e1388788 100644 --- a/src/clj/auto_ap/parse/templates.clj +++ b/src/clj/auto_ap/parse/templates.clj @@ -370,7 +370,8 @@ {:vendor "Sysco" :keywords [#"SYSCO"] :extract {:date #"INVOICE NUMBER[^\n]+\n([^\n]+)\n" - :customer-identifier #"INVOICE NUMBER[^\n]+\n[^\n]+\n([\S ]+?)(?=\s{2,})" ;; ([\S ]+)\s{2,} + #_#_:customer-identifier #"INVOICE NUMBER[^\n]+\n[^\n]+\n([\S ]+?)(?=\s{2,})" ;; ([\S ]+)\s{2,} + :account-number #"INVOICE NUMBER[^\n]+\n[^\n]+\n.*?(?=[\d]{6,7})(\d{6,7})" :invoice-number #"INVOICE NUMBER[^\n]+\n[^\n]+\n.*?(?=[\d]{9})(\d{9})" :total #"\s{2,}INVOICE\s{2,}.*?(?=TOTAL)TOTAL\s+([0-9.]+[\-]?)"} :parser {:date [:clj-time "MM/dd/yy"] diff --git a/src/clj/auto_ap/pdf/ledger.clj b/src/clj/auto_ap/pdf/ledger.clj index 4543fe30..54b07f5f 100644 --- a/src/clj/auto_ap/pdf/ledger.clj +++ b/src/clj/auto_ap/pdf/ledger.clj @@ -17,30 +17,40 @@ (java.util UUID))) (defn cell->pdf [cell] - [:pdf-cell - (cond-> {} + (let [cell-contents (cond + (and (= :dollar (:format cell)) + (dollars-0? (:value cell))) + "-" - (:border cell) (assoc :border true - :set-border (:border cell)) - (:colspan cell) (assoc :colspan (:colspan cell)) - (:align cell) (assoc :align (:align cell)) - (= :dollar (:format cell)) (assoc :align :right) - (= :percent (:format cell)) (assoc :align :right) - (:bold cell) (assoc-in [:ttf-name] "fonts/calibri-bold.ttf") - (:color cell) (assoc :color (:color cell))) - (cond - (and (= :dollar (:format cell)) - (dollars-0? (:value cell))) - "-" + (= :dollar (:format cell)) + (.format (DecimalFormat. "$###,##0.00") (:value cell)) - (= :dollar (:format cell)) - (.format (DecimalFormat. "$###,##0.00") (:value cell)) + (= :percent (:format cell)) + (.format (DecimalFormat. "0%") (:value cell)) - (= :percent (:format cell)) - (.format (DecimalFormat. "0%") (:value cell)) + :else + (str (:value cell))) + cell-contents (if (:filters cell) + (do + (println (:filters cell)) + cell-contents) + - :else - (str (:value cell)))]) + cell-contents)] + [:pdf-cell + (cond-> {} + + (:border cell) (assoc :border true + :set-border (:border cell)) + (:colspan cell) (assoc :colspan (:colspan cell)) + (:align cell) (assoc :align (:align cell)) + (= :dollar (:format cell)) (assoc :align :right) + (= :percent (:format cell)) (assoc :align :right) + (:bold cell) (assoc-in [:ttf-name] "fonts/calibri-bold.ttf") + (:color cell) (assoc :color (:color cell))) + + cell-contents + ])) (defn cell-count [table] (let [counts (map count (:rows table))] @@ -212,5 +222,4 @@ :report/key key :report/url url :report/created (java.util.Date.)}]) - url - )) + url)) diff --git a/src/cljc/auto_ap/ledger/reports.cljc b/src/cljc/auto_ap/ledger/reports.cljc index a7d81f2d..a128ec6a 100644 --- a/src/cljc/auto_ap/ledger/reports.cljc +++ b/src/cljc/auto_ap/ledger/reports.cljc @@ -100,12 +100,18 @@ first)) (defn filter-client [pnl-data client] - (update pnl-data :data (fn [data] - ((group-by :client-id data) client)))) + (-> pnl-data + (update :data (fn [data] + ((group-by :client-id data) client))) + (update :filters (fn [f] + (assoc f :client-id client))))) (defn filter-location [pnl-data location] - (update pnl-data :data (fn [data] - ((group-by :location data) location)))) + (-> pnl-data + (update :data (fn [data] + ((group-by :location data) location))) + (update :filters (fn [f] + (assoc f :location location))))) (defn filter-categories [pnl-data categories] (update pnl-data :data (fn [data] @@ -114,14 +120,22 @@ (group-by best-category data)))))) (defn filter-period [pnl-data period] - (update pnl-data :data (fn [data] - ((group-by :period data) period)))) + (-> pnl-data + (update :data (fn [data] + ((group-by :period data) period))) + (update :filters (fn [f] + (assoc f :date-range period))))) (defn filter-numeric-code [pnl-data from to] - (update pnl-data :data (fn [data] - (filter - #(<= from (:numeric-code %) to) - data)))) + (-> pnl-data + (update :data (fn [data] + (filter + #(<= from (:numeric-code %) to) + data))) + (update :filters (fn [f] + (assoc f + :from-numeric-code from + :to-numeric-code to))))) (defn negate [pnl-data types] (update pnl-data :data @@ -142,13 +156,16 @@ (defn subtotal-row [pnl-data title & [cell-args]] (into [{:value title - :bold true}] + :bold true + :filters (:filters pnl-data)}] (map (fn [p] - (merge - {:format :dollar - :value (aggregate-accounts (filter-period pnl-data p))} - cell-args)) + (let [data (filter-period pnl-data p)] + (merge + {:format :dollar + :value (aggregate-accounts data) + :filters (:filters data)} + cell-args))) (-> pnl-data :args :periods)))) (defn calc-percent-of-sales [table pnl-data]