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

@@ -44,6 +44,9 @@ gem 'rack-cors'
# Multi-tenancy for shops
gem 'acts_as_tenant'
# Activerecord-Import is a library for bulk inserting data using ActiveRecord.
gem 'activerecord-import'
# image upload
gem 'carrierwave', '~> 1.0'
gem 'mini_magick'

View File

@@ -41,6 +41,8 @@ GEM
activemodel (= 5.1.7)
activesupport (= 5.1.7)
arel (~> 8.0)
activerecord-import (1.0.3)
activerecord (>= 3.2)
activesupport (5.1.7)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
@@ -320,6 +322,7 @@ PLATFORMS
ruby
DEPENDENCIES
activerecord-import
acts_as_tenant
aescrypt
axlsx (= 2.0.1)

View File

@@ -288,6 +288,10 @@ For Number Formats
=> settings/lookups => { lookup_type: number_format, name: strip_insignificant_zeros,
value: {true: => ['1', 't', 'true', 'on', 'y', 'yes'], false: => ['0', 'f', 'false', 'off', 'n', 'no', ...] }
For Booking checkin time limit
settings/lookups =>
{ lookup_type: checkin_time_limit, name: CheckinTimeLimit, value: total hours before checkout (e.g., '48')) }
/* Customer Types in lookups */
1) settings/lookups => { type:customer_type, name: Dinein, value:Dinein }
2) settings/lookups => { type:customer_type, name: Takeaway, value: Takeaway }

View File

@@ -97,7 +97,7 @@ class Api::CheckInProcessController < Api::ApiController
render :json => { :status => false, :error_message => "Operation failed!" }
end
else
booking = dining_facility.get_current_checkout_booking
booking = dining_facility.current_checkout_booking
if booking.nil?
lookup_checkout_time = Lookup.collection_of("checkout_time")

View File

@@ -57,14 +57,6 @@ class Oqs::HomeController < BaseOqsController
end
end
# booking_id = dining.get_new_booking
# BookingOrder.where("booking_id='#{ booking_id }'").find_each do |bo|
# order=Order.find(bo.order_id);
# order.order_items.each do |oi|
# items.push(oi)
# end
# end
render :json => items.to_json
end

View File

@@ -38,12 +38,13 @@ class Origami::AddordersController < BaseOrigamiController
@booking = @table.get_booking
if @booking
@booking_id = @booking.booking_id
@obj_order = @booking.orders.first
if @obj_order = @booking.orders.first
@customer = @obj_order.customer
@date = @obj_order.created_at
@order_items = @booking.order_items
end
end
end
def get_menu_category ()
if (params[:id])
@@ -116,7 +117,7 @@ class Origami::AddordersController < BaseOrigamiController
extra_time = Time.at(time)
end
end
if i["parent_order_item_id"];
if i["parent_order_item_id"]
items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"parent_order_item_id": i["parent_order_item_id"],"options": JSON.parse(i["options"])}
else
items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"options": JSON.parse(i["options"])}
@@ -160,14 +161,11 @@ class Origami::AddordersController < BaseOrigamiController
type = 'order'
from = getCloudDomain #get sub domain in cloud mode
ActionCable.server.broadcast "order_channel", table: table,type:type,from:from
end
if params[:order_source] != "quick_service" && params[:order_source] != "food_court"
process_order_queue(@order.order_id,@order.table_id,@order.source)
end
end
# Order.send_customer_view(@booking)
if current_user.role != "waiter" && params[:create_type] == "create_pay"
@@ -232,52 +230,23 @@ class Origami::AddordersController < BaseOrigamiController
end
def process_order_queue(order_id,table_id,order_source)
print_status = nil
cup_status = nil
#Send to background job for processing
order = Order.find(order_id)
sidekiq = Lookup.find_by_lookup_type("sidekiq")
if ENV["SERVER_MODE"] != 'cloud'
cup_status = `#{"sudo service cups status"}`
print_status = check_cup_status(cup_status)
end
if print_status
if !sidekiq.nil?
OrderQueueProcessorJob.perform_later(order_id, table_id)
else
if order
oqs = OrderQueueStation.new
oqs.process_order(order, table_id, order_source)
end
# assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id)
# ActionCable.server.broadcast "order_queue_station_channel",order: assign_order
end
else
if ENV["SERVER_MODE"] != 'cloud'
if !check_cup_status(cup_status)
cup_start = `#{"sudo service cups start"}`
cup_status = `#{"sudo service cups status"}`
print_status = check_cup_status(cup_status)
end
if print_status
if !sidekiq.nil?
OrderQueueProcessorJob.perform_later(order_id, table_id)
else
if order
oqs = OrderQueueStation.new
oqs.process_order(order, table_id, order_source)
end
# assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id)
# ActionCable.server.broadcast "order_queue_station_channel",order: assign_order
end
else
if ENV["SERVER_MODE"] != 'cloud'
from = ""
if !check_cup_status(cup_status)
from = ''
msg = 'Print Error ! Please contact to service'
ActionCable.server.broadcast "call_waiter_channel", table: msg, time:'print_error', from: from
end
end
end
if !sidekiq.nil?
OrderQueueProcessorJob.perform_later(order_id, table_id)
else
@@ -285,14 +254,11 @@ class Origami::AddordersController < BaseOrigamiController
oqs = OrderQueueStation.new
oqs.process_order(order, table_id, order_source)
end
from = getCloudDomain #get sub domain in cloud mode
assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id)
ActionCable.server.broadcast "order_queue_station_channel", order: assign_order, from: from
end
end
end
end
def check_cup_status(status)
if status.include? "Active: active (running)" || "Active: active (exited)" #"Cup Server is already running"

View File

