# frozen_string_literal: true module Admin class BoothsController < Admin::BaseController load_and_authorize_resource :conference, find_by: :short_title load_and_authorize_resource through: :conference def index @file_name = "#{(t 'booth').pluralize}_for_#{@conference.short_title}" @booth_export_option = params[:booth_export_option] respond_to do |format| format.html # Explicitly call #to_json to avoid the use of EventSerializer format.json { render json: Booth.where(state: :confirmed, program: @program).to_json } format.xlsx do response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.xlsx\"" render 'booths', layout: false end format.pdf { render 'booths', layout: false } format.csv do response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.csv\"" render 'booths', layout: false end end end def show; end def new @url = admin_conference_booths_path(@conference.short_title) end def create @url = admin_conference_booths_path(@conference.short_title) @booth = @conference.booths.new(booth_params) @booth.submitter = current_user if @booth.save redirect_to admin_conference_booths_path, notice: "#{(t 'booth').capitalize} successfully created." else flash.now[:error] = "Creating #{t 'booth'} failed. #{@booth.errors.full_messages.to_sentence}." render :new end end def edit @url = admin_conference_booth_path(@conference.short_title, @booth.id) end def update @url = admin_conference_booth_path(@conference.short_title, @booth.id) @booth.update(booth_params) if @booth.save redirect_to admin_conference_booths_path, notice: "Successfully updated #{t 'booth'} for #{@booth.title}." else flash.now[:error] = "An error prohibited the #{t'booth'} for #{@booth.title} "\ "#{@booth.errors.full_messages.join('. ')}." render :edit end end def accept @booth.accept! if @booth.save if @conference.email_settings.send_on_booths_acceptance Mailbot.conference_booths_acceptance_mail(@booth).deliver_later end redirect_to admin_conference_booths_path(conference_id: @conference.short_title), notice: "#{(t'booth').capitalize} successfully accepted!" else redirect_to admin_conference_booths_path(conference_id: @conference.short_title) flash[:error] = "#{(t 'booth').capitalize} could not be accepted. #{@booth.errors.full_messages.to_sentence}." end end def to_accept update_state(:to_accept, "#{(t'booth').capitalize} to accept") end def to_reject update_state(:to_reject, "#{(t'booth').capitalize} to reject") end def reject @booth.reject! if @booth.save if @conference.email_settings.send_on_booths_rejection Mailbot.conference_booths_rejection_mail(@booth).deliver_later end redirect_to admin_conference_booths_path(conference_id: @conference.short_title), notice: "#{(t'booth').capitalize} successfully rejected." else redirect_to admin_conference_booths_path(conference_id: @conference.short_title) flash[:error] = "#{(t 'booth').capitalize} could not be rejected. #{@booth.errors.full_messages.to_sentence}." end end def restart update_state(:restart, "#{(t 'booth').capitalize} is submitted") end def cancel update_state(:cancel, "#{(t 'booth').capitalize} is canceled") end def confirm update_state(:confirm, "#{(t 'booth').capitalize} successfully confirmed") end private def update_state(transition, notice) alert = @booth.update_state(transition, notice) if alert.blank? flash[:notice] = notice redirect_back_or_to(admin_conference_booths_path(conference_id: @conference.short_title)) && return else flash[:error] = alert return redirect_back_or_to(admin_conference_booths_path(conference_id: @conference.short_title)) && return end end def booth_params params.require(:booth).permit(:title, :description, :reasoning, :picture, :website_url, :submitter_relationship, responsible_ids: []) end end end