158 lines
6.6 KiB
Plaintext
158 lines
6.6 KiB
Plaintext
App.ApplicationRoute = Ember.Route.extend
|
|
setupController: (controller)->
|
|
#@controllerFor('product_orders').set 'model', @store.filter('product_order', (po)-> !po.get('order')) # does not work (yet)
|
|
@controllerFor('product_orders').set 'model', @store.filter('product_order', (po)-> !po.get('id'))
|
|
controller.secured ->
|
|
faye = new Faye.Client($event_host)
|
|
user_id = Qstorage.getItem('user_id')
|
|
faye.subscribe "/user/"+user_id, (e)=>
|
|
console.log e
|
|
@events[e.event].call(@, e.data) if @events[e.event]
|
|
@setCurrentList()
|
|
|
|
unauthorized: ->
|
|
Qstorage.setItem('auth_token', '')
|
|
@controllerFor('application').set 'list', null
|
|
@send 'obtain_token'
|
|
@controllerFor('application').redirect_to 'index', message: 'unauthorized'
|
|
|
|
handleAuthInfo: (user_id, auth_token)->
|
|
Qstorage.setItem 'user_id', user_id
|
|
Qstorage.setItem 'auth_token', auth_token
|
|
controller = @controllerFor('application')
|
|
controller.setCurrentList()
|
|
controller.set 'notice', t('messages.authenticated')
|
|
actions:
|
|
obtain_token: ( options = {} ) ->
|
|
provider = options.provider || 'facebook'
|
|
auth_win = window.open "#{$obtain_token_url}?provider=#{provider}", "_blank", "location=no"
|
|
auth_win.addEventListener "loadstart", (event)=>
|
|
if event.url.match 'close_window'
|
|
user_id = event.url.match(/user_id=([\w+-]+)/)[1]
|
|
auth_token = event.url.match(/authentication_token=([\w-]+)/)[1]
|
|
@handleAuthInfo(user_id, auth_token)
|
|
auth_win.close()
|
|
true
|
|
openModal: (modalName, model)->
|
|
@controllerFor(modalName).set('model', model)
|
|
@render modalName,
|
|
into: 'application'
|
|
outlet: 'modal'
|
|
closeModal: ->
|
|
@disconnectOutlet
|
|
outlet: 'modal'
|
|
parentView: 'application'
|
|
confirm: (options = {})->
|
|
@send 'openModal', 'modal_confirm', Ember.Object.create
|
|
title: options.title
|
|
body: options.body
|
|
cancel: options.cancel
|
|
ok: options.ok
|
|
sendFeedback: (feedback, callback)->
|
|
return unless feedback
|
|
$.post $user_feedback_path, feedback: feedback, callback
|
|
|
|
listNeedsPayment: ->
|
|
@get('controller').secured ->
|
|
@set 'list.needs_payment', true
|
|
Ember.$.post "#{$data_host}/user/list_needs_payment.json"
|
|
#Ember.$.post("#{$data_host}/user/list_needs_payment.json").then (res) =>
|
|
#@set('list.needs_payment', true) # also done by faye
|
|
listNeedsHelp: ->
|
|
@get('controller').secured ->
|
|
@set 'list.needs_help', true
|
|
Ember.$.post "#{$data_host}/user/needs_help.json"
|
|
#Ember.$.post("#{$data_host}/user/needs_help.json").then (res) =>
|
|
#@set('list.needs_help', true) # also done by faye
|
|
error: (error, transition, klass)->
|
|
message = null
|
|
if error.status is 404
|
|
if klass.routeName is 'table'
|
|
message = t('errors.404.model.message', model: t("models.#{klass.routeName}"), id: transition.state.params.table.table_id)
|
|
else
|
|
message = t('errors.404.general.message')
|
|
@transitionTo('index').then (route)->
|
|
route.get('controller.controllers.application').set 'notice', message if route and route.get
|
|
$log
|
|
action: 'applicationerror'
|
|
error: error.message
|
|
selectQr: (table)->
|
|
@get('controller').secured ->
|
|
appcontroller = @
|
|
$.getJSON( "#{$data_host}/user/table_info.json?table_id=#{table._id}").then (res)=>
|
|
if res.current_table_id
|
|
if res.other_supplier
|
|
@redirect_to 'user_root', message: 'table_is_from_other_supplier'
|
|
else if res.current_table_id == table._id
|
|
#nothing has changed, show product list
|
|
@redirect_to 'table', table._id
|
|
else if res.current_table_id != table._id
|
|
if res.occupied
|
|
@redirect_to 'user_root', message: 'table_is_occupied'
|
|
else if res.reserved
|
|
@redirect_to 'user_root', message: 'table_is_reserved'
|
|
else if table.closed
|
|
@redirect_to 'user_root', message: 'table_is_closed'
|
|
else if res.supplier_closed
|
|
@redirect_to 'user_root', message: 'supplier_is_closed'
|
|
else
|
|
## Offer to move table
|
|
@send 'confirm',
|
|
title: t('move_table.confirmation_title')
|
|
body: t('move_table.confirmation_body')
|
|
ok: =>
|
|
Ember.$.post "#{$data_host}/user/move_table.json", table_id: table._id, (res2)=>
|
|
if res2.occupied
|
|
@redirect_to 'user_root', message: 'move_table.cannot_move_to_occupied_tabe'
|
|
else
|
|
# Now we can move table
|
|
Qstorage.setItem 'table_id', table._id
|
|
@redirect_to 'table', table._id, message: 'move_table.moved_to_another_table'
|
|
cancel: =>
|
|
@redirect_to 'table', res.current_table_id
|
|
else
|
|
@redirect_to 'table', table._id
|
|
, (error)->
|
|
if error.status is 404
|
|
message = 'table_not_found'
|
|
else
|
|
message = 'general_error'
|
|
appcontroller.redirect_to 'index', message: message
|
|
scanQr: ->
|
|
return @transitionTo('sign_in') unless Qstorage.getItem('auth_token')
|
|
<% if Rails.env.user_app? %>
|
|
ar = @
|
|
scanner = cordova.require("cordova/plugin/BarcodeScanner")
|
|
@transitionTo('scanning').then ->
|
|
scanner.scan (result)->
|
|
if result.cancelled
|
|
ar.transitionTo('index')
|
|
$log
|
|
action: 'qrscan'
|
|
result: 'cancel'
|
|
else
|
|
table_id_index = result.text.indexOf('s?t=');
|
|
if table_id_index > -1
|
|
table_id = result.text.substr(table_id_index + 4);
|
|
# ar.transitionTo 'table', table_id
|
|
# ar.actions.selectQr.call(ar, table: {_id: table_id})
|
|
ar.send('selectQr', _id: table_id)
|
|
else
|
|
ar.transitionTo('index').then (route)->
|
|
route.get('controller.controllers.application').set 'notice', "we got a barcode: '#{result.text}' but cannot extract a table id"
|
|
$log
|
|
action: 'qrscan'
|
|
error: 'cannot extract table id'
|
|
info: result.text
|
|
|
|
, (error)->
|
|
$log
|
|
action: 'qrscan'
|
|
error: 'scan failed'
|
|
info: error
|
|
ar.transitionTo('index').then (route)->
|
|
route.get('controller.controllers.application').set 'notice', "scanning failed: #{error}"
|
|
<% else %>
|
|
@transitionTo 'select_qrcode'
|
|
<% end %>
|