@@ -4,9 +4,8 @@ class Origami::HomeController < BaseOrigamiController
def index
@webview = check_mobile
@tables = Table.unscope(:order).includes(:zone).all.active.order('status desc')
@rooms = Room.unscope(:order).includes(:zone).all.active.order('status desc')
@tables = Table.unscope(:order).includes(:zone, :current_checkin_booking, :current_checkout_booking, :current_reserved_booking).all.active.order('status desc')
@rooms = Room.unscope(:order).includes(:zone, :current_checkin_booking, :current_checkout_booking, :current_reserved_booking).all.active.order('status desc')
@complete = Sale.completed_sale("cashier")
@orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc')
@@ -22,8 +21,8 @@ class Origami::HomeController < BaseOrigamiController
@print_settings = PrintSetting.get_precision_delimiter()
@webview = check_mobile
@tables = Table.unscope(:order).includes(:zone).all.active.order('status desc')
@rooms = Room.unscope(:order).includes(:zone).all.active.order('status desc')
@tables = Table.unscope(:order).includes(:zone, :current_checkin_booking, :current_checkout_booking, :current_reserved_booking).all.active.order('status desc')
@rooms = Room.unscope(:order).includes(:zone, :current_checkin_booking, :current_checkout_booking, :current_reserved_booking).all.active.order('status desc')
@complete = Sale.completed_sale("cashier")
@orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc')
@customers = Customer.pluck("customer_id, name")
@@ -36,73 +35,39 @@ class Origami::HomeController < BaseOrigamiController
@shop = shop_detail
@membership = MembershipSetting::MembershipSetting
@payment_methods = PaymentMethodSetting.all
@dining_booking = @dining.bookings.active.where("DATE_FORMAT(created_at,'%Y-%m-%d') = '#{DateTime.now.strftime('%Y-%m-%d')}' OR DATE_FORMAT(created_at,'%Y-%m-%d') = '#{Date.today.prev_day}' ")
#@dining_booking = @dining.bookings.active.where("created_at between '#{DateTime.now.utc - 12.hours}' and '#{DateTime.now.utc}'")
@dining_booking = @dining.current_bookings
@order_items = Array.new
@dining_booking.each do |booking|
if booking.sale_id.nil? && booking.booking_status != 'moved'
@order_items = Array.new
# @assigned_order_items = Array.new
if booking.booking_orders.empty?
if @obj_sale || @booking.blank?
@booking = booking
else
booking.booking_orders.each do |booking_order|
order = Order.find(booking_order.order_id)
if (order.status == "new")
@obj_order = order
@customer = order.customer
@date = order.created_at
@booking= booking
order.order_items.each do |item|
@order_items.push(item)
# assigned_order_items = AssignedOrderItem.find_by_item_code_and_instance_code_and_order_id(item.item_code,item.item_instance_code,item.order_id)
# if !assigned_order_items.nil?
# @assigned_order_items.push({item.order_items_id => assigned_order_items.assigned_order_item_id})
# end
end
@account_arr = Array.new
if @customer.tax_profiles
accounts = @customer.tax_profiles
@account_arr =[]
accounts.each do |acc|
account = TaxProfile.find_by_id(acc)
if !account.nil?
@account_arr.push(account)
end
end
end
end
end
end
@status_order = 'order'
else
sale = Sale.find(booking.sale_id)
if sale.sale_status != "completed" && sale.sale_status != 'void' && sale.sale_status != 'spoile' && sale.sale_status != 'waste'
@sale_array.push(sale)
if @status_order == 'order'
@status_order = 'sale'
end
@booking= booking
@date = sale.created_at
if booking.sale_id
@obj_sale = booking.sale
@sale_array.push(@obj_sale)
@sale_taxes = @obj_sale.sale_taxes
@status_sale = 'sale'
@obj_sale = sale
@customer = sale.customer
accounts = @customer.tax_profiles
@account_arr =[]
accounts.each do |acc|
account = TaxProfile.find_by_id(acc)
if !account.nil?
@account_arr.push(account)
else
@order_items += booking.order_items
@obj_order = booking.orders.first
end
if @obj_sale || @customer.blank?
if obj = @obj_sale || @obj_order
@customer = obj.customer
@date = obj.created_at
end
end
if @obj_sale
@status_order = 'sale'
else
@status_order = 'order'
end
@sale_taxes = []
sale_taxes = SaleTax.where("sale_id = ?", sale.sale_id)
if !sale_taxes.empty?
sale_taxes.each do |sale_tax|
@sale_taxes.push(sale_tax)
end
end
if (@obj_sale || @account_arr.blank?) && @customer
@account_arr = TaxProfile.find_by(id: @customer.tax_profiles)
end
end

View File

@@ -31,33 +31,6 @@ class Origami::PaymentsController < BaseOrigamiController
end
end
# if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf
# Print for First Bill to Customer
unique_code = "ReceiptBillPdf"
print_settings = PrintSetting.all
if !print_settings.nil?
print_settings.each do |setting|
if setting.unique_code == 'ReceiptBillPdf'
unique_code = "ReceiptBillPdf"
elsif setting.unique_code == 'ReceiptBillStarPdf'
unique_code = "ReceiptBillStarPdf"
end
end
end
if !receipt_bill_a5_pdf.empty?
receipt_bill_a5_pdf.each do |receipt_bilA5|
if receipt_bilA5[0] == 'ReceiptBillA5Pdf'
if receipt_bilA5[1] == '1'
unique_code = "ReceiptBillA5Pdf"
else
unique_code = unique_code#{}"ReceiptBillPdf"
end
end
end
end
#shop detail
## shop_detail = Shop.current_shop
# customer= Customer.where('customer_id=' +.customer_id)
@@ -82,8 +55,6 @@ class Origami::PaymentsController < BaseOrigamiController
# current_balance = SaleAudit.paymal_search(sale_id)
current_balance = 0
end
# get printer info
print_settings=PrintSetting.find_by_unique_code(unique_code)
# find order id by sale id
# sale_order = SaleOrder.find_by_sale_id(@sale_data.sale_id)
@@ -94,6 +65,7 @@ class Origami::PaymentsController < BaseOrigamiController
other_amount = SaleItem.calculate_other_charges(sale_items)
print_settings = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first
printer = Printer::ReceiptPrinter.new(print_settings)
#TODO :: KBZPAY ( QR )

