class CastingCallsController < ApplicationController layout "project" before_action :set_project before_action :build_casting_call, only: [:new, :create] before_action :set_casting_call, only: [:show, :edit, :update, :cancel] def index @casting_calls = casting_calls.order_by_recent.paginate(page: params[:page]) end def new end def create @casting_call.attributes = casting_call_params_with_email if @casting_call.save log_create_analytics castme_url = url_for([@project, @casting_call]) SubmitHubspotFormJob.perform_later(email: @casting_call.user_email, castme_url: castme_url, form_guid: ENV["HUBSPOT_CASTING_CALL_REQUEST_FORM_GUID"]) else render :new end end def show render layout: 'application' end def edit end def update if @casting_call.update(casting_call_params) redirect_to [@project, :casting_calls], notice: t(".notice") else render :edit end end def cancel @casting_call.update(cancelled_at: Time.zone.now) redirect_to [@project, :casting_calls], notice: t(".notice") end private def casting_call_params params.require(:casting_call).permit(:title, :description, :project_description, :interview_instructions, :interview_requirements, :questions) end def casting_call_params_with_email casting_call_params.merge(user_email: Current.user.email) end def set_project @project = policy_scope(Project).find(params[:project_id]) end def set_casting_call @casting_call = authorize casting_calls.find(params[:id]) end def casting_calls authorize policy_scope(@project.casting_calls) end def build_casting_call @casting_call = authorize @project.casting_calls.build end def log_create_analytics TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_casting_call, user_agent: request.user_agent, user_ip: request.remote_ip) end end