order submission and order queue submission basic done
This commit is contained in:
2
Gemfile
2
Gemfile
@@ -43,6 +43,8 @@ gem 'jbuilder', '~> 2.5'
|
|||||||
# Use ActiveModel has_secure_password
|
# Use ActiveModel has_secure_password
|
||||||
gem 'bcrypt', '~> 3.1.7'
|
gem 'bcrypt', '~> 3.1.7'
|
||||||
|
|
||||||
|
gem 'sidekiq'
|
||||||
|
|
||||||
# Use Capistrano for deployment
|
# Use Capistrano for deployment
|
||||||
# gem 'capistrano-rails', group: :development
|
# gem 'capistrano-rails', group: :development
|
||||||
|
|
||||||
|
|||||||
10
Gemfile.lock
10
Gemfile.lock
@@ -55,6 +55,7 @@ GEM
|
|||||||
execjs
|
execjs
|
||||||
coffee-script-source (1.12.2)
|
coffee-script-source (1.12.2)
|
||||||
concurrent-ruby (1.0.5)
|
concurrent-ruby (1.0.5)
|
||||||
|
connection_pool (2.2.1)
|
||||||
cups (0.0.7)
|
cups (0.0.7)
|
||||||
database_cleaner (1.5.3)
|
database_cleaner (1.5.3)
|
||||||
debug_inspector (0.0.2)
|
debug_inspector (0.0.2)
|
||||||
@@ -108,6 +109,8 @@ GEM
|
|||||||
puma (3.8.2)
|
puma (3.8.2)
|
||||||
rack (2.0.1)
|
rack (2.0.1)
|
||||||
rack-cors (0.4.1)
|
rack-cors (0.4.1)
|
||||||
|
rack-protection (1.5.3)
|
||||||
|
rack
|
||||||
rack-test (0.6.3)
|
rack-test (0.6.3)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rails (5.0.2)
|
rails (5.0.2)
|
||||||
@@ -137,6 +140,7 @@ GEM
|
|||||||
rb-fsevent (0.9.8)
|
rb-fsevent (0.9.8)
|
||||||
rb-inotify (0.9.8)
|
rb-inotify (0.9.8)
|
||||||
ffi (>= 0.5.0)
|
ffi (>= 0.5.0)
|
||||||
|
redis (3.3.3)
|
||||||
rspec-core (3.5.4)
|
rspec-core (3.5.4)
|
||||||
rspec-support (~> 3.5.0)
|
rspec-support (~> 3.5.0)
|
||||||
rspec-expectations (3.5.0)
|
rspec-expectations (3.5.0)
|
||||||
@@ -166,6 +170,11 @@ GEM
|
|||||||
activesupport (>= 3.2.1)
|
activesupport (>= 3.2.1)
|
||||||
shoulda-matchers (3.1.1)
|
shoulda-matchers (3.1.1)
|
||||||
activesupport (>= 4.0.0)
|
activesupport (>= 4.0.0)
|
||||||
|
sidekiq (4.2.10)
|
||||||
|
concurrent-ruby (~> 1.0)
|
||||||
|
connection_pool (~> 2.2, >= 2.2.0)
|
||||||
|
rack-protection (>= 1.5.0)
|
||||||
|
redis (~> 3.2, >= 3.2.1)
|
||||||
simple_form (3.4.0)
|
simple_form (3.4.0)
|
||||||
actionpack (> 4, < 5.1)
|
actionpack (> 4, < 5.1)
|
||||||
activemodel (> 4, < 5.1)
|
activemodel (> 4, < 5.1)
|
||||||
@@ -231,6 +240,7 @@ DEPENDENCIES
|
|||||||
sass-rails (~> 5.0)
|
sass-rails (~> 5.0)
|
||||||
schema_to_scaffold
|
schema_to_scaffold
|
||||||
shoulda-matchers (~> 3.1)
|
shoulda-matchers (~> 3.1)
|
||||||
|
sidekiq
|
||||||
simple_form
|
simple_form
|
||||||
spreadsheet
|
spreadsheet
|
||||||
spring
|
spring
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class Api::Restaurant::OrdersController < ActionController::API
|
class Api::OrdersController < ActionController::API
|
||||||
#before :authenticate_token
|
#before :authenticate_token
|
||||||
|
|
||||||
#Description
|
#Description
|
||||||
@@ -19,13 +19,15 @@ class Api::Restaurant::OrdersController < ActionController::API
|
|||||||
# Output Params
|
# Output Params
|
||||||
# Status [Success | Error | System Error] , order_id, error_message (*)
|
# Status [Success | Error | System Error] , order_id, error_message (*)
|
||||||
def create
|
def create
|
||||||
|
Rails.logger.debug "Order Source - " + params[:order_source]
|
||||||
|
Rails.logger.debug "Table ID - " + params[:table_id]
|
||||||
|
|
||||||
# begin
|
# begin
|
||||||
@order = Order.new
|
@order = Order.new
|
||||||
@order.source = params[:order_source]
|
@order.source = params[:order_source]
|
||||||
@order.order_type = params[:order_type]
|
@order.order_type = params[:order_type]
|
||||||
@order.customer_id = params[:customer_id]
|
@order.customer_id = params[:customer_id]
|
||||||
json_hash = params[:order_items]
|
@order.items = params[:order_items]
|
||||||
@order.items = json_hash
|
|
||||||
@order.guest = params[:guest_info]
|
@order.guest = params[:guest_info]
|
||||||
@order.table_id = params[:table_id]
|
@order.table_id = params[:table_id]
|
||||||
@order.new_booking = true
|
@order.new_booking = true
|
||||||
@@ -38,7 +40,8 @@ class Api::Restaurant::OrdersController < ActionController::API
|
|||||||
@order.booking_id = params[:booking_id]
|
@order.booking_id = params[:booking_id]
|
||||||
end
|
end
|
||||||
|
|
||||||
@status = @order.generate
|
@status = @order.generate
|
||||||
|
|
||||||
# rescue Exception => error
|
# rescue Exception => error
|
||||||
# @status = false
|
# @status = false
|
||||||
# @error_messages = "Exception has occurs on System"
|
# @error_messages = "Exception has occurs on System"
|
||||||
@@ -59,5 +62,9 @@ class Api::Restaurant::OrdersController < ActionController::API
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def order_params
|
||||||
|
params.permits(:order_source, :booking_id,:order_type,
|
||||||
|
:customer_id,:guest_info, :table_id, :room_id,
|
||||||
|
order_items: [:item_code, :qty, :option, :remark])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
class OrderQueueProcessorJob < ApplicationJob
|
class OrderQueueProcessorJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(:order_id)
|
def perform(order_id)
|
||||||
# Do something later
|
# Do something later
|
||||||
#Order ID
|
#Order ID
|
||||||
order = Order.find(order_id)
|
order = Order.find(order_id)
|
||||||
|
|
||||||
#Loop through the order stations and process the items
|
#Loop through the order stations and process the items
|
||||||
#Execute orders and send to order stations
|
#Execute orders and send to order stations
|
||||||
if order
|
if order
|
||||||
oqs = OrderQueueStation.new
|
oqs = OrderQueueStation.new
|
||||||
oqs.process_order(order)
|
oqs.process_order(order)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
class AssignedOrderItem < ApplicationRecord
|
class AssignedOrderItem < ApplicationRecord
|
||||||
|
belongs_to :order
|
||||||
belongs_to :order_queue_station
|
belongs_to :order_queue_station
|
||||||
|
|
||||||
def self.assigned_order_item (order, item_code, order_queue_station )
|
def self.assigned_order_item (order, item_code, order_queue_station )
|
||||||
|
|||||||
@@ -6,4 +6,24 @@ class MenuItem < ApplicationRecord
|
|||||||
|
|
||||||
default_scope { order('item_code asc') }
|
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
|
end
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
class Order < ApplicationRecord
|
class Order < ApplicationRecord
|
||||||
before_create :set_order_date
|
before_create :set_order_date
|
||||||
before_save :update_products_and_quantity_count
|
|
||||||
|
|
||||||
belongs_to :customer
|
belongs_to :customer
|
||||||
has_many :order_items, autosave: true , inverse_of: :order
|
has_many :order_items, autosave: true , inverse_of: :order
|
||||||
@@ -37,13 +36,10 @@ class Order < ApplicationRecord
|
|||||||
|
|
||||||
self.adding_line_items
|
self.adding_line_items
|
||||||
#Add Order Table and Room relation afrer order creation
|
#Add Order Table and Room relation afrer order creation
|
||||||
if booking.type = "TableBooking"
|
BookingOrder.create({:booking_id => booking.id, :order => self})
|
||||||
#add to table_booking_order
|
|
||||||
tbo = TableBookingOrder.create({:table_booking_id => booking.id, :order => self})
|
#Send order to queue one it done!
|
||||||
elsif booking.type = "RoomBooking"
|
process_order_queue
|
||||||
#add to room_booking_order
|
|
||||||
rbo = RoomBookingOrder.create({:room_booking_id => booking.id, :order => self})
|
|
||||||
end
|
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
||||||
@@ -63,8 +59,25 @@ class Order < ApplicationRecord
|
|||||||
if self.items
|
if self.items
|
||||||
#loop to add all items to order
|
#loop to add all items to order
|
||||||
self.items.each do |item|
|
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
|
end
|
||||||
|
|
||||||
|
self.item_count = self.order_items.count
|
||||||
|
self.save!
|
||||||
|
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
self.errors.add(:order_items, :blank, message: "Order items cannot be blank")
|
self.errors.add(:order_items, :blank, message: "Order items cannot be blank")
|
||||||
@@ -73,6 +86,7 @@ class Order < ApplicationRecord
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def default_values
|
def default_values
|
||||||
self.customer = Customer.find(1) if self.customer_id.nil?
|
self.customer = Customer.find(1) if self.customer_id.nil?
|
||||||
self.source = "emenu" if self.source.nil?
|
self.source = "emenu" if self.source.nil?
|
||||||
@@ -94,7 +108,7 @@ class Order < ApplicationRecord
|
|||||||
item_count = 0
|
item_count = 0
|
||||||
quantity_count = 0
|
quantity_count = 0
|
||||||
# Count number of different items
|
# Count number of different items
|
||||||
self.item_count = item_count
|
self.item_count = self.order_items.item_count
|
||||||
self.quantity_count = quantity_count
|
self.quantity_count = quantity_count
|
||||||
# Counter number of quantity
|
# Counter number of quantity
|
||||||
end
|
end
|
||||||
@@ -102,6 +116,6 @@ class Order < ApplicationRecord
|
|||||||
#Process order items and send to order queue
|
#Process order items and send to order queue
|
||||||
def process_order_queue
|
def process_order_queue
|
||||||
#Send to background job for processing
|
#Send to background job for processing
|
||||||
OrderQueueProcessorJob.perform_later(:order_id => self.id)
|
OrderQueueProcessorJob.perform_later(self.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class OrderItem < ApplicationRecord
|
|||||||
#Validation
|
#Validation
|
||||||
validates_presence_of :item_code, :item_name, :qty
|
validates_presence_of :item_code, :item_name, :qty
|
||||||
validates :qty, numericality: { :greater_than => 0 }
|
validates :qty, numericality: { :greater_than => 0 }
|
||||||
validates_associated :orders
|
validates_associated :order
|
||||||
|
|
||||||
#This Method - handle how items is added into order
|
#This Method - handle how items is added into order
|
||||||
# order_item : {
|
# order_item : {
|
||||||
@@ -15,17 +15,19 @@ class OrderItem < ApplicationRecord
|
|||||||
# option_values : [],
|
# option_values : [],
|
||||||
# sub_order_items : [],
|
# 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|
|
orderitem = OrderItem.create do |oitem|
|
||||||
oitem.item_code = item["item_code"]
|
|
||||||
oitem.order_id = order_id
|
oitem.order_id = order_id
|
||||||
oitem.item_name = item["name"]
|
oitem.item_code = item_code
|
||||||
oitem.qty = item["qty"]
|
oitem.item_name = menu_name
|
||||||
oitem.option = item["option"]
|
oitem.qty = qty
|
||||||
oitem.set_order_items = item["sub_order_items"]
|
oitem.options = options
|
||||||
oitem.item_order_by = item_order_by
|
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
|
end
|
||||||
logger.debug orderitem.to_yml
|
|
||||||
|
#logger.debug orderitem.to_yml
|
||||||
orderitem.save!
|
orderitem.save!
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ if @status == true
|
|||||||
json.status :success
|
json.status :success
|
||||||
json.id @order.id
|
json.id @order.id
|
||||||
json.order_items do
|
json.order_items do
|
||||||
json.array! @order.order_items, :item_code, :item_name, :qty, :options, :variants, :remarks
|
json.array! @order.order_items, :item_code, :item_name, :qty, :options, :remark
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
json.status :error
|
json.status :error
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ module SXRestaurants
|
|||||||
# Application configuration should go into files in config/initializers
|
# Application configuration should go into files in config/initializers
|
||||||
# -- all .rb files in that directory are automatically loaded.
|
# -- all .rb files in that directory are automatically loaded.
|
||||||
config.active_record.time_zone_aware_types = [:datetime, :time]
|
config.active_record.time_zone_aware_types = [:datetime, :time]
|
||||||
|
config.active_job.queue_adapter = :sidekiq
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
|
require 'sidekiq/web'
|
||||||
|
|
||||||
Rails.application.routes.draw do
|
Rails.application.routes.draw do
|
||||||
root 'home#index'
|
root 'home#index'
|
||||||
|
mount Sidekiq::Web => '/kiq'
|
||||||
|
|
||||||
#--------- SmartSales Installation ------------#
|
#--------- SmartSales Installation ------------#
|
||||||
get 'install' => 'install#index'
|
get 'install' => 'install#index'
|
||||||
@@ -19,12 +22,10 @@ Rails.application.routes.draw do
|
|||||||
namespace :restaurant do
|
namespace :restaurant do
|
||||||
get 'zones' => "zones#index"
|
get 'zones' => "zones#index"
|
||||||
resources :menu, only:[:index, :show]
|
resources :menu, only:[:index, :show]
|
||||||
|
|
||||||
resources :menu_categories, only: [:index]
|
resources :menu_categories, only: [:index]
|
||||||
resources :menu_items, only: [:index, :show]
|
resources :menu_items, only: [:index, :show]
|
||||||
resources :menu_item_attributes, only: [:index]
|
resources :menu_item_attributes, only: [:index]
|
||||||
resources :menu_item_options, only: [:index]
|
resources :menu_item_options, only: [:index]
|
||||||
|
|
||||||
resources :menu_sold_out, only: [:index]
|
resources :menu_sold_out, only: [:index]
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -34,7 +35,7 @@ Rails.application.routes.draw do
|
|||||||
|
|
||||||
#Order Controller
|
#Order Controller
|
||||||
resources :orders, only: [:create, :show, :update] do
|
resources :orders, only: [:create, :show, :update] do
|
||||||
post "bill/:orer_id" => "bill#create"
|
post "bill" => "bill#create"
|
||||||
end
|
end
|
||||||
#Current active bookings
|
#Current active bookings
|
||||||
resources :bookings, only: [:index, :create, :update]
|
resources :bookings, only: [:index, :create, :update]
|
||||||
|
|||||||
Reference in New Issue
Block a user