order submission and order queue submission basic done

This commit is contained in:
Min Zeya Phyo
2017-04-16 16:52:04 +06:30
parent 63c5c97f24
commit 30774b4efd
11 changed files with 89 additions and 31 deletions

View File

@@ -1,4 +1,5 @@
class AssignedOrderItem < ApplicationRecord
belongs_to :order
belongs_to :order_queue_station
def self.assigned_order_item (order, item_code, order_queue_station )

View File

@@ -6,4 +6,24 @@ class MenuItem < ApplicationRecord
default_scope { order('item_code asc') }
def self.search_by_item_code(item_code)
menu_item_hash = Hash.new
mt_instance = MenuItemInstance.find_by_item_instance_code(item_code)
if (!mt_instance.nil?)
menu_item = MenuItem.find(mt_instance.menu_item_id)
menu_item_hash[:type] = menu_item.type
menu_item_hash[:item_code] = menu_item.item_code
menu_item_hash[:item_instance_code] = mt_instance.item_instance_code
menu_item_hash[:name] = menu_item.name.to_s + " - " + mt_instance.item_instance_name.to_s
menu_item_hash[:alt_name] = menu_item.alt_name.to_s + " - " + mt_instance.item_instance_name.to_s
menu_item_hash[:price] = mt_instance.price
menu_item_hash[:promotion_price] = mt_instance.promotion_price
menu_item_hash[:is_on_promotion] = mt_instance.is_on_promotion
menu_item_hash[:is_available] = mt_instance.is_available
return menu_item_hash
end
return nil
end
end

View File

@@ -1,6 +1,5 @@
class Order < ApplicationRecord
before_create :set_order_date
before_save :update_products_and_quantity_count
belongs_to :customer
has_many :order_items, autosave: true , inverse_of: :order
@@ -37,13 +36,10 @@ class Order < ApplicationRecord
self.adding_line_items
#Add Order Table and Room relation afrer order creation
if booking.type = "TableBooking"
#add to table_booking_order
tbo = TableBookingOrder.create({:table_booking_id => booking.id, :order => self})
elsif booking.type = "RoomBooking"
#add to room_booking_order
rbo = RoomBookingOrder.create({:room_booking_id => booking.id, :order => self})
end
BookingOrder.create({:booking_id => booking.id, :order => self})
#Send order to queue one it done!
process_order_queue
return true
@@ -63,8 +59,25 @@ class Order < ApplicationRecord
if self.items
#loop to add all items to order
self.items.each do |item|
self.order_items.add( OrderItem.processs_item(item, self.id, self.employee_name) )
menu_item = MenuItem.search_by_item_code(item[:item_code])
set_order_items = nil
##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")
set_order_items
end
if (menu_item)
OrderItem.processs_item(menu_item[:item_instance_code], menu_item[:name],
item[:qty], item[:options], set_order_items, self.id,
self.employee_name)
end
end
self.item_count = self.order_items.count
self.save!
return true
else
self.errors.add(:order_items, :blank, message: "Order items cannot be blank")
@@ -73,6 +86,7 @@ class Order < ApplicationRecord
end
def default_values
self.customer = Customer.find(1) if self.customer_id.nil?
self.source = "emenu" if self.source.nil?
@@ -94,7 +108,7 @@ class Order < ApplicationRecord
item_count = 0
quantity_count = 0
# Count number of different items
self.item_count = item_count
self.item_count = self.order_items.item_count
self.quantity_count = quantity_count
# Counter number of quantity
end
@@ -102,6 +116,6 @@ class Order < ApplicationRecord
#Process order items and send to order queue
def process_order_queue
#Send to background job for processing
OrderQueueProcessorJob.perform_later(:order_id => self.id)
OrderQueueProcessorJob.perform_later(self.id)
end
end

View File

@@ -5,7 +5,7 @@ class OrderItem < ApplicationRecord
#Validation
validates_presence_of :item_code, :item_name, :qty
validates :qty, numericality: { :greater_than => 0 }
validates_associated :orders
validates_associated :order
#This Method - handle how items is added into order
# order_item : {
@@ -15,17 +15,19 @@ class OrderItem < ApplicationRecord
# option_values : [],
# sub_order_items : [],
# }
def self.processs_item (item, orde_id, item_order_by)
def self.processs_item (item_code, menu_name, qty, options, set_menu_items, order_id, item_order_by)
orderitem = OrderItem.create do |oitem|
oitem.item_code = item["item_code"]
oitem.order_id = order_id
oitem.item_name = item["name"]
oitem.qty = item["qty"]
oitem.option = item["option"]
oitem.set_order_items = item["sub_order_items"]
oitem.item_order_by = item_order_by
oitem.item_code = item_code
oitem.item_name = menu_name
oitem.qty = qty
oitem.options = options
oitem.set_menu_items = set_menu_items
oitem.item_order_by = item_order_by #person who order this. * If emenu - it will be login user on the app
end
logger.debug orderitem.to_yml
#logger.debug orderitem.to_yml
orderitem.save!