Files
mozo-backend/app/assets/javascripts/user/app/routes/application_route.js.coffee.erb
T

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 %>