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 %> -