View File

@@ -62,6 +62,11 @@ class AssignedOrderItem < ApplicationRecord
return order_item
end
protected
def self.generate_ids(count = 1)
SeedGenerator.generate_ids(self.name, "AOI", count)
end
private
def generate_custom_id
if self.assigned_order_item_id.nil?

View File

@@ -9,8 +9,11 @@ class Booking < ApplicationRecord
has_many :booking_orders
has_many :orders, :through => :booking_orders
has_many :order_items, :through => :orders
scope :active, -> {where("booking_status != 'moved'")}
scope :today, -> {where("created_at >= #{Time.now.utc}")}
scope :assign, -> { where(booking_status: 'assign')}
scope :within_time_limit, -> { where(checkin_at: Lookup.get_checkin_time_limit.hours.ago..DateTime::Infinity.new) }
def self.sync_booking_records(bookings)
if !bookings.nil?

View File

@@ -3,6 +3,12 @@ class DiningFacility < ApplicationRecord
has_many :dining_charges
has_many :in_juties
has_many :bookings
has_many :current_bookings, -> { left_joins(:sale).assign.within_time_limit.merge(Booking.where(checkout_at: nil).or(Booking.merge(Sale.where(sale_status: ['new', nil])))) }, class_name: "Booking"
has_one :current_checkin_booking, -> { assign.within_time_limit.where(checkout_at: nil) }, class_name: "Booking"
has_one :current_checkout_booking, -> { left_joins(:sale).assign.within_time_limit.where.not(checkout_at: nil).merge(Sale.where(sale_status: ['new', nil])) }, class_name: "Booking"
has_one :current_reserved_booking, -> { left_joins(:sale).assign.within_time_limit.where.not(reserved_at: nil).merge(Sale.where(sale_status: nil)) }, class_name: "Booking"
TABLE_TYPE = "Table"
ROOM_TYPE = "Room"
@@ -21,7 +27,7 @@ class DiningFacility < ApplicationRecord
end
def get_booking
booking = self.get_current_booking
booking = self.current_checkin_booking
if booking
if booking.dining_facility_id.to_i == self.id
if booking.booking_status == 'assign'
@@ -36,23 +42,8 @@ class DiningFacility < ApplicationRecord
Booking.where(dining_facility_id: self.id, booking_status: 'assign', checkout_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first #and checkout_at is null
end
def get_moved_booking
checkin_time_lookup = Lookup.get_checkin_time_limit
Booking.where(dining_facility_id: self.id, booking_status: 'moved', checkout_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first
end
def get_new_booking
# query for new
Booking.where(dining_facility_id: self.id, booking_status: 'assign', sale_id: nil, checkout_at: nil).first
end
def get_current_checkout_booking
checkin_time_lookup = Lookup.get_checkin_time_limit
Booking.where(dining_facility_id: self.id, booking_status: 'assign', checkout_at: nil).where.not(reserved_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first
end
def get_checkout_booking
booking = self.get_current_checkout_booking
booking = self.current_reserved_booking
if booking
lookup_checkout_time = Lookup.collection_of("checkout_alert_time")
free_time_min = 0
@@ -91,7 +82,7 @@ class DiningFacility < ApplicationRecord
def self.get_checkin_booking
checkin_time_lookup = Lookup.get_checkin_time_limit
bookings = Booking.where(booking_status: 'assign', checkout_at: nil).where.not(reserved_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago)
bookings = self.current_checkin_booking
arr_booking = Array.new
if bookings
lookup_checkout_time = Lookup.collection_of("checkout_alert_time")

View File

@@ -57,7 +57,7 @@ class Lookup < ApplicationRecord
end
def self.collection_of(type)
Lookup.select("name, value").where("lookup_type" => type ).map { |l| [l.name, l.value] }
Lookup.where("lookup_type" => type ).pluck("name, value")
end
def self.create_shift_sale_lookup

View File

@@ -31,26 +31,24 @@ class MenuItem < ApplicationRecord
# Work with item_code = item_instance_code
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[:account_id] = menu_item.account_id
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
menu_item_hash[:taxable] = menu_item.taxable
return menu_item_hash
end
return nil
MenuItem.joins(:menu_item_instances)
.where(menu_item_instances: {item_instance_code: item_code})
.pluck(:type, :account_id, :item_code, :item_instance_code, :name, :alt_name, "menu_item_instances.item_instance_name AS item_instance_name", :price, :promotion_price, :is_on_promotion, "menu_item_instances.is_available", :taxable)
.map { |type, account_id, item_code, item_instance_code, item_name, item_alt_name, item_instance_name, price, promotion_price, is_on_promotion, is_available, taxable|
{
type: type,
account_id: account_id,
item_code: item_code,
item_instance_code: item_instance_code,
name: item_name.to_s + (' - ' + item_instance_name.to_s) || '',
alt_name: item_alt_name || '',
price: price,
promotion_price: promotion_price,
is_on_promotion: is_on_promotion,
is_available: is_available,
taxable: taxable
}
}
end
def self.deleteRecursive(menu_item)

View File

@@ -26,11 +26,6 @@ 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",
@@ -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]})
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
set_order_items = set_order_items.to_json
else
set_order_items = nil
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

View File

@@ -102,7 +102,13 @@ class OrderItem < ApplicationRecord
end
end
protected
def self.generate_ids(count = 1)
SeedGenerator.generate_ids(self.name, "ODI", count)
end
private
def generate_custom_id
if self.order_items_id.nil?
self.order_items_id = SeedGenerator.generate_id(self.class.name, "ODI")

View File

