Allows upload of CSV of sysco with line item parsing
This commit is contained in:
@@ -26,6 +26,9 @@
|
||||
(str/includes? (str header) "DISCOUNT_MESSAGE")
|
||||
:wismettac
|
||||
|
||||
(str/includes? (str header) "Item Description")
|
||||
:sysco-invoices-list
|
||||
|
||||
(str/includes? (str header) "Status")
|
||||
:ledyard
|
||||
|
||||
@@ -34,7 +37,6 @@
|
||||
|
||||
(str/includes? (str header) "PARENT CUSTOMER NAME")
|
||||
:worldwide
|
||||
|
||||
:else
|
||||
nil)]
|
||||
(alog/info ::csv-type-determined :type csv-type)
|
||||
@@ -108,7 +110,7 @@
|
||||
{:vendor-code "Mama Lu's Foods"
|
||||
:customer-identifier customer
|
||||
:invoice-number (str po-number "-" invoice-number)
|
||||
:date (parse-date-fallover invoice-date ["M/d/yyyy HH:ss" "M/d/yyyy HH:mm:ss aa" "M/d/yyyy"])
|
||||
:date (parse-date-fallover invoice-date ["M/d/yyyy HH:ss" "M/d/yyyy HH:mm:ss aa" "M/d/yyyy"])
|
||||
:total (str/replace value #"," "")
|
||||
:text (str/join " " row)
|
||||
:full-text (str/join " " row)})))
|
||||
@@ -124,7 +126,7 @@
|
||||
{:vendor-code "Mama Lu's Foods"
|
||||
:customer-identifier customer
|
||||
:invoice-number (str po-number "-" invoice-number)
|
||||
:date (parse-date-fallover invoice-date ["M/d/yyyy HH:ss" "M/d/yyyy HH:mm:ss aa" "M/d/yyyy"])
|
||||
:date (parse-date-fallover invoice-date ["M/d/yyyy HH:ss" "M/d/yyyy HH:mm:ss aa" "M/d/yyyy"])
|
||||
:total (str/replace value #"," "")
|
||||
:text (str/join " " row)
|
||||
:full-text (str/join " " row)})))
|
||||
@@ -171,13 +173,13 @@
|
||||
(transduce
|
||||
(comp
|
||||
(map (fn [[invoice-number date due amount standard :as row]]
|
||||
{:vendor-code "Performance Food Group - LEDYARD"
|
||||
{:vendor-code "Performance Food Group - LEDYARD"
|
||||
:invoice-number invoice-number
|
||||
:date (some-> date not-empty (parse-date-fallover ["MM/dd/yy"]))
|
||||
:date (some-> date not-empty (parse-date-fallover ["MM/dd/yy"]))
|
||||
:due (some-> due not-empty (parse-date-fallover ["MM/dd/yy"]))
|
||||
:total (str/replace amount #"[\$,]" "")
|
||||
:text (str/join " " row)
|
||||
:full-text (str/join " " row)})))
|
||||
:total (str/replace amount #"[\$,]" "")
|
||||
:text (str/join " " row)
|
||||
:full-text (str/join " " row)})))
|
||||
conj
|
||||
[]
|
||||
(drop 1 rows)))
|
||||
@@ -187,17 +189,41 @@
|
||||
(transduce
|
||||
(comp
|
||||
(map (fn [[_ customer-name _ inv date amount :as row]]
|
||||
{:vendor-code "Worldwide Produce"
|
||||
{:vendor-code "Worldwide Produce"
|
||||
:customer-identifier customer-name
|
||||
:invoice-number (str/replace inv #"[=\"]" "")
|
||||
:date (some-> date not-empty (parse-date-fallover ["MM/dd/yy"]))
|
||||
:total (str/replace amount #"[\$,]" "")
|
||||
:text (str/join " " row)
|
||||
:full-text (str/join " " row)})))
|
||||
:invoice-number (str/replace inv #"[=\"]" "")
|
||||
:date (some-> date not-empty (parse-date-fallover ["MM/dd/yy"]))
|
||||
:total (str/replace amount #"[\$,]" "")
|
||||
:text (str/join " " row)
|
||||
:full-text (str/join " " row)})))
|
||||
conj
|
||||
[]
|
||||
(drop 1 rows)))
|
||||
|
||||
(defmethod parse-csv :sysco-invoices-list
|
||||
[rows]
|
||||
(let [header (first rows)]
|
||||
(->> (drop 1 rows)
|
||||
(map (fn [row] (into {} (map vector header row))))
|
||||
(filter (fn [row]
|
||||
(let [qty (get row "Current Quantity")]
|
||||
(not (or (str/blank? qty) (= qty "0"))))))
|
||||
(group-by (fn [row] (get row "Invoice")))
|
||||
(map (fn [[_ invoice-rows]]
|
||||
(let [first-row (first invoice-rows)]
|
||||
{:invoice-number (get first-row "Invoice")
|
||||
:date (parse-date-fallover (get first-row "Invoice Date") ["yyyy-MM-dd"])
|
||||
:total (str/replace (get first-row "Amount Due") #"[,\$]" "")
|
||||
:customer-identifier (get first-row "Ship To Name")
|
||||
:vendor-code "Sysco"
|
||||
:text (str/join " " (mapcat vals invoice-rows))
|
||||
:full-text (str/join " " (mapcat vals invoice-rows))
|
||||
:line-items (mapv (fn [row]
|
||||
{:description (get row "Item Description")
|
||||
:amount (Double/parseDouble (str/replace (get row "Total Amount") #"[,\$]" ""))})
|
||||
invoice-rows)})))
|
||||
vec)))
|
||||
|
||||
#_{:clj-kondo/ignore [:unused-binding]}
|
||||
(defmethod parse-csv nil
|
||||
[rows]
|
||||
|
||||
Reference in New Issue
Block a user