Files
mozo-backend/app/controllers/users/tables_controller.rb
T
2020-03-19 12:50:02 -05:00

88 lines
3.4 KiB
Ruby

module Users
class TablesController < Users::ApplicationController
respond_to :json
def show
@table = Table.find(params[:id])
render json: @table, include: ['supplier']
end
#def supplier
# table = Table.find(params[:id])
# supplier = table.supplier
# supplier.product_categories.include_relations(products: :product_variants)
# render json: supplier, include: %w[
# product_categories
# product_categories.products
# product_categories.products.product_variants
# ]
#end
# POST /tables/:id/needs_help.json
def needs_help
#@table = Table.find(params[:id])
render json: json_alert('messages.no_active_list', list_active: false) and return unless active_list.present?
active_list.needs_help!
#render json: JSONAPI::Serializer.serialize(@table, serializer: Users::TableSerializer)
head :no_content
end
# POST /user/tables/:id/join
def join
render json: json_alert('messages.table_not_found') and return unless params[:id].present?
@table = Table.find(params[:id])
if @list = @table.active_list
@list.send_table_join_request_for_user! current_user
end
head :no_content
end
# GET /user/table_info.json
# used for moving table request
# TODO wrap logic of actions
# - table_info
# - move_table
# into separate class and implement security in a non stupid way as it is now
def status_info
render json: json_alert('messages.table_not_found') and return unless params[:id].present?
table = Table.find(params[:id])
res = {}
res[:occupied] = table.occupied?
res[:active] = table.active?
res[:reserved] = table.reserved?
res[:supplier_closed] = table.supplier.closed?
res[:table] = table.attributes
if active_list.present?
res[:other_supplier] = true if active_list.supplier_id != table.supplier_id
res[:current_table_id] = active_list.table_id
res[:current_list_id] = active_list.id
end
render json: res
end
# Used by the user Ember app
# NOTE: ordering on a table always creates a new list or failes if the conditions for creating a new
# list are not met. To order on an already open list send the request to the lists controller
# POST /user/tables/:id/order_products
def order_products
table = Table.find(params[:id])
res = {}
res[:active_list_present] = true if active_list.present?
res[:occupied] = table.occupied?
res[:active] = table.active?
res[:reserved] = table.reserved?
res[:supplier_closed] = table.supplier.closed?
res[:no_product_orders] = true unless product_orders = new_order_product_orders.presence
unless res[:occupied] or res[:supplier_closed] or res[:no_product_orders] or res[:active_list_present]
# Create new list
list = List.from_table( table, current_user )
res[:active_list_id] = list.id # used to set the active list in the app
order = list.place_order product_orders: product_orders, user: current_user, first_order: true
res[:supplier_orders_placed_count] = list.supplier.orders_placed_count
res[:supplier_orders_in_process_count] = list.supplier.orders_in_process_count
res[:payload] = Users::OrderSerializer.serialize(order, include: %w[list list.users product_orders])
end
render json: res
end
end
end