@@ -17,87 +17,24 @@ class OrderQueueStation < ApplicationRecord
def process_order(order, table_id, order_source = nil, pdf_status = nil ,change_to=nil, current_user=nil)
oqs_stations = OrderQueueStation.active
order_items = order.order_items
if table_id.to_i > 0
# get dining
dining = DiningFacility.find(table_id)
oqs_by_zones = OrderQueueProcessByZone.where("zone_id=#{dining.zone_id}")
booking = Booking.find_by_dining_facility_id(dining.id)
oqs_by_zones = OrderQueueProcessByZone.where("zone_id=#{dining.zone_id}").pluck(:order_queue_station_id)
oqs_stations = oqs_stations.select { |s| oqs_by_zones.include? s.id }
end
assigned_order_items = []
oqs_order_items_by_zones = []
# ToDo per item per printer
oqs_by_zones.each do |oqpbz|
oqs = OrderQueueStation.find(oqpbz.order_queue_station_id)
is_auto_printed = false
oqs_order_items = []
if oqs.is_active
#Get List of items -
pq_items = JSON.parse(oqs.processing_items)
#Loop through the processing items
pq_items.each do |pq_item|
#Processing through the looping items
order_items.each do |order_item|
if (pq_item == order_item.item_code)
# if oqs.id == oqpbz.order_queue_station_id
# #Same Order_items can appear in two location.
# AssignedOrderItem.assigned_order_item(order, order_item.item_code, oqs)
# else
if (order_item.qty > 0)
if pdf_status.nil?
AssignedOrderItem.assigned_order_item(order, order_item.item_code, order_item.item_instance_code, oqs)
end
oqs_order_items.push(order_item)
end
# end
end
end
end
if oqs.auto_print && order_source != "quick_service"
if oqs_order_items.length > 0
if oqs.cut_per_item
print_slip_item(oqs, order, oqs_order_items,pdf_status,change_to,current_user,table_id)
else
print_slip(oqs, order, oqs_order_items,pdf_status,change_to,current_user,table_id)
end
is_auto_printed = true
end
end
end
end
else
oqs_stations.each do |oqs|
is_auto_printed = false
oqs_order_items = []
if oqs.is_active
#Get List of items -
pq_items = JSON.parse(oqs.processing_items)
#Loop through the processing items
pq_items.each do |pq_item|
#Processing through the looping items
order_items.each do |order_item|
if (pq_item == order_item.item_code)
# if oqs.id == oqpbz.order_queue_station_id
# #Same Order_items can appear in two location.
# AssignedOrderItem.assigned_order_item(order, order_item.item_code, oqs)
# else
if (order_item.qty > 0)
if pdf_status.nil?
AssignedOrderItem.assigned_order_item(order, order_item.item_code, order_item.item_instance_code, oqs)
end
oqs_order_items.push(order_item)
end
# end
end
end
end
oqs_order_items = nil
oqs_order_items = order_items.select { |i| JSON.parse(oqs.processing_items).include? i.item_code }
assigned_order_items += oqs_order_items.map { |i| AssignedOrderItem.new({ order: order, item_code: i.item_code, instance_code: i.item_instance_code, order_queue_station: oqs, print_status: false, delivery_status: false }) }
oqs_order_items_by_zones << { oqs: oqs, oqs_order_items: oqs_order_items }
if oqs.auto_print && order_source != "quick_service"
if oqs_order_items.length > 0
@@ -106,12 +43,18 @@ class OrderQueueStation < ApplicationRecord
else
print_slip(oqs, order, oqs_order_items, pdf_status, change_to, current_user, table_id)
end
is_auto_printed = true
end
end
end
if pdf_status.nil?
ids = AssignedOrderItem.generate_ids(assigned_order_items.length)
assigned_order_items.each_with_index do |assigned_order_item, index|
assigned_order_item.assigned_order_item_id = ids[index]
end
AssignedOrderItem.import assigned_order_items, validate: false
end
end #end else
end
def pay_process_order_queue (order_id, table_id)
@@ -213,80 +156,36 @@ class OrderQueueStation < ApplicationRecord
#Print order_items in 1 slip
def print_slip(oqs, order, order_items ,pdf_status=nil,change_to=nil,current_user=nil,table_id=nil)
if pdf_status.nil?
printer = PrintSetting.all.order("id ASC")
unique_code="OrderSummaryPdf"
if !printer.empty?
printer.each do |printer_setting|
if printer_setting.unique_code == 'OrderSummaryPdf'
unique_code="OrderSummaryPdf"
elsif printer_setting.unique_code == 'OrderSummarySlimPdf'
unique_code="OrderSummarySlimPdf"
elsif printer_setting.unique_code == 'OrderSummarySetPdf'
unique_code="OrderSummarySetPdf"
elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf'
unique_code="OrderSummaryCustomisePdf"
elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf'
unique_code="OrderSummarySetCustomisePdf"
elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf'
unique_code="OrderSummarySlimCustomisePdf"
end
end
end
print_settings=PrintSetting.find_by_unique_code(unique_code)
if print_settings = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first
order_queue_printer = Printer::OrderQueuePrinter.new(print_settings)
order_queue_printer.print_order_summary(print_settings, oqs, order.order_id, order_items, print_status="")
end
else
move_print_pdf(change_to,current_user,table_id,order_items,oqs)
end
assigned =AssignedOrderItem.where("order_id = '#{ order.order_id }'").pluck(:assigned_order_item_id)
AssignedOrderItem.where('assigned_order_item_id IN (?)', assigned).update_all(print_status: true)
AssignedOrderItem.where("order_id = ?", order.order_id).update_all(print_status: true)
end
#Print order_item in 1 slip per item
def print_slip_item(oqs, order, assigned_items,pdf_status=nil,change_to=nil,current_user=nil,table_id=nil)
if pdf_status.nil?
printer = PrintSetting.all.order("id ASC")
unique_code="OrderItemPdf"
if !printer.empty?
printer.each do |printer_setting|
if printer_setting.unique_code == 'OrderItemPdf'
unique_code="OrderItemPdf"
elsif printer_setting.unique_code == 'OrderItemStarPdf'
unique_code="OrderItemStarPdf"
elsif printer_setting.unique_code == 'OrderItemSlimPdf'
unique_code="OrderItemSlimPdf"
elsif printer_setting.unique_code == 'OrderSetItemPdf'
unique_code="OrderSetItemPdf"
elsif printer_setting.unique_code == 'OrderItemCustomisePdf'
unique_code="OrderItemCustomisePdf"
elsif printer_setting.unique_code == 'OrderSetItemCustomisePdf'
unique_code="OrderSetItemCustomisePdf"
elsif printer_setting.unique_code == 'OrderItemSlimCustomisePdf'
unique_code="OrderItemSlimCustomisePdf"
end
end
end
# order_item = OrderItem.where("order_id='#{assigned_item.order_id}' AND item_instance_code='#{assigned_item.instance_code}'").first()
# print when complete click
print_settings=PrintSetting.find_by_unique_code(unique_code)
if print_settings = PrintSetting.where("unique_code REGEXP ?", "order.*item.*pdf").first
order_queue_printer = Printer::OrderQueuePrinter.new(print_settings)
if !assigned_items.nil?
assigned_items.each do |order_item|
order_queue_printer.print_order_item(print_settings, oqs,order_item.order_id, order_item.order_items_id, print_status="" )
end
end
end
else
move_print_pdf(change_to,current_user,table_id,assigned_items,oqs)
end
assigned =AssignedOrderItem.where("order_id = '#{ order.order_id }'").pluck(:assigned_order_item_id)
AssignedOrderItem.where('assigned_order_item_id IN (?)', assigned).update_all(print_status: true)
AssignedOrderItem.where("order_id = ?", order.order_id).update_all(print_status: true)
end
def move_print_pdf(change_to,current_user,change_from,order_items,oqs)

