diff --git a/backend/src/chicken_master/customers.clj b/backend/src/chicken_master/customers.clj index f523c8a..1e2825e 100644 --- a/backend/src/chicken_master/customers.clj +++ b/backend/src/chicken_master/customers.clj @@ -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)))) diff --git a/backend/src/chicken_master/orders.clj b/backend/src/chicken_master/orders.clj index 28ed9af..e7219c3 100644 --- a/backend/src/chicken_master/orders.clj +++ b/backend/src/chicken_master/orders.clj @@ -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)] diff --git a/frontend/src/chicken_master/calendar.cljs b/frontend/src/chicken_master/calendar.cljs index 7dc61d5..872a536 100644 --- a/frontend/src/chicken_master/calendar.cljs +++ b/frontend/src/chicken_master/calendar.cljs @@ -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)})) diff --git a/frontend/src/chicken_master/customers.cljs b/frontend/src/chicken_master/customers.cljs index 7c1abb4..1d378ab 100644 --- a/frontend/src/chicken_master/customers.cljs +++ b/frontend/src/chicken_master/customers.cljs @@ -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)) diff --git a/frontend/src/chicken_master/products.cljs b/frontend/src/chicken_master/products.cljs index c0159f7..b27ea6a 100644 --- a/frontend/src/chicken_master/products.cljs +++ b/frontend/src/chicken_master/products.cljs @@ -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])]])