From fd12af244d0974cde1bcfc173ecd3a5ef091998f Mon Sep 17 00:00:00 2001 From: Aung Myo Date: Tue, 20 Mar 2018 17:42:19 +0630 Subject: [PATCH] update menu import and export --- README.md | 3 + app/models/menu.rb | 112 +++++++++++++++++----- app/models/menu_category.rb | 2 +- app/views/settings/menus/index.xlsx.axlsx | 105 ++++++++++---------- lib/tasks/clear_data.rake | 22 +++++ 5 files changed, 168 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index 506ab0b6..015eaa5a 100755 --- a/README.md +++ b/README.md @@ -103,6 +103,9 @@ For Sidekiq 1) If you want to use sidekiq => Create New Lookups => lookup_type = sidekiq, Name = sidekiq , Value = 1 or 0 +For Clear Menu + 1) rake clear:menu # menu,menu item,menu category,menu item instance,account,item option,item attribute,item set + For Check CUp status ###please open sudo cat /etc/sudoers diff --git a/app/models/menu.rb b/app/models/menu.rb index e42ad876..9f4e6b14 100755 --- a/app/models/menu.rb +++ b/app/models/menu.rb @@ -46,30 +46,98 @@ class Menu < ApplicationRecord end def self.import(file) - spreadsheet = Roo::Spreadsheet.open(file.path) + + spreadsheet = open_spreadsheet(file) + sheet_count = spreadsheet.sheets.count-1 + for i in 0..sheet_count do + header = spreadsheet.sheet(i).row(1) + sheet_name = spreadsheet.sheets[i] - spreadsheet = Roo::Excelx.new(file.path) - - # Use the extension option if the extension is ambiguous. - spreadsheet = Roo::Spreadsheet.open(file.path, extension: :xlsx) - - puts spreadsheet.info - - header = spreadsheet.row(1) - - (2..spreadsheet.last_row).each do |i| - - row = Hash[[header,spreadsheet.row(i)].transpose] - - menu = Menu.new - menu.name = row["name"] - menu.is_active = row["is_active"] - menu.valid_days = row["valid_days"] - menu.valid_time_from = row["valid_time_from"] - menu.valid_time_to = row["valid_time_to"] - menu.created_by = row["created_by"] - menu.save + (2..spreadsheet.sheet(i).last_row).each do |ii| + row = Hash[[header,spreadsheet.sheet(i).row(ii)].transpose] + if sheet_name == "Account" + # Account.create(id:row["id"], title: row["title"],account_type: row["account_type"],discount: row["discount"],point: row["point"],bonus: row["bonus"],rebate: row["rebate"]) + account = Account.find_by_id(row["id"]) + if account + Account.create(title: row["title"],account_type: row["account_type"],discount: row["discount"],point: row["point"],bonus: row["bonus"],rebate: row["rebate"]) + else + Account.create(id:row["id"], title: row["title"],account_type: row["account_type"],discount: row["discount"],point: row["point"],bonus: row["bonus"],rebate: row["rebate"]) + end + elsif sheet_name == "Item Set" + # ItemSet.create(id:row["id"], name: row[name], alt_name: row[alt_name], min_selectable_qty: row[min_selectable_qty], max_selectable_qty: row[max_selectable_qty]) + item_set = ItemSet.find_by_id(row["id"]) + if item_set + ItemSet.create( name: row[name], alt_name: row[alt_name], min_selectable_qty: row[min_selectable_qty], max_selectable_qty: row[max_selectable_qty]) + else + ItemSet.create(id:row["id"], name: row[name], alt_name: row[alt_name], min_selectable_qty: row[min_selectable_qty], max_selectable_qty: row[max_selectable_qty]) + end + elsif sheet_name == "Menu Item Options" + # MenuItemOption.create(id:row["id"], option_type: row["option_type"],name: row["name"],value: row["value"]) + item_options = MenuItemOption.find_by_id(row["id"]) + if item_options + MenuItemOption.create( option_type: row["option_type"],name: row["name"],value: row["value"]) + else + MenuItemOption.create(id:row["id"], option_type: row["option_type"],name: row["name"],value: row["value"]) + end + elsif sheet_name == "Menu Item Attributes" + # MenuItemAttribute.create(id:row["id"], attribute_type: row["attribute_type"],name: row["name"],value: row["value"]) + item_attributes = MenuItemAttribute.find_by_id(row["id"]) + if item_attributes + MenuItemAttribute.create( attribute_type: row["attribute_type"],name: row["name"],value: row["value"]) + else + MenuItemAttribute.create(id:row["id"], attribute_type: row["attribute_type"],name: row["name"],value: row["value"]) + end + elsif sheet_name == "Menu" + menu = Menu.find_by_id(row["id"]) + if menu + Menu.create(name: row["name"], is_active: row["is_active"], valid_days: row["valid_days"],valid_time_from: row["valid_time_from"], valid_time_to: row["valid_time_to"], created_by: row["created_by"]) + else + Menu.create(id:row["id"], name: row["name"], is_active: row["is_active"], valid_days: row["valid_days"],valid_time_from: row["valid_time_from"], valid_time_to: row["valid_time_to"], created_by: row["created_by"]) + end + elsif sheet_name == "Menu Category" + # MenuCategory.create(id:row["id"], menu_id: row["menu_id"], code: row["code"], name: row["name"], alt_name: row["alt_name"], order_by: row["order_by"], created_by: row["created_by"], menu_category_id: row["menu_category_id"], is_available: row["is_available"]) + menu_category = MenuCategory.find_by_id(row["id"]) + if menu_category + MenuCategory.create(menu_id: row["menu_id"], code: row["code"], name: row["name"], alt_name: row["alt_name"], order_by: row["order_by"], created_by: row["created_by"], menu_category_id: row["menu_category_id"], is_available: row["is_available"]) + else + MenuCategory.create(id:row["id"], menu_id: row["menu_id"], code: row["code"], name: row["name"], alt_name: row["alt_name"], order_by: row["order_by"], created_by: row["created_by"], menu_category_id: row["menu_category_id"], is_available: row["is_available"]) + end + elsif sheet_name == "Menu Item" + # MenuItem.create(id:row["id"], item_code: row["item_code"], name: row["name"], alt_name: row["alt_name"], image_path: row["image_path"], description: row["description"], information: row["information"], unit: row["unit"], type: row["type"], menu_category_id: row["menu_category_id"], item_attributes: row["item_attributes"], item_options: row["item_options"], account_id: row["account_id"], min_qty: row["min_qty"], taxable: row["taxable"], is_sub_item: row["is_sub_item"], is_available: row["is_available"], created_by: row["created_by"]) + menu_item = MenuItem.find_by_id(row["id"]) + if menu_item + MenuItem.create(item_code: row["item_code"], name: row["name"], alt_name: row["alt_name"], image_path: row["image_path"], description: row["description"], information: row["information"], unit: row["unit"], type: row["type"], menu_category_id: row["menu_category_id"], item_attributes: JSON.parse(row["item_attributes"]), item_options: JSON.parse(row["item_options"]), account_id: row["account_id"], min_qty: row["min_qty"], taxable: row["taxable"], is_sub_item: row["is_sub_item"], is_available: row["is_available"], created_by: row["created_by"]) + else + MenuItem.create(id:row["id"], item_code: row["item_code"], name: row["name"], alt_name: row["alt_name"], image_path: row["image_path"], description: row["description"], information: row["information"], unit: row["unit"], type: row["type"], menu_category_id: row["menu_category_id"], item_attributes: JSON.parse(row["item_attributes"]), item_options: JSON.parse(row["item_options"]), account_id: row["account_id"], min_qty: row["min_qty"], taxable: row["taxable"], is_sub_item: row["is_sub_item"], is_available: row["is_available"], created_by: row["created_by"]) + end + elsif sheet_name == "Menu Item Instance" + # MenuItemInstance.create(id:row["id"], menu_item_id: row["menu_item_id"].to_i, item_instance_code: row["item_instance_code"], item_instance_name: row["item_instance_name"], item_attributes: row["item_attributes"], price: row["price"], is_on_promotion: row["is_on_promotion"], promotion_price: row["promotion_price"], is_available: row["is_available"], is_default: row["is_default"]) + item_instance = MenuItemInstance.find_by_id(row["id"]) + if item_instance + MenuItemInstance.create(menu_item_id: row["menu_item_id"].to_i, item_instance_code: row["item_instance_code"], item_instance_name: row["item_instance_name"], item_attributes: JSON.parse(row["item_attributes"]), price: row["price"], is_on_promotion: row["is_on_promotion"], promotion_price: row["promotion_price"], is_available: row["is_available"], is_default: row["is_default"]) + else + MenuItemInstance.create(id:row["id"], menu_item_id: row["menu_item_id"].to_i, item_instance_code: row["item_instance_code"], item_instance_name: row["item_instance_name"], item_attributes: JSON.parse(row["item_attributes"]), price: row["price"], is_on_promotion: row["is_on_promotion"], promotion_price: row["promotion_price"], is_available: row["is_available"], is_default: row["is_default"]) + end + elsif sheet_name == "Menu Instance Item Set" + # MenuInstanceItemSet.create(id:row["id"], item_set_id: row["item_set_id"], menu_item_instance_id: row["menu_item_instance_id"]) + menu_instance_set = MenuInstanceItemSet.find_by_id(row["id"]) + if menu_instance_set + MenuInstanceItemSet.create(item_set_id: row["item_set_id"], menu_item_instance_id: row["menu_item_instance_id"]) + else + MenuInstanceItemSet.create(id:row["id"], item_set_id: row["item_set_id"], menu_item_instance_id: row["menu_item_instance_id"]) + end + elsif sheet_name == "Menu Item Set" + # MenuItemSet.create(id:row["id"], item_set_id: row["item_set_id"], menu_item_id: row["menu_item_id"]) + menu_item_set = MenuItemSet.find_by_id(row["id"]) + if menu_item_set + MenuItemSet.create(item_set_id: row["item_set_id"], menu_item_id: row["menu_item_id"]) + else + MenuItemSet.create(id:row["id"], item_set_id: row["item_set_id"], menu_item_id: row["menu_item_id"]) + end + end + end end + end def self.open_spreadsheet(file) diff --git a/app/models/menu_category.rb b/app/models/menu_category.rb index 65477a37..666f251a 100755 --- a/app/models/menu_category.rb +++ b/app/models/menu_category.rb @@ -1,7 +1,7 @@ class MenuCategory < ApplicationRecord # before_create :generate_menu_category_code - belongs_to :menu , counter_cache: true + belongs_to :menu has_many :children, :class_name => "MenuCategory", foreign_key: "menu_category_id" belongs_to :parent, :class_name => "MenuCategory", foreign_key: "menu_category_id", optional: true has_many :menu_items diff --git a/app/views/settings/menus/index.xlsx.axlsx b/app/views/settings/menus/index.xlsx.axlsx index 977e9782..eccd6d7e 100644 --- a/app/views/settings/menus/index.xlsx.axlsx +++ b/app/views/settings/menus/index.xlsx.axlsx @@ -12,75 +12,74 @@ wb.styles do |s| :alignment => { :horizontal => :left, :vertical => :center , :header_text => true} - - wb.add_worksheet(name: "Menu") do |sheet| - sheet.add_row %w( name is_active valid_days valid_time_from valid_time_to created_by ), :style=>header_text - @settings_menus.each do |menu| - sheet.add_row [ menu.name, menu.is_active, menu.valid_days, menu.valid_time_from,menu.valid_time_to, menu.created_by], :style=>[date,wrap_text] - end - end - - wb.add_worksheet(name: "Menu Category") do |sheet| - sheet.add_row %w(menu_id code name alt_name order_by created_by menu_category_id is_available created_at updated_at), :style=>header_text - MenuCategory.all.each do |mc| - sheet.add_row [mc.menu_id, mc.code, mc.name, mc.alt_name, mc.order_by, mc.created_by, mc.menu_category_id, mc.is_available, mc.created_at, mc.updated_at], :style=>wrap_text - end - end - - wb.add_worksheet(name: "Menu Item") do |sheet| - sheet.add_row %w(item_code name alt_name image_path description information unit type menu_category_id item_attributes item_options account_id _qty taxable is_sub_item is_available created_by created_at updated_at), :style=>header_text - MenuItem.all.each do |mi| - sheet.add_row [mi.item_code, mi.name, mi.alt_name, mi.image_path, mi.description, mi.information, mi.unit, mi.type, mi.menu_category_id, mi.item_attributes, mi.item_options, mi.account_id, mi.min_qty, mi.taxable, mi.is_sub_item, mi.is_available, mi.created_by, mi.created_at, mi.updated_at], :style=>wrap_text - end - end - - wb.add_worksheet(name: "Menu Item Instance") do |sheet| - sheet.add_row %w(menu_item_id item_instance_code item_instance_name item_attributes price is_on_promotion promotion_price is_available is_default created_at updated_at), :style=>header_text - MenuItemInstance.all.each do |mii| - sheet.add_row [mii.menu_item_id, mii.item_instance_code, mii.item_instance_name, mii.item_attributes, mii.price, mii.is_on_promotion, mii.promotion_price, mii.is_available, mii.is_default, mii.created_at, mii.updated_at], :style=>wrap_text - end - end - - wb.add_worksheet(name: "Menu Options") do |sheet| - sheet.add_row %w(option_type name value created_at updated_at), :style=>header_text - MenuItemOption.all.each do |option| - sheet.add_row [option.option_type, option.name, option.value, option.created_at, option.updated_at], :style=>wrap_text - end - end - - wb.add_worksheet(name: "Item Attributes") do |sheet| - sheet.add_row %w(attribute_type name value created_at updated_at), :style=>header_text - MenuItemAttribute.all.each do |attr| - sheet.add_row [ attr.attribute_type,attr.name,attr.value,attr.created_at,attr.updated_at], :style=>wrap_text - end - end - - wb.add_worksheet(name: "Account") do |sheet| - sheet.add_row %w(title account_type discount point bonus rebate created_at updated_at), :style=>header_text + wb.add_worksheet(name: "Account") do |sheet| + sheet.add_row %w(id title account_type discount point bonus rebate), :style=>header_text Account.all.each do |acc| - sheet.add_row [acc.title,acc.account_type,acc.discount,acc.point,acc.bonus,acc.rebate,acc.created_at,acc.updated_at], :style=>wrap_text + sheet.add_row [acc.id, acc.title,acc.account_type,acc.discount,acc.point,acc.bonus,acc.rebate], :style=>wrap_text end end wb.add_worksheet(name: "Item Set") do |sheet| - sheet.add_row %w(name alt_name min_selectable_qty max_selectable_qty created_at updated_at), :style=>header_text + sheet.add_row %w(id name alt_name min_selectable_qty max_selectable_qty), :style=>header_text ItemSet.all.each do |set| - sheet.add_row [set.name, set.alt_name, set.min_selectable_qty, set.max_selectable_qty, set.created_at, set.updated_at], :style=>wrap_text + sheet.add_row [set.id,set.name, set.alt_name, set.min_selectable_qty, set.max_selectable_qty], :style=>wrap_text + end + end + + wb.add_worksheet(name: "Menu Item Options") do |sheet| + sheet.add_row %w(id option_type name value), :style=>header_text + MenuItemOption.all.each do |option| + sheet.add_row [option.id, option.option_type, option.name, option.value], :style=>wrap_text + end + end + + wb.add_worksheet(name: "Menu Item Attributes") do |sheet| + sheet.add_row %w(id attribute_type name value), :style=>header_text + MenuItemAttribute.all.each do |attr| + sheet.add_row [attr.id, attr.attribute_type,attr.name,attr.value], :style=>wrap_text + end + end + + wb.add_worksheet(name: "Menu") do |sheet| + sheet.add_row %w( id name is_active valid_days valid_time_from valid_time_to created_by ), :style=>header_text + @settings_menus.each do |menu| + sheet.add_row [ menu.id, menu.name, menu.is_active, menu.valid_days, menu.valid_time_from,menu.valid_time_to, menu.created_by], :style=>[wrap_text] + end + end + + wb.add_worksheet(name: "Menu Category") do |sheet| + sheet.add_row %w(id menu_id code name alt_name order_by created_by menu_category_id is_available), :style=>header_text + MenuCategory.all.each do |mc| + sheet.add_row [mc.id, mc.menu_id, mc.code, mc.name, mc.alt_name, mc.order_by, mc.created_by, mc.menu_category_id, mc.is_available], :style=>wrap_text + end + end + + wb.add_worksheet(name: "Menu Item") do |sheet| + sheet.add_row %w(id item_code name alt_name image_path description information unit type menu_category_id item_attributes item_options account_id min_qty taxable is_sub_item is_available created_by), :style=>header_text + MenuItem.all.each do |mi| + sheet.add_row [mi.id,mi.item_code, mi.name, mi.alt_name, mi.image_path, mi.description, mi.information, mi.unit, mi.type, mi.menu_category_id, mi.item_attributes, mi.item_options, mi.account_id, mi.min_qty, mi.taxable, mi.is_sub_item, mi.is_available, mi.created_by], :style=>wrap_text + end + end + + wb.add_worksheet(name: "Menu Item Instance") do |sheet| + sheet.add_row %w(id menu_item_id item_instance_code item_instance_name item_attributes price is_on_promotion promotion_price is_available is_default), :style=>header_text + MenuItemInstance.all.each do |mii| + sheet.add_row [mii.id, mii.menu_item_id, mii.item_instance_code, mii.item_instance_name, mii.item_attributes, mii.price, mii.is_on_promotion, mii.promotion_price, mii.is_available, mii.is_default], :style=>wrap_text end end wb.add_worksheet(name: "Menu Instance Item Set") do |sheet| - sheet.add_row %w(item_set_id menu_item_instance_id created_at updated_at), :style=>header_text + sheet.add_row %w(id item_set_id menu_item_instance_id), :style=>header_text MenuInstanceItemSet.all.each do |miis| - sheet.add_row [miis.item_set_id, miis.menu_item_instance_id, miis.created_at, miis.updated_at], :style=>wrap_text + sheet.add_row [miis.id ,miis.item_set_id, miis.menu_item_instance_id], :style=>wrap_text end end wb.add_worksheet(name: "Menu Item Set") do |sheet| - sheet.add_row %w(item_set_id menu_item_id created_at updated_at), :style=>header_text + sheet.add_row %w(id item_set_id menu_item_id), :style=>header_text MenuItemSet.all.each do |mis| - sheet.add_row [mis.item_set_id, mis.menu_item_id, mis.created_at, mis.updated_at], :style=>wrap_text + sheet.add_row [mis.id,mis.item_set_id, mis.menu_item_id], :style=>wrap_text end - end + end end diff --git a/lib/tasks/clear_data.rake b/lib/tasks/clear_data.rake index 43ba291e..9d476d67 100755 --- a/lib/tasks/clear_data.rake +++ b/lib/tasks/clear_data.rake @@ -20,4 +20,26 @@ namespace :clear do SeedGenerator.where("id > 1").update(:current => 0, :next => 1) puts "Clear Data Done." end + + desc "Clear Menu" + task :menu => :environment do + + + MenuItemOption.destroy_all + MenuItemAttribute.destroy_all + + MenuItemSet.destroy_all + + MenuInstanceItemSet.destroy_all + ItemSet.destroy_all + + MenuItemInstance.destroy_all + MenuItem.destroy_all + + MenuCategory.destroy_all + Menu.destroy_all + + Account.destroy_all + puts "Clear all Menu Done." + end end