View File

@@ -9,33 +9,10 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
order_item = print_query('order_item', order_item_id) #OrderItem.find_by_item_code(item_code)
options = order_item[0].options
# filename = "tmp/order_item_#{order_id}_#{order_item_id}" + ".pdf"
# pdf = OrderItemPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
print_setting = PrintSetting.all
# check for item not to show
pdf = ''
# if order_item[0].price != 0
if !print_setting.empty?
print_setting.each do |print_settings|
if print_settings.unique_code == 'OrderItemPdf'
pdf = OrderItemPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
elsif print_settings.unique_code == 'OrderItemStarPdf'
pdf = OrderItemStarPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
elsif print_settings.unique_code == 'OrderItemSlimPdf'
pdf = OrderItemSlimPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
elsif print_settings.unique_code == 'OrderSetItemPdf'
pdf = OrderSetItemPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
elsif print_settings.unique_code == 'OrderItemCustomisePdf'
pdf = OrderItemCustomisePdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
elsif print_settings.unique_code == 'OrderSetItemCustomisePdf'
pdf = OrderSetItemCustomisePdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
elsif print_settings.unique_code == 'OrderItemSlimCustomisePdf'
pdf = OrderItemSlimCustomisePdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
end
end
end
pdf = print_settings.unique_code.constantize.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
# end
shop = Shop.current_shop
@@ -77,9 +54,6 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
print_settings.save!
end
print_setting = PrintSetting.all.order("id ASC")
order=print_query('order_summary', order_id)
shop = Shop.current_shop
directory_name = 'public/orders_'+shop.shop_code
Dir.mkdir(directory_name) unless File.exists?(directory_name)
@@ -97,26 +71,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# check for item not to show
#if odi.price != 0
pdf = OrderItemPdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty)
if !print_setting.empty?
print_setting.each do |print_settings|
if print_settings.unique_code == 'OrderItemPdf'
pdf = OrderItemPdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderItemStarPdf'
pdf = OrderItemStarPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
elsif print_settings.unique_code == 'OrderItemSlimPdf'
pdf = OrderItemSlimPdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSetItemPdf'
pdf = OrderSetItemPdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderItemCustomisePdf'
pdf = OrderItemCustomisePdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSetItemCustomisePdf'
pdf = OrderSetItemCustomisePdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderItemSlimCustomisePdf'
pdf = OrderItemSlimCustomisePdf.new(print_settings,odi_item[0], print_status, options, oqs.use_alternate_name,before_updated_qty)
end
end
end
pdf = print_settings.unique_code.constantize.new(print_settings, odi_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
# pdf.render_file "tmp/order_item.pdf"
pdf.render_file filename
@@ -138,26 +93,11 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
end
# For Print Order Summary
else
order = print_query('order_summary', order_id)
filename = directory_name + "/order_summary_#{order_id}" + ".pdf"
# filename = "tmp/order_summary_#{order_id}" + ".pdf"
pdf = OrderSummaryPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty)
if !print_setting.empty?
print_setting.each do |print_settings|
if print_settings.unique_code == 'OrderSummaryPdf'
pdf = OrderSummaryPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummarySlimPdf'
pdf = OrderSummarySlimPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummarySetPdf'
pdf = OrderSummarySetPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummaryCustomisePdf'
pdf = OrderSummaryCustomisePdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummarySetCustomisePdf'
pdf = OrderSummarySetCustomisePdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummarySlimCustomisePdf'
pdf = OrderSummarySlimCustomisePdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name,before_updated_qty)
end
end
end
pdf = print_settings.unique_code.constantize.new(print_settings, order, print_status, order_items, oqs.use_alternate_name, before_updated_qty)
pdf.render_file filename
if oqs.print_copy
@@ -206,26 +146,8 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# check for item not to show
#if odi.price != 0
pdf = OrderItemPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
if !print_setting.empty?
print_setting.each do |print_settings|
if print_settings.unique_code == 'OrderItemPdf'
pdf = OrderItemPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderItemStarPdf'
pdf = OrderItemStarPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderItemSlimPdf'
pdf = OrderItemSlimPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSetItemPdf'
pdf = OrderSetItemPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderItemCustomisePdf'
pdf = OrderItemCustomisePdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSetItemCustomisePdf'
pdf = OrderSetItemCustomisePdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderItemSlimCustomisePdf'
pdf = OrderItemSlimCustomisePdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
end
end
end
pdf = print_settings.unique_code.constantize.new(print_settings,odi, print_status, options,oqs.use_alternate_name,before_updated_qty)
pdf.render_file filename
if oqs.print_copy
@@ -250,25 +172,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
else
# filename = "tmp/booking_summary_#{booking_id}" + ".pdf"
filename = directory_name + "/booking_summary_#{booking_id}" + ".pdf"
pdf = OrderSummaryPdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty)
if !print_setting.empty?
print_setting.each do |print_settings|
if print_settings.unique_code == 'OrderSummaryPdf'
pdf = OrderSummaryPdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummarySlimPdf'
pdf = OrderSummarySlimPdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummarySetPdf'
pdf = OrderSummarySetPdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummaryCustomisePdf'
pdf = OrderSummaryCustomisePdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummarySetCustomisePdf'
pdf = OrderSummarySetCustomisePdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty)
elsif print_settings.unique_code == 'OrderSummarySlimCustomisePdf'
pdf = OrderSummarySlimCustomisePdf.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty)
end
end
end
pdf = print_settings.unique_code.constantize.new(print_settings,order, print_status,oqs.use_alternate_name,before_updated_qty)
pdf.render_file filename
if oqs.print_copy
@@ -293,36 +197,23 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# Query for OQS with status
def print_query(type, id)
query = OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
.joins("left join orders ON orders.order_id = order_items.order_id")
.joins("left join booking_orders AS bo ON bo.order_id=order_items.order_id")
.joins("left join bookings AS b ON b.booking_id = bo.booking_id")
.joins("left join dining_facilities AS df ON df.id = b.dining_facility_id")
.joins("left join customers as cus ON cus.customer_id = orders.customer_id")
.joins("left join menu_items as item ON item.item_code = order_items.item_code")
if type == "order_item"
OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
.joins("left join orders ON orders.order_id = order_items.order_id
left join booking_orders AS bo ON bo.order_id=order_items.order_id
left join bookings AS b ON b.booking_id = bo.booking_id
left join dining_facilities AS df ON df.id = b.dining_facility_id
left join customers as cus ON cus.customer_id = orders.customer_id
left join menu_items as item ON item.item_code = order_items.item_code")
.where("order_items.order_items_id = '#{ id }'")
query.where("order_items.order_items_id = '#{ id }'")
.group("order_items.item_code")
elsif type == "order_summary"
OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
.joins("left join orders ON orders.order_id = order_items.order_id
left join booking_orders AS bo ON bo.order_id=order_items.order_id
left join bookings AS b ON b.booking_id = bo.booking_id
left join dining_facilities AS df ON df.id = b.dining_facility_id
left join customers as cus ON cus.customer_id = orders.customer_id
left join menu_items as item ON item.item_code = order_items.item_code")
.where("orders.order_id = '#{ id }'")
query.where("orders.order_id = '#{ id }'")
.group("order_items.order_items_id")
else
# order summary for booking
OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
.joins("left join orders ON orders.order_id = order_items.order_id
left join booking_orders AS bo ON bo.order_id=order_items.order_id
left join bookings AS b ON b.booking_id = bo.booking_id
left join dining_facilities AS df ON df.id = b.dining_facility_id
left join customers as cus ON cus.customer_id = orders.customer_id
left join menu_items as item ON item.item_code = order_items.item_code")
.where("b.booking_id = '#{ id }'")
query.where("b.booking_id = '#{ id }'")
end
end

View File

@@ -4,26 +4,9 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
#Use CUPS service
#Generate PDF
#Print
printer = PrintSetting.all
pdf = OrderItemPdf.new
printer = PrintSetting.where("unique_code REGEXP ?", "order.*item.*pdf").first
pdf = printer.unique_code.constantize.new
if !printer.empty?
printer.each do |printer_setting|
if printer_setting.unique_code == 'OrderItemPdf'
pdf = OrderItemPdf.new
elsif printer_setting.unique_code == 'OrderItemSlimPdf'
pdf = OrderItemSlimPdf.new
elsif printer_setting.unique_code == 'OrderSetItemPdf'
pdf = OrderSetItemPdf.new
elsif printer_setting.unique_code == 'OrderItemCustomisePdf'
pdf = OrderItemCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSetItemCustomisePdf'
pdf = OrderSetItemCustomisePdf.new
elsif printer_setting.unique_code == 'OrderItemSlimCustomisePdf'
pdf = OrderItemSlimCustomisePdf.new
end
end
end
pdf.render_file "tmp/order_item_queue_#{order_id}_#{order_item_id}" + ".pdf"
#no print in cloud server
if ENV["SERVER_MODE"] != "cloud"
@@ -36,26 +19,9 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
#Generate PDF
#Print
filename = "tmp/order_summary_#{booking_id}" + ".pdf"
printer = PrintSetting.all
pdf = OrderSummaryPdf.new
printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first
pdf = printer.unique_code.constantize.new
if !printer.empty?
printer.each do |printer_setting|
if printer_setting.unique_code == 'OrderSummaryPdf'
pdf = OrderSummaryPdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimPdf'
pdf = OrderSummarySlimPdf.new
elsif printer_setting.unique_code == 'OrderSummarySetPdf'
pdf = OrderSummarySetPdf.new
elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf'
pdf = OrderSummaryCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf'
pdf = OrderSummarySetCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf'
pdf = OrderSummarySlimCustomisePdf.new
end
end
end
pdf.render_file filename
#no print in cloud server
if ENV["SERVER_MODE"] != "cloud"
@@ -67,26 +33,10 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
#Use CUPS service
#Generate PDF
#Print
printer = PrintSetting.all
printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first
filename = "tmp/order_summary_#{booking_id}" + ".pdf"
pdf = OrderSummaryPdf.new
if !printer.empty?
printer.each do |printer_setting|
if printer_setting.unique_code == 'OrderSummaryPdf'
pdf = OrderSummaryPdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimPdf'
pdf = OrderSummarySlimPdf.new
elsif printer_setting.unique_code == 'OrderSummarySetPdf'
pdf = OrderSummarySetPdf.new
elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf'
pdf = OrderSummaryCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf'
pdf = OrderSummarySetCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf'
pdf = OrderSummarySlimCustomisePdf.new
end
end
end
pdf = printer.unique_code.constantize.new
pdf.render_file filename
#no print in cloud server
if ENV["SERVER_MODE"] != "cloud"
@@ -98,26 +48,10 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
#Use CUPS service
#Generate PDF
#Print
printer = PrintSetting.all
printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first
filename = "tmp/order_summary_#{booking_id}" + ".pdf"
pdf = OrderSummaryPdf.new
if !printer.empty?
printer.each do |printer_setting|
if printer_setting.unique_code == 'OrderSummaryPdf'
pdf = OrderSummaryPdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimPdf'
pdf = OrderSummarySlimPdf.new
elsif printer_setting.unique_code == 'OrderSummarySetPdf'
pdf = OrderSummarySetPdf.new
elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf'
pdf = OrderSummaryCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf'
pdf = OrderSummarySetCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf'
pdf = OrderSummarySlimCustomisePdf.new
end
end
end
pdf = printer.unique_code.constantize.new
pdf.render_file filename
#no print in cloud server
if ENV["SERVER_MODE"] != "cloud"
@@ -129,26 +63,10 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
#Use CUPS service
#Generate PDF
#Print
printer = PrintSetting.all
printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first
filename = "tmp/order_summary_#{booking_id}" + ".pdf"
pdf = OrderSummaryPdf.new
if !printer.empty?
printer.each do |printer_setting|
if printer_setting.unique_code == 'OrderSummaryPdf'
pdf = OrderSummaryPdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimPdf'
pdf = OrderSummarySlimPdf.new
elsif printer_setting.unique_code == 'OrderSummarySetPdf'
pdf = OrderSummarySetPdf.new
elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf'
pdf = OrderSummaryCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf'
pdf = OrderSummarySetCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf'
pdf = OrderSummarySlimCustomisePdf.new
end
end
end
pdf = printer.unique_code.constantize.new
pdf.render_file filename
#no print in cloud server
if ENV["SERVER_MODE"] != "cloud"
@@ -160,26 +78,10 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
#Use CUPS service
#Generate PDF
#Print
printer = PrintSetting.all
printer = PrintSetting.where("unique_code REGEXP ?", "order.*summary.*pdf").first
filename = "tmp/order_summary_#{booking_id}" + ".pdf"
pdf = OrderSummaryPdf.new
if !printer.empty?
printer.each do |printer_setting|
if printer_setting.unique_code == 'OrderSummaryPdf'
pdf = OrderSummaryPdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimPdf'
pdf = OrderSummarySlimPdf.new
elsif printer_setting.unique_code == 'OrderSummarySetPdf'
pdf = OrderSummarySetPdf.new
elsif printer_setting.unique_code == 'OrderSummaryCustomisePdf'
pdf = OrderSummaryCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySetCustomisePdf'
pdf = OrderSummarySetCustomisePdf.new
elsif printer_setting.unique_code == 'OrderSummarySlimCustomisePdf'
pdf = OrderSummarySlimCustomisePdf.new
end
end
end
pdf = printer.unique_code.constantize.new
pdf.render_file filename
#no print in cloud server
if ENV["SERVER_MODE"] != "cloud"
@@ -192,31 +94,12 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
#Use CUPS service
#Generate PDF
#Print
if !printer_settings.nil?
if !printer_settings.unique_code.strip.downcase.include? ("receiptbillorder")
pdf = ReceiptBillPdf.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount)
settings = PrintSetting.all
if !settings.nil?
settings.each do |setting|
if setting.unique_code == 'ReceiptBillPdf'
pdf = ReceiptBillPdf.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount)
elsif setting.unique_code == 'ReceiptBillStarPdf'
pdf = ReceiptBillStarPdf.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount)
end
end
end
receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf
if !receipt_bill_a5_pdf.empty?
receipt_bill_a5_pdf.each do |receipt_bilA5|
if receipt_bilA5[0] == 'ReceiptBillA5Pdf'
if receipt_bilA5[1] == '1'
if printer_settings
if !printer_settings.unique_code.match?(/receiptbillorder/i)
if Lookup.collection_of("print_settings").any? { |x| x == ["ReceiptBillA5Pdf", "1"] } #print_settings with name:ReceiptBillA5Pdf
pdf = ReceiptBillA5Pdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount)
# else
# pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount)
end
end
end
else
pdf = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first.unique_code.constantize.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount)
end
else
#doemal online order pdf template

