From b0f401e87b82baefe1d2e71d779a395835bd8507 Mon Sep 17 00:00:00 2001 From: BC Date: Sat, 16 Jun 2018 18:57:33 -0700 Subject: [PATCH] fixed dates. --- package-lock.json | 14 ++------ package.json | 2 +- project.clj | 8 ++--- resources/public/index.html | 1 + src/clj/auto_ap/db/vendors.clj | 1 - src/clj/auto_ap/graphql/invoices.clj | 33 ++++++++++-------- src/clj/auto_ap/time.clj | 1 + src/clj/auto_ap/yodlee/import.clj | 3 +- src/cljc/auto_ap/entities/shared.cljc | 2 +- src/cljs/auto_ap/events.cljs | 1 + src/cljs/auto_ap/views/main.cljs | 2 +- .../auto_ap/views/pages/unpaid_invoices.cljs | 34 ++++--------------- src/cljs/auto_ap/views/utils.cljs | 15 ++++++-- 13 files changed, 49 insertions(+), 68 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8420849d..c78d7296 100644 --- a/package-lock.json +++ b/package-lock.json @@ -127,23 +127,15 @@ } }, "bulma-calendar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bulma-calendar/-/bulma-calendar-1.3.0.tgz", - "integrity": "sha1-yqz7AWeSxV2t8O3BGq5vtkwlYEE=", - "requires": { - "camelcase": "^4.1.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bulma-calendar/-/bulma-calendar-3.0.0.tgz", + "integrity": "sha512-qHnFvuR++824s36c9F2n9U2El/lPGJVhXUzfylH8TQK9+8he/fZThJZH3wE+m8/gaOWWIhrNVzUTm7f1AQz9Vg==" }, "cached-path-relative": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=" }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", diff --git a/package.json b/package.json index 534632c1..34eb5e24 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { "@cljs-oss/module-deps": "^1.1.1", - "bulma-calendar": "^1.3.0" + "bulma-calendar": "^3.0.0" } } diff --git a/project.clj b/project.clj index 8fdc60a4..16fd2eb5 100644 --- a/project.clj +++ b/project.clj @@ -87,9 +87,7 @@ :source-map-timestamp true :preloads [devtools.preload] :external-config {:devtools/config {:features-to-install :all}} - :foreign-libs [{ :file "node_modules/bulma-calendar/dist/bulma-calendar.js" - :provides ["bulma-calendar.core"] - :module-type :commonjs}] + :install-deps true :infer-externs true }} @@ -99,9 +97,7 @@ :jar true :compiler {:main auto-ap.core :output-to "resources/public/js/compiled/app.js" - :foreign-libs [{ :file "node_modules/bulma-calendar/dist/bulma-calendar.js" - :provides ["bulma-calendar.core"] - :module-type :commonjs}] + :optimizations :advanced :closure-defines {goog.DEBUG false} :pretty-print false}} diff --git a/resources/public/index.html b/resources/public/index.html index 0ccfb892..11b3b8ed 100644 --- a/resources/public/index.html +++ b/resources/public/index.html @@ -270,6 +270,7 @@ background-color:#F5F5F5; } .table { table-layout: fixed } + .table td {text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } .typeahead { position:relative; diff --git a/src/clj/auto_ap/db/vendors.clj b/src/clj/auto_ap/db/vendors.clj index c59a1943..8f627c3e 100644 --- a/src/clj/auto_ap/db/vendors.clj +++ b/src/clj/auto_ap/db/vendors.clj @@ -59,7 +59,6 @@ (Integer/parseInt id)))) (defn insert [data] - (let [[{:keys [id]}] (j/insert! (get-conn) :vendors (unparse data))] (println "inserted vendor: " data ", id " id) (get-by-id id))) diff --git a/src/clj/auto_ap/graphql/invoices.clj b/src/clj/auto_ap/graphql/invoices.clj index f97bf96d..abdb2acf 100644 --- a/src/clj/auto_ap/graphql/invoices.clj +++ b/src/clj/auto_ap/graphql/invoices.clj @@ -3,24 +3,29 @@ [auto-ap.db.invoices :as invoices] [auto-ap.db.vendors :as vendors] [auto-ap.db.invoices-expense-accounts :as invoices-expense-accounts] - [auto-ap.time :refer [parse normal-date]])) + [auto-ap.time :refer [parse iso-date]])) -(defn -create-vendor-if-necessary [vendor-id vendor-name] +(defn -create-or-get-vendor [vendor-id vendor-name] (if vendor-id - vendor-id - (:id (vendors/insert {:name vendor-name :default-expense-account 0})))) + (vendors/get-by-id vendor-id) + (vendors/insert {:name vendor-name :default-expense-account 0}))) (defn add-invoice [context {{:keys [total invoice_number company_id vendor_id vendor_name date] :as in} :invoice} value] - (let [vendor_id (-create-vendor-if-necessary vendor_id vendor_name)] - (-> (invoices/insert-multi! [{:invoice-number invoice_number - :company-id company_id - :vendor-id vendor_id - :total total - :outstanding-balance total - :status "unpaid" - :imported true - :date (parse date normal-date)}]) - (first) + (let [vendor (-create-or-get-vendor vendor_id vendor_name) + + [invoice] (invoices/insert-multi! [{:invoice-number invoice_number + :company-id company_id + :vendor-id (:id vendor) + :total total + :outstanding-balance total + :status "unpaid" + :imported true + :date (parse date iso-date)}] + )] + (invoices-expense-accounts/replace-for-invoice + (:id invoice) [{:expense-account-id (:default-expense-account vendor) + :amount total}] ) + (-> invoice (->graphql)))) diff --git a/src/clj/auto_ap/time.clj b/src/clj/auto_ap/time.clj index e3abf766..dfdcfa5c 100644 --- a/src/clj/auto_ap/time.clj +++ b/src/clj/auto_ap/time.clj @@ -6,6 +6,7 @@ (time/to-time-zone (time/now) (time/time-zone-for-id "America/Los_Angeles"))) (def normal-date "MM/dd/yyyy") +(def iso-date "yyyy-MM-dd") (defn parse [v format] (try diff --git a/src/clj/auto_ap/yodlee/import.clj b/src/clj/auto_ap/yodlee/import.clj index b6d3540c..684d59ae 100644 --- a/src/clj/auto_ap/yodlee/import.clj +++ b/src/clj/auto_ap/yodlee/import.clj @@ -38,8 +38,7 @@ status :status} transaction company-id (account->company-id account-id) - vendor-id (transaction->vendor-id transaction)] - ] + vendor-id (transaction->vendor-id transaction)]] (try (transactions/upsert! diff --git a/src/cljc/auto_ap/entities/shared.cljc b/src/cljc/auto_ap/entities/shared.cljc index df114d28..d83cea24 100644 --- a/src/cljc/auto_ap/entities/shared.cljc +++ b/src/cljc/auto_ap/entities/shared.cljc @@ -2,7 +2,7 @@ (:require [clojure.spec.alpha :as s] [clojure.string :as str])) -(def date-regex #"[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}") +(def date-regex #"[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}") (def money-regex #"[0-9]+(\.[0-9]{1,2})?$") (s/def ::identifier (s/nilable string?)) diff --git a/src/cljs/auto_ap/events.cljs b/src/cljs/auto_ap/events.cljs index 8d68228c..62edd956 100644 --- a/src/cljs/auto_ap/events.cljs +++ b/src/cljs/auto_ap/events.cljs @@ -74,6 +74,7 @@ (re-frame/reg-event-db ::change-form (fn [db [_ location field value]] + (println location field value) (if value (assoc-in db (into location field) value) (update-in db location dissoc field)))) diff --git a/src/cljs/auto_ap/views/main.cljs b/src/cljs/auto_ap/views/main.cljs index 9c85bd88..9a0b1611 100644 --- a/src/cljs/auto_ap/views/main.cljs +++ b/src/cljs/auto_ap/views/main.cljs @@ -180,7 +180,7 @@ [:li.menu-item [:a {:href (bidi/path-for routes/routes :unpaid-invoices), :class (str "item" (active-when= ap :unpaid-invoices))} [:span {:class "icon"} - [:i {:class "fa fa-envelope-o"}]] + [:i {:class "fa fa-envelope-open-o"}]] [:span {:class "name"} "Unpaid Invoices"]] ] [:li.menu-item diff --git a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs index 313da504..791e6e6d 100644 --- a/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs +++ b/src/cljs/auto_ap/views/pages/unpaid_invoices.cljs @@ -8,15 +8,14 @@ [auto-ap.entities.invoice :as invoice] [auto-ap.entities.vendors :as vendor] [auto-ap.entities.invoices-expense-accounts :as invoices-expense-accounts] - [auto-ap.views.utils :refer [dispatch-event bind-field horizontal-field]] + [auto-ap.views.utils :refer [dispatch-event bind-field horizontal-field date->str str->date pretty standard]] [auto-ap.utils :refer [by replace-if]] [auto-ap.views.pages.check :as check] [auto-ap.views.components.invoice-table :refer [invoice-table] :as invoice-table] [auto-ap.views.components.modal :refer [modal action-modal]] [auto-ap.views.components.typeahead :refer [typeahead]] [auto-ap.subs :as subs] - [auto-ap.events :as events] - [bulma-calendar.core :as bc])) + [auto-ap.events :as events])) (re-frame/reg-sub ::invoice-page @@ -217,6 +216,8 @@ [:id :total :outstanding-balance :date :invoice-number [:company [:id :name]] [:vendor [:id :name]] + [:expense_accounts [:amount :id :expense_account_id + [:expense_account [:id :name [:parent [:id :name]]]]]] ]]}]} :on-success [::invoice-created]}}))) @@ -395,30 +396,6 @@ :max outstanding-balance :step "0.01"}]]]]]])]]]))) -#_(defn date-picker [] - (let [cal (r/atom nil)] - (r/create-class - {:component-did-mount (fn [this] - - (reset! cal (new bc (r/dom-node this) (clj->js {:overlay false :dateFormat "mm/dd/yyyy"} ))) - nil) - - :component-will-unmount (fn [this] - (.hide @cal) - nil) - :reagent-render (fn [props] - [:input ])}))) -(defn my-date [props] - (let [cal (r/atom nil)] - (r/create-class - {:component-did-mount (fn [this] - (reset! cal (new bc (r/dom-node this) (clj->js {:overlay false :dateFormat "yyyy-mm-dd"} ))) - - nil) - :reagent-render (fn [props] - [:input.input (merge props {:on-blur (fn [] (js/setTimeout 100 #(.hide @cal)) )}) ])}))) - - (defn new-invoice-modal [] (let [data @(re-frame/subscribe [::new-invoice]) @@ -446,11 +423,12 @@ [bind-field - [my-date {:type "date" + [:input.input {:type "date" :field [:date] :event change-event :spec ::invoice/date :subscription data}]]] + [horizontal-field [:label.label "Company"] [bind-field diff --git a/src/cljs/auto_ap/views/utils.cljs b/src/cljs/auto_ap/views/utils.cljs index 36510da1..efd8f2f8 100644 --- a/src/cljs/auto_ap/views/utils.cljs +++ b/src/cljs/auto_ap/views/utils.cljs @@ -1,6 +1,8 @@ (ns auto-ap.views.utils (:require [re-frame.core :as re-frame] [clojure.spec.alpha :as s] + [cljs-time.coerce :as c] + [cljs-time.core :as time] [auto-ap.events :as events] [auto-ap.subs :as subs] [cljs-time.format :as format])) @@ -27,15 +29,22 @@ (def pretty-long (format/formatter "MM/dd/yyyy HH:mm:ss")) (def pretty (format/formatter "MM/dd/yyyy")) +(def standard (format/formatter "yyyy-MM-MM")) -(defn date->str [d] - (when d - (format/unparse pretty d))) +(defn date->str + ([d] (date->str d pretty)) + ([d format] + (when d + (format/unparse format d)))) (defn date-time->str [d] (when d (format/unparse pretty-long d))) +(defn str->date [d f] + (when d + (format/parse f d))) + (defmulti do-bind (fn [a {:keys [type] :as x}] type))