(ns auto-ap.parse.csv (:require [auto-ap.parse.util :as u] [clojure.data.csv :as csv] [clojure.java.io :as io] [clojure.string :as str])) (defn determine [[header :as z]] (prn header) (cond (str/includes? (second header) "Customer's PO No.") :mama-lus :else nil)) (defmulti parse-csv determine :default (fn default [rows] nil)) (defmethod parse-csv :mama-lus [rows] (println "MAMA LU") (transduce (comp (drop 1) (map (fn [[_ po-number despatch-number invoice-number invoice-date customer value :as row]] {:vendor-code "Mama Lu's Foods" :customer-identifier customer :invoice-number (str invoice-number " " po-number) :date (u/parse-value :clj-time "MM/dd/yy HH:ss" invoice-date) :total value :text (str/join " " row)}))) conj [] rows)) (defmethod parse-csv nil [rows] nil) (defn parse-file [file filename] (println "HEREERE") (with-open [reader (io/reader file)] (let [rows (csv/read-csv reader :separator \,)] (parse-csv rows))))