diff --git a/app/controllers/settings/menu_item_instances_controller.rb b/app/controllers/settings/menu_item_instances_controller.rb index fd651e5e..0d276602 100644 --- a/app/controllers/settings/menu_item_instances_controller.rb +++ b/app/controllers/settings/menu_item_instances_controller.rb @@ -21,12 +21,14 @@ class Settings::MenuItemInstancesController < ApplicationController id = MenuItemInstance.findParentCategory(@item) @category = MenuCategory.find(id) @settings_menu_item_instances = MenuItemInstance.new + @item_sets = ItemSet.all end # GET /settings/menu_item_instances/1/edit def edit id = MenuItemInstance.findParentCategory(@item) @category = MenuCategory.find(id) + @item_sets = ItemSet.all end # POST /settings/menu_item_instances @@ -45,6 +47,18 @@ class Settings::MenuItemInstancesController < ApplicationController id = MenuItemInstance.findParentCategory(catID) category = MenuCategory.find(id) + + # Bind for Item Sets + if params[:menu_item_instance][:item_sets].count > 1 + params[:menu_item_instance][:item_sets].delete_at(0) + + sets = ItemSet.find(params[:menu_item_instance][:item_sets]) + + if sets.count > 0 + @settings_menu_item.item_sets = sets + end + end + respond_to do |format| if @settings_menu_item_instances.save @settings_menu_item_instances.item_attributes = params[:menu_item_instance][:item_attributes].reject(&:blank?) @@ -70,6 +84,18 @@ class Settings::MenuItemInstancesController < ApplicationController id = MenuItemInstance.findParentCategory(catID) category = MenuCategory.find(id) + + # Bind for Item Sets + if params[:menu_item_instance][:item_sets].count > 1 + params[:menu_item_instance][:item_sets].delete_at(0) + + sets = ItemSet.find(params[:menu_item_instance][:item_sets]) + + if sets.count > 0 + @settings_menu_item.item_sets = sets + end + end + respond_to do |format| if @settings_menu_item_instances.update(settings_menu_item_instance_params) @@ -122,8 +148,6 @@ class Settings::MenuItemInstancesController < ApplicationController # Never trust parameters from the scary internet, only allow the white list through. def settings_menu_item_instance_params - - params.require(:menu_item_instance).permit(:item_instance_code, :item_instance_name, :price, :item_attributes, :is_on_promotion, :promotion_price, :is_available,:menu_category_id,:menu_item_id) - + params.require(:menu_item_instance).permit(:item_instance_code, :item_instance_name, :price, :item_attributes, :is_on_promotion, :promotion_price, :is_available,:menu_category_id,:menu_item_id, :is_default, :item_sets) end end diff --git a/app/controllers/settings/set_menu_items_controller.rb b/app/controllers/settings/set_menu_items_controller.rb index 60fa3b7d..4f451de5 100644 --- a/app/controllers/settings/set_menu_items_controller.rb +++ b/app/controllers/settings/set_menu_items_controller.rb @@ -33,29 +33,30 @@ class Settings::SetMenuItemsController < ApplicationController def create @settings_menu_item = MenuItem.new(settings_menu_item_params) - # if params[:simple_menu_item][:menu_item_id] == '' + # if params[:set_menu_item][:menu_item_id] == '' @settings_menu_item.menu_category_id = params[:menu_category_id] # end @settings_menu_item.created_by = current_login_employee.name + # Remove "" default first + params[:set_menu_item][:item_attributes].delete_at(0) + params[:set_menu_item][:item_options].delete_at(0) + # Bind for Item Sets - if params[:simple_menu_item][:item_sets].count > 1 - params[:simple_menu_item][:item_sets].delete_at(0) + if params[:set_menu_item][:item_sets].count > 1 + params[:set_menu_item][:item_sets].delete_at(0) - sets = ItemSet.find(params[:simple_menu_item][:item_sets]) + sets = ItemSet.find(params[:set_menu_item][:item_sets]) if sets.count > 0 @settings_menu_item.item_sets = sets end end - - # Remove "" default first - params[:simple_menu_item][:item_attributes].delete_at(0) - params[:simple_menu_item][:item_options].delete_at(0) + respond_to do |format| if @settings_menu_item.save menu_item = MenuItem.find(@settings_menu_item.id) - menu_item.update_attributes(item_attributes: params[:simple_menu_item][:item_attributes], item_options: params[:simple_menu_item][:item_options]) + menu_item.update_attributes(item_attributes: params[:set_menu_item][:item_attributes], item_options: params[:set_menu_item][:item_options]) format.html { redirect_to settings_menu_category_set_menu_items_path, notice: 'Menu item was successfully created.' } format.json { render :show, status: :created, location: @settings_menu_item } @@ -70,14 +71,14 @@ class Settings::SetMenuItemsController < ApplicationController # PATCH/PUT /settings/menu_items/1.json def update # Remove "" default first - params[:simple_menu_item][:item_attributes].delete_at(0) - params[:simple_menu_item][:item_options].delete_at(0) + params[:set_menu_item][:item_attributes].delete_at(0) + params[:set_menu_item][:item_options].delete_at(0) # Bind for Item Sets - if params[:simple_menu_item][:item_sets].count > 1 - params[:simple_menu_item][:item_sets].delete_at(0) + if params[:set_menu_item][:item_sets].count > 1 + params[:set_menu_item][:item_sets].delete_at(0) - sets = ItemSet.find(params[:simple_menu_item][:item_sets]) + sets = ItemSet.find(params[:set_menu_item][:item_sets]) if sets.count > 0 @settings_menu_item.item_sets = sets @@ -88,7 +89,7 @@ class Settings::SetMenuItemsController < ApplicationController respond_to do |format| if @settings_menu_item.update(settings_menu_item_params) - @settings_menu_item.update_attributes(item_attributes: params[:simple_menu_item][:item_attributes], item_options: params[:simple_menu_item][:item_options]) + @settings_menu_item.update_attributes(item_attributes: params[:set_menu_item][:item_attributes], item_options: params[:set_menu_item][:item_options]) format.html { redirect_to settings_menu_category_set_menu_items_path, notice: 'Menu item was successfully updated.' } format.json { render :show, status: :ok, location: @settings_menu_item } @@ -131,6 +132,6 @@ class Settings::SetMenuItemsController < ApplicationController # Never trust parameters from the scary internet, only allow the white list through. def settings_menu_item_params - params.require(:set_menu_item).permit(:item_code, :name, :alt_name, :type, :image_path, :menu_category_id,:account_id , :item_attributes, :item_options, :min_qty, :is_sub_item, :is_available, :created_by) + params.require(:set_menu_item).permit(:item_code, :name, :alt_name, :type, :image_path, :menu_category_id,:account_id , :item_attributes, :item_options, :min_qty, :is_sub_item, :is_available, :created_by, :item_sets) end end diff --git a/app/controllers/settings/simple_menu_items_controller.rb b/app/controllers/settings/simple_menu_items_controller.rb index 60949618..4cf9318c 100644 --- a/app/controllers/settings/simple_menu_items_controller.rb +++ b/app/controllers/settings/simple_menu_items_controller.rb @@ -37,6 +37,34 @@ class Settings::SimpleMenuItemsController < ApplicationController # end @settings_menu_item.created_by = current_login_employee.name + # Remove "" default first + params[:simple_menu_item][:item_attributes].delete_at(0) + params[:simple_menu_item][:item_options].delete_at(0) + + # attr_format = [] + # param_count = params[:simple_menu_item][:item_attributes].count + # # Format for attributes json + # params[:simple_menu_item][:item_attributes].each do|attr_id| + # menu_attr = MenuItemAttribute.find(attr_id) + # if attr_format.count == 0 + # attr_format.push({ type: menu_attr.attribute_type, value: [] }) + # end + + # attr_format.each do |af| + # if menu_attr.attribute_type == af[:type] + # af[:value].push(menu_attr.value) + # else + # new_attr = {type: menu_attr.attribute_type, value: [ menu_attr.value ] } + # attr_format.push(new_attr) + # end + + # break if attr_format.count > param_count + # end + + # param_count -= 1 + # end + # @settings_menu_item.item_attributes = attr_format + # Bind for Item Sets if params[:simple_menu_item][:item_sets].count > 1 params[:simple_menu_item][:item_sets].delete_at(0) @@ -47,14 +75,11 @@ class Settings::SimpleMenuItemsController < ApplicationController @settings_menu_item.item_sets = sets end end - - # Remove "" default first - params[:simple_menu_item][:item_attributes].delete_at(0) - params[:simple_menu_item][:item_options].delete_at(0) + respond_to do |format| if @settings_menu_item.save menu_item = MenuItem.find(@settings_menu_item.id) - menu_item.update_attributes(item_attributes: params[:simple_menu_item][:item_attributes], item_options: params[:simple_menu_item][:item_options]) + menu_item.update_attributes(item_options: params[:simple_menu_item][:item_options]) format.html { redirect_to settings_menu_category_simple_menu_items_path, notice: 'Menu item was successfully created.' } format.json { render :show, status: :created, location: @settings_menu_item } @@ -129,6 +154,6 @@ class Settings::SimpleMenuItemsController < ApplicationController # Never trust parameters from the scary internet, only allow the white list through. def settings_menu_item_params - params.require(:simple_menu_item).permit(:item_code, :name, :alt_name, :type, :image_path, :menu_category_id, :account_id, :item_attributes, :item_options, :min_qty, :is_sub_item, :is_available, :created_by) + params.require(:simple_menu_item).permit(:item_code, :name, :alt_name, :type, :image_path, :menu_category_id, :account_id, :item_attributes, :item_options, :min_qty, :is_sub_item, :is_available, :created_by, :item_sets) end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ae3934e4..037767c9 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,5 +1,4 @@ module ApplicationHelper - def flash_class(level) case level when :notice then "alert alert-info fade-in" diff --git a/app/models/menu_item_attribute.rb b/app/models/menu_item_attribute.rb index a2fd0d1c..54d2f34e 100644 --- a/app/models/menu_item_attribute.rb +++ b/app/models/menu_item_attribute.rb @@ -1,6 +1,6 @@ class MenuItemAttribute < ApplicationRecord validates_presence_of :attribute_type, :name, :value def self.collection - MenuItemAttribute.select("id, name").map { |e| [e.name, e.id] } + MenuItemAttribute.select("name, value").map { |e| [e.name, e.value] } end end diff --git a/app/models/menu_item_instance.rb b/app/models/menu_item_instance.rb index 579b7a5a..de5be7b5 100644 --- a/app/models/menu_item_instance.rb +++ b/app/models/menu_item_instance.rb @@ -1,5 +1,8 @@ class MenuItemInstance < ApplicationRecord belongs_to :menu_item + + has_many :menu_instance_item_sets + has_many :item_sets, through: :menu_instance_item_sets # before_create :generate_menu_item_instance_code def self.findParentCategory(item) diff --git a/app/views/api/restaurant/menu/_menu_item.json.jbuilder b/app/views/api/restaurant/menu/_menu_item.json.jbuilder index ffad3dc2..297e7932 100644 --- a/app/views/api/restaurant/menu/_menu_item.json.jbuilder +++ b/app/views/api/restaurant/menu/_menu_item.json.jbuilder @@ -1,3 +1,26 @@ +# Format for attributes json +attr_format = [] +param_count = item.item_attributes.count +# Format for attributes json +item.item_attributes.each do|attr_id| + menu_attr = MenuItemAttribute.find(attr_id) + if attr_format.count == 0 + attr_format.push({ type: menu_attr.attribute_type, value: [] }) + end + + attr_format.each do |af| + if menu_attr.attribute_type == af[:type] + af[:value].push(menu_attr.value) + else + new_attr = {type: menu_attr.attribute_type, value: [ menu_attr.value ] } + attr_format.push(new_attr) + end + + break if attr_format.count > param_count + end + + param_count -= 1 +end #Menu Item Information json.id item.id @@ -12,7 +35,8 @@ json.account_id item.account_id json.min_qty item.min_qty json.is_available item.is_available json.is_sub_item item.is_sub_item -json.attributes item.item_attributes +json.item_sets item.item_sets +json.attributes attr_format json.options item.item_options # json.min_selectable_item item.min_selectable_item # json.max_selectable_item item.max_selectable_item @@ -26,17 +50,16 @@ json.options item.item_options # json.promotion_price = item_instance.promotion_price # json.item_attributes = item_instance.item_attributes -# elsif item.menu_item_instances.count > 1 then json.instances item.menu_item_instances do |is| json.code = is.item_instance_code json.name = is.item_instance_name json.price = is.price json.is_available = is.is_available + json.is_default = is.is_default json.is_on_promotion = is.is_on_promotion json.promotion_price = is.promotion_price json.item_attributes = is.item_attributes - # end - + json.item_sets is.item_sets end #Child Menu items diff --git a/app/views/settings/menu_item_instances/_form.html.erb b/app/views/settings/menu_item_instances/_form.html.erb index 54edfab4..c86ff780 100644 --- a/app/views/settings/menu_item_instances/_form.html.erb +++ b/app/views/settings/menu_item_instances/_form.html.erb @@ -3,21 +3,32 @@ <%= f.error_notification %> -
- <%= f.input :item_instance_code %> - <%= f.input :item_instance_name %> - <%= f.input :price %> +
+
+ <%= f.input :item_instance_code %> + <%= f.input :item_instance_name %> + <%= f.input :price %> - <%= f.input :item_attributes, collection: MenuItemAttribute.collection, input_html: { multiple: true } %> + <%= f.input :item_attributes, collection: MenuItemAttribute.collection, input_html: { multiple: true } %> - - <%= f.input :is_on_promotion %> - <%= f.input :promotion_price %> - <%= f.input :is_available %> + <%= f.input :is_on_promotion %> + <%= f.input :promotion_price %> +
-
- <%= f.button :submit %> +
+
+
+ <%= f.input :is_available %> + <%= f.input :is_default %> + + <%= f.input :item_sets, :collection => @item_sets, :input_html => { :multiple => true }, :class => "form-control item_sets" %> +
+
+ +
+ <%= f.button :submit %> +
<% end %> diff --git a/app/views/settings/menu_item_instances/edit.html.erb b/app/views/settings/menu_item_instances/edit.html.erb index 01a47cc0..d5884474 100644 --- a/app/views/settings/menu_item_instances/edit.html.erb +++ b/app/views/settings/menu_item_instances/edit.html.erb @@ -11,6 +11,6 @@
  • Edit
  • - <%= render 'form', settings_menu_item_menu_item_instances: @settings_menu_item_instances %> + <%= render 'form', settings_menu_item_menu_item_instances: @settings_menu_item_instances, item_sets: @item_sets %>
    diff --git a/app/views/settings/menu_item_instances/new.html.erb b/app/views/settings/menu_item_instances/new.html.erb index ccbc8fe8..9b1c5331 100644 --- a/app/views/settings/menu_item_instances/new.html.erb +++ b/app/views/settings/menu_item_instances/new.html.erb @@ -14,6 +14,6 @@
  • New Menu Item Instance
  • - <%= render 'form', settings_simple_menu_item_menu_item_instances: @settings_menu_item_instances %> + <%= render 'form', settings_simple_menu_item_menu_item_instances: @settings_menu_item_instances, item_sets: @item_sets %> diff --git a/app/views/settings/menu_item_instances/show.html.erb b/app/views/settings/menu_item_instances/show.html.erb index 40383b51..2fb1ca39 100644 --- a/app/views/settings/menu_item_instances/show.html.erb +++ b/app/views/settings/menu_item_instances/show.html.erb @@ -24,8 +24,8 @@ On Promotion Promotion Price Available - Created At - + Is Default + Created At @@ -38,6 +38,7 @@ <%= @settings_menu_item_instances.is_on_promotion %> <%= @settings_menu_item_instances.promotion_price %> <%= @settings_menu_item_instances.is_available %> + <%= @settings_menu_item_instances.is_default %> <%= @settings_menu_item_instances.created_at.utc.getlocal.strftime("%Y-%m-%d/%I:%M %p") %> <% if params[:simple_menu_item_id] %> <%= link_to 'Edit', edit_settings_simple_menu_item_menu_item_instance_path(@item,@settings_menu_item_instances) %> diff --git a/db/migrate/20170402084230_create_menu_item_instances.rb b/db/migrate/20170402084230_create_menu_item_instances.rb index c79cb322..8e95f8f5 100644 --- a/db/migrate/20170402084230_create_menu_item_instances.rb +++ b/db/migrate/20170402084230_create_menu_item_instances.rb @@ -9,6 +9,7 @@ class CreateMenuItemInstances < ActiveRecord::Migration[5.1] t.boolean :is_on_promotion, :null => false, :default => false t.decimal :promotion_price, :precision => 10, :scale => 2, :null => false, :default => 0.00 t.boolean :is_available, :null => false, :default => true + t.boolean :is_default, :null => false, :default => true t.timestamps end end diff --git a/db/seeds.rb b/db/seeds.rb index 2a9e422a..bf458f2a 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -125,6 +125,7 @@ product = Account.create({title: "Product", account_type: "2"}) #Default Menu Options menu_options = MenuItemOption.create([{option_type: "Spicy", name: "Less Spicy", value: "less_spicy"},{option_type: "Spicy", name: "Spicy", value: "spicy"},{option_type: "Spicy", name: "Super Spicy", value: "super_spicy"}]) menu_options = MenuItemOption.create([{option_type: "Oil", name: "Less Oil", value: "less_oil"},{name: "No MSG", value: "no_msg"},{option_type: "Sweet", name: "Less Sweet", value: "less_sweet"}]) +menu_pkg_options = MenuItemOption.create([{option_type: "Package", name: "Bottle", value: "Bottle"},{option_type: "Package", name: "Can", value: "can"}]) # #Default Menu Category menu_category1 = MenuCategory.create({menu: menu, code:"C001", name: "Soup Base", alt_name: "Soup_base", order_by: 1, is_available: 1, created_by: "SYSTEM DEFAULT"}) diff --git a/public/image/menu_images/icons8-Food-100.png b/public/image/menu_images/icons8-Food-100.png new file mode 100644 index 00000000..a77e6169 Binary files /dev/null and b/public/image/menu_images/icons8-Food-100.png differ