View File

@@ -5,29 +5,23 @@ class Product < ApplicationRecord
mount_uploader :image_path, ProductImageUploader
def self.search_by_product_code(item_code)
account = Account.find_by_title('Product')
if !account.nil?
account_id = account.id
else
account_id = 1
end
menu_item_hash = Hash.new
mt_instance = Product.find_by_item_code(item_code)
if (!mt_instance.nil?)
menu_item_hash[:type] = 'Product'
menu_item_hash[:account_id] = account_id
menu_item_hash[:item_code] = mt_instance.item_code
menu_item_hash[:item_instance_code] = mt_instance.item_code
menu_item_hash[:name] = mt_instance.name.to_s
menu_item_hash[:alt_name] = mt_instance.alt_name.to_s
menu_item_hash[:price] = mt_instance.unit_price
menu_item_hash[:promotion_price] = 0
menu_item_hash[:is_on_promotion] = 0
menu_item_hash[:is_available] = 0
menu_item_hash[:taxable] = mt_instance.taxable
return menu_item_hash
end
Product.joins("JOIN accounts ON accounts.title = 'Product'")
.where(item_code: item_code)
.pluck("accounts.id AS account_id", :item_code, :name, :alt_name, :unit_price, :taxable)
.map { |account_id, item_code, item_name, item_alt_name, price, taxable|
{
type: 'Product',
account_id: account_id,
item_code: item_code,
item_instance_code: item_code,
name: item_name || '',
alt_name: item_name || '',
price: price,
promotion_price: 0,
is_on_promotion: 0,
is_available: 0,
taxable: taxable
}
}
end
end

View File

@@ -684,14 +684,6 @@ class Sale < ApplicationRecord
self.total_tax = total_tax_amount
end
def product_get_unit_price(item_code)
menu_item_hash =MenuItem.search_by_item_code(item_code)
if (menu_instance_code)
return menu_ item_hash[:item_instance_code], menu_item_hash[:price]
end
return nil,nil
end
def link_order_sale(order_id)
#create if it doesn't exist
saleOrder = SaleOrder.where("sale_id=? and order_id=?", self.id, order_id).take

View File

@@ -9,13 +9,22 @@ class SeedGenerator < ApplicationRecord
cur_val, next_val = self.update_seed(model_name)
if (cur_val == 0)
cur_val, next_val = self.execute_query(model_name)
padding_len = 15 - prefix.length
saleOrderId = prefix +"-"+ cur_val.to_s.to_s.rjust(padding_len,'0')
return saleOrderId
end
padding_len = 15 - prefix.length
saleOrderId = prefix +"-"+ cur_val.to_s.to_s.rjust((14-prefix.length)+1,'0')
return saleOrderId
def self.generate_ids(model, prefix, count = 1)
model_name = self.get_model_name(model)
if ENV["SERVER_MODE"] == 'cloud'
prefix = "C#{prefix}"
end
start = self.update_seed(model_name, count)
stop = start + count - 1
length = 15 - prefix.length
(start..stop).map { |c| "#{prefix}-#{c.to_s.rjust(length, '0')}" }
end
def self.sync_seed_generator_records(seed_generators)
@@ -100,41 +109,13 @@ class SeedGenerator < ApplicationRecord
return model_name
end
def self.execute_query(model)
current = 0
nex = 0
sql = "INSERT INTO seed_generators (model, created_at, updated_at)
VALUES('#{ model }', NOW(), NOW())
ON DUPLICATE KEY UPDATE current = current + 1, next = next + 1;"
select_sql = "select * from seed_generators where model='#{model}';"
ActiveRecord::Base.connection.execute(sql);
select_result = ActiveRecord::Base.connection.execute(select_sql);
select_result.each do |row|
current = row [3]
nex = row[4]
end
return current, nex
end
def self.update_seed(model)
current = 0
nex = 0
update_sql = "UPDATE seed_generators set current = next, next = next + 1 WHERE model='#{model}';"
select_sql = "select * from seed_generators where model='#{model}';"
update_result = ActiveRecord::Base.connection.execute(update_sql);
select_result = ActiveRecord::Base.connection.execute(select_sql);
select_result.each do |row|
current = row [3]
nex = row[4]
end
return current, nex
def self.update_seed(model, count = 1)
SeedGenerator.transaction do
seed = SeedGenerator.lock.find_by_model(model)
seed.next = seed.next + (count * seed.increase_by)
seed.current = seed.next - seed.increase_by
seed.save!
seed.next_before_last_save
end
end
end

