diff --git a/Gemfile b/Gemfile index 94ed4ef3..1d390266 100755 --- a/Gemfile +++ b/Gemfile @@ -41,6 +41,7 @@ gem 'rack-cors' # image upload gem 'carrierwave', '~> 1.0' gem 'mini_magick' +gem 'jquery-fileupload-rails' #Report and Printing gems gem 'cups' diff --git a/Gemfile.lock b/Gemfile.lock index 1c7e6534..2b156b66 100755 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -107,6 +107,10 @@ GEM jbuilder (2.7.0) activesupport (>= 4.2.0) multi_json (>= 1.2) + jquery-fileupload-rails (0.4.7) + actionpack (>= 3.1) + railties (>= 3.1) + sass (>= 3.2) jquery-rails (4.3.1) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) @@ -304,6 +308,7 @@ DEPENDENCIES font-awesome-rails (~> 4.7, >= 4.7.0.2) httparty (~> 0.15.5) jbuilder (~> 2.5) + jquery-fileupload-rails jquery-rails jquery-ui-rails kaminari (~> 1.0.1) diff --git a/app/assets/javascripts/addorder.js b/app/assets/javascripts/addorder.js index 1df7a16e..401d894a 100755 --- a/app/assets/javascripts/addorder.js +++ b/app/assets/javascripts/addorder.js @@ -180,7 +180,7 @@ $(function() { image_path = "image/logo.png"; } } - + console.log(menu_items[field].options) row = '
' +'
' @@ -202,7 +202,7 @@ $(function() { + price +"' data-instance-code = '"+ code +"' data-instance = '" + name +"' data-promotion-price = '"+ promotion_price +"' data-attributes = '" + JSON.stringify(item_attributes) +"' data-options = '" - + options +"' data-image='"+image_path+"' data-toggle='" + + JSON.stringify(menu_items[field].options) +"' data-image='"+image_path+"' data-toggle='" +data_modal+"' data-target='."+data_target+"' data-item-sets = '" +JSON.stringify(menu_items[field].item_sets)+"'data-instances = '" +JSON.stringify(menu_items[field].instances)+"'>" @@ -237,10 +237,10 @@ $(function() { //instances = $(this).data('instance'); item_sets = $(this).data('item-sets'); instances = $(this).data('instances'); - // item_sets = $(data).attr('data-item-sets'); + item_options = $(this).data('options'); for(var field in item_sets) { - + $('.set_order').attr('data-min-qty',item_sets[field]["min_selectable_qty"]); value = item_sets[field]["instances"]; @@ -283,10 +283,20 @@ $(function() { }); } + for(var j in item_options) { + value = item_options[j]["values"]; + type = item_options[j]["type"]; + row = "

"+type+"

