diff --git a/app/assets/images/logo.svg b/app/assets/images/logo.svg
index f42c0310..58a86795 100644
--- a/app/assets/images/logo.svg
+++ b/app/assets/images/logo.svg
@@ -127,11 +127,11 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1435"
- inkscape:window-height="860"
+ inkscape:window-height="856"
id="namedview43"
showgrid="false"
inkscape:zoom="6.34"
- inkscape:cx="35.062165"
+ inkscape:cx="44.999074"
inkscape:cy="30.642055"
inkscape:window-x="0"
inkscape:window-y="0"
@@ -165,6 +165,7 @@
+
QWAITER
+ dx="0 0">QWAITER
+
+
\ No newline at end of file
diff --git a/app/assets/javascripts/translations.js.coffee.erb b/app/assets/javascripts/translations.js.coffee.erb
index 73017a5f..5c11cd1c 100644
--- a/app/assets/javascripts/translations.js.coffee.erb
+++ b/app/assets/javascripts/translations.js.coffee.erb
@@ -1,4 +1,3 @@
-
@$translations =
en:
models: <%= I18n.t('activemodel.models', locale: :en).to_json %>
@@ -10,6 +9,7 @@
attributes: <%= I18n.t('activemodel.attributes', locale: :nl).to_json %>
helpers: <%= I18n.t('helpers', locale: :nl).to_json %>
pagination: <%= I18n.t('views.pagination', locale: :nl).to_json %>
+
@t = (path, vars={}) ->
#result = undefined
#m = undefined
diff --git a/app/assets/javascripts/user/app/app.js.coffee b/app/assets/javascripts/user/app/app.js.coffee
index af237e5a..2c7ed8c1 100644
--- a/app/assets/javascripts/user/app/app.js.coffee
+++ b/app/assets/javascripts/user/app/app.js.coffee
@@ -11,8 +11,18 @@ Ember.$.ajaxPrefilter (options) ->
options.data = "auth_token=#{auth_token}"
if options.type.toUpperCase() == 'POST'
if auth_token = Qstorage.getItem('auth_token')
- options.data ||= {}
- options.data.auth_token = auth_token
+ if options.data
+ if typeof(options.data) == 'string'
+ if options.data[0] == '{' || options.data[0] == '[' # json
+ object = JSON.parse(options.data)
+ object.auth_token = auth_token
+ options.data = JSON.stringify(object)
+ else
+ options.data += "&auth_token=#{auth_token}"
+ else
+ options.data.auth_token = auth_token
+ else
+ options.data = "auth_token=#{auth_token}"
true
Ember.$.ajaxSetup
diff --git a/app/assets/javascripts/user/app/controllers/active_list_controller.js.coffee b/app/assets/javascripts/user/app/controllers/active_list_controller.js.coffee
index 11718531..459d8719 100644
--- a/app/assets/javascripts/user/app/controllers/active_list_controller.js.coffee
+++ b/app/assets/javascripts/user/app/controllers/active_list_controller.js.coffee
@@ -8,3 +8,4 @@ App.ActiveListController = Ember.ObjectController.extend
#).property('controllers.application.list')
displayTotal: (-> @get('model.orders.length') and @get('model.orders.length') > 1 ).property('model.orders.length')
+ list: (-> @get('controllers.application.list') ).property('controllers.application.list')
diff --git a/app/assets/javascripts/user/app/controllers/application_controller.js.coffee b/app/assets/javascripts/user/app/controllers/application_controller.js.coffee
index 2596b0bc..54f012f1 100644
--- a/app/assets/javascripts/user/app/controllers/application_controller.js.coffee
+++ b/app/assets/javascripts/user/app/controllers/application_controller.js.coffee
@@ -20,6 +20,27 @@ App.ApplicationController = Ember.Controller.extend
list_closed: -> @set 'list', null
join_request_approved: (data)->
@setCurrentList -> @transitionToRoute('active_list')
+ order_being_processed: (data)->
+ order = @store.all('order').findBy 'id', data.id
+ order.set('state', 'active') if order
+ order_being_delivered: (data)->
+ order = @store.all('order').findBy 'id', data.id
+ order.set('state', 'delivered') if order
+ user_join_request: (data)->
+ list = @store.all('list').findBy 'id', data.join_request.list_id
+ user_data = data.users[0]
+ user = @store.all('user').findBy 'id', user_data.id
+ user = @store.createRecord 'user', user_data unless user
+ data.join_request.list = list
+ data.join_request.user = user
+ join_request = @store.createRecord 'join_request', data.join_request
+ @transitionToRoute 'join_requests'
+ join_request_rejected: (data)->
+ join_request = @store.all('join_request').findBy 'id', data.id
+ join_request.eraseRecord() if join_request
+ join_request_approved: ->
+ @setCurrentList ->
+ @transitionToRoute 'active_list'
#getProducts: (options = {})->
#@store.find('product_category', options).then (product_categories)=>
@@ -34,9 +55,12 @@ App.ApplicationController = Ember.Controller.extend
error_list.eraseRecord()
@set 'list', list
@controllerFor('active_list').set('model', list)
+ if list.get('join_requests').toArray().length
+ @transitionToRoute 'join_requests'
callback.call(@) if callback
- error = (jqXHR)=>
+ error = (emberError)=>
# if jqXHR.status == 404 officially, now assume close list on error
#@redirect_to 'index', message: 'the_list_has_been_closed'
+ console.log "Error: #{emberError.message}" if emberError.message
@set 'list', null
@store.find('list', 'current').then(success, error)
diff --git a/app/assets/javascripts/user/app/controllers/join_requests_controller.js.coffee b/app/assets/javascripts/user/app/controllers/join_requests_controller.js.coffee
new file mode 100644
index 00000000..40cbc179
--- /dev/null
+++ b/app/assets/javascripts/user/app/controllers/join_requests_controller.js.coffee
@@ -0,0 +1,9 @@
+App.JoinRequestsController = Ember.ArrayController.extend
+ join_requests: (-> @get('controllers.application.list.join_requests') ).property('controllers.application.list.join_requests')
+ actions:
+ rejectRequest: (join_request)->
+ Ember.$.post('/user/reject_join_request', user_id: join_request.get('user.id')).then (response)->
+ join_request.eraseRecord()
+ approveRequest: (join_request)->
+ Ember.$.post('/user/approve_join_request', user_id: join_request.get('user.id')).then (response)->
+ join_request.eraseRecord()
diff --git a/app/assets/javascripts/user/app/controllers/product_orders_controller.js.coffee b/app/assets/javascripts/user/app/controllers/product_orders_controller.js.coffee
index 9b362a7b..a3e2a2c3 100644
--- a/app/assets/javascripts/user/app/controllers/product_orders_controller.js.coffee
+++ b/app/assets/javascripts/user/app/controllers/product_orders_controller.js.coffee
@@ -1,4 +1,5 @@
App.ProductOrdersController = Ember.ArrayController.extend
+ needs: ['application', 'table']
orderTotal: (->
#Math.round(Math.random()*100)
@get('model').getEach('total').reduce(((sum, total) -> sum + total), 0)
@@ -8,16 +9,17 @@ App.ProductOrdersController = Ember.ArrayController.extend
#TODO: make clearing of unpersisted product orders
@store.all('product_order').toArray().invoke 'eraseRecord'
orderProducts: ->
- order = @store.createRecord('order', list: @get('controllers.application.list'))
+ table = @get('controllers.table.model')
+ list = @get('controllers.application.list')
+ order = @store.createRecord('order', list: list, table: table)
new_product_orders = @store.all('product_order').filterProperty('order', null)
order.get('product_orders').pushObjects(new_product_orders)
order.save().then (response)=>
- debugger
new_product_orders.invoke 'eraseRecord'
- .error (a,b,c)=>
- d=a
- debugger
- @transitionToRoute 'active_list'
+ @transitionToRoute 'active_list'
+ , (jqXHR)=>
+ new_product_orders.invoke 'eraseRecord'
+ @redirect_to 'index', message: 'order_could_not_be_processed'
#orders = @store.all('product_order').toArray()
#data = orders.map( (order)->order.serialize() )
diff --git a/app/assets/javascripts/user/app/controllers/select_qrcode_controller.js.coffee b/app/assets/javascripts/user/app/controllers/select_qrcode_controller.js.coffee
index 25386566..ff15c2a4 100644
--- a/app/assets/javascripts/user/app/controllers/select_qrcode_controller.js.coffee
+++ b/app/assets/javascripts/user/app/controllers/select_qrcode_controller.js.coffee
@@ -34,10 +34,4 @@ App.SelectQrcodeController = Ember.Controller.extend
cancel: =>
@redirect_to 'list_products'
else
- if res.occupied
- @redirect_to 'join_occupied_table', {table_id: table._id}
- else if res.supplier_closed
- @redirect_to 'user_root', {message: 'supplier_is_closed'}
- else
- #$.post(data_host + '/user/create_list.json', {table_id: table._id}, (res)-> Quser.handle_response(res))
- @redirect_to 'table', table._id, a: 3
+ @redirect_to 'table', table._id
diff --git a/app/assets/javascripts/user/app/models/join_request.js.coffee b/app/assets/javascripts/user/app/models/join_request.js.coffee
new file mode 100644
index 00000000..1f31d669
--- /dev/null
+++ b/app/assets/javascripts/user/app/models/join_request.js.coffee
@@ -0,0 +1,4 @@
+attr = DS.attr
+App.JoinRequest= DS.Model.extend
+ list: DS.belongsTo('list')
+ user: DS.belongsTo('user')
diff --git a/app/assets/javascripts/user/app/models/list.js.coffee b/app/assets/javascripts/user/app/models/list.js.coffee
index 9e19c9cd..924996d0 100644
--- a/app/assets/javascripts/user/app/models/list.js.coffee
+++ b/app/assets/javascripts/user/app/models/list.js.coffee
@@ -11,6 +11,8 @@ App.List = DS.Model.extend
supplier: DS.belongsTo('supplier')
table: DS.belongsTo('table')
+ join_requests: DS.hasMany('join_request')
+ users: DS.hasMany('user')
total: (->
@get('orders').getEach('total').reduce(((sum, total) -> sum + total), 0)
diff --git a/app/assets/javascripts/user/app/models/order.js.coffee b/app/assets/javascripts/user/app/models/order.js.coffee
index a99f9009..bafcfc6d 100644
--- a/app/assets/javascripts/user/app/models/order.js.coffee
+++ b/app/assets/javascripts/user/app/models/order.js.coffee
@@ -2,6 +2,7 @@ attr = DS.attr
App.Order = DS.Model.extend
state: attr 'string'
list: DS.belongsTo('list')
+ table: DS.belongsTo('table')
product_orders: DS.hasMany('product_order', embedded: 'always')
total: (->
@get('product_orders').getEach('total').reduce(((sum, total) -> sum + total), 0)
diff --git a/app/assets/javascripts/user/app/models/user.js.coffee b/app/assets/javascripts/user/app/models/user.js.coffee
new file mode 100644
index 00000000..b86d4db7
--- /dev/null
+++ b/app/assets/javascripts/user/app/models/user.js.coffee
@@ -0,0 +1,6 @@
+attr = DS.attr
+App.User = DS.Model.extend
+ facebook_id: attr('string')
+ email: attr('string')
+ list: DS.belongsTo('list') # in ember scope not many to many (yet)
+ join_requests: DS.hasMany('join_request')
diff --git a/app/assets/javascripts/user/app/modifications/controller_modifications.js.coffee b/app/assets/javascripts/user/app/modifications/controller_modifications.js.coffee
index aed8e960..e6bbd5b3 100644
--- a/app/assets/javascripts/user/app/modifications/controller_modifications.js.coffee
+++ b/app/assets/javascripts/user/app/modifications/controller_modifications.js.coffee
@@ -8,13 +8,16 @@ Ember.Controller.reopen
callback.call(@) if callback
redirect_to: (route, args...)->
route = 'index' if route == 'user_root'
- route_segments = App.Router.router.recognizer.names[route].segments
- dynamic_segments = route_segments.reduce (sum, segment) ->
+ route_object= App.Router.router.recognizer.names[route]
+ throw "Route #{route} cannot exist" unless route_object
+ dynamic_segments = route_object.segments.reduce (sum, segment) ->
if segment.name then sum + 1 else sum
, 0
route_args = [route]
- for isegment in [1..dynamic_segments]
- route_args.push args.shift()
+
+ if dynamic_segments # needed because javascript for loop always fires, even when end is less than start :'(
+ for isegment in [1..dynamic_segments]
+ route_args.push args.shift()
options = args.pop() || {}
diff --git a/app/assets/javascripts/user/app/router.js.coffee b/app/assets/javascripts/user/app/router.js.coffee
index 6aac987f..b56ea5e4 100644
--- a/app/assets/javascripts/user/app/router.js.coffee
+++ b/app/assets/javascripts/user/app/router.js.coffee
@@ -11,5 +11,6 @@ App.Router.map ->
@route 'list_products'
@route 'list_products_for_table', path: '/list_products/:table_id'
@route 'table', path: '/tables/:table_id'
+ @resource 'join_requests'
@resource 'lists', ->
@resource 'list', path: ':list_id'
diff --git a/app/assets/javascripts/user/app/routes/active_list_route.js.coffee b/app/assets/javascripts/user/app/routes/active_list_route.js.coffee
index d35c515e..2827dc3d 100644
--- a/app/assets/javascripts/user/app/routes/active_list_route.js.coffee
+++ b/app/assets/javascripts/user/app/routes/active_list_route.js.coffee
@@ -1,7 +1,13 @@
-App.ActiveListRoute = Ember.Route.extend
- afterModel: (a,b,c)->
- controller = @controllerFor('application')
- if table_id = controller.get('list.table.id')
- transitionTo 'table', table_id
- else
- controller.redirect_to 'index', message: 'the_list_has_been_closed'
+App.ActiveListRoute = Ember.Route.extend {}
+ #model: ->
+ #@get('controllers.application.list')
+ #afterModel: ->
+ #controller = @controllerFor('application')
+ #table_id = controller.get('list.table.id')
+ #debugger
+ #if table_id
+ #@transitionTo 'table', table_id
+ #else
+ #controller.redirect_to 'index', message: 'the_list_has_been_closed'
+ #setupController: (controller, model)->
+ #debugger
diff --git a/app/assets/javascripts/user/app/routes/application_route.js.coffee b/app/assets/javascripts/user/app/routes/application_route.js.coffee
index 5bbd17d2..36df816f 100644
--- a/app/assets/javascripts/user/app/routes/application_route.js.coffee
+++ b/app/assets/javascripts/user/app/routes/application_route.js.coffee
@@ -7,7 +7,7 @@ App.ApplicationRoute = Ember.Route.extend
user_id = Qstorage.getItem('user_id')
faye.subscribe "/user/"+user_id, (e)=>
console.log e
- @events[e.event].call(@) if @events[e.event]
+ @events[e.event].call(@, e.data) if @events[e.event]
@setCurrentList()
unauthorized: ->
diff --git a/app/assets/javascripts/user/app/templates/active_list.emblem b/app/assets/javascripts/user/app/templates/active_list.emblem
index a3976dce..36fbd574 100644
--- a/app/assets/javascripts/user/app/templates/active_list.emblem
+++ b/app/assets/javascripts/user/app/templates/active_list.emblem
@@ -1,19 +1,28 @@
.row
h2=t 'active_list.title'
- if orders
- ul.active_list-orders
- each order in orders
- li class=order.state
- = order.display
- span.currency= currency order.total
- if displayTotal
- li.total
- = t 'total'
- span.currency= currency model.total
+ if list
+ each user in list.users
+ img.facebook-image src="http://graph.facebook.com/#{unbound user.facebook_id}/picture?type=square"
+ if list.orders
+ .list-orders-container
+ each order in orders
+ .list-order-container class=order.state
+ = order.display
+ span.currency= currency order.total
+ if displayTotal
+ .list-orders-total.total
+ = t 'total'
+ span.currency= currency model.total
+ else
+ p
+ span=t 'active_list.no_orders_explanation'
+ br
+ link-to 'list_products' class="button"
+ span=t 'list_products.title'
+
else
p
- span=t 'active_list.no_orders_explanation'
+ span=t 'active_list.not_active.message'
br
- link-to 'list_products' class="button"
- span=t 'list_products.title'
-
+ link-to 'index' class="button"
+ span= t 'active_list.not_active.home_button_text'
diff --git a/app/assets/javascripts/user/app/templates/application.emblem b/app/assets/javascripts/user/app/templates/application.emblem
index 6ae3bdd6..a0e2e018 100644
--- a/app/assets/javascripts/user/app/templates/application.emblem
+++ b/app/assets/javascripts/user/app/templates/application.emblem
@@ -34,6 +34,9 @@
li
=link-to 'lists'
span= t 'models.plural.list'
+ li
+ =link-to 'join_requests'
+ span= t 'models.plural.join_request'
section.main-section
if notice
#notice.alert-box{action clearNotice} data-alert=true
diff --git a/app/assets/javascripts/user/app/templates/join_requests.emblem b/app/assets/javascripts/user/app/templates/join_requests.emblem
new file mode 100644
index 00000000..47cbbeef
--- /dev/null
+++ b/app/assets/javascripts/user/app/templates/join_requests.emblem
@@ -0,0 +1,11 @@
+.row
+ h2= t 'join_request.existing_user.title'
+ each join_request in join_requests
+ .join-request-container
+ img.facebook-image src="http://graph.facebook.com/#{unbound join_request.user.facebook_id}/picture?type=square"
+ span.user-email= join_request.user.email
+ .right
+ button.join-request-reject{action rejectRequest join_request}=t 'join_request.existing_user.reject_request'
+ button.join-request-approve{action approveRequest join_request}=t 'join_request.existing_user.approve_request'
+ else
+ p=t 'join_request.existing_user.no_join_requests_message'
diff --git a/app/assets/javascripts/user/flat/application.js.coffee.erb b/app/assets/javascripts/user/flat/application.js.coffee.erb
index ab62bdca..2c94a406 100644
--- a/app/assets/javascripts/user/flat/application.js.coffee.erb
+++ b/app/assets/javascripts/user/flat/application.js.coffee.erb
@@ -10,10 +10,12 @@
#= require js-routes
#= require_directory .
#= require_self
-(($) ->
- origAppend = $.fn.append
- $.fn.append = -> origAppend.apply(@, arguments).trigger("append")
-)(jQuery)
+#
+# (($) ->
+# origAppend = $.fn.append
+# $.fn.append = -> origAppend.apply(@, arguments).trigger("append")
+# )(jQuery)
+
@Qstorage = localStorage
$.extend($translations.en, <%= I18n.t('user', locale: :en).to_json %>);
diff --git a/app/assets/stylesheets/user/foundation/join_requests.css.sass b/app/assets/stylesheets/user/foundation/join_requests.css.sass
new file mode 100644
index 00000000..f2e622c4
--- /dev/null
+++ b/app/assets/stylesheets/user/foundation/join_requests.css.sass
@@ -0,0 +1,12 @@
+@import ./foundation_and_overrides
+.join-request-container
+ .user-email
+ padding-left: 12px
+ .join-request-reject
+ +button
+ @extend .secondary
+ margin-right: 12px
+ .join-request-approve
+ +button
+ margin-right: 12px
+
diff --git a/app/assets/stylesheets/user/foundation/lists.css.sass b/app/assets/stylesheets/user/foundation/lists.css.sass
index 2a72d0ef..cdbda09b 100644
--- a/app/assets/stylesheets/user/foundation/lists.css.sass
+++ b/app/assets/stylesheets/user/foundation/lists.css.sass
@@ -11,3 +11,25 @@
float: right
clear: right
+panel($padding: 4px)
+.list-orders-container
+ .currency
+ float: right
+ list-style: none
+ $padding: 6px 0 6px 35px
+ .list-order-container
+ background-position: left center
+ background-repeat: no-repeat
+ +grid-column(12)
+ padding: $padding
+ border-bottom: 1px solid #eee
+ &.active
+ background-image: image-url('icons/order-check.png')
+ &.delivered
+ background-image: image-url('icons/order-doublecheck.png')
+ .list-orders-total
+ +grid-column(12)
+ padding: $padding
+ border-top: 2px solid #444
+ font-weight: bold
+
+
diff --git a/app/controllers/users/orders_controller.rb b/app/controllers/users/orders_controller.rb
index d80d3eb3..6a27c0ce 100644
--- a/app/controllers/users/orders_controller.rb
+++ b/app/controllers/users/orders_controller.rb
@@ -2,14 +2,18 @@ module Users
class OrdersController < Users::ApplicationController
respond_to :json
def create
-
+ render json: {}, status: :unprocessable_entity and return unless params[:order].present? && params[:order][:product_orders].present?
converted_order = params[:order][:product_orders].each_with_object({}){|po, o| o[po[:product_id]] = po[:quantity] }
- unless list = current_user.active_list
+ if list = current_user.active_list
+ render json: {}, status: :not_acceptable and return unless list.supplier.open?
+ else
+ render json: {}, status: :unprocessable_entity and return unless params[:order][:table_id].present?
table = Table.find(params[:order][:table_id])
+ render json: {}, status: :not_acceptable and return unless table.supplier.open?
if table.occupied?
#render json: json_alert('messages.table_is_occupied', location: :join_occupied_table, location_params: {table_id: @table.id})
- render status: :not_acceptable and return
+ render json: {}, status: :not_acceptable and return
end
list = List.from_table( table, current_user )
diff --git a/app/models/list.rb b/app/models/list.rb
index b90b2aa5..2e9028d0 100644
--- a/app/models/list.rb
+++ b/app/models/list.rb
@@ -210,7 +210,7 @@ class List
user.save
self.is_dirty
if save
- broadcast_user user.id, 'join_request_approved'
+ broadcast_user user.id, 'join_request_approved', UserUserSerializer.new(user).as_json
end
end
end
@@ -230,19 +230,26 @@ class List
self.join_request_user_ids << requester.id
self.is_dirty
if save
- for user in users
- broadcast_user user.id, 'user_join_request', list_id: id, user_email: requester.email, user_id: requester.id
- end
+ broadcast_users 'user_join_request', JoinRequestSerializer.new(join_request_for_user(requester)).as_json
end
end
end
+ def join_request_for_user(user)
+ JoinRequest.new(user: user, list: self)
+ end
+
+
+ def join_requests
+ @join_requests ||= join_request_user_ids.any? ? self.class.database.load_document(join_request_user_ids).map{|user| join_request_for_user(user) } : []
+ end
+
def reject_join_request_for_user!(user_id)
if join_request_user_ids.include?(user_id)
join_request_user_ids.delete(user_id)
self.is_dirty
if save
- broadcast_user user_id, 'join_request_rejected'
+ broadcast_user user_id, 'join_request_rejected', id: "jr-#{user_id}"
end
end
end
@@ -380,10 +387,6 @@ class List
@join_requests_as_json = h
end
- def join_requests
- @join_requests ||= join_request_user_ids.any? ? self.class.database.load_document(join_request_user_ids).map{|user| JoinRequest.new(user: user, list: self) } : []
- end
-
def product_categories
supplier.product_categories
end
diff --git a/app/models/table.rb b/app/models/table.rb
index a0bc5a28..f5cc32d1 100644
--- a/app/models/table.rb
+++ b/app/models/table.rb
@@ -48,7 +48,6 @@ class Table
end
def occupied?
- return true #testing...
return @is_occupied if instance_variable_defined?(:'@is_occupied')
@is_occupied = !self.class.database.view(List.active_by_table_id_view(key: id, reduce: true)).zero?
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 534623bd..a58a9cbe 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,5 +1,6 @@
class User
include SimplyStored::Couch
+ include ActiveModel::SerializerSupport
property :name
property :active_list_id
@@ -41,6 +42,10 @@ class User
)
end
+ def facebook_id
+ uid
+ end
+
def self.from_omniauth(auth)
binding.pry
end
diff --git a/app/serializers/join_request_serializer.rb b/app/serializers/join_request_serializer.rb
index 06d38aab..70fd9835 100644
--- a/app/serializers/join_request_serializer.rb
+++ b/app/serializers/join_request_serializer.rb
@@ -1,3 +1,5 @@
class JoinRequestSerializer < Qwaiter::Serializer
- attributes :user_id, :user_facebook_id, :list_id
+ embed :ids, include: true
+ attributes :list_id
+ has_one :user, serializer: UserUserSerializer
end
diff --git a/app/serializers/user_extended_list_serializer.rb b/app/serializers/user_extended_list_serializer.rb
index 2380ed87..de9013d6 100644
--- a/app/serializers/user_extended_list_serializer.rb
+++ b/app/serializers/user_extended_list_serializer.rb
@@ -20,6 +20,7 @@ class UserExtendedListSerializer < Qwaiter::Serializer
#has_many :product_categories
has_one :table, serializer: UserExtendedTableSerializer
has_many :join_requests
+ has_many :users, serializer: UserUserSerializer
def extended_version
true
diff --git a/app/serializers/user_user_serializer.rb b/app/serializers/user_user_serializer.rb
new file mode 100644
index 00000000..e403a40d
--- /dev/null
+++ b/app/serializers/user_user_serializer.rb
@@ -0,0 +1,4 @@
+class UserUserSerializer < Qwaiter::Serializer
+ self.root = :user
+ attributes :email, :facebook_id
+end
diff --git a/app/services/join_request.rb b/app/services/join_request.rb
index 619d5240..9eafc69e 100644
--- a/app/services/join_request.rb
+++ b/app/services/join_request.rb
@@ -1,5 +1,8 @@
class JoinRequest
attr_reader :user, :list
+ def id
+ "jr-#{user_id}"
+ end
def initialize(user: nil, list: nil)
@user, @list = user, list
@@ -9,6 +12,10 @@ class JoinRequest
user.id
end
+ def user_email
+ user.email
+ end
+
def user_facebook_id
user.uid
end
@@ -16,4 +23,22 @@ class JoinRequest
def list_id
list.id
end
+
+ def read_attribute_for_serialization(a)
+ serializable_hash[a]
+ end
+
+ def object
+ self
+ end
+
+ def serializable_hash
+ {
+ id: id,
+ user_id: user.id,
+ user_facebook_id: user.uid,
+ user_email: user.email,
+ list_id: list.id
+ }
+ end
end
diff --git a/config/locales/models.en.yml b/config/locales/models.en.yml
index 2c66c36f..55d6db65 100644
--- a/config/locales/models.en.yml
+++ b/config/locales/models.en.yml
@@ -9,6 +9,7 @@ en:
order: Order
product_category: Product category
section: Section
+ join_request: Join request
plural:
user: Users
supplier: Restaurants
@@ -18,6 +19,7 @@ en:
order: Orders
product_category: Product categories
section: Sections
+ join_request: Join requests
attributes:
product_category:
name: Name
diff --git a/config/locales/models.nl.yml b/config/locales/models.nl.yml
index 15ce8323..bc66eeb0 100644
--- a/config/locales/models.nl.yml
+++ b/config/locales/models.nl.yml
@@ -9,6 +9,7 @@ nl:
order: Bestelling
product_category: Product categorie
section: Afdeling
+ join_request: Deelname verzoek
plural:
user: Gebruikers
supplier: Restaurants
@@ -18,6 +19,7 @@ nl:
order: Bestellingen
product_category: Product categorieen
section: Afdelingen
+ join_request: Deelname verzoeken
attributes:
product_category:
name: Naam
diff --git a/config/locales/user.en.yml b/config/locales/user.en.yml
index f0a1154d..eb821d59 100644
--- a/config/locales/user.en.yml
+++ b/config/locales/user.en.yml
@@ -19,11 +19,21 @@ en:
cannot_identify_table: The application cannot determine the table number
unknown_supplier_name: unknown
unauthorized: Unauthorized action detected
+ order_could_not_be_processed: 'The order could not be processed'
active_list:
title: Active list
needs_payment: Check please!
- no_orders_explanation: You did not order anything
+ no_orders_explanation: You did not order anything yet
+ not_active:
+ message: At the moment there is no active list
+ home_button_text: Back
+ join_request:
+ existing_user:
+ title: '${models.plural.join_request}'
+ reject_request: Reject
+ approve_request: Approve
+ no_join_requests_message: Nobody wants to join right now
list_products:
title: Order
history_list:
diff --git a/config/locales/user.nl.yml b/config/locales/user.nl.yml
index ced5c5d2..dd0d011b 100644
--- a/config/locales/user.nl.yml
+++ b/config/locales/user.nl.yml
@@ -19,12 +19,22 @@ nl:
cannot_identify_table: De applicatie kan niet bepalen om welke tafel het gaat
unknown_supplier_name: onbekend
unauthorized: Niet toegestane actie
+ order_could_not_be_processed: 'De bestelling kan niet worden uitgevoerd'
active_list:
title: Actieve lijst
needs_payment: Rekening vragen!
no_orders_explanation: Je hebt nog niks besteld
+ not_active:
+ message: Momenteel is er geen lijst actief
+ home_button_text: Terug
list_products:
title: Bestel
+ join_request:
+ existing_user:
+ title: '${models.plural.join_request}'
+ reject_request: Afwijzen
+ approve_request: Toestaan
+ no_join_requests_message: Niemand wil deelnemen aan de ${models.list}
history_list:
title: Afgesloten lijst
list_history: