From b7f40f88324c89931ad2707d44726451bbd80999 Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 25 Aug 2015 15:53:27 +0200 Subject: [PATCH] Add possibility to remove products from the offer without breaking stuff --- app/controllers/orders_controller.rb | 4 ++-- app/controllers/products_controller.rb | 2 +- app/controllers/users_controller.rb | 4 ++-- app/form_builders/formatted_form_builder.rb | 6 +++++- app/models/product.rb | 6 ++++++ app/views/products_list/_product_edit_row.html.erb | 1 + app/views/products_list/_product_row.html.erb | 1 + app/views/products_list/listview.html.erb | 1 + db/migrate/20150824142843_add_deleted_to_products.rb | 5 +++++ db/schema.rb | 9 +++++---- 10 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 db/migrate/20150824142843_add_deleted_to_products.rb diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb index 1adb393..3752379 100644 --- a/app/controllers/orders_controller.rb +++ b/app/controllers/orders_controller.rb @@ -8,7 +8,7 @@ class OrdersController < ApplicationController init @order = @user.orders.build - products = (@user.products.select("products.*", "sum(order_items.count) as count").group(:product_id).order("count desc") | Product.all) + products = (@user.products.for_sale.select("products.*", "sum(order_items.count) as count").group(:product_id).order("count desc") | Product.for_sale) @order.g_order_items products end @@ -22,7 +22,7 @@ class OrdersController < ApplicationController slack_notification(@user, message) redirect_to root_path else - @order.g_order_items Product.all + @order.g_order_items Product.for_sale render 'new' end end diff --git a/app/controllers/products_controller.rb b/app/controllers/products_controller.rb index d44d99d..961ea70 100644 --- a/app/controllers/products_controller.rb +++ b/app/controllers/products_controller.rb @@ -57,6 +57,6 @@ class ProductsController < ApplicationController private def product_params - params.require(:product).permit(:name, :price, :avatar, :category, :stock) + params.require(:product).permit(:name, :price, :avatar, :category, :stock, :deleted) end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 7f90b0c..c2e9f79 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -49,7 +49,7 @@ class UsersController < ApplicationController @user = User.find(params[:user_id]) @dagschotel = @user.dagschotel - @products = Product.all + @products = Product.for_sale @categories = Product.categories end @@ -57,7 +57,7 @@ class UsersController < ApplicationController @user = User.find(params[:user_id]) @user.dagschotel = Product.find(params[:product_id]) - @products = Product.all + @products = Product.for_sale @categories = Product.categories if @user.save diff --git a/app/form_builders/formatted_form_builder.rb b/app/form_builders/formatted_form_builder.rb index 8092698..ca7a1da 100644 --- a/app/form_builders/formatted_form_builder.rb +++ b/app/form_builders/formatted_form_builder.rb @@ -48,7 +48,11 @@ class FormattedFormBuilder < ActionView::Helpers::FormBuilder label_content = block_given? ? capture(&block) : options[:label] content_tag :div, class: control_wrapper_class do - checkbox + " " + label(name, label_content) + if options[:skip_label] + checkbox + else + checkbox + " " + label(name, label_content) + end end end diff --git a/app/models/product.rb b/app/models/product.rb index b0ba8a1..a1e867a 100644 --- a/app/models/product.rb +++ b/app/models/product.rb @@ -28,6 +28,8 @@ class Product < ActiveRecord::Base presence: true, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] } + scope :for_sale, -> { where deleted: false } + def price self.price_cents / 100.0 end @@ -36,4 +38,8 @@ class Product < ActiveRecord::Base if value.is_a? String then value.sub!(',', '.') end self.price_cents = (value.to_f * 100).to_int end + + def out_of_sale + update_attribute :deleted, true + end end diff --git a/app/views/products_list/_product_edit_row.html.erb b/app/views/products_list/_product_edit_row.html.erb index 9ef9b8f..89267c9 100644 --- a/app/views/products_list/_product_edit_row.html.erb +++ b/app/views/products_list/_product_edit_row.html.erb @@ -4,6 +4,7 @@ <%= f.text_field :name, skip_label: true %> <%= f.price_field :price, skip_label: true %> <%= f.number_field :stock, skip_label: true %> + <%= f.check_box :deleted, skip_label: true %> <%= f.button "Update", class: "btn btn-primary" %> <%= javascript_tag do %> var id = "#edit_<%= dom_id(product) %>"; diff --git a/app/views/products_list/_product_row.html.erb b/app/views/products_list/_product_row.html.erb index f2fc527..98b24bb 100644 --- a/app/views/products_list/_product_row.html.erb +++ b/app/views/products_list/_product_row.html.erb @@ -3,5 +3,6 @@ <%= product.name %> <%= euro(product.price) %> <%= product.stock %> + "> <%= button_to "Edit", edit_product_path(product), method: :get, class: "btn btn-default", remote: true %> diff --git a/app/views/products_list/listview.html.erb b/app/views/products_list/listview.html.erb index 85091dd..4f7488b 100644 --- a/app/views/products_list/listview.html.erb +++ b/app/views/products_list/listview.html.erb @@ -10,6 +10,7 @@ Name Price Stock + Deleted <%= render partial: 'products_list/product_row', collection: @products, as: :product %> diff --git a/db/migrate/20150824142843_add_deleted_to_products.rb b/db/migrate/20150824142843_add_deleted_to_products.rb new file mode 100644 index 0000000..a4ae693 --- /dev/null +++ b/db/migrate/20150824142843_add_deleted_to_products.rb @@ -0,0 +1,5 @@ +class AddDeletedToProducts < ActiveRecord::Migration + def change + add_column :products, :deleted, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index ffa911b..0d121a6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150630183223) do +ActiveRecord::Schema.define(version: 20150824142843) do create_table "order_items", force: :cascade do |t| t.integer "order_id" @@ -31,8 +31,8 @@ ActiveRecord::Schema.define(version: 20150630183223) do add_index "orders", ["user_id"], name: "index_orders_on_user_id" create_table "products", force: :cascade do |t| - t.string "name", null: false - t.integer "price_cents", default: 0, null: false + t.string "name", null: false + t.integer "price_cents", default: 0, null: false t.datetime "created_at" t.datetime "updated_at" t.string "avatar_file_name" @@ -40,7 +40,8 @@ ActiveRecord::Schema.define(version: 20150630183223) do t.integer "avatar_file_size" t.datetime "avatar_updated_at" t.integer "category", default: 0 - t.integer "stock", default: 0, null: false + t.integer "stock", default: 0, null: false + t.boolean "deleted", default: false end create_table "users", force: :cascade do |t|