" + $(value).each(function(i){ + row +=""; + }); + $(".options-list").append(row); + } $('.set-item').attr('data-code',instances[0]['code']); $('.set-item').attr('data-name',instances[0]['name']); $('.set-item').attr('data-price',instances[0]['price']); - $('.set-item').attr('data-options','[]'); + // $('.set-item').attr('data-options','[]'); $('.set-item').attr('data-parent',true); $('#set_change_qty').val(1); @@ -371,32 +381,28 @@ $(function() { customer_display_view(item,"set_add"); attribute_arr = [] - option_arr = [] var rowCount = $('.summary-items tbody tr').length+1; - option_arr = [] code = $('.set-item').attr('data-code'); name = $('.set-item').attr('data-name'); price = $('.set-item').attr('data-price'); option = $('.set-item').attr('data-options'); parent = $('.set-item').attr('data-parent'); total = qty * price ; - option_arr.push(option); row ="" + +option+"' data-row ='"+rowCount+ "' data-parent ='"+parent+ "'>" +''+rowCount+'' - +'' + item_name+ ' ' + name +'' + +'' + item_name+ ' ' + name +'-' + option +'' +'' + qty + '' +'' + parseFloat(total).toFixed(2) +'' +''; $(".summary-items tbody").append(row); - var rowCount = $('.summary-items tbody tr').length+1; $(items).each(function(i){ code = $(items[i]).attr('data-code'); @@ -406,15 +412,14 @@ $(function() { sub_item = $(items[i]).attr('data-sub-item'); option = $(items[i]).attr('data-options'); total = qty * price ; - option_arr.push(option); row ="" + +option+"' data-row ='"+rowCount+ "' data-sub-item ='"+sub_item+ "'>" +''+rowCount+'' - +'' + item_name+ ' ' + name +'' + +'' + item_name+ ' ' + name +'-' + option +'' +'' + qty + '' +'' + parseFloat(total).toFixed(2) @@ -626,8 +631,6 @@ $(function() { if(group == "set_menu"){ - code = $(this).data('code'); - value = $(this).data('value'); instance = $(".selected-instance"); $(instance).each(function(i){ @@ -638,6 +641,12 @@ $(function() { } }); } + + if(group == "set_menu_default"){ + option_arr = get_selected_attributes('selected-option'); + $('.set-item').attr('data-options',JSON.stringify(option_arr)); + $('.set_default_option').text(option_arr); + } }); //End selecct attribute buttom diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index e486c152..d2faf9da 100755 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -28,11 +28,12 @@ //= require raphael/raphael.min //= require Chart.bundle //= require chartkick -//= require fileinput.min +//= require fileinput.min.js //= require settings/processing_items //= require BSBMaterial/admin.js //= require BSBMaterial/demo.js //= require custom.js +//= require jquery-fileupload/basic $(document).ready(function() { $('.count-to').countTo(); diff --git a/app/assets/javascripts/settings/display_images.js.coffee b/app/assets/javascripts/settings/display_images.js.coffee new file mode 100644 index 00000000..e25943a1 --- /dev/null +++ b/app/assets/javascripts/settings/display_images.js.coffee @@ -0,0 +1,6 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ +jQuery -> + $('#new_display_image').fileupload + dataType: "script" \ No newline at end of file diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index 6a6c0c90..a8e2818c 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -74,16 +74,6 @@ class Origami::HomeController < BaseOrigamiController @date = order.created_at @booking= booking order.order_items.each do |item| - if !item.set_menu_items.nil? - instance_item_sets = JSON.parse(item.set_menu_items) - arr_instance_item_sets = Array.new - instance_item_sets.each do |instance_item| - item_instance_name = MenuItemInstance.find_by_item_instance_code(instance_item["item_instance_code"]).item_instance_name - arr_instance_item_sets.push(item_instance_name) - item.price = item.price.to_f + instance_item["price"].to_f - end - item.set_menu_items = arr_instance_item_sets - end @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? diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index c764b92f..db282a00 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -104,7 +104,9 @@ class Origami::PaymentsController < BaseOrigamiController end end #end rounding adjustment - + puts "sale" + puts saleObj.to_json + sale_payment = SalePayment.new sale_payment.process_payment(saleObj, current_user.name, cash, "cash") @@ -158,6 +160,20 @@ class Origami::PaymentsController < BaseOrigamiController end end + #orders print out + if params[:type] == "quick_service" + booking = Booking.find_by_sale_id(sale_id) + if booking.dining_facility_id.to_i>0 + table_id = booking.dining_facility_id + else + table_id = 0 + end + + booking.booking_orders.each do |order| + Order.pay_process_order_queue(order.order_id,table_id) + end + end + #for card sale data card_data = Array.new card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id) @@ -181,19 +197,6 @@ class Origami::PaymentsController < BaseOrigamiController filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "Paid",current_balance,card_data) render json: JSON.generate({:status => saleObj.rebate_status, :message => "Can't Rebate coz of Sever Error ", :filename => filename, :receipt_no => sale_receipt_no, :printer_name => printer_name}) - - if params[:type] == "quick_service" - booking = Booking.find_by_sale_id(sale_id) - if booking.dining_facility_id.to_i>0 - table_id = booking.dining_facility_id - else - table_id = 0 - end - - booking.booking_orders.each do |order| - Order.pay_process_order_queue(order.order_id,table_id) - end - end end end end diff --git a/app/controllers/origami/rooms_controller.rb b/app/controllers/origami/rooms_controller.rb index 3aa98282..11a7f93d 100755 --- a/app/controllers/origami/rooms_controller.rb +++ b/app/controllers/origami/rooms_controller.rb @@ -68,16 +68,6 @@ class Origami::RoomsController < BaseOrigamiController @date = order.created_at @booking = booking order.order_items.each do |item| - if !item.set_menu_items.nil? - instance_item_sets = JSON.parse(item.set_menu_items) - arr_instance_item_sets = Array.new - instance_item_sets.each do |instance_item| - item_instance_name = MenuItemInstance.find_by_item_instance_code(instance_item["item_instance_code"]).item_instance_name - arr_instance_item_sets.push(item_instance_name) - item.price = item.price.to_f + instance_item["price"].to_f - end - item.set_menu_items = arr_instance_item_sets - end @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? diff --git a/app/controllers/origami/shifts_controller.rb b/app/controllers/origami/shifts_controller.rb index 19def9b6..d0b73f99 100755 --- a/app/controllers/origami/shifts_controller.rb +++ b/app/controllers/origami/shifts_controller.rb @@ -3,6 +3,7 @@ class Origami::ShiftsController < BaseOrigamiController end def show + @type = params[:type] @shift = ShiftSale.current_open_shift(current_user.id) #for bank integration bank_integration = Lookup.collection_of('bank_integration') diff --git a/app/controllers/settings/menus_controller.rb b/app/controllers/settings/menus_controller.rb index 240343b1..4d7d6026 100755 --- a/app/controllers/settings/menus_controller.rb +++ b/app/controllers/settings/menus_controller.rb @@ -6,6 +6,10 @@ class Settings::MenusController < ApplicationController # GET /settings/menus.json def index @settings_menus = Menu.all.page(params[:page]).per(10) + respond_to do |format| + format.html + format.csv { send_data Menu.to_csv } + end end # GET /settings/menus/1 diff --git a/app/controllers/settings/shops_controller.rb b/app/controllers/settings/shops_controller.rb index 365be7e2..97c6422d 100644 --- a/app/controllers/settings/shops_controller.rb +++ b/app/controllers/settings/shops_controller.rb @@ -51,7 +51,11 @@ class Settings::ShopsController < ApplicationController if @settings_shop.update(shop_params) if params[:display_images].present? params[:display_images]['image'].each do |a| - @display_image = @settings_shop.display_images.create!(:shop_id => @shop.id, :image => a) + + aa = a.read + base64_encoded = Base64.encode64(aa) + byebug + @display_image = @settings_shop.display_images.create!(:shop_id => @shop.id, :image => base64_encoded) end end format.html { redirect_to settings_shops_url, notice: 'Shop was successfully updated.' } diff --git a/app/models/menu.rb b/app/models/menu.rb index b96fe03a..052a7042 100755 --- a/app/models/menu.rb +++ b/app/models/menu.rb @@ -31,4 +31,29 @@ class Menu < ApplicationRecord menu.destroy return false end -end + + def self.to_csv + m_attributes = %w{id name is_active valid_days valid_time_from valid_time_to created_by created_at updated_at} + CSV.generate(headers: true) do |csv| + csv << m_attributes + menu = Menu.all + menu.each do |user| + puts user + csv << m_attributes.map{ |attr| user.send(attr)} + end + end + + # mc_attributes = %w{id menu_id code name alt_name order_by created_by menu_category_id is_available created_at updated_at} + # CSV.generate(headers: true) do |csv| + # csv << m_attributes + + # csv << mc_attributes + # MenuCategory.all.each do |user| + # puts user + # csv << mc_attributes.map{ |attr| user.send(attr)} + # end + # end + + end + +end \ No newline at end of file diff --git a/app/models/order.rb b/app/models/order.rb index 1508c960..25c5db4a 100755 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -135,7 +135,7 @@ class Order < ApplicationRecord #loop to add all items to order ordered_list.each do |item| - + menu_item = MenuItem.search_by_item_code(item[:item_instance_code]) # For Product while item code not in menu item @@ -152,7 +152,7 @@ class Order < ApplicationRecord 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], "quantity"=>si[:quantity], "price"=>set_item[:price]}) + 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 @@ -339,17 +339,17 @@ class Order < ApplicationRecord #Process order items and send to order queue def self.pay_process_order_queue(id,table_id) sidekiq = Lookup.find_by_lookup_type("sidekiq") - if !sidekiq.nil? - OrderQueueProcessorJob.perform_later(id, table_id) - else - order = Order.find(id) - if order - oqs = OrderQueueStation.new - oqs.process_order(order, table_id) - end - assign_order = AssignedOrderItem.assigned_order_item_by_job(id) - ActionCable.server.broadcast "order_queue_station_channel",order: assign_order - end + if !sidekiq.nil? + OrderQueueProcessorJob.perform_later(id, table_id) + else + order = Order.find(id) + if order + oqs = OrderQueueStation.new + oqs.process_order(order, table_id) + end + assign_order = AssignedOrderItem.assigned_order_item_by_job(id) + ActionCable.server.broadcast "order_queue_station_channel",order: assign_order + end end def check_cup_status(status) diff --git a/app/models/shop.rb b/app/models/shop.rb index b0e84912..c039ace4 100755 --- a/app/models/shop.rb +++ b/app/models/shop.rb @@ -6,4 +6,8 @@ class Shop < ApplicationRecord has_many :display_images accepts_nested_attributes_for :display_images + + def file_data=(input_data) + self.data = input_data.read + end end diff --git a/app/pdf/order_item_pdf.rb b/app/pdf/order_item_pdf.rb index 379e919c..fabc8d11 100755 --- a/app/pdf/order_item_pdf.rb +++ b/app/pdf/order_item_pdf.rb @@ -37,7 +37,7 @@ class OrderItemPdf < Prawn::Document # font "public/fonts/Zawgyi-One.ttf" # font "public/fonts/padauk.ttf" #font "public/fonts/Chinese.ttf" - if order_item.dining.to_i > 0 + if !order_item.dining.nil? text "#{ order_item.type + '-' + order_item.dining + print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 else text "#{ print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 diff --git a/app/pdf/order_item_slim_pdf.rb b/app/pdf/order_item_slim_pdf.rb old mode 100644 new mode 100755 index 09cce4d1..146b585f --- a/app/pdf/order_item_slim_pdf.rb +++ b/app/pdf/order_item_slim_pdf.rb @@ -37,7 +37,7 @@ class OrderItemSlimPdf < Prawn::Document # font "public/fonts/Zawgyi-One.ttf" # font "public/fonts/padauk.ttf" #font "public/fonts/Chinese.ttf" - if order_item_slim.dining.to_i > 0 + if !order_item_slim.dining.nil? text "#{ order_item_slim.type + '-' + order_item_slim.dining + print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 else text "#{ print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 diff --git a/app/pdf/order_set_item_pdf.rb b/app/pdf/order_set_item_pdf.rb old mode 100644 new mode 100755 index 6aa6efc4..9aac0d0e --- a/app/pdf/order_set_item_pdf.rb +++ b/app/pdf/order_set_item_pdf.rb @@ -37,7 +37,7 @@ class OrderSetItemPdf < Prawn::Document # font "public/fonts/Zawgyi-One.ttf" # font "public/fonts/padauk.ttf" #font "public/fonts/Chinese.ttf" - if order_set_item.dining.to_i > 0 + if !order_set_item.dining.nil? text "#{ order_set_item.type + '-' + order_set_item.dining + print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 else text "#{ print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 diff --git a/app/pdf/order_summary_pdf.rb b/app/pdf/order_summary_pdf.rb index 6c8dacac..17cf905c 100755 --- a/app/pdf/order_summary_pdf.rb +++ b/app/pdf/order_summary_pdf.rb @@ -36,7 +36,8 @@ class OrderSummaryPdf < Prawn::Document # font "public/fonts/Zawgyi-One.ttf" # font "public/fonts/padauk.ttf" - if order[0].dining.to_i > 0 + + if !order[0].dining.nil? text "#{ order[0].type + '-' + order[0].dining + print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 else text "#{ print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 diff --git a/app/pdf/order_summary_set_pdf.rb b/app/pdf/order_summary_set_pdf.rb old mode 100644 new mode 100755 index 8828ea43..14b2f796 --- a/app/pdf/order_summary_set_pdf.rb +++ b/app/pdf/order_summary_set_pdf.rb @@ -36,7 +36,7 @@ class OrderSummarySetPdf < Prawn::Document # font "public/fonts/Zawgyi-One.ttf" # font "public/fonts/padauk.ttf" - if order[0].dining.to_i > 0 + if !order[0].dining.nil? text "#{ order[0].type + '-' + order[0].dining + print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 else text "#{ print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 diff --git a/app/pdf/order_summary_slim_pdf.rb b/app/pdf/order_summary_slim_pdf.rb old mode 100644 new mode 100755 index 73023278..c88061ea --- a/app/pdf/order_summary_slim_pdf.rb +++ b/app/pdf/order_summary_slim_pdf.rb @@ -36,7 +36,7 @@ class OrderSummarySlimPdf < Prawn::Document # font "public/fonts/Zawgyi-One.ttf" # font "public/fonts/padauk.ttf" - if order[0].dining.to_i > 0 + if !order[0].dining.nil? text "#{ order[0].type + '-' + order[0].dining + print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 else text "#{ print_status }", :size => self.header_font_size,:align => :center, :left_margin => -20 diff --git a/app/views/api/orders/view_orders.json.jbuilder b/app/views/api/orders/view_orders.json.jbuilder index ae3fea84..dd72a3a3 100755 --- a/app/views/api/orders/view_orders.json.jbuilder +++ b/app/views/api/orders/view_orders.json.jbuilder @@ -46,9 +46,12 @@ if (@booking) child_spent += (item.price * item.qty) end # End YGN BBQ + json.order_items_id item.order_items_id + json.order_id item.order_id json.item_code item.item_code json.item_instance_code item.item_instance_code json.item_name item.item_name + json.set_menu_items item.set_menu_items json.price item.price json.qty item.qty json.options item.options diff --git a/app/views/origami/dashboard/index.html.erb b/app/views/origami/dashboard/index.html.erb index b0fcb1a1..00cf93c3 100644 --- a/app/views/origami/dashboard/index.html.erb +++ b/app/views/origami/dashboard/index.html.erb @@ -193,6 +193,8 @@ diff --git a/app/views/origami/pending_order/show.html.erb b/app/views/origami/pending_order/show.html.erb old mode 100644 new mode 100755 index d7c929f7..62987f36 --- a/app/views/origami/pending_order/show.html.erb +++ b/app/views/origami/pending_order/show.html.erb @@ -1,7 +1,7 @@
-
+
PENDING ORDER @@ -148,7 +148,7 @@
-
+
<% if current_user.role != "waiter" || @status != "sale"%> @@ -167,6 +167,9 @@ <% if @status != "sale"%> <%end%> + <% if current_user.role != "waiter" %> + + <% end %>
@@ -269,5 +272,23 @@ $(document).ready(function(){ } return false; }); + + $('#close_cashier').on('click',function(e){ + e.preventDefault(); // Prevent the href from redirecting directly + var linkURL = '/origami/shift/quick_service/close'; + warnBeforeRedirect(linkURL); + }); + + function warnBeforeRedirect(linkURL) { + swal({ + title: "Alert!", + text: "Are you sure you want to close cashier?", + type: "warning", + showCancelButton: true + }, function() { + // Redirect the user + window.location.href = linkURL; + }); + } }); diff --git a/app/views/origami/rooms/show.html.erb b/app/views/origami/rooms/show.html.erb index 1edb07cf..d98a3fe2 100755 --- a/app/views/origami/rooms/show.html.erb +++ b/app/views/origami/rooms/show.html.erb @@ -277,9 +277,26 @@ <%= count %> <%= order_item.item_name %> + <% if !order_item.options.nil? && !order_item.options.empty? && order_item.options != "undefined" %> + <% JSON.parse(order_item.options).each do |option| %> +
+ <%= option %> + + <% end %> + <% end %> + <% if !order_item.set_menu_items.nil? - order_item.set_menu_items.each do |item_instance| %> -
<%= item_instance %> + JSON.parse(order_item.set_menu_items).each do |item_instance| %> +
+ <%= item_instance["item_instance_name"] %> + <% if !item_instance["options"].nil? && item_instance["options"] != "undefined" %> + <% (item_instance["options"]).each do |set_item_option| %> +
+ <%= set_item_option %> + + <% end %> + <% end %> +
<% end end %> @@ -345,9 +362,26 @@ <%= count %> <%= order_item.item_name %> + <% if !order_item.options.nil? && !order_item.options.empty? && order_item.options != "undefined" %> + <% JSON.parse(order_item.options).each do |option| %> +
+ <%= option %> + + <% end %> + <% end %> + <% if !order_item.set_menu_items.nil? - order_item.set_menu_items.each do |item_instance| %> -
<%= item_instance %> + JSON.parse(order_item.set_menu_items).each do |item_instance| %> +
+ <%= item_instance["item_instance_name"] %> + <% if !item_instance["options"].nil? && item_instance["options"] != "undefined" %> + <% (item_instance["options"]).each do |set_item_option| %> +
+ <%= set_item_option %> + + <% end %> + <% end %> +
<% end end %> diff --git a/app/views/origami/shifts/show.html.erb b/app/views/origami/shifts/show.html.erb index 4ea71dec..4e42f11b 100755 --- a/app/views/origami/shifts/show.html.erb +++ b/app/views/origami/shifts/show.html.erb @@ -58,6 +58,7 @@