View File

@@ -52,7 +52,7 @@
<% end%>
<!-- else quick_service or cashier for table -->
<% else %>
<% if @table.get_current_checkout_booking.nil? %>
<% if @table.current_checkout_booking.nil? %>
<% if !menu.code.include? "SPL" %>
<li class="nav-item ">
<p class="hidden menu-id"><%= menu.id %></p>
@@ -120,7 +120,7 @@
<% end%>
<!-- else quick_service or cashier for table -->
<% else %>
<% if @table.get_current_checkout_booking.nil? %>
<% if @table.current_checkout_booking.nil? %>
<% if !menu.code.include? "SPL" %>
<div class="card custom-card testimonial-card animated fadeInRight menu_category sub_click" data-id="<%=menu.id%>">
<div class='card-block custom-card-block'>
@@ -199,7 +199,7 @@
<div class="col-md-3 col-lg-3 col-sm-3">Table : <%=@table.name%></div>
<p class="hidden" id="table_id"><%=@table_id%></p>
<p class="hidden" id="table_type"><%=@table.type%></p>
<p class="hidden" id="table_get_current"><%=@table.get_current_checkout_booking%></p>
<p class="hidden" id="table_get_current"><%=@table.current_checkout_booking%></p>
<% end%>
<p class="hidden" id="booking_id"><%=@booking_id%></p>
@@ -231,7 +231,7 @@
<p class="hidden" id="table_type"><%=@table.type%></p>
<p class="hidden" id="booking_id"><%=@booking_id%></p>
<p class="hidden" id="customer_id"><%=@customer ? @customer.customer_id : ''%></p>
<p class="hidden" id="table_get_current"><%=@table.get_current_checkout_booking%></p>
<p class="hidden" id="table_get_current"><%=@table.current_checkout_booking%></p>
</div>
<div class="col-md-3 col-lg-3 col-sm-3">
<button type="button" class="btn btn-xs btn-danger waves-effect" id='clear_all'>Clear