update for order process

Add activereocrd-import gem for bulk insert
This commit is contained in:
Thein Lin Kyaw
2019-12-09 10:33:10 +06:30
parent 67e7658e56
commit 3a99e1bb09
22 changed files with 441 additions and 959 deletions

View File

@@ -26,16 +26,11 @@ class Order < ApplicationRecord
def generate
booking = nil
if self.new_booking
if self.table_id.to_i > 0
table_id = self.table_id
else
table_id = nil
end
#add extra time
if self.is_extra_time && self.extra_time
booking = Booking.create({:dining_facility_id => table_id,:type => "TableBooking",
:checkin_at => Time.now.utc,:checkout_at => Time.now.utc + self.extra_time.to_i,
:checkin_by => self.employee_name,
:checkin_at => Time.now.utc, :checkout_at => Time.now.utc + self.extra_time.to_i,
:checkin_by => self.employee_name,
:booking_status => "assign" })
else
booking = Booking.create({:dining_facility_id => table_id,:type => "TableBooking",
@@ -50,7 +45,6 @@ class Order < ApplicationRecord
# table.status = "occupied"
# table.save
end
else
booking = Booking.find(self.booking_id)
#add extra time
@@ -70,7 +64,7 @@ class Order < ApplicationRecord
self.adding_line_items
#Add Order Table and Room relation afrer order creation
BookingOrder.create({:booking_id => booking.booking_id, :order => self})
booking.orders << self
#Send order to queue one it done!
# if self.source != "quick_service"
@@ -107,7 +101,7 @@ class Order < ApplicationRecord
self.adding_line_items
#Add Order Table and Room relation afrer order creation
BookingOrder.create({:booking_id => booking.booking_id, :order => self})
booking.orders << self
#Send order to queue one it done!
# if self.source != "quick_service"
@@ -118,7 +112,6 @@ class Order < ApplicationRecord
send_order_broadcast(booking)
return true, booking
end
return false
@@ -133,49 +126,49 @@ class Order < ApplicationRecord
def adding_line_items
if self.items
#re-order to
ordered_list = re_order_items(self.items)
items = re_order_items(self.items)
#loop to add all items to order
ordered_list.each do |item|
item_instance_codes = items.map { |i| i[:item_instance_code] }
menu_items = MenuItem.search_by_item_code(item_instance_codes)
menu_items += Product.search_by_product_code(item_instance_codes) if menu_items.length < item_instance_codes.length
menu_item = MenuItem.search_by_item_code(item[:item_instance_code])
# For Product while item code not in menu item
if menu_item.nil?
menu_item = Product.search_by_product_code(item[:item_instance_code])
end
#if (!menu_item.nil?)
# Rails.logger.debug menu_item
set_order_items = Array.new
##If menu Item set item - must add child items to order as well, where price is only take from menu_item
if (menu_item[:type] == "SetMenuItem")
if (item.include? 'sub_items') || (item.include? :sub_items)
item[:sub_items].each do |si|
# Retrive instance's Price
set_item = MenuItem.search_by_item_code(si[:item_instance_code])
set_order_items.push({"item_instance_code"=>si[:item_instance_code], "item_instance_name"=>set_item[:name], "quantity"=>si[:quantity], "price"=>set_item[:price], "options"=>si[:options]})
end
end
set_order_items = set_order_items.to_json
else
set_order_items = nil
new_order_items = []
items.each do |order_item|
menu_item = menu_items.find { |i| i[:item_instance_code].downcase == order_item[:item_instance_code].downcase }
sub_order_items = []
if order_item[:sub_items].length > 0
sub_menu_items = MenuItem.search_by_item_code(order_item[:sub_items].map { |i| i[:item_instance_code] })
order_item[:sub_items].each do |sub_order_item|
sub_menu_item = sub_menu_items.find { |i| i[:item_instance_code] == sub_order_item[:item_instance_code] }
sub_order_items << { item_instance_code: sub_order_item[:item_instance_code], item_instance_name: sub_menu_item[:name], quantity: sub_order_item[:quantity], price: sub_menu_item[:price], options: sub_order_item[:options] }
end
end
sub_order_items = sub_order_items.to_json
new_order_items << OrderItem.new({
order_id: id,
item_code: menu_item[:item_code],
item_instance_code: order_item[:item_instance_code],
item_name: menu_item[:name],
alt_name: menu_item[:alt_name],
account_id: menu_item[:account_id],
qty: order_item[:quantity],
price: menu_item[:price],
options: order_item[:options],
set_menu_items: sub_order_items,
item_order_by: employee_name,
taxable: menu_item[:taxable]
})
end
# not insert with price 0
# puts item[:price]
# puts item
# if(item[:price] != 0 )
# OrderItem.processs_item(menu_item[:item_code], menu_item[:name], menu_item[:account_id],
# item[:quantity],menu_item[:price], item[:options], set_order_items, self.id,
# self.employee_name)
# end
ids = OrderItem.generate_ids(new_order_items.length)
new_order_items.each_with_index do |order_item, index|
order_item.order_items_id = ids[index]
end
OrderItem.processs_item(menu_item[:item_code], item[:item_instance_code], menu_item[:name], menu_item[:alt_name], menu_item[:account_id],
item[:quantity],menu_item[:price], item[:options], set_order_items, self.id,
self.employee_name, menu_item[:taxable])
OrderItem.import new_order_items, validate: false
#end
new_order_items.each do |order_item|
order_item.run_callbacks(:save) { true }
end
self.item_count = self.order_items.count
@@ -186,7 +179,6 @@ class Order < ApplicationRecord
self.errors.add(:order_items, :blank, message: "Order items cannot be blank")
return false
end
end
def update_items_status_to_billed(items)
@@ -213,66 +205,8 @@ class Order < ApplicationRecord
end
protected
def re_order_items(form_items) #reorder inputs items as parents and child
parent_id = Array.new
parents = Array.new
parents_and_children_items = Array.new
new_items_list = Array.new
form_items.each do |parent|
if !parent[:parent_order_item_id].nil?
if (!parent_id.include?(parent[:parent_order_item_id]))
parent_id.push(parent[:parent_order_item_id])
end
end
end
Rails.logger.debug "Parent Id count -> " + parent_id.count.to_s
parent_id.each do |pid|
form_items.each do |item|
Rails.logger.debug "Adding - Parents -> " + pid.to_s + " - " + item[:order_item_id].to_s
if (pid == item[:order_item_id])
parents.push(item)
end
end
end
Rails.logger.debug "Parents count -> " + parents.count.to_s
parents.each do |parent|
children = Array.new
form_items.each do |item|
if (parent[:order_item_id] == item[:parent_order_item_id] )
children.push(item)
#Items to remove for new list
parents_and_children_items.push(item)
end
end
parent[:sub_items] = children
end
Rails.logger.debug "Parent/children Items to remove -> " + parents_and_children_items.count.to_s
#Remove process items
#c = a.reject{ |e| b.include? e }
new_items_list = form_items - parents_and_children_items
Rails.logger.debug "New list count -> " + new_items_list.count.to_s
#Add parent to the list
#new_items_list = new_items_list + parents
Rails.logger.debug "Re-Order List (Parent)-"
Rails.logger.debug parents
Rails.logger.debug "Re-Order List -"
Rails.logger.debug new_items_list
return new_items_list
def re_order_items(items) #reorder inputs items as parents and child
new_items = items.select { |i| i[:parent_order_item_id].blank? }.map { |x| x[:sub_items] = items.select { |y| x[:order_item_id] == y[:parent_order_item_id] }; x }
end