From 9894bc72b310fa035dea18ee3bb3aecb9a768883 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Fri, 27 Jul 2018 09:01:21 -0700 Subject: [PATCH] adding default expense account to export --- .../1532706413-DOWN-add-default-expense-account.sql | 2 ++ .../1532706413-UP-add-default-expense-account.sql | 2 ++ resources/sample-excel.txt | 2 +- src/clj/auto_ap/db/invoices.clj | 6 +++--- src/clj/auto_ap/db/invoices_expense_accounts.clj | 2 +- src/clj/auto_ap/routes/invoices.clj | 13 +++++++++++-- 6 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 migrator/migrations/1532706413-DOWN-add-default-expense-account.sql create mode 100644 migrator/migrations/1532706413-UP-add-default-expense-account.sql diff --git a/migrator/migrations/1532706413-DOWN-add-default-expense-account.sql b/migrator/migrations/1532706413-DOWN-add-default-expense-account.sql new file mode 100644 index 00000000..d9384b84 --- /dev/null +++ b/migrator/migrations/1532706413-DOWN-add-default-expense-account.sql @@ -0,0 +1,2 @@ +-- 1532706413 DOWN add-default-expense-account +ALTER table invoices drop column default_expense_account; diff --git a/migrator/migrations/1532706413-UP-add-default-expense-account.sql b/migrator/migrations/1532706413-UP-add-default-expense-account.sql new file mode 100644 index 00000000..6eaa7083 --- /dev/null +++ b/migrator/migrations/1532706413-UP-add-default-expense-account.sql @@ -0,0 +1,2 @@ +-- 1532706413 UP add-default-expense-account +ALTER table invoices add column default_expense_account int; diff --git a/resources/sample-excel.txt b/resources/sample-excel.txt index d0594878..dfc4529a 100644 --- a/resources/sample-excel.txt +++ b/resources/sample-excel.txt @@ -1,4 +1,4 @@ -6/16/17 Acme Bread NMKT-CB 3/26/56 12:00 AM $54.00 Naschmarkt X 7/31/17 8:26 AM 8/1/17 3:57 PM +6/16/17 Acme Bread NMKT-CB 3/26/56 12:00 AM $54.00 Naschmarkt X 7/31/17 8:26 AM 8/1/17 3:57 PM 3100 6/20/17 Acme Bread NMKT-CB 3/19/58 12:00 AM $54.00 Naschmarkt X 7/31/17 8:26 AM 8/1/17 3:57 PM 6/21/17 Acme Bread NMKT-CB 11/13/58 12:00 AM $54.00 Naschmarkt X 7/31/17 8:26 AM 8/1/17 3:57 PM 6/27/17 Acme Bread NMKT-CB 12/7/61 12:00 AM $54.00 Naschmarkt X 8/1/17 11:55 AM 8/1/17 3:57 PM diff --git a/src/clj/auto_ap/db/invoices.clj b/src/clj/auto_ap/db/invoices.clj index b722179c..c15a6eff 100644 --- a/src/clj/auto_ap/db/invoices.clj +++ b/src/clj/auto_ap/db/invoices.clj @@ -11,7 +11,7 @@ [honeysql.core :as sql] [honeysql.helpers :as helpers])) -(def all-keys #{:company-id :vendor-id :imported :potential-duplicate :total :invoice-number :date :outstanding-balance :default-location}) +(def all-keys #{:company-id :vendor-id :imported :potential-duplicate :total :invoice-number :date :outstanding-balance :default-location :default-expense-account}) (defn insert-multi! [rows] (j/insert-multi! (get-conn) @@ -20,7 +20,7 @@ (defn upsert-multi! [rows] - (let [k (vec (map #(keyword (kebab->snake (name %))) [:company-id :vendor-id :invoice-number :total :date :imported :status :outstanding-balance :default-location])) + (let [k (vec (map #(keyword (kebab->snake (name %))) [:company-id :vendor-id :invoice-number :total :date :imported :status :outstanding-balance :default-location :default-expense-account])) column-names (str/join "," (map name k))] (reduce (fn [affected rows] @@ -31,7 +31,7 @@ (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 :v.status :v.outstanding-balance :v.default-location] + {:select [:v.company-id :v.vendor-id :v.invoice-number :v.total (sql/raw "cast(v.date as timestamp)") :v.imported :v.status :v.outstanding-balance :v.default-location :v.default-expense-account] :from [:v] :left-join [[:invoices :exist] [:and diff --git a/src/clj/auto_ap/db/invoices_expense_accounts.clj b/src/clj/auto_ap/db/invoices_expense_accounts.clj index 303b4d7d..41d4d770 100644 --- a/src/clj/auto_ap/db/invoices_expense_accounts.clj +++ b/src/clj/auto_ap/db/invoices_expense_accounts.clj @@ -21,7 +21,7 @@ (defn assign-defaults! [] (j/db-do-prepared (get-conn) (sql/format {:insert-into [[:invoices-expense-accounts [:invoice-id :expense-account-id :amount :location]] - {:select [:i.id :v.default-expense-account :i.total :i.default_location] + {:select [:i.id (sql/raw "COALESCE (i.default_expense_account, v.default_expense_account)") :i.total :i.default_location] :from [[:invoices :i]] :join [[:vendors :v] [:= :v.id :i.vendor-id]] diff --git a/src/clj/auto_ap/routes/invoices.clj b/src/clj/auto_ap/routes/invoices.clj index 4af5bda8..fdc37e0b 100644 --- a/src/clj/auto_ap/routes/invoices.clj +++ b/src/clj/auto_ap/routes/invoices.clj @@ -55,6 +55,13 @@ (catch Exception e (throw (Exception. (str "Could not parse total from value '" (:amount i) "'") e))))) +(defn parse-default-expense-account [i] + (try + (when-let [default-expense-account (:default-expense-account i)] + (Integer/parseInt default-expense-account)) + (catch Exception e + (throw (Exception. (str "Could not parse expense account from value '" (:default-expense-account i) "'") e))))) + (defn parse-account-id [i] (try (Integer/parseInt (second @@ -125,7 +132,7 @@ (POST "/upload-integreat" {{:keys [excel-rows]} :edn-params user :identity} (assert-admin user) - (let [columns [:raw-date :vendor-name :check :location :invoice-number :amount :company :bill-entered :bill-rejected :added-on :exported-on] + (let [columns [:raw-date :vendor-name :check :location :invoice-number :amount :company :bill-entered :bill-rejected :added-on :exported-on :default-expense-account] all-vendors (by :name (vendors/get-all)) @@ -141,6 +148,7 @@ (map (parse-or-error :company-id #(parse-company % all-companies))) (map (parse-or-error :vendor-id #(parse-vendor % all-vendors))) + (map (parse-or-error :default-expense-account parse-default-expense-account)) (map (parse-or-error :invoice-number parse-invoice-number)) (map (parse-or-error :total parse-amount)) (map (parse-or-error :date parse-date))) @@ -151,10 +159,11 @@ (map :vendor-name) set) insert-rows (vec (->> (filter #(not (seq (:errors %))) rows) - (map (fn [{:keys [vendor-id total company-id amount date invoice-number default-location]}] + (map (fn [{:keys [vendor-id total company-id amount date invoice-number default-location default-expense-account]}] {:vendor-id vendor-id :company-id company-id :default-location default-location + :default-expense-account default-expense-account :total total :outstanding-balance total :imported true