updates for qr handling

This commit is contained in:
2012-08-27 15:46:18 +02:00
parent c087aa0267
commit 157b2406a0
14 changed files with 79 additions and 36 deletions
-10
View File
@@ -23,16 +23,6 @@ root.Qrammer =
clear_active_list: ->
window.active_products_list = {}
$('#active-order-table').hide()
handle_response: (res) ->
if(typeof(res) == 'string')
return unless res.length
if res[0] == '{'
res = JSON.parse(res)
else
eval(res)
return
window.location = '/' if res['message'] && !res['ok']
window.location = '/user/active_list' if res['ok']
load_active_orders: () ->
$.get('/supplier/active_orders.json', (res) ->
body = $('#active-orders-table tbody')
+20 -3
View File
@@ -3,7 +3,7 @@ root.Quser=
handle_active_list: (callback) ->
$.get('/user/list_info.json', (res) ->
if !res.list_active
window.location = '/phone_home?list_closed=true'
window.location = '/user?list_closed=true'
return
window.active_list = res
callback.call() if callback
@@ -60,10 +60,20 @@ root.Quser=
foot.append('<tr><td></td><td class="currency"><strong>'+Qrammer.currency(res.total_amount)+'</strong></td></tr>')
)
order_selected_products: ()->
h = {list_id: active_list_id}
h = {}
for product_id, info of window.active_products_list
h['products['+product_id+']'] = info.number
$.post('/user/order_selected_products', h, ((res) -> Qrammer.handle_response(res)), 'json')
$.post('/user/order_selected_products', h, ((res) -> Quser.handle_response(res)), 'json')
handle_response: (res) ->
if(typeof(res) == 'string')
return unless res.length
if res[0] == '{'
res = JSON.parse(res)
else
eval(res)
return
window.location = '/user' if res['message'] && !res['ok']
window.location = res.location || '/user/list_products' if res['ok']
build_product_list: ->
table = $('#active-order-table')
tbody = table.find('tbody')
@@ -118,6 +128,13 @@ root.Quser=
body.append(row)
)
actions_for_table: (table_id)->
$.get('/user/table_info.json?table_id='+table_id, (res)->
if res.occupied
alert('Table is occupied')
else
$.post('/user/create_list.json', {table_id: table_id}, (res)-> Quser.handle_response(res))
, 'json')
add_product: (product, count) ->
count ||= 1
window.active_products_list = {} unless window.active_products_list
+8 -4
View File
@@ -30,10 +30,14 @@ class ApplicationController < ActionController::Base
alias :active_list_object :active_list
helper_method :active_list_object
def js_alert(message)
{ok: false, message: message}.to_json
def js_alert(*args)
options = args.extract_options!
message = args.first || ''
{ok: false, message: message}.merge(options).to_json
end
def js_notice(message)
{ok: true, message: message}.to_json
def js_notice(*args)
options = args.extract_options!
message = args.first || ''
{ok: true, message: message}.merge(options).to_json
end
end
+3
View File
@@ -1,6 +1,9 @@
class SupplierController < ApplicationController
before_filter :authenticate_supplier!
def home
render layout: 'tablet'
end
# GET /suppliers/1/active_orders
# GET /suppliers/1/active_orders.json
def active_orders
+4 -2
View File
@@ -86,10 +86,12 @@ class TablesController < ApplicationController
# GET /tables/qrcode.png
# GET /tables/qrcode.svg
def qrcode
@table = Table.find(params[:id])
code = @table.id
respond_to do |format|
format.html
format.svg { render :qrcode => request.url, :level => :l, :unit => 10 }
format.png { render qrcode: request.url }
format.svg { render :qrcode => code, :level => :l, :unit => 10 }
format.png { render qrcode: code }
end
end
+28 -11
View File
@@ -12,14 +12,29 @@ class UserController < ApplicationController
def create_list
@table = Table.find(params[:table_id])
if @table.occupied?
redirect_to root_path, alert: t('table.is_occupied')
respond_to do |format|
format.html { redirect_to root_path, alert: t('table.is_occupied') }
format.json { render json: js_alert(t('messages.table_is_occupied'))}
end
else
@list = List.new(table: @table, supplier_id: @table.supplier_id)
@list.add_user current_user
#@list.add_user(current_user)
@list.save
session[:active_list_id] = @list.id
redirect_to user_list_products_path
respond_to do |format|
format.html { redirect_to user_list_products_path }
format.json { render json: js_notice('table_created')}
end
end
end
def table_info
@table = Table.find(params[:table_id])
respond_to do |format|
format.json do
render json: {occupied: @table.occupied?}
end
end
end
@@ -81,8 +96,13 @@ class UserController < ApplicationController
def list_info
respond_to do |format|
format.json do
render json: {list_active: false} and return unless list.present?
render json: list.as_json.merge(list_active: true)
if !list.try(:active?)
session[:active_list_id] = nil
render json: {list_active: false}
return
else
render json: list.as_json.merge(list_active: list.active? )
end
end
end
end
@@ -94,7 +114,7 @@ class UserController < ApplicationController
render json: {list_active: false} and return unless list.present?
list.needs_help = true
list.save
render json: list.as_json.merge(list_active: true)
render json: list.as_json.merge(list_active: list.active?)
end
end
end
@@ -106,7 +126,7 @@ class UserController < ApplicationController
render json: {list_active: false} and return unless list.present?
list.needs_payment = true
list.save
render json: list.as_json.merge(list_active: true)
render json: list.as_json.merge(list_active: list.active?)
end
end
end
@@ -134,20 +154,17 @@ class UserController < ApplicationController
def order_selected_products
@list = list
respond_to do |format|
format.html do
redirect_to(root_path, alert: t('messages.cannot_order_without_list_id')) and return if params[:list_id].blank?
@list = List.find(params[:list_id])
redirect_to(root_path, alert: t('messages.cannot_order_on_non_active_list')) and return unless @list.active?
@list.place_order current_user, params[:products]
redirect_to root_path, notice: t('messages.order_is_placed')
end
format.js do
render js: js_alert(t('messages.cannot_order_without_list_id')) and return if params[:list_id].blank?
@list = List.find(params[:list_id])
render js: js_alert(t('messages.cannot_order_on_non_active_list')) and return unless @list.active?
@list.place_order current_user, params[:products]
render js: js_notice( t('messages.order_is_placed') )
render js: js_notice( t('messages.order_is_placed'), location: user_active_list_path )
end
end
end
+2 -2
View File
@@ -12,12 +12,12 @@ class Table
view :active_lists, type: :custom, map_function: %|function(doc){
if(doc.ruby_class == 'List' && doc.state == 'active'){
emit(doc._id, 1);
emit(doc.table_id, 1);
}
}|, reduce_function: '_sum'
def occupied?
not self.class.database.view(self.class.active_lists(key: list_id, reduce: true)).zero?
not self.class.database.view(self.class.active_lists(key: id, reduce: true)).zero?
end
end
+1 -1
View File
@@ -1,4 +1,4 @@
.page-header= title 'Select Qr code'
ul#qr-list
- for table in @tables
li= link_to image_tag(url_for(qrcode_table_path(table, format: :png))), user_create_list_path(table_id: table.id)
li= link_to_function image_tag(url_for(qrcode_table_path(table, format: :png))), %|Quser.actions_for_table('#{table.id}')|
+1 -1
View File
@@ -33,7 +33,7 @@ html lang="en"
ul.nav#top-navigation-list
- if list_open?
li= link_to 'Move table', '#'
li= link_to 'View history', user_history_path
li= link_to 'View history', user_list_history_path
.container
+2
View File
@@ -0,0 +1,2 @@
= render template: 'supplier/active_lists'
= render template: 'supplier/active_orders'
+2
View File
@@ -4,5 +4,7 @@ ul.nav.nav-tabs.nav-stacked
li= link_to 'Active list', user_active_list_path
- else
li= link_to 'Join table with Qr scan', '/select_qrcode'
li
button.btn.btn-primary onClick="QMobile.scanQr()" Scan Qr
li= link_to 'Subscribe to list', '#'
li= link_to 'Check out menu', '#'