class Settings::MenusController < ApplicationController load_and_authorize_resource except: [:create] before_action :set_settings_menu, only: [:show, :edit, :update, :destroy] # GET /settings/menus # GET /settings/menus.json def index @settings_menus = Menu.all.page(params[:page]).per(10) respond_to do |format| format.html format.xlsx end end # GET /settings/menus/1 # GET /settings/menus/1.json def show @settings_menu_categories = @settings_menu.menu_categories.page(params[:page]).per(10) end # GET /settings/menus/new def new @settings_menu = Menu.new end # GET /settings/menus/1/edit def edit end # POST /settings/menus # POST /settings/menus.json def create @settings_menu = Menu.new(settings_menu_params) @settings_menu.created_by = current_login_employee.name respond_to do |format| if @settings_menu.save format.html { redirect_to settings_menus_path, notice: 'Menu was successfully created.' } format.json { render :show, status: :created, location: @settings_menu } else format.html { render :new } format.json { render json: @settings_menu.errors, status: :unprocessable_entity } end end end # PATCH/PUT /settings/menus/1 # PATCH/PUT /settings/menus/1.json def update respond_to do |format| if @settings_menu.update(settings_menu_params) format.html { redirect_to settings_menus_path, notice: 'Menu was successfully updated.' } format.json { render :show, status: :ok, location: @settings_menu } else format.html { render :edit } format.json { render json: @settings_menu.errors, status: :unprocessable_entity } end end end # DELETE /settings/menus/1 # DELETE /settings/menus/1.json def destroy # @settings_menu.destroy abc = Menu.destroyMenu(@settings_menu) # @settings_menu_item_set.destroy flash[:notice] = 'Menu was successfully destroyed.' render :json => {:status=> "Success", :url => settings_menus_path }.to_json # respond_to do |format| # format.html { redirect_to settings_menus_path, notice: 'Menu was successfully destroyed.' } # format.json { head :no_content } # end end def export @settings_menus = Menu.all.page(params[:page]).per(10) menu = Menu.find(params[:id]) p = Axlsx::Package.new wb = p.workbook wb.styles do |s| time_format = wb.styles.add_style :format_code => 'hh:mm:ss' title = s.add_style :fg_color => "004586", :b => true, :sz => 12 wrap_text = s.add_style :sz => 11, :alignment => { :horizontal => :left,:vertical => :center , :wrap_text => true} header_text = s.add_style :fg_color=> "090909", :b => true, :sz => 12, :border => { :style => :thin, :color => "00" }, :alignment => { :horizontal => :left, :vertical => :center , :header_text => true} # Menu Sheet wb.add_worksheet(name: menu.name,is_ordering: menu.is_ordering) do |sheet| sheet.add_row ["Name",menu.name,"is_ordering",menu.is_ordering], :style=>title sheet.add_row sheet.add_row ["Category Code", "Category Name", "Item Code", "Item Name", "Account", "Item AltName", "Taxable", "Attributes", "Options", "Instance Code", "Instance Name", "Instance Attribute", "Price", "Is Default", "Image Path"], :style=>header_text menu.menu_categories.each do |mc| mc.menu_items.each do |mi| attributes = "" i=0 if mi.item_attributes.length > 0 mi.item_attributes.each do |mia| attribute = MenuItemAttribute.find(mia) if i == mi.item_attributes.length - 1 attributes = attributes + attribute.name else attributes = attributes + attribute.name + "," end i = i + 1 end end image_path = "" if mi.image_path image_path = mi.image_path.to_s.remove("/image/menu_images/") end options = "" i=0 if mi.item_options.length > 0 mi.item_options.each do |mio| option = MenuItemOption.find(mio) if i == mi.item_options.length - 1 options = options + option.name else options = options + option.name + "," end i = i + 1 end end mi.menu_item_instances.each do |mii| attribute = "" if mii.item_attributes.length > 0 attribute = MenuItemAttribute.find(mii.item_attributes[0]).name end sheet.add_row [ mc.code, mc.name, mi.item_code, mi.name, mi.account.title, mi.alt_name, mi.taxable, attributes, options, mii.item_instance_code, mii.item_instance_name, attribute, mii.price, mii.is_default, image_path], :style=>wrap_text end end end end end directory_name = "public/menus" Dir.mkdir(directory_name) unless File.exists?(directory_name) file_path = directory_name +"/" + menu.name + ".xlsx" p.serialize(file_path) render :json => { status: true, path: file_path } end def import if params[:file] status = Menu.import(params[:file], current_user.name) redirect_to settings_menus_path, notice: status end end private # Use callbacks to share common setup or constraints between actions. def set_settings_menu @settings_menu = Menu.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def settings_menu_params params.require(:menu).permit(:name, :is_active, :is_ordering, :valid_days, :valid_time_to, :valid_time_from) end end