create user if missing

This commit is contained in:
Daniel O'Connell 2021-03-12 00:22:06 +01:00
parent 864d42949c
commit d7ebe01621
5 changed files with 38 additions and 29 deletions

View File

@ -6,11 +6,8 @@
(defn get-all [user-id]
(->> (sql/query db/db-uri ["select * from customers where deleted is null AND user_id = ?" user-id])
(map (fn [{:customers/keys [id name]}] {:id id :name name
:product-groups [{:name "bla" :products {:eggs 2 :carrots 13}}
{:name "ble" :products {:eggs 12 :milk 3}}]}))))
(defn get-by-name [tx user-id name]
(:customers/id (db/get-by-id tx user-id :customers (:name name) :name)))
:product-groups {"bla" {:eggs 2 :carrots 13}
"ble" {:eggs 12 :milk 3}}}))))
(defn create! [user-id name]
(jdbc/execute! db/db-uri
@ -20,3 +17,13 @@
(defn delete! [user-id id]
(sql/update! db/db-uri :customers {:deleted true} {:id id :user_id user-id}))
(defn get-by-name [tx user-id name]
(:customers/id (db/get-by-id tx user-id :customers name :name)))
(defn get-or-create-by-name [tx user-id name]
(if-let [id (:customers/id (db/get-by-id tx user-id :customers (:name name) :name))]
id
(do (create! user-id name)
(get-by-name tx user-id name))))

View File

@ -59,7 +59,7 @@
(defn replace! [user-id {:keys [who products] :as order}]
(jdbc/with-transaction [tx db/db-uri]
(let [customer-id (or (:id who)
(customers/get-by-name tx user-id who))
(customers/get-or-create-by-name tx user-id (:name who)))
products-map (products/products-map tx user-id products)
previous-day (some->> order :id (db/get-by-id tx user-id :orders) :orders/order_date (.toInstant))
order-id (upsert-order! tx user-id customer-id order)]

View File

@ -22,22 +22,7 @@
:products (prod/collect-products (remove (comp #{"who" "notes"} first) raw-values))})
(defn get-group-products [customers who]
(some->> customers
(filter (comp #{who} :name))
first
:product-groups
(reduce #(assoc %1 (:name %2) (:products %2)) {})))
(defn group-products [state]
[:div {:class :input-item}
[:label {:for :order-group-products} "stałe"]
[:select {:class :order-group-products :id :order-group-products
:value "-" :on-change #(some->> % .-target .-value
(get (:group-products @state))
(reset! (:products @state)))}
[:option "-"]
(for [[group _] (:group-products @state)]
[:option {:key (gensym)} group])]])
(some->> customers (filter (comp #{who} :name)) first :product-groups))
(defn order-form
([order] (order-form order #{:who :day :notes :products :group-products}))
@ -67,7 +52,7 @@
(when (:day fields)
(html/input :day "dzień" {:type :date :required true :default (:day order)}))
(when (and (:group-products fields) (-> @state :group-products seq))
[group-products state])
[prod/group-products state])
(when (:notes fields)
(html/input :notes "notka"
{:default (:notes @state)}))

View File

@ -7,8 +7,11 @@
[chicken-master.html :as html]
[chicken-master.events :as event]))
(defn order-adder [order]
(let [state (reagent/atom order)]
(defn order-adder [order who]
(let [state (-> order
(update :products reagent/atom)
(assoc :group-products (:group-products who))
reagent/atom)]
(fn []
[:details {:class (or (:class order) :customer-block) :key (gensym) :open (:open @state)}
[:summary {:on-click #(swap! state update :open not)}
@ -18,8 +21,11 @@
:class :order-date-picker
:callback (fn [day] (swap! state #(assoc % :day day :open true)))]]
(if (:day @state)
[prod/products-edit (reagent/atom (or (:products @state) {}))
:getter-fn #(re-frame/dispatch [::event/save-order (assoc @state :products %)])])])))
[:div
(when (:product-groups who)
[prod/group-products state])
[prod/products-edit (:products @state)
:getter-fn #(re-frame/dispatch [::event/save-order (assoc @state :products %)])]])])))
(defn product-group-adder [who product-group]
(let [state (reagent/atom product-group)]
@ -66,7 +72,7 @@
[:details {:class :client-orders}
[:summary "Zamówienia"]
[order-adder {:who who}]
[order-adder who]
(for [order (reverse (sort-by :day (client-orders id)))]
[order-adder (assoc order :key (gensym))])]]))]
[order-adder (assoc order :key (gensym)) who])]]))]
:class :wide-popup))

View File

@ -90,3 +90,14 @@
:type :button
:disabled (= @state "")
:on-click (if callback #(-> state (reset-vals! value) first callback))} button])])))
(defn group-products [state]
[:div {:class :input-item}
[:label {:for :order-group-products} "stałe"]
[:select {:class :order-group-products :id :order-group-products
:value "-" :on-change #(some->> % .-target .-value
(get (:group-products @state))
(reset! (:products @state)))}
[:option "-"]
(for [[group _] (:group-products @state)]
[:option {:key (gensym)} group])]])