progress on making it possible to import from excel.

This commit is contained in:
Bryce Covert
2018-05-04 09:56:18 -07:00
parent a526d2da1b
commit df3755d099
3 changed files with 47 additions and 25 deletions

View File

@@ -21,21 +21,25 @@
(defn upsert-multi! [rows]
(let [k (vec (map #(keyword (kebab->snake (name %))) [:company-id :vendor-id :invoice-number :total :date :imported]))
column-names (str/join "," (map name k))]
(doseq [rows (partition-all 2000 rows)]
(j/db-do-prepared (get-conn)
(sql/format {:with [[[:v (str "(" column-names ")")]
(helpers/values (->> rows
(map clj->db )
(map (apply juxt k))))]]
:insert-into [[:invoices k]
{:select [:v.company-id :v.vendor-id :v.invoice-number :v.total (sql/raw "cast(v.date as timestamp)") :v.imported ]
:from [:v]
:left-join [[:invoices :exist]
[:and
[:= :exist.invoice-number :v.invoice-number]
[:= :exist.company-id :v.company-id]
[:= :exist.vendor-id :v.vendor-id]]]
:where [:= :exist.id nil] }] })))))
(reduce
(fn [affected rows]
(+ affected
(first (j/db-do-prepared (get-conn)
(sql/format {:with [[[:v (str "(" column-names ")")]
(helpers/values (->> rows
(map clj->db )
(map (apply juxt k))))]]
:insert-into [[:invoices k]
{:select [:v.company-id :v.vendor-id :v.invoice-number :v.total (sql/raw "cast(v.date as timestamp)") :v.imported ]
:from [:v]
:left-join [[:invoices :exist]
[:and
[:= :exist.invoice-number :v.invoice-number]
[:= :exist.company-id :v.company-id]
[:= :exist.vendor-id :v.vendor-id]]]
:where [:= :exist.id nil] }] })))))
0
(partition-all 2000 rows))))
(def base-query (sql/build :select :invoices.*
:from :invoices))