Compare commits
6 Commits
validate-z
...
add-splash
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
062b1d75cd | ||
|
|
ea025a86b3 | ||
|
|
c8f314142c | ||
|
|
2a7deef3c8 | ||
|
|
08e475642c | ||
|
|
f201580a01 |
@@ -1,13 +0,0 @@
|
||||
$(document).on("turbolinks:load", function() {
|
||||
$("[data-behavior=update-required-status]").click(function(e) {
|
||||
const required = !!($(this)[0] && $(this)[0].checked);
|
||||
|
||||
|
||||
$("[data-required-tag=guardian]").each(function(index, element) {
|
||||
const labelForField = element.previousSibling;
|
||||
|
||||
element.required = required;
|
||||
labelForField.classList.add("required");
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -17,7 +17,7 @@ class AccountsController < ApplicationController
|
||||
|
||||
if sign_in(user)
|
||||
TrackAnalyticsJob.perform_later(user, user.primary_account, :track_guest_sign_up, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
SubmitHubspotFormJob.perform_later(first_name: user.first_name, last_name: user.last_name, email: user.email, company: account.name, i_m_interested_in: user.interested_product_name, form_guid: ENV["HUBSPOT_FORM_GUID"])
|
||||
SubmitHubspotFormJob.perform_later(user.first_name, user.last_name, user.email, account.name, i_m_interested_in: user.interested_product_name)
|
||||
redirect_to signed_in_root_path
|
||||
else
|
||||
redirect_to new_session_path, alert: t(".notice")
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
class Admin::CastingCallInterviewsController < Admin::ApplicationController
|
||||
before_action :set_casting_call_interview, only: [:edit, :update, :show, :complete]
|
||||
before_action :build_casting_call_interview, only: [:new, :create]
|
||||
before_action :set_accounts, only: %i[new create edit]
|
||||
|
||||
def index
|
||||
@casting_call_interviews = casting_call_interviews.order_by_recent.paginate(page: params[:page])
|
||||
end
|
||||
|
||||
def create
|
||||
@casting_call_interview.attributes = casting_call_interview_params
|
||||
|
||||
if @casting_call_interview.save
|
||||
redirect_to [:admin, :casting_call_interviews], notice: t(".notice")
|
||||
else
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if @casting_call_interview.update(casting_call_interview_params)
|
||||
redirect_to [:admin, :casting_call_interviews], notice: t(".notice")
|
||||
else
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
def complete
|
||||
if @casting_call_interview.update(interviewed_at: Time.zone.now)
|
||||
redirect_to [:admin, :casting_call_interviews], notice: t(".notice")
|
||||
else
|
||||
redirect_to [:admin, :casting_call_interviews], notice: t(".alert")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_accounts
|
||||
@accounts = accounts
|
||||
end
|
||||
|
||||
def casting_call_interview_params
|
||||
params.require(:casting_call_interview).permit(:casting_call_id, :performer_name, :interview_date, :zoom_meeting_url)
|
||||
end
|
||||
|
||||
def casting_call_interviews
|
||||
policy_scope CastingCallInterview
|
||||
end
|
||||
|
||||
def set_casting_call_interview
|
||||
@casting_call_interview = authorize policy_scope(CastingCallInterview).find(params[:id])
|
||||
end
|
||||
|
||||
def accounts
|
||||
policy_scope Account
|
||||
end
|
||||
|
||||
def build_casting_call_interview
|
||||
@casting_call_interview = authorize policy_scope(CastingCallInterview).build
|
||||
end
|
||||
end
|
||||
@@ -17,9 +17,7 @@ class Api::ApiController < ActionController::Base
|
||||
def return_error(exception)
|
||||
raise exception if Rails.env.test?
|
||||
|
||||
Raven.capture_exception(exception)
|
||||
|
||||
logger.error "==Handled======"
|
||||
logger.error "==Handled======="
|
||||
logger.error exception.message
|
||||
logger.error exception.backtrace.join("\n")
|
||||
logger.error "==Handled======="
|
||||
|
||||
@@ -5,8 +5,6 @@ class Api::UserTokenController < Knock::AuthTokenController
|
||||
|
||||
# Catch exception and return JSON-formatted error
|
||||
def return_error(exception)
|
||||
Raven.capture_exception(exception)
|
||||
|
||||
logger.error "==Handled======="
|
||||
logger.error exception.message
|
||||
logger.error exception.backtrace.join("\n")
|
||||
|
||||
@@ -5,7 +5,6 @@ class BroadcastsController < ApplicationController
|
||||
before_action :build_broadcast, only: [:new, :create]
|
||||
before_action :set_broadcast, only: [:show, :destroy, :update]
|
||||
before_action :set_multi_view_broadcasts, only: [:show]
|
||||
before_action :show_splash_screen, only: :index
|
||||
|
||||
def index
|
||||
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
|
||||
@@ -50,10 +49,6 @@ class BroadcastsController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def show_splash_screen
|
||||
render :splash if broadcasts.count.zero?
|
||||
end
|
||||
|
||||
def broadcast_params
|
||||
params.require(:broadcast).permit(:name, files: [])
|
||||
end
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
class CastingCallInterviewsController < ApplicationController
|
||||
before_action :set_project
|
||||
before_action :set_casting_call_interview, only: [:show]
|
||||
|
||||
include ProjectLayout
|
||||
|
||||
def index
|
||||
@casting_call_interviews = casting_call_interviews.completed.order_by_recent.paginate(page: params[:page])
|
||||
end
|
||||
|
||||
def show
|
||||
@files = @casting_call_interview.files.paginate(page: params[:page])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_project
|
||||
@project = policy_scope(Project).find(params[:project_id])
|
||||
end
|
||||
|
||||
def set_casting_call_interview
|
||||
@casting_call_interview = authorize casting_call_interviews.find(params[:id])
|
||||
end
|
||||
|
||||
def casting_call_interviews
|
||||
authorize policy_scope(CastingCallInterview)
|
||||
end
|
||||
end
|
||||
@@ -1,76 +0,0 @@
|
||||
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
|
||||
@@ -1,30 +0,0 @@
|
||||
class InterviewDownloadsController < ApplicationController
|
||||
include ProjectContext
|
||||
|
||||
before_action :set_project, only: [:create]
|
||||
before_action :set_casting_call_interview, only: :create
|
||||
|
||||
include ProjectLayout
|
||||
|
||||
def create
|
||||
download = @project.downloads.create!(name: @casting_call_interview.zip_file_name, release_type: "CastingCallInterview")
|
||||
|
||||
other_downloads_in_progress = @project.downloads.unfinished_desc_order.offset(1)
|
||||
|
||||
if other_downloads_in_progress.any?
|
||||
in_progress_downloads_details = render_to_string "_other_pending_downloads", locals: { downloads: other_downloads_in_progress, release_type: "CastingCallInterview" }, :layout => false
|
||||
ProjectsChannel.broadcast_download_generation_update(download, in_progress_downloads_details)
|
||||
else
|
||||
ProjectsChannel.broadcast_download_generation_update(download, I18n.t("interview_downloads.download.pending", release_type: "Casting Call Interview"))
|
||||
end
|
||||
|
||||
GenerateInterviewFilesZipJob.perform_later(@project, download, @casting_call_interview)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_casting_call_interview
|
||||
authorize(Download)
|
||||
@casting_call_interview = policy_scope(@project.casting_call_interviews).find(params[:casting_call_interview_id])
|
||||
end
|
||||
end
|
||||
@@ -1,25 +0,0 @@
|
||||
class Public::CastingCallInterviewsController < Public::BaseController
|
||||
skip_after_action :verify_authorized
|
||||
before_action :set_casting_call_interview, only: [:show, :update]
|
||||
|
||||
def show
|
||||
end
|
||||
|
||||
def update
|
||||
if @casting_call_interview.update(casting_call_interview_params)
|
||||
redirect_to casting_call_interview_url(token: @casting_call_interview.token), notice: t(".notice")
|
||||
else
|
||||
render :show
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_casting_call_interview
|
||||
@casting_call_interview = CastingCallInterview.find_by_token(params[:token])
|
||||
end
|
||||
|
||||
def casting_call_interview_params
|
||||
params.require(:casting_call_interview).permit(files: [])
|
||||
end
|
||||
end
|
||||
@@ -1,14 +0,0 @@
|
||||
class Public::CastingCallsController < Public::BaseController
|
||||
skip_after_action :verify_authorized
|
||||
before_action :set_casting_call, only: [:show]
|
||||
|
||||
def show
|
||||
render layout: 'application'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_casting_call
|
||||
@casting_call = CastingCall.find_by_token(params[:token])
|
||||
end
|
||||
end
|
||||
@@ -46,7 +46,6 @@ class Public::MiscReleasesController < Public::BaseController
|
||||
.permit(
|
||||
person_params,
|
||||
guardian_params,
|
||||
questionnaire_params,
|
||||
:signature_base64,
|
||||
:locale,
|
||||
:contract_template,
|
||||
@@ -86,26 +85,6 @@ class Public::MiscReleasesController < Public::BaseController
|
||||
]
|
||||
end
|
||||
|
||||
def questionnaire_params
|
||||
[
|
||||
:question_1_answer,
|
||||
:question_2_answer,
|
||||
:question_3_answer,
|
||||
:question_4_answer,
|
||||
:question_5_answer,
|
||||
:question_6_answer,
|
||||
:question_7_answer,
|
||||
:question_8_answer,
|
||||
:question_9_answer,
|
||||
:question_10_answer,
|
||||
:question_11_answer,
|
||||
:question_12_answer,
|
||||
:question_13_answer,
|
||||
:question_14_answer,
|
||||
:question_15_answer,
|
||||
]
|
||||
end
|
||||
|
||||
def misc_release_params_with_locale
|
||||
misc_release_params.merge(locale: I18n.locale)
|
||||
end
|
||||
|
||||
@@ -4,7 +4,6 @@ class TaskRequestsController < ApplicationController
|
||||
before_action :set_project
|
||||
before_action :build_task_request, only: [:new, :create]
|
||||
before_action :set_task_request, only: [:show, :edit, :update, :cancel]
|
||||
before_action :show_splash_screen, only: :index
|
||||
|
||||
def index
|
||||
@task_requests = task_requests.order_by_recent.paginate(page: params[:page])
|
||||
@@ -19,7 +18,7 @@ class TaskRequestsController < ApplicationController
|
||||
if @task_request.save
|
||||
log_create_analytics
|
||||
taskme_url = url_for([:admin, @task_request])
|
||||
SubmitHubspotFormJob.perform_later(email: @task_request.user_email, taskme_url: taskme_url, form_guid: ENV["HUBSPOT_TASK_REQUEST_FORM_GUID"])
|
||||
SubmitHubspotTaskRequestFormJob.perform_later(@task_request.user_email, taskme_url)
|
||||
else
|
||||
render :new
|
||||
end
|
||||
@@ -47,10 +46,6 @@ class TaskRequestsController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def show_splash_screen
|
||||
render :splash if task_requests.count.zero?
|
||||
end
|
||||
|
||||
def task_request_params
|
||||
params.require(:task_request).permit(:description, :deadline, :time_allowed, :additional_notes, files: [])
|
||||
end
|
||||
|
||||
@@ -3,7 +3,6 @@ class VideosController < ApplicationController
|
||||
|
||||
before_action :set_project, only: [:index, :new, :create, :landing]
|
||||
before_action :set_video, only: [:edit, :update]
|
||||
before_action :show_splash_screen, only: :index
|
||||
|
||||
def landing
|
||||
authorize Video, :new?
|
||||
@@ -61,10 +60,6 @@ class VideosController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def show_splash_screen
|
||||
render :splash if videos.count.zero?
|
||||
end
|
||||
|
||||
def set_project
|
||||
@project = policy_scope(Project).find(params[:project_id])
|
||||
end
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
class GenerateInterviewFilesZipJob < ApplicationJob
|
||||
queue_as :default
|
||||
include Rails.application.routes.url_helpers
|
||||
include ActionView::Helpers::UrlHelper
|
||||
|
||||
before_perform do |job|
|
||||
@project = job.arguments.first
|
||||
@download = job.arguments.second
|
||||
@casting_call_interview = job.arguments.third
|
||||
@download.update!(status: :pending)
|
||||
end
|
||||
|
||||
def perform(project, download, casting_call_interview)
|
||||
::InterviewFilesCollectionService.new(casting_call_interview.files, @download.name).build do |dir, files|
|
||||
zipfile_name = "#{dir}/#{@download.name}.zip"
|
||||
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
|
||||
files.each do |attachment|
|
||||
zipfile.add(attachment, File.join("#{dir}/", attachment))
|
||||
end
|
||||
end
|
||||
|
||||
@download.file.attach(io: File.open(zipfile_name), filename: @download.name)
|
||||
end
|
||||
rescue StandardError => e
|
||||
Raven.extra_context(
|
||||
message: "Failed to generate download for project (##{project.id})",
|
||||
release_type: "CastingCallInterview"
|
||||
)
|
||||
|
||||
@download.failure!
|
||||
ProjectsChannel.broadcast_download_generation_update(@download, I18n.t("interview_downloads.download.failure"))
|
||||
end
|
||||
|
||||
after_perform do |job|
|
||||
if @download.pending? && @download.file.attached?
|
||||
@download.success!
|
||||
|
||||
downloads_folder_link = link_to("Files > Downloads", project_downloads_path(I18n.locale, @project))
|
||||
download_button = link_to("Download", rails_blob_path(@download.file, disposition: "attachment", only_path: true), class: "btn btn-success", target: :_blank)
|
||||
ProjectsChannel.broadcast_download_generation_update(@download, I18n.t("interview_downloads.download.success", downloads_folder_link: downloads_folder_link, download_button: download_button, release_type: "Casting Call Interview"))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,11 +1,19 @@
|
||||
class SubmitHubspotFormJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(params = {})
|
||||
return unless params[:form_guid].present?
|
||||
def perform(first_name, last_name, email, company_name, additional_params = {})
|
||||
hubspot_form_guid = ENV["HUBSPOT_FORM_GUID"]
|
||||
return unless hubspot_form_guid.present?
|
||||
|
||||
form = Hubspot::Form.new("guid" => params[:form_guid])
|
||||
is_form_sumitted = form.submit(params.except(:form_guid))
|
||||
submission_params = {
|
||||
first_name: first_name,
|
||||
last_name: last_name,
|
||||
email: email,
|
||||
company: company_name
|
||||
}.merge(additional_params)
|
||||
|
||||
form = Hubspot::Form.new("guid" => hubspot_form_guid)
|
||||
is_form_sumitted = form.submit(submission_params)
|
||||
|
||||
raise StandardError.new "Failed to submit the hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
|
||||
end
|
||||
|
||||
18
app/jobs/submit_hubspot_task_request_form_job.rb
Normal file
18
app/jobs/submit_hubspot_task_request_form_job.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
class SubmitHubspotTaskRequestFormJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(user_email, taskme_url)
|
||||
hubspot_task_request_form_guid = ENV["HUBSPOT_TASK_REQUEST_FORM_GUID"]
|
||||
return unless hubspot_task_request_form_guid.present?
|
||||
|
||||
submission_params = {
|
||||
email: user_email,
|
||||
taskme_url: taskme_url
|
||||
}
|
||||
|
||||
form = Hubspot::Form.new("guid" => hubspot_task_request_form_guid)
|
||||
is_form_sumitted = form.submit(submission_params)
|
||||
|
||||
raise StandardError.new "Failed to submit the task request hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
|
||||
end
|
||||
end
|
||||
@@ -4,8 +4,6 @@ class Account < ApplicationRecord
|
||||
has_many :account_auths
|
||||
has_many :users, through: :account_auths
|
||||
has_many :projects, dependent: :destroy
|
||||
has_many :casting_calls, through: :projects
|
||||
has_many :casting_call_interviews, through: :projects
|
||||
has_many :videos, through: :projects
|
||||
has_many :contract_templates, through: :projects
|
||||
|
||||
@@ -61,8 +59,6 @@ class Account < ApplicationRecord
|
||||
MedicalRelease.where(project: projects),
|
||||
MiscRelease.where(project: projects),
|
||||
MatchingRequest.where(project: projects),
|
||||
CastingCall.where(project: projects),
|
||||
self.casting_call_interviews,
|
||||
self
|
||||
])).sum(:byte_size).to_f
|
||||
end
|
||||
@@ -88,11 +84,7 @@ class Account < ApplicationRecord
|
||||
end
|
||||
|
||||
def taskme_enabled?
|
||||
ENV["TASKME_ENABLED"] && (plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme")
|
||||
end
|
||||
|
||||
def castme_enabled?
|
||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "castme"
|
||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme"
|
||||
end
|
||||
|
||||
def plan_name
|
||||
@@ -105,8 +97,6 @@ class Account < ApplicationRecord
|
||||
"ReleaseME"
|
||||
when "taskme"
|
||||
"TaskME"
|
||||
when "castme"
|
||||
"CastME"
|
||||
when "me_suite"
|
||||
"ME Suite"
|
||||
end
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
class CastingCall < ApplicationRecord
|
||||
belongs_to :project
|
||||
has_many :casting_call_interviews, dependent: :destroy
|
||||
|
||||
has_secure_token
|
||||
|
||||
def status
|
||||
if cancelled?
|
||||
"Cancelled"
|
||||
else
|
||||
"Active"
|
||||
end
|
||||
end
|
||||
|
||||
def cancelled?
|
||||
self.cancelled_at.present?
|
||||
end
|
||||
end
|
||||
@@ -1,38 +0,0 @@
|
||||
class CastingCallInterview < ApplicationRecord
|
||||
belongs_to :casting_call
|
||||
has_many_attached :files
|
||||
|
||||
has_secure_token
|
||||
|
||||
validates :performer_name, presence: true
|
||||
validate :zoom_meeting_url_validation
|
||||
|
||||
scope :completed, -> { where.not(interviewed_at: nil) }
|
||||
|
||||
def join_zoom_meeting_url
|
||||
uri = URI.parse(self.zoom_meeting_url)
|
||||
zoom_meeting_id = uri.path.gsub("/j/", "")
|
||||
zoom_meeting_pwd = uri.query.gsub("pwd=", "")
|
||||
|
||||
"zoommtg://zoom.us/join?confno=#{zoom_meeting_id}&pwd=#{zoom_meeting_pwd}"
|
||||
end
|
||||
|
||||
def zip_file_name
|
||||
"#{self.casting_call.title.parameterize}_#{self.performer_name.parameterize}_#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}"
|
||||
end
|
||||
|
||||
def zoom_meeting_url_validation
|
||||
# valid url format :
|
||||
# https://us01web.zoom.us/j/12345?pwd=Ab103odw3ok343ko
|
||||
valid_url_regex = %r{^https\://[a-z0-9]+\.zoom.us/j/[0-9]+\?pwd\=.+}
|
||||
return true if zoom_meeting_url.match valid_url_regex
|
||||
|
||||
errors.add(:base, invalid_meeting_url_message)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def invalid_meeting_url_message
|
||||
I18n.t('casting_call_interviews.validation_errors.invalid_meeting_url')
|
||||
end
|
||||
end
|
||||
@@ -5,8 +5,6 @@ class ContractTemplate < ApplicationRecord
|
||||
include Syncable
|
||||
include PgSearch
|
||||
|
||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||
|
||||
belongs_to :project
|
||||
belongs_to :parent, class_name: 'ContractTemplate', optional: true
|
||||
has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id'
|
||||
@@ -61,8 +59,4 @@ class ContractTemplate < ApplicationRecord
|
||||
def archive
|
||||
update(archived_at: Time.zone.now)
|
||||
end
|
||||
|
||||
def has_questionnaire?
|
||||
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -14,37 +14,15 @@ class MedicalRelease < ApplicationRecord
|
||||
|
||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||
|
||||
composed_of :person_address,
|
||||
composed_of :person_address,
|
||||
class_name: "Address",
|
||||
mapping: [
|
||||
%w[person_address_street1 street1],
|
||||
%w[person_address_street2 street2],
|
||||
%w[person_address_city city],
|
||||
%w[person_address_state state],
|
||||
%w[person_address_zip zip],
|
||||
%w[person_address_country country]
|
||||
]
|
||||
|
||||
composed_of :guardian_address,
|
||||
class_name: 'Address',
|
||||
mapping: [
|
||||
%w[guardian_address_street1 street1],
|
||||
%w[guardian_address_street2 street2],
|
||||
%w[guardian_address_city city],
|
||||
%w[guardian_address_state state],
|
||||
%w[guardian_address_zip zip],
|
||||
%w[guardian_address_country country]
|
||||
]
|
||||
|
||||
composed_of :guardian_2_address,
|
||||
class_name: 'Address',
|
||||
mapping: [
|
||||
%w[guardian_2_address_street1 street1],
|
||||
%w[guardian_2_address_street2 street2],
|
||||
%w[guardian_2_address_city city],
|
||||
%w[guardian_2_address_state state],
|
||||
%w[guardian_2_address_zip zip],
|
||||
%w[guardian_2_address_country country]
|
||||
mapping: [
|
||||
%w(person_address_street1 street1),
|
||||
%w(person_address_street2 street2),
|
||||
%w(person_address_city city),
|
||||
%w(person_address_state state),
|
||||
%w(person_address_zip zip),
|
||||
%w(person_address_country country)
|
||||
]
|
||||
|
||||
def self.face_photo_acceptable_content_types
|
||||
@@ -54,7 +32,6 @@ class MedicalRelease < ApplicationRecord
|
||||
# These validations apply to all releases
|
||||
validates :person_first_name, :person_last_name, presence: true
|
||||
validates :person_email, email: true, allow_blank: true
|
||||
validate :valid_answers
|
||||
|
||||
acts_as_taggable_on :internal_tags, :tags
|
||||
|
||||
@@ -99,15 +76,4 @@ class MedicalRelease < ApplicationRecord
|
||||
def contract_file_name
|
||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def valid_answers
|
||||
(1..ContractTemplate::NUMBER_OF_CUSTOM_FIELDS).each do |index|
|
||||
if contract_template && contract_template["question_#{index}_text"].present? &&
|
||||
public_send("question_#{index}_answer").blank?
|
||||
errors.add("question_#{index}", I18n.t('medical_releases.custom_validation_errors.question_answer_is_required'))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -10,8 +10,6 @@ class MiscRelease < ApplicationRecord
|
||||
include GuardianName
|
||||
include GuardianPhotoable
|
||||
|
||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||
|
||||
composed_of :person_address,
|
||||
class_name: "Address",
|
||||
mapping: [
|
||||
|
||||
@@ -15,8 +15,6 @@ class Project < ApplicationRecord
|
||||
has_many :talent_releases, dependent: :destroy
|
||||
has_many :medical_releases, dependent: :destroy
|
||||
has_many :misc_releases, dependent: :destroy
|
||||
has_many :casting_calls, dependent: :destroy
|
||||
has_many :casting_call_interviews, through: :casting_calls
|
||||
has_many :videos, dependent: :destroy
|
||||
has_many :imports, dependent: :destroy
|
||||
has_many :contract_templates, dependent: :destroy
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
class CastingCallInterviewPolicy < ApplicationPolicy
|
||||
def index?
|
||||
true
|
||||
end
|
||||
|
||||
def show?
|
||||
true
|
||||
end
|
||||
|
||||
def create?
|
||||
true
|
||||
end
|
||||
|
||||
def destroy?
|
||||
true
|
||||
end
|
||||
|
||||
def update?
|
||||
true
|
||||
end
|
||||
|
||||
def complete?
|
||||
true
|
||||
end
|
||||
|
||||
def download?
|
||||
true
|
||||
end
|
||||
end
|
||||
@@ -1,25 +0,0 @@
|
||||
class CastingCallPolicy < ApplicationPolicy
|
||||
def index?
|
||||
true
|
||||
end
|
||||
|
||||
def show?
|
||||
true
|
||||
end
|
||||
|
||||
def create?
|
||||
true
|
||||
end
|
||||
|
||||
def destroy?
|
||||
true
|
||||
end
|
||||
|
||||
def update?
|
||||
true
|
||||
end
|
||||
|
||||
def cancel?
|
||||
true
|
||||
end
|
||||
end
|
||||
@@ -40,8 +40,4 @@ class ProjectPolicy < ApplicationPolicy
|
||||
def show_task_results?
|
||||
show?
|
||||
end
|
||||
|
||||
def show_casting_call_interview_results?
|
||||
show?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
class InterviewFilesCollectionService
|
||||
def initialize(files, folder_name)
|
||||
@files = files
|
||||
@folder_name = folder_name
|
||||
end
|
||||
|
||||
def build
|
||||
Dir.mktmpdir { |dir|
|
||||
files.each do |file|
|
||||
open("#{dir}/#{file.filename}", 'wb') do |tmp_file|
|
||||
tmp_file << open(file.service_url.to_s).read
|
||||
end
|
||||
end
|
||||
|
||||
read_files = Dir.entries("#{dir}/").select { |f| !File.directory? f }
|
||||
raise StandardError.new "Files not found." unless read_files.any?
|
||||
yield(dir, read_files)
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :files, :folder_name
|
||||
end
|
||||
@@ -169,24 +169,6 @@ class Analytics
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def track_create_casting_call(user_agent:, user_ip:)
|
||||
if analytics_enabled?
|
||||
identify
|
||||
track(
|
||||
{
|
||||
user_id: user.id,
|
||||
event: "Casting call created",
|
||||
properties: {
|
||||
account: account.try(:name),
|
||||
account_id: account.try(:id),
|
||||
user_agent: user_agent,
|
||||
ip: user_ip,
|
||||
},
|
||||
}
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
<li class="nav-item">
|
||||
<%= link_to fa_icon("tasks fw", text: "Task Requests"), [:admin, :task_requests], class: class_string("nav-link", "active" => controller_name == "task_requests") %>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<%= link_to fa_icon("video-camera fw", text: "Casting Call Interviews"), [:admin, :casting_call_interviews], class: class_string("nav-link", "active" => controller_name == "casting_call_interviews") %>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<%= link_to fa_icon("bug fw", text: "Errors"), "https://sentry.io/bigmedia/", class: "nav-link", target: :_blank %>
|
||||
</li>
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<tr id="<%= dom_id(casting_call_interview) %>">
|
||||
<td>
|
||||
<%= casting_call_interview.casting_call.project.account.name.titleize %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_call_interview.casting_call.title.titleize %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_call_interview.performer_name %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_call_interview.interview_date %>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<div class="btn-group">
|
||||
<%= button_tag "Manage", class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<%= link_to fa_icon("video-camera", text: "View"), casting_call_interview_url(token: casting_call_interview.token), target: "_blank", class: "dropdown-item" %>
|
||||
<%= link_to fa_icon("pencil", text: "Edit"), [:edit, :admin, casting_call_interview], class: "dropdown-item" %>
|
||||
<% unless casting_call_interview.interviewed_at.present? %>
|
||||
<%= link_to fa_icon("check", text: "Complete"), [:complete, :admin, casting_call_interview], method: :post, class: "dropdown-item" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1,15 +0,0 @@
|
||||
<%= errors_summary_for casting_call_interview %>
|
||||
|
||||
<%= bootstrap_form_with model: model, local: true do |form| %>
|
||||
<%= form.text_field :performer_name, required: true %>
|
||||
<%= form.grouped_collection_select(:casting_call_id, @accounts, :casting_calls, :name, :id, :title, { prompt: "Select a Casting Call", required: true, class: "form-control custom-select" }) %>
|
||||
<%= form.text_field :interview_date, class: "datepicker-control" %>
|
||||
<%= form.text_field :zoom_meeting_url %>
|
||||
|
||||
<div class="row align-items-center text-center mt-4">
|
||||
<%= link_to t("shared.cancel"), [:admin, :casting_call_interviews], class: "col-3 text-reset" %>
|
||||
<div class="col-9">
|
||||
<%= form.submit class: class_string("btn btn-block", ["btn-success", "btn-primary"] => casting_call_interview.new_record?), data: { disable_with: t("shared.disable_with") } %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,6 +0,0 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: "Edit Casting Call Interview", close_action_path: [:admin, :casting_call_interviews] %>
|
||||
<div class="card-body">
|
||||
<%= render "form", model: [:admin, @casting_call_interview], casting_call_interview: @casting_call_interview %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,32 +0,0 @@
|
||||
<div class="d-flex flex-row justify-content-between align-items-center mb-3">
|
||||
<% if policy(CastingCall).new? %>
|
||||
<%= link_to fa_icon("plus", text: t(".actions.new")), [:new, :admin, :casting_call_interview], class: "btn btn-primary mb-3" %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="border bg-white rounded shadow-sm pb-3 table-responsive">
|
||||
<table class="table table-striped tr-px-4 align-all-middle">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th>Account Name</th>
|
||||
<th>Casting Call Request</th>
|
||||
<th>Perfomer's Name</th>
|
||||
<th>Interview Date</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="users">
|
||||
<% if @casting_call_interviews.any? %>
|
||||
<%= render @casting_call_interviews %>
|
||||
<% else %>
|
||||
<tr>
|
||||
<td colspan="20" class="py-4 text-center text-muted"><%= t(".empty") %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="casting_call_interviews_pagination" class="mt-3">
|
||||
<%= will_paginate @casting_call_interviews %>
|
||||
</div>
|
||||
@@ -1,6 +0,0 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: t(".heading"), close_action_path: [:admin, :casting_call_interviews] %>
|
||||
<div class="card-body">
|
||||
<%= render "form", model: [:admin, @casting_call_interview], casting_call_interview: @casting_call_interview, casting_calls: @casting_calls %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -11,14 +11,12 @@
|
||||
<hr class="divider-light mx-n4">
|
||||
<nav>
|
||||
<ul class="nav nav-pills nav-pills-dark flex-column">
|
||||
<% if Current.account.taskme_enabled? %>
|
||||
<li class="nav-item">
|
||||
<%= link_to [project, :task_requests], class: class_string("nav-link", "active" => controller_name == "task_requests") do %>
|
||||
<%= lock_icon_for(Current.account, :taskme) %>
|
||||
<%= product_wordmark :task_me, class: class_string("d-inline-block", "disabled" => !Current.account.taskme_enabled?) %>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
<li class="nav-item">
|
||||
<%= link_to [project, :task_requests], class: class_string("nav-link", "active" => controller_name == "task_requests") do %>
|
||||
<%= lock_icon_for(Current.account, :taskme) %>
|
||||
<%= product_wordmark :task_me, class: class_string("d-inline-block", "disabled" => !Current.account.taskme_enabled?) %>
|
||||
<% end %>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<%= link_to [project, :contract_templates], class: class_string("nav-link", "active" => %w(contract_templates release_template_imports).include?(controller_name)) do %>
|
||||
<%= lock_icon_for Current.account, :releaseme %>
|
||||
@@ -43,12 +41,6 @@
|
||||
<%= product_wordmark :deliver_me, class: class_string("d-inline-block", "disabled" => !Current.account.deliverme_enabled?) %>
|
||||
<% end %>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<%= link_to [project, :casting_calls], class: class_string("nav-link", "active" => controller_name == "casting_calls") do %>
|
||||
<%= lock_icon_for(Current.account, :castme) %>
|
||||
<%= product_wordmark :cast_me, class: class_string("d-inline-block", "disabled" => !Current.account.castme_enabled?) %>
|
||||
<% end %>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<hr class="divider-light mx-n4">
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
<div class="d-flex flex-row">
|
||||
<div class="d-flex flex-column">
|
||||
<%= product_wordmark :direct_me, prefix: t('.headings.welcome'), class: "h2" %>
|
||||
<p class="text-muted"><%= t '.headings.subtitle' %>
|
||||
</div>
|
||||
|
||||
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
|
||||
<% if policy(Broadcast).new? %>
|
||||
<%= link_to t(".actions.create_stream"), [:new, @project, :broadcast], class: "btn btn-success border align-self-center h-50 pb-2" %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="pt-2">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card-body p-0">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="embed-responsive-item">
|
||||
<iframe src="https://player.vimeo.com/video/435200320?app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen" allowfullscreen title="DirectME_How to_V5"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3><%= t '.headings.how_it_works' %></h3>
|
||||
<ol>
|
||||
<li><%= t '.list_items.create_stream' %></li>
|
||||
<li><%= t '.list_items.share_stream' %></li>
|
||||
<li><%= t '.list_items.launch_video_conference' %></li>
|
||||
<li><%= t '.list_items.share_files' %></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3><%= t '.headings.benefits' %></h3>
|
||||
<ul class="fa-ul ml-5">
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.stream_from_mobile_app'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.direct_shoots_anywhere'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.share_live_stream'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.stream_multiple_cameras'))) %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,27 +0,0 @@
|
||||
<tr id="<%= dom_id(casting_call_interview) %>">
|
||||
<td>
|
||||
<%= casting_call_interview.casting_call.project.account.name.titleize %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_call_interview.casting_call.title&.titleize %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_call_interview.performer_name %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_call_interview.interviewed_at %>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<div class="btn-group">
|
||||
<%= button_tag "Manage", class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<% if policy(CastingCallInterview).show? %>
|
||||
<%= link_to fa_icon("video-camera", text: "View"), [@project, casting_call_interview], target: "_blank", class: "dropdown-item" %>
|
||||
<% end %>
|
||||
<% if policy(CastingCallInterview).download? %>
|
||||
<%= link_to fa_icon("download", text: "Download"), [@project, :interview_downloads, casting_call_interview_id: casting_call_interview.id], method: :post, remote: true, class: "dropdown-item" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1,6 +0,0 @@
|
||||
<tr>
|
||||
<td><%= file.filename %></td>
|
||||
<td class="text-right">
|
||||
<%= link_to fa_icon("download"), file, target: "_blank" %>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1,26 +0,0 @@
|
||||
<div class="border bg-white rounded shadow-sm pb-3 table-responsive">
|
||||
<table class="table table-striped tr-px-4 align-all-middle">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th>Account Name</th>
|
||||
<th>Casting Call Request</th>
|
||||
<th>Perfomer's Name</th>
|
||||
<th>Interviewed At</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="users">
|
||||
<% if @casting_call_interviews.any? %>
|
||||
<%= render @casting_call_interviews %>
|
||||
<% else %>
|
||||
<tr>
|
||||
<td colspan="20" class="py-4 text-center text-muted"><%= t(".empty") %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="casting_call_interviews_pagination" class="mt-3">
|
||||
<%= will_paginate @casting_call_interviews %>
|
||||
</div>
|
||||
@@ -1,25 +0,0 @@
|
||||
<div class="col-md-12">
|
||||
<h2 class="h6 mt-3">Files:</h2>
|
||||
<div class="pt-2 mx-n3">
|
||||
<table class="table table-striped tr-px-4 align-all-middle">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th>Filename</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="task_requests">
|
||||
<% if @files.any? %>
|
||||
<%= render partial: "file", collection: @files %>
|
||||
<% else %>
|
||||
<tr>
|
||||
<td colspan="12" class="py-4 text-center text-muted"><%= t(".empty") %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="mt-4" id="task_requests_pagiantion">
|
||||
<%= will_paginate @files %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,28 +0,0 @@
|
||||
<tr>
|
||||
<td>
|
||||
<%= casting_call.created_at.strftime('%D') %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_call.title %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_call.status %>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<div class="btn-group">
|
||||
<%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<%= link_to fa_icon("link fw", text: "Copy Audition URL"), casting_call_url(casting_call.token), class: "dropdown-item", data: { behavior: "clipboard" } %>
|
||||
<% if policy(casting_call).show? %>
|
||||
<%= link_to fa_icon("tasks fw", text: "View"), [casting_call.project, casting_call], class: "dropdown-item", target: '_blank' %>
|
||||
<% end %>
|
||||
<% if policy(casting_call).edit? %>
|
||||
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, casting_call.project, casting_call], class: "dropdown-item" %>
|
||||
<% end %>
|
||||
<% if policy(casting_call).cancel? && !casting_call.cancelled? %>
|
||||
<%= link_to fa_icon("ban fw", text: "Cancel"), [:cancel, casting_call.project, casting_call], class: "dropdown-item", method: :post %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1,22 +0,0 @@
|
||||
<%= errors_summary_for casting_call %>
|
||||
|
||||
<%= bootstrap_form_with model: model, url: [@project, @casting_call, show_chat: true], local: true do |form| %>
|
||||
<div class="alert alert-info text-center text-md-left">
|
||||
<%= fa_icon "info-circle" %>
|
||||
<strong><%= t '.info_message' %></strong>
|
||||
</div>
|
||||
|
||||
<%= form.text_field :title, label: t('.labels.title') %>
|
||||
<%= form.text_area :description, label: t('.labels.description') %>
|
||||
<%= form.text_area :project_description, label: t('.labels.project_description') %>
|
||||
<%= form.text_area :interview_instructions, label: t('.labels.interview_instructions') %>
|
||||
<%= form.text_area :interview_requirements, label: t('.labels.interview_requirements') %>
|
||||
<%= form.text_area :questions, label: t('.labels.questions') %>
|
||||
|
||||
<div class="row align-items-center text-center mt-4">
|
||||
<%= link_to t("shared.cancel"), [project, :casting_calls], class: "col-3 text-reset" %>
|
||||
<div class="col-9">
|
||||
<%= form.submit class: class_string("btn btn-block", ["btn-success", "btn-primary"] => casting_call.new_record?), data: { disable_with: t("shared.disable_with") } %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,2 +0,0 @@
|
||||
<%= render "shared/initiate_hubspot_chat" %>
|
||||
<p class="alert alert-success p-3 lead text-center"><%= t '.success_message' %></p>
|
||||
@@ -1,6 +0,0 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: t(".heading"), close_action_path: [@project, :casting_calls] %>
|
||||
<div class="card-body">
|
||||
<%= render "form", model: [@project, @casting_call], casting_call: @casting_call, project: @project %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,37 +0,0 @@
|
||||
<%= product_wordmark :cast_me, class: "small mb-3" %>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="d-md-flex d-sm-flex flex-sm-column flex-md-row flex-md-wrap mb-3">
|
||||
<% if policy(CastingCall).new? %>
|
||||
<%= link_to fa_icon("plus", text: t(".actions.new")), [:new, @project, :casting_call], class: "btn btn-primary mb-2" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border bg-white rounded shadow-sm pb-3 table-responsive">
|
||||
<table class="table table-striped tr-px-4 align-all-middle">
|
||||
<thead class="thead-light">
|
||||
<tr>
|
||||
<th><%= t(".table_headers.casting_call_created_on") %></th>
|
||||
<th><%= t(".table_headers.casting_call_title") %></th>
|
||||
<th><%= t(".table_headers.casting_call_status") %></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="casting_calls">
|
||||
<% if @casting_calls.any? %>
|
||||
<%= render @casting_calls %>
|
||||
<% else %>
|
||||
<tr>
|
||||
<td colspan="20" class="py-4 text-center text-muted"><%= t(".empty") %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="casting_calls_pagination" class="mt-3">
|
||||
<%= will_paginate @casting_calls %>
|
||||
</div>
|
||||
@@ -1,6 +0,0 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: t(".heading"), close_action_path: [@project, :casting_calls] %>
|
||||
<div class="card-body">
|
||||
<%= render "form", model: [@project, @casting_call], casting_call: @casting_call, project: @project %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,38 +0,0 @@
|
||||
<% content_for :header do %>
|
||||
<header class="container-fluid py-3 border-bottom sticky-top bg-light">
|
||||
<div class="row align-items-center justify-content-center">
|
||||
<div class="col-4 text-center">
|
||||
<%= product_wordmark(:cast_me, class: 'navbar-brand') %>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<% end %>
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: @casting_call.title, close_action_path: [@project, :casting_calls] %>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<dl>
|
||||
<%= description_list_pair_for @casting_call, :title, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :description, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :project_description, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :created_at, append: ":" %>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<dl>
|
||||
<%= description_list_pair_for @casting_call, :status, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :interview_instructions, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :interview_requirements, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :questions, append: ":" %>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<% unless @casting_call.cancelled? %>
|
||||
<div class="row align-items-center justify-content-center mt-3">
|
||||
<%= link_to "Schedule an Audition", ENV["CASTME_AUDITION_BOOKING_URL"], target: "_blank", class: "btn btn-primary" %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2,7 +2,7 @@
|
||||
<%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :name, wrapper_class: "col-sm-6" %>
|
||||
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc) } }, class: "form-control custom-select" %>
|
||||
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical) } }, class: "form-control custom-select" %>
|
||||
</div>
|
||||
<div class="form-row" id="fee_field">
|
||||
<%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", wrapper_class: "col-sm-6" %>
|
||||
|
||||
@@ -18,7 +18,15 @@
|
||||
<div class="card-body p-0">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="embed-responsive-item">
|
||||
<iframe src="https://player.vimeo.com/video/435200486?app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen" allowfullscreen title="ReleaseME_How to_V5"></iframe>
|
||||
<table class="w-100 h-100 bg-secondary">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center align-middle text-white">
|
||||
Video tutorial will be available soon
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<p class="heading"><strong><u><%= t ".heading.#{releasable.model_name.param_key}" %></u></strong></p>
|
||||
<p class="heading"><strong><u><%= t ".heading" %></u></strong></p>
|
||||
|
||||
<% (1..releasable.class::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<% if contract_template.public_send("question_#{n}_text").present? %>
|
||||
<p><strong><%= contract_template.public_send("question_#{n}_text") %></strong></p>
|
||||
<p><%= releasable.public_send("question_#{n}_answer") %></p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -16,9 +16,9 @@
|
||||
<%= contract_template.guardian_clause %>
|
||||
<% end %>
|
||||
|
||||
<% if releasable.model_name.in? %w(MedicalRelease MiscRelease) %>
|
||||
<% if releasable.model_name == "MedicalRelease" %>
|
||||
<div class="page">
|
||||
<%= render "contracts/questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
|
||||
<%= render "contracts/medical_questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<p>Your <%= release_type.titleize %> files are being prepared for download. You will be notified when it's ready.
|
||||
</p>
|
||||
<p class="mt-3">The following downloads are also in progress:</p>
|
||||
<ul>
|
||||
<% downloads.each do |download| %>
|
||||
<% if download.release_type == "reports"%>
|
||||
<li><%= download.release_type.titleize %> (as of <%= time_ago_in_words(download.created_at) %> ago)
|
||||
</li>
|
||||
<% elsif download.release_type == "CastingCallInterview"%>
|
||||
<li><%= download.release_type.titleize %> files (as of <%= time_ago_in_words(download.created_at) %> ago)
|
||||
</li>
|
||||
<% else %>
|
||||
<li><%= download.release_type.titleize %> contracts (as of <%= time_ago_in_words(download.created_at) %> ago)
|
||||
</li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</ul>
|
||||
@@ -21,11 +21,6 @@
|
||||
<%= link_to t("projects.show.tasks"), [@project, :tasks], class: "text-decoration-none text-reset stretched-link" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if policy(Project).show_casting_call_interview_results? %>
|
||||
<%= render "folder_card" do %>
|
||||
<%= link_to t("projects.show.casting_call_interviews"), [@project, :casting_call_interviews], class: "text-decoration-none text-reset stretched-link" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
<% unless @contract_template.guardian_clause.blank? %>
|
||||
<%= form.form_group :minor do %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<% end %>
|
||||
|
||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||
@@ -72,12 +72,12 @@
|
||||
<div class="<%= class_string("collapse" => !@appearance_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||
<%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor?, data: { required_tag: "guardian" } %>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor? %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: "Casting call interview details" %>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<dl>
|
||||
<%= description_list_pair_for @casting_call_interview, :performer_name, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call_interview, :interview_date, append: ":" %>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<h6>INTERVIEW FILES:</h6>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: t(".heading") %>
|
||||
<div class="card-body">
|
||||
<%= errors_summary_for @casting_call_interview %>
|
||||
<%= bootstrap_form_with model: @casting_call_interview, url: casting_call_interview_path(token: @casting_call_interview.token), local: true do |form| %>
|
||||
<div class="field d-none">
|
||||
<%= form.label :files %>
|
||||
<%= form.file_field :files, disable: true, direct_upload: true, multiple: true, id: "casting_call_interivew_files", hide_label: true %>
|
||||
<% @casting_call_interview.files.each do |file| %>
|
||||
<% unless file.persisted? %>
|
||||
<%= hidden_field_tag "#{@casting_call_interview.model_name.param_key}[files][]", file.signed_id %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="dropzone field border-dashed"
|
||||
data-accepted-files="audio/*,image/*,video/*"
|
||||
data-behavior="dropzone"
|
||||
data-file-input-id="casting_call_interivew_files"
|
||||
data-existing-files="<%= mock_photos_json(@casting_call_interview.files) %>"
|
||||
data-placeholder="<%= dropzone_placeholder_message_for(@casting_call_interview) %>"
|
||||
data-submit-button="#submit_folder"></div>
|
||||
|
||||
<div class="mt-5">
|
||||
<%= form.button t(".update"), class: "btn btn-block btn-lg btn-success", data: { disable_with: t("shared.disable_with") } %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row align-items-center justify-content-center mt-3">
|
||||
<%= link_to "Start Interview", @casting_call_interview.join_zoom_meeting_url, target: "_blank", class: "btn btn-primary" %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,38 +0,0 @@
|
||||
<% content_for :header do %>
|
||||
<header class="container-fluid py-3 border-bottom sticky-top bg-light">
|
||||
<div class="row align-items-center justify-content-center">
|
||||
<div class="col-4 text-center">
|
||||
<%= product_wordmark(:cast_me, class: 'navbar-brand') %>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<% end %>
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: @casting_call.title %>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<dl>
|
||||
<%= description_list_pair_for @casting_call, :title, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :description, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :project_description, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :created_at, append: ":" %>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<dl>
|
||||
<%= description_list_pair_for @casting_call, :status, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :interview_instructions, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :interview_requirements, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :questions, append: ":" %>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<% unless @casting_call.cancelled? %>
|
||||
<div class="row align-items-center justify-content-center mt-3">
|
||||
<%= link_to "Schedule an Audition", ENV["CASTME_AUDITION_BOOKING_URL"], target: "_blank", class: "btn btn-primary" %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
<% unless @contract_template.guardian_clause.blank? %>
|
||||
<%= form.form_group :minor do %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.medical_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.medical_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<% end %>
|
||||
|
||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||
@@ -30,7 +30,7 @@
|
||||
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<% if @contract_template.public_send("question_#{n}_text").present? %>
|
||||
<div class="form-row">
|
||||
<%= form.text_area "question_#{n}_answer", required: true, wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -59,12 +59,14 @@
|
||||
<div class="<%= class_string("collapse" => !@medical_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||
<%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor?, data: { required_tag: "guardian" } %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor? %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
<% unless @contract_template.guardian_clause.blank? %>
|
||||
<%= form.form_group :minor do %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<% end %>
|
||||
|
||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||
@@ -20,19 +20,6 @@
|
||||
<hr>
|
||||
<% end %>
|
||||
|
||||
<% if @contract_template.has_questionnaire? %>
|
||||
<%= card_field_set_tag t(".questionnaire.heading") do %>
|
||||
<% (1..MiscRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<% if @contract_template.public_send("question_#{n}_text").present? %>
|
||||
<div class="form-row">
|
||||
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr>
|
||||
<% end %>
|
||||
|
||||
<%= card_field_set_tag t(".personal_info.heading") do %>
|
||||
<div class="alert alert-warning font-weight-bold"><%= t ".personal_info.instructions" %></div>
|
||||
<div class="form-row">
|
||||
@@ -56,12 +43,14 @@
|
||||
<div class="<%= class_string("collapse" => !@misc_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian" %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
<% unless @contract_template.guardian_clause.blank? %>
|
||||
<%= form.form_group :minor do %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<% end %>
|
||||
|
||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||
@@ -46,12 +46,12 @@
|
||||
<div class="<%= class_string("collapse" => !@talent_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||
<%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian" %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
<% field_name_prefix = subject.present? ? "#{subject}_" : "" %>
|
||||
<% required = required || false %>
|
||||
<% data = data || nil %>
|
||||
|
||||
<div class="form-row">
|
||||
<%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6", data: data %>
|
||||
<%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_street2", wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6", data: data %>
|
||||
<%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3", data: data %>
|
||||
<%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3", data: data %>
|
||||
<%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3" %>
|
||||
</div>
|
||||
<%= form.form_group "#{field_name_prefix}address_country" do %>
|
||||
<%= form.label "#{field_name_prefix}address_country" %>
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
<% if params[:show_chat] %>
|
||||
<%= javascript_include_tag "//js.hs-scripts.com/7344617.js", defer: "defer", async: true, id: "hs-script-loader" %>
|
||||
<%= javascript_tag nonce: true do %>
|
||||
function onConversationsAPIReady() {
|
||||
window.HubSpotConversations.widget.load({ widgetOpen: true });
|
||||
window.HubSpotConversations.widget.open();
|
||||
}
|
||||
if (window.HubSpotConversations) {
|
||||
onConversationsAPIReady();
|
||||
} else {
|
||||
window.hsConversationsOnReady = [onConversationsAPIReady];
|
||||
}
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
@@ -1,2 +1,15 @@
|
||||
<%= render "shared/initiate_hubspot_chat" %>
|
||||
<p class="alert alert-success p-3 lead text-center"><%= t '.success_message' %></p>
|
||||
<% if params[:show_chat] %>
|
||||
<%= javascript_include_tag "//js.hs-scripts.com/7344617.js", defer: "defer", async: true, id: "hs-script-loader" %>
|
||||
<%= javascript_tag nonce: true do %>
|
||||
function onConversationsAPIReady() {
|
||||
window.HubSpotConversations.widget.load({ widgetOpen: true });
|
||||
window.HubSpotConversations.widget.open();
|
||||
}
|
||||
if (window.HubSpotConversations) {
|
||||
onConversationsAPIReady();
|
||||
} else {
|
||||
window.hsConversationsOnReady = [onConversationsAPIReady];
|
||||
}
|
||||
<% end %>
|
||||
<% end %>
|
||||
<p class="alert alert-success p-3 lead text-center"><%= t '.success_message' %></p>
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
<div class="d-flex flex-row">
|
||||
<div class="d-flex flex-column">
|
||||
<%= product_wordmark :task_me, prefix: t('.headings.welcome'), class: "h2" %>
|
||||
<p class="text-muted"><%= t '.headings.subtitle' %>
|
||||
</div>
|
||||
|
||||
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
|
||||
<% if policy(TaskRequest).new? %>
|
||||
<%= link_to t(".actions.create_task_request"), [:new, @project, :task_request], class: "btn btn-success border align-self-center h-50 pb-2" %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="pt-2">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card-body p-0">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="embed-responsive-item">
|
||||
<table class="w-100 h-100 bg-secondary">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center align-middle text-white">
|
||||
Video tutorial will be available soon
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3><%= t '.headings.how_it_works' %></h3>
|
||||
<ol>
|
||||
<li><%= t '.list_items.enter_task_request' %></li>
|
||||
<li><%= t '.list_items.state_deadline' %></li>
|
||||
<li><%= t '.list_items.enter_number_of_hours' %></li>
|
||||
<li><%= t '.list_items.virtual_assistant_delivers_task' %></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3><%= t '.headings.benefits' %></h3>
|
||||
<ul class="fa-ul ml-5">
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_need_for_full_time_staff'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_workload'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.spend_per_task'))) %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,51 +0,0 @@
|
||||
<div class="d-flex flex-row">
|
||||
<div class="d-flex flex-column">
|
||||
<%= product_wordmark :deliver_me, prefix: t('.headings.welcome'), class: "h2" %>
|
||||
<p class="text-muted"><%= t '.headings.subtitle' %>
|
||||
</div>
|
||||
|
||||
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
|
||||
<% if policy(Video).new? %>
|
||||
<%= link_to t(".actions.upload_video"), [:new, @project, :video], class: "btn btn-success border align-self-center h-50 pb-2" %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="pt-2">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="card-body p-0">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="embed-responsive-item">
|
||||
<iframe src="https://player.vimeo.com/video/435200434?app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen" allowfullscreen title="DeliverME_How to_V5"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3><%= t '.headings.how_it_works' %></h3>
|
||||
<ol>
|
||||
<li><%= t '.list_items.import_video' %></li>
|
||||
<li><%= t '.list_items.import_EDLs' %></li>
|
||||
<li><%= t '.list_items.AI_generates_documents' %></li>
|
||||
<li><%= t '.list_items.download_documents' %></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3><%= t '.headings.benefits' %></h3>
|
||||
<ul class="fa-ul ml-5">
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_labor_cost'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.more_accurate'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.simplifies_cue_sheets'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.production_elements_logs'))) %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -97,22 +97,6 @@ en:
|
||||
application:
|
||||
header:
|
||||
sign_out: Sign Out
|
||||
casting_call_interviews:
|
||||
complete:
|
||||
notice: The casting call interview has been completed
|
||||
create:
|
||||
notice: The casting call interview has been created
|
||||
index:
|
||||
actions:
|
||||
new: Create Casting Call Interview
|
||||
empty: Casting call interviews will appear here
|
||||
mark_as_completed:
|
||||
alert: Failed to mark casting call interview as completed
|
||||
notice: The casting call interview has been marked as completed
|
||||
new:
|
||||
heading: New Casting Call Interview
|
||||
update:
|
||||
notice: The casting call interview has been updated
|
||||
task_requests:
|
||||
index:
|
||||
empty: Task requests will appear here
|
||||
@@ -223,66 +207,9 @@ en:
|
||||
new:
|
||||
heading:
|
||||
Create Live Stream
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo
|
||||
create_stream: Create New Live Stream
|
||||
headings:
|
||||
benefits: Benefits
|
||||
how_it_works: How It Works
|
||||
subtitle: Remote directing and video village solution
|
||||
welcome: Welcome to
|
||||
list_items:
|
||||
create_stream: Create a live stream
|
||||
direct_shoots_anywhere: Direct shoots anywhere around the world
|
||||
launch_video_conference: Launch Video Conference using plugin
|
||||
share_files: Share files via the ME Suite mobile app
|
||||
share_live_stream: Share live stream with clients all over the the world
|
||||
share_stream: Share live stream link with clients
|
||||
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
||||
stream_multiple_cameras: Stream multiple cameras at one time
|
||||
bulk_taggings:
|
||||
new_bulk_tag_modal:
|
||||
submit: Add
|
||||
casting_call_interviews:
|
||||
index:
|
||||
empty: Casting Call Interview results will appear here.
|
||||
show:
|
||||
empty: Interview files and recorded meeetings will appear here.
|
||||
validation_errors:
|
||||
invalid_meeting_url: Zoom Meeting URL is invalid
|
||||
casting_calls:
|
||||
cancel:
|
||||
notice: The casting call request has been cancelled successfully
|
||||
casting_call:
|
||||
actions:
|
||||
manage: Manage
|
||||
create:
|
||||
notice: The casting call request has been created
|
||||
success_message: Your casting call request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds.
|
||||
edit:
|
||||
heading: Edit Casting Call
|
||||
form:
|
||||
info_message: After submitting this casting call request, you'll be connected via chat with a ME Suite representative.
|
||||
labels:
|
||||
description: Description
|
||||
interview_instructions: Interview instructions
|
||||
interview_requirements: Interview requirements
|
||||
project_description: Project description
|
||||
questions: Questions
|
||||
title: Title
|
||||
index:
|
||||
actions:
|
||||
new: Create Casting Call
|
||||
empty: Casting calls will appear here
|
||||
table_headers:
|
||||
casting_call_created_on: Created On
|
||||
casting_call_status: Status
|
||||
casting_call_title: Title
|
||||
new:
|
||||
heading: New Casting Call
|
||||
update:
|
||||
notice: The casting call request has been updated
|
||||
contract_downloads:
|
||||
download:
|
||||
failure: Your download could not be generated.
|
||||
@@ -306,7 +233,7 @@ en:
|
||||
archived_notice: The release template has been archived
|
||||
form:
|
||||
custom_fields:
|
||||
heading: Questionnaire
|
||||
heading: Medical Questionnaire
|
||||
instructions: Please list the questions you wish the signer to answer. Any unused question fields will be hidden.
|
||||
exploitable_rights:
|
||||
heading: Exploitable Rights
|
||||
@@ -343,6 +270,8 @@ en:
|
||||
print_QR_code: Print out release QR codes
|
||||
releases_automatically_organized: Releases are automatically organized as they’re submitted
|
||||
contracts:
|
||||
medical_questionnaire:
|
||||
heading: Medical Questionnaire
|
||||
photos:
|
||||
guardian_2_photo_heading: Second guardian photo
|
||||
guardian_photo_heading: Guardian photo
|
||||
@@ -352,10 +281,6 @@ en:
|
||||
minor_photos_heading:
|
||||
one: Minor photo
|
||||
other: Minor photos
|
||||
questionnaire:
|
||||
heading:
|
||||
medical_release: Medical Questionnaire
|
||||
misc_release: Questionnaire
|
||||
signature_page:
|
||||
heading: Signature Page
|
||||
instructions: "By signing this signature page, as of the date listed below, I hereby agree, acknowledge and accept the terms and conditions listed in this %{releasable_name}."
|
||||
@@ -543,30 +468,6 @@ en:
|
||||
person_last_name: Last name
|
||||
person_name: Name
|
||||
person_phone: Phone number
|
||||
misc_release:
|
||||
guardian_address_city: Guardian city
|
||||
guardian_address_country: Guardian country
|
||||
guardian_address_state: Guardian state
|
||||
guardian_address_street1: Guardian address
|
||||
guardian_address_street2: Guardian address (Line 2)
|
||||
guardian_address_zip: Guardian zip code
|
||||
guardian_email: Guardian email
|
||||
guardian_first_name: Guardian first name
|
||||
guardian_last_name: Guardian last name
|
||||
guardian_phone: Guardian phone
|
||||
minor: Is the person a minor?
|
||||
person_address_city: City
|
||||
person_address_country: Country
|
||||
person_address_state: State
|
||||
person_address_street1: Address
|
||||
person_address_street2: Address (Line 2)
|
||||
person_address_zip: Zip code
|
||||
person_date_of_birth: Date of birth
|
||||
person_email: Email address
|
||||
person_first_name: First name
|
||||
person_last_name: Last name
|
||||
person_name: Name
|
||||
person_phone: Phone number
|
||||
music_release:
|
||||
person_address: Address
|
||||
person_address_city: City
|
||||
@@ -723,8 +624,6 @@ en:
|
||||
broadcast:
|
||||
create: Create Live Stream
|
||||
update: Save Changes
|
||||
casting_call_interview:
|
||||
create: Create casting call interview
|
||||
contract_template:
|
||||
create: Create Release Template
|
||||
directory:
|
||||
@@ -757,11 +656,6 @@ en:
|
||||
cards: Cards
|
||||
heading: Import Releases
|
||||
list: List
|
||||
interview_downloads:
|
||||
download:
|
||||
failure: Your download could not be generated.
|
||||
pending: "Your %{release_type} files are being prepared for download. You will be notified when it's ready."
|
||||
success: "Your %{release_type} files are ready. Download now, or retrieve later in the %{downloads_folder_link} folder. %{download_button}"
|
||||
location_releases:
|
||||
create:
|
||||
notice: The location release has been created
|
||||
@@ -834,8 +728,6 @@ en:
|
||||
update:
|
||||
notice: The material release has been updated
|
||||
medical_releases:
|
||||
custom_validation_errors:
|
||||
question_answer_is_required: answer is required
|
||||
destroy:
|
||||
alert: The medical release has been deleted
|
||||
index:
|
||||
@@ -993,7 +885,6 @@ en:
|
||||
show:
|
||||
acquired_media_release: Acquired Media Releases (%{count})
|
||||
appearance_release: Appearance Releases (%{count})
|
||||
casting_call_interviews: Interviews
|
||||
downloads: Downloads
|
||||
location_release: Location Releases (%{count})
|
||||
material_release: Material Releases (%{count})
|
||||
@@ -1056,12 +947,6 @@ en:
|
||||
broadcasts:
|
||||
show:
|
||||
alert: That broadcast is no longer available
|
||||
casting_call_interviews:
|
||||
show:
|
||||
heading: Files
|
||||
update: Upload
|
||||
update:
|
||||
notice: Your files have been uploaded successfully
|
||||
location_releases:
|
||||
create:
|
||||
notice: Your release has been signed. Thank you!
|
||||
@@ -1156,8 +1041,6 @@ en:
|
||||
instructions: Now, enter your personal information.
|
||||
photo:
|
||||
heading: Photos
|
||||
questionnaire:
|
||||
heading: Questionnaire
|
||||
signature:
|
||||
heading: Signature
|
||||
talent_releases:
|
||||
@@ -1238,7 +1121,6 @@ en:
|
||||
ago: ago
|
||||
back: Back
|
||||
cancel: Cancel
|
||||
cast_me: Cast
|
||||
clear: Clear
|
||||
close: Close
|
||||
csv: CSV
|
||||
@@ -1337,23 +1219,6 @@ en:
|
||||
heading: New Task Request
|
||||
show:
|
||||
empty: Attached files will appear here.
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo
|
||||
create_task_request: Create Task Request
|
||||
headings:
|
||||
benefits: Benefits
|
||||
how_it_works: How It Works
|
||||
subtitle: Pay-by-the-hour, digitally-enabled remote assistants
|
||||
welcome: Welcome to
|
||||
list_items:
|
||||
enter_number_of_hours: Enter the number of hours you want the task worked on
|
||||
enter_task_request: Enter your task request
|
||||
reduces_need_for_full_time_staff: Reduces need to hire full-time staff
|
||||
reduces_workload: Reduces workload for current staff
|
||||
spend_per_task: Spend as little as $60 per task
|
||||
state_deadline: State your deadline
|
||||
virtual_assistant_delivers_task: Virtual assistant delivers task via TaskME portal
|
||||
task_request:
|
||||
actions:
|
||||
manage: Manage
|
||||
@@ -1425,24 +1290,6 @@ en:
|
||||
new:
|
||||
heading: Upload Video
|
||||
subheading: 2 of 2 Files
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo
|
||||
upload_video: Upload New Video
|
||||
headings:
|
||||
benefits: Benefits
|
||||
how_it_works: How It Works
|
||||
subtitle: Automate your deliverable documents
|
||||
welcome: Welcome to
|
||||
list_items:
|
||||
AI_generates_documents: AI generates deliverable documents
|
||||
download_documents: Download deliverable documents
|
||||
import_EDLs: Import your EDLs
|
||||
import_video: Import your video
|
||||
more_accurate: More accurate than human-generated reports
|
||||
production_elements_logs: Production Elements Logs, and more
|
||||
reduces_labor_cost: Reduces labor costs
|
||||
simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets
|
||||
update:
|
||||
notice: The video has been updated
|
||||
video:
|
||||
|
||||
@@ -57,28 +57,6 @@ es:
|
||||
pdf:
|
||||
do_not_copy_warning: "Do not copy (ES)"
|
||||
serial_number_label: "Serial Number (ES)"
|
||||
broadcasts:
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo
|
||||
create_stream: Create New Live Stream
|
||||
headings:
|
||||
benefits: Benefits
|
||||
how_it_works: How It Works
|
||||
subtitle: Remote directing and video village solution
|
||||
welcome: Welcome to
|
||||
list_items:
|
||||
create_stream: Create a live stream
|
||||
direct_shoots_anywhere: Direct shoots anywhere around the world
|
||||
launch_video_conference: Launch Video Conference using plugin
|
||||
share_files: Share files via the ME Suite mobile app
|
||||
share_live_stream: Share live stream with clients all over the the world
|
||||
share_stream: Share live stream link with clients
|
||||
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
||||
stream_multiple_cameras: Stream multiple cameras at one time
|
||||
casting_call_interviews:
|
||||
validation_errors:
|
||||
invalid_meeting_url: Zoom Meeting URL is invalid (ES)
|
||||
contract_templates:
|
||||
blank_contracts:
|
||||
create:
|
||||
@@ -275,8 +253,6 @@ es:
|
||||
broadcast:
|
||||
create: Create Live Stream (ES)
|
||||
update: Save Changes (ES)
|
||||
casting_call_interview:
|
||||
create: Create casting call interview (ES)
|
||||
create: 'Crear %{model}'
|
||||
update: 'Actualizar %{model}'
|
||||
location_releases:
|
||||
@@ -287,9 +263,6 @@ es:
|
||||
form:
|
||||
photos:
|
||||
dropzone_label: Tap to take a photo of Licensed Material (optional) (ES)
|
||||
medical_releases:
|
||||
custom_validation_errors:
|
||||
question_answer_is_required: answer is required (ES)
|
||||
public:
|
||||
appearance_releases:
|
||||
create:
|
||||
@@ -402,44 +375,8 @@ es:
|
||||
index:
|
||||
table_headers:
|
||||
task_request_description: Description (ES)
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo (ES)
|
||||
create_task_request: Create Task Request
|
||||
headings:
|
||||
benefits: Benefits (ES)
|
||||
how_it_works: How It Works (ES)
|
||||
subtitle: Pay-by-the-hour, digitally-enabled remote assistants (ES)
|
||||
welcome: Welcome to (ES)
|
||||
list_items:
|
||||
enter_number_of_hours: Enter the number of hours you want the task worked on (ES)
|
||||
enter_task_request: Enter your task request (ES)
|
||||
reduces_need_for_full_time_staff: Reduces need to hire full-time staff (ES)
|
||||
reduces_workload: Reduces workload for current staff (ES)
|
||||
spend_per_task: Spend as little as $60 per task (ES)
|
||||
state_deadline: State your deadline (ES)
|
||||
virtual_assistant_delivers_task: Virtual assistant delivers task via TaskME portal (ES)
|
||||
task_request:
|
||||
actions:
|
||||
manage: Manage (ES)
|
||||
open_deliverable: Open Deliverable (ES)
|
||||
read_more: read more (ES)
|
||||
videos:
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo (ES)
|
||||
upload_video: Upload New Video (ES)
|
||||
headings:
|
||||
benefits: Benefits (ES)
|
||||
how_it_works: How It Works (ES)
|
||||
subtitle: Automate your deliverable documents (ES)
|
||||
welcome: Welcome to (ES)
|
||||
list_items:
|
||||
AI_generates_documents: AI generates deliverable documents (ES)
|
||||
download_documents: Download deliverable documents (ES)
|
||||
import_EDLs: Import your EDLs (ES)
|
||||
import_video: Import your video (ES)
|
||||
more_accurate: More accurate than human-generated reports (ES)
|
||||
production_elements_logs: Production Elements Logs, and more (ES)
|
||||
reduces_labor_cost: Reduces labor costs (ES)
|
||||
simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets (ES)
|
||||
|
||||
@@ -32,9 +32,6 @@ Rails.application.routes.draw do
|
||||
resource :masquerade, only: :create
|
||||
end
|
||||
resources :task_requests, only: [:index, :edit, :update, :show]
|
||||
resources :casting_call_interviews do
|
||||
post :complete, on: :member
|
||||
end
|
||||
|
||||
root to: "accounts#index", as: :signed_in_root
|
||||
end
|
||||
@@ -69,7 +66,6 @@ Rails.application.routes.draw do
|
||||
resource :contract_downloads, only: [:create]
|
||||
resources :downloads, only: [:index, :destroy]
|
||||
resource :report_downloads, only: [:create]
|
||||
resource :interview_downloads, only: [:create]
|
||||
resources :videos, only: [:index, :new, :create, :edit, :update] do
|
||||
collection do
|
||||
get :landing
|
||||
@@ -109,13 +105,7 @@ Rails.application.routes.draw do
|
||||
post :cancel
|
||||
end
|
||||
end
|
||||
resources :casting_calls, except: :destroy do
|
||||
member do
|
||||
post :cancel
|
||||
end
|
||||
end
|
||||
resources :tasks, only: :index
|
||||
resources :casting_call_interviews, only: [:index, :show]
|
||||
end
|
||||
resource :profile, only: [:show, :update]
|
||||
resources :videos, only: [] do
|
||||
@@ -144,8 +134,6 @@ Rails.application.routes.draw do
|
||||
resources :broadcasts, param: :token, only: [:show, :update] do
|
||||
resource :zoom_meeting, only: [:show]
|
||||
end
|
||||
resources :casting_calls, param: :token, only: [:show]
|
||||
resources :casting_call_interviews, param: :token, only: [:show, :update]
|
||||
end
|
||||
|
||||
RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :location_releases]
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
class CreateCastingCalls < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
create_table :casting_calls do |t|
|
||||
t.references :project
|
||||
t.string :title
|
||||
t.string :user_email
|
||||
t.text :description
|
||||
t.text :project_description
|
||||
t.text :interview_instructions
|
||||
t.text :interview_requirements
|
||||
t.text :questions
|
||||
t.datetime :cancelled_at
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,12 +0,0 @@
|
||||
class CreateCastingCallInterviews < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
create_table :casting_call_interviews do |t|
|
||||
t.references :casting_call, foreign_key: true
|
||||
t.string :performer_name
|
||||
t.string :zoom_meeting_url
|
||||
t.datetime :interview_date
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,20 +0,0 @@
|
||||
class AddQuestionAnswersToMiscReleases < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :misc_releases, :question_1_answer, :text
|
||||
add_column :misc_releases, :question_2_answer, :text
|
||||
add_column :misc_releases, :question_3_answer, :text
|
||||
add_column :misc_releases, :question_4_answer, :text
|
||||
add_column :misc_releases, :question_5_answer, :text
|
||||
add_column :misc_releases, :question_6_answer, :text
|
||||
add_column :misc_releases, :question_7_answer, :text
|
||||
add_column :misc_releases, :question_8_answer, :text
|
||||
add_column :misc_releases, :question_9_answer, :text
|
||||
add_column :misc_releases, :question_10_answer, :text
|
||||
add_column :misc_releases, :question_11_answer, :text
|
||||
add_column :misc_releases, :question_12_answer, :text
|
||||
add_column :misc_releases, :question_13_answer, :text
|
||||
add_column :misc_releases, :question_14_answer, :text
|
||||
add_column :misc_releases, :question_15_answer, :text
|
||||
|
||||
end
|
||||
end
|
||||
@@ -1,6 +0,0 @@
|
||||
class AddTokenToCastingCalls < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :casting_calls, :token, :string
|
||||
add_index :casting_calls, :token, unique: true
|
||||
end
|
||||
end
|
||||
@@ -1,6 +0,0 @@
|
||||
class AddTokenToCastingCallInterviews < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :casting_call_interviews, :token, :string
|
||||
add_index :casting_call_interviews, :token, unique: true
|
||||
end
|
||||
end
|
||||
@@ -1,5 +0,0 @@
|
||||
class AddInterviewedAtToCastingCallInterview < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :casting_call_interviews, :interviewed_at, :datetime
|
||||
end
|
||||
end
|
||||
207
db/structure.sql
207
db/structure.sql
@@ -9,6 +9,20 @@ SET xmloption = content;
|
||||
SET client_min_messages = warning;
|
||||
SET row_security = off;
|
||||
|
||||
--
|
||||
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -
|
||||
--
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
|
||||
|
||||
|
||||
--
|
||||
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -
|
||||
--
|
||||
|
||||
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
|
||||
|
||||
|
||||
--
|
||||
-- Name: fuzzystrmatch; Type: EXTENSION; Schema: -; Owner: -
|
||||
--
|
||||
@@ -317,8 +331,8 @@ CREATE TABLE public.appearance_releases (
|
||||
person_last_name character varying,
|
||||
guardian_first_name character varying,
|
||||
guardian_last_name character varying,
|
||||
identifier character varying,
|
||||
guardian_email character varying,
|
||||
identifier character varying,
|
||||
person_address_street2 character varying,
|
||||
person_address_city character varying,
|
||||
person_address_state character varying,
|
||||
@@ -555,82 +569,6 @@ CREATE SEQUENCE public.broadcasts_id_seq
|
||||
ALTER SEQUENCE public.broadcasts_id_seq OWNED BY public.broadcasts.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_call_interviews; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public.casting_call_interviews (
|
||||
id bigint NOT NULL,
|
||||
casting_call_id bigint,
|
||||
performer_name character varying,
|
||||
zoom_meeting_url character varying,
|
||||
interview_date timestamp without time zone,
|
||||
created_at timestamp(6) without time zone NOT NULL,
|
||||
updated_at timestamp(6) without time zone NOT NULL,
|
||||
token character varying,
|
||||
interviewed_at timestamp without time zone
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_call_interviews_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.casting_call_interviews_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_call_interviews_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.casting_call_interviews_id_seq OWNED BY public.casting_call_interviews.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_calls; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public.casting_calls (
|
||||
id bigint NOT NULL,
|
||||
project_id bigint,
|
||||
title character varying,
|
||||
user_email character varying,
|
||||
description text,
|
||||
project_description text,
|
||||
interview_instructions text,
|
||||
interview_requirements text,
|
||||
questions text,
|
||||
cancelled_at timestamp without time zone,
|
||||
created_at timestamp(6) without time zone NOT NULL,
|
||||
updated_at timestamp(6) without time zone NOT NULL,
|
||||
token character varying
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_calls_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.casting_calls_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_calls_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.casting_calls_id_seq OWNED BY public.casting_calls.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: composers; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
@@ -728,6 +666,15 @@ CREATE SEQUENCE public.contract_templates_id_seq
|
||||
ALTER SEQUENCE public.contract_templates_id_seq OWNED BY public.contract_templates.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: data_migrations; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public.data_migrations (
|
||||
version character varying NOT NULL
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: directories; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
@@ -1177,22 +1124,7 @@ CREATE TABLE public.misc_releases (
|
||||
signed_at timestamp without time zone,
|
||||
minor boolean DEFAULT false,
|
||||
created_at timestamp(6) without time zone NOT NULL,
|
||||
updated_at timestamp(6) without time zone NOT NULL,
|
||||
question_1_answer text,
|
||||
question_2_answer text,
|
||||
question_3_answer text,
|
||||
question_4_answer text,
|
||||
question_5_answer text,
|
||||
question_6_answer text,
|
||||
question_7_answer text,
|
||||
question_8_answer text,
|
||||
question_9_answer text,
|
||||
question_10_answer text,
|
||||
question_11_answer text,
|
||||
question_12_answer text,
|
||||
question_13_answer text,
|
||||
question_14_answer text,
|
||||
question_15_answer text
|
||||
updated_at timestamp(6) without time zone NOT NULL
|
||||
);
|
||||
|
||||
|
||||
@@ -1469,7 +1401,6 @@ CREATE TABLE public.settings (
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.settings_id_seq
|
||||
AS integer
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
@@ -1505,7 +1436,6 @@ CREATE TABLE public.taggings (
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.taggings_id_seq
|
||||
AS integer
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
@@ -1536,7 +1466,6 @@ CREATE TABLE public.tags (
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.tags_id_seq
|
||||
AS integer
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
@@ -1897,9 +1826,9 @@ CREATE TABLE public.zoom_meetings (
|
||||
api_meeting_id character varying,
|
||||
created_at timestamp(6) without time zone NOT NULL,
|
||||
updated_at timestamp(6) without time zone NOT NULL,
|
||||
status integer DEFAULT 0,
|
||||
zoom_user_id bigint,
|
||||
project_id bigint,
|
||||
status integer DEFAULT 0
|
||||
project_id bigint
|
||||
);
|
||||
|
||||
|
||||
@@ -2039,20 +1968,6 @@ ALTER TABLE ONLY public.broadcast_recordings ALTER COLUMN id SET DEFAULT nextval
|
||||
ALTER TABLE ONLY public.broadcasts ALTER COLUMN id SET DEFAULT nextval('public.broadcasts_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_call_interviews id; Type: DEFAULT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.casting_call_interviews ALTER COLUMN id SET DEFAULT nextval('public.casting_call_interviews_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_calls id; Type: DEFAULT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.casting_calls ALTER COLUMN id SET DEFAULT nextval('public.casting_calls_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: composers id; Type: DEFAULT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -2374,22 +2289,6 @@ ALTER TABLE ONLY public.broadcasts
|
||||
ADD CONSTRAINT broadcasts_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_call_interviews casting_call_interviews_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.casting_call_interviews
|
||||
ADD CONSTRAINT casting_call_interviews_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_calls casting_calls_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.casting_calls
|
||||
ADD CONSTRAINT casting_calls_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: composers composers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -2406,6 +2305,14 @@ ALTER TABLE ONLY public.contract_templates
|
||||
ADD CONSTRAINT contract_templates_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: data_migrations data_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.data_migrations
|
||||
ADD CONSTRAINT data_migrations_pkey PRIMARY KEY (version);
|
||||
|
||||
|
||||
--
|
||||
-- Name: directories directories_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -2807,34 +2714,6 @@ CREATE INDEX index_broadcasts_on_project_id ON public.broadcasts USING btree (pr
|
||||
CREATE UNIQUE INDEX index_broadcasts_on_token ON public.broadcasts USING btree (token);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_casting_call_interviews_on_casting_call_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX index_casting_call_interviews_on_casting_call_id ON public.casting_call_interviews USING btree (casting_call_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_casting_call_interviews_on_token; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE UNIQUE INDEX index_casting_call_interviews_on_token ON public.casting_call_interviews USING btree (token);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_casting_calls_on_project_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX index_casting_calls_on_project_id ON public.casting_calls USING btree (project_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_casting_calls_on_token; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE UNIQUE INDEX index_casting_calls_on_token ON public.casting_calls USING btree (token);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_composers_on_music_release_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
@@ -3432,14 +3311,6 @@ ALTER TABLE ONLY public.bookmarks
|
||||
ADD CONSTRAINT fk_rails_15735b7db8 FOREIGN KEY (video_id) REFERENCES public.videos(id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_call_interviews fk_rails_1583f69fbb; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.casting_call_interviews
|
||||
ADD CONSTRAINT fk_rails_1583f69fbb FOREIGN KEY (casting_call_id) REFERENCES public.casting_calls(id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: acquired_media_releases fk_rails_15b450b040; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -4043,12 +3914,6 @@ INSERT INTO "schema_migrations" (version) VALUES
|
||||
('20200619085823'),
|
||||
('20200619134853'),
|
||||
('20200622180507'),
|
||||
('20200625144713'),
|
||||
('20200626044744'),
|
||||
('20200701121237'),
|
||||
('20200702152130'),
|
||||
('20200706193123'),
|
||||
('20200706230803'),
|
||||
('20200707070522');
|
||||
('20200625144713');
|
||||
|
||||
|
||||
|
||||
@@ -54,16 +54,14 @@ RSpec.describe AccountsController, type: :controller do
|
||||
end
|
||||
|
||||
it "enqueues hubspot form submission job" do
|
||||
ENV["HUBSPOT_FORM_GUID"] = "form_guid"
|
||||
expect {
|
||||
post :create, params: params
|
||||
}.to have_enqueued_job(SubmitHubspotFormJob).with(
|
||||
first_name: "John",
|
||||
last_name: "Doe",
|
||||
email: "test_user+1@test.com",
|
||||
company: "Test Dev account",
|
||||
i_m_interested_in: "DirectME",
|
||||
form_guid: "form_guid"
|
||||
"John",
|
||||
"Doe",
|
||||
"test_user+1@test.com",
|
||||
"Test Dev account",
|
||||
i_m_interested_in: "DirectME"
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Admin::CastingCallInterviewsController, type: :controller do
|
||||
|
||||
let!(:current_user) { create(:user, :admin) }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
end
|
||||
|
||||
describe "#index" do
|
||||
it "returns a successful response" do
|
||||
get :index
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
end
|
||||
|
||||
describe "#new" do
|
||||
it "returns a successful response" do
|
||||
get :new
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "assigns user, accounts" do
|
||||
get :new
|
||||
|
||||
expect(assigns(:casting_call_interview)).not_to be_nil
|
||||
expect(assigns(:accounts)).to eq Account.all
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "does create a new record" do
|
||||
expect {
|
||||
post :create, params: { casting_call_interview: casting_call_interview_params }
|
||||
}.to change(CastingCallInterview, :count)
|
||||
end
|
||||
|
||||
it "does not create new record if zoom meeting url is not valid" do
|
||||
expect {
|
||||
post :create, params: {
|
||||
casting_call_interview: casting_call_interview_params
|
||||
.except(:zoom_meeting_url)
|
||||
.merge(zoom_meeting_url: "malformed_url")
|
||||
}
|
||||
}.to change(CastingCallInterview, :count).by(0)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#edit" do
|
||||
let(:casting_call_interview) { create(:casting_call_interview) }
|
||||
|
||||
it "returns a successful response" do
|
||||
get :edit, params: { id: casting_call_interview }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "assigns casting call interview" do
|
||||
get :edit, params: { id: casting_call_interview }
|
||||
|
||||
expect(assigns(:casting_call_interview)).to eq casting_call_interview
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let(:casting_call_interview) { create(:casting_call_interview) }
|
||||
|
||||
it "redirects to casting call interviews page" do
|
||||
patch :update, params: { id: casting_call_interview, casting_call_interview: update_params }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to admin_casting_call_interviews_path
|
||||
end
|
||||
|
||||
it "sets a flash notice" do
|
||||
patch :update, params: { id: casting_call_interview, casting_call_interview: update_params }
|
||||
|
||||
expect(flash.notice).to eq "The casting call interview has been updated"
|
||||
end
|
||||
|
||||
it "updates casting call interview" do
|
||||
patch :update, params: { id: casting_call_interview, casting_call_interview: update_params }
|
||||
|
||||
expect(casting_call_interview.reload.zoom_meeting_url).to eq new_zoom_meeting_url
|
||||
end
|
||||
end
|
||||
|
||||
describe "#complete" do
|
||||
let(:casting_call_interview) { create(:casting_call_interview) }
|
||||
|
||||
it "sets interviewed_at on casting call interview" do
|
||||
expect(casting_call_interview.interviewed_at).to be_nil
|
||||
|
||||
post :complete, params: { id: casting_call_interview }
|
||||
|
||||
expect(casting_call_interview.reload.interviewed_at).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def casting_call_interview_params
|
||||
casting_call = create(:casting_call)
|
||||
|
||||
attributes_for(:casting_call_interview).except(:interviewed_at).merge(casting_call_id: casting_call.id)
|
||||
end
|
||||
|
||||
def update_params
|
||||
{
|
||||
zoom_meeting_url: new_zoom_meeting_url
|
||||
}
|
||||
end
|
||||
|
||||
def new_zoom_meeting_url
|
||||
"https://s01web.zoom.us/j/11111?pwd=Ab123Cq34"
|
||||
end
|
||||
|
||||
def invalid_meeting_url_flash_error
|
||||
t 'casting_call_interviews.validation_errors.invalid_meeting_url'
|
||||
end
|
||||
end
|
||||
@@ -22,7 +22,7 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "renders content if theere are existing broadcasts" do
|
||||
it "renders content" do
|
||||
create(:broadcast, project: project, name: "Another Broadcast")
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
@@ -34,13 +34,12 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
end
|
||||
|
||||
context "when there are no active broadcasts" do
|
||||
it "renders splash screen" do
|
||||
it "renders an empty message" do
|
||||
Broadcast.destroy_all
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link create_stream
|
||||
expect(response.body).to have_link schedule_demo
|
||||
expect(response.body).to have_content("Live streams will appear here")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -56,8 +55,10 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
|
||||
context "for xhr request" do
|
||||
it "filters the broadcasts by a query param" do
|
||||
create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Adam")
|
||||
create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Zoe")
|
||||
appearance_releases = [
|
||||
create(:broadcast, skip_create_callback: true, name: "Stream by Adam"),
|
||||
create(:broadcast, skip_create_callback: true, name: "Stream by Zoe"),
|
||||
]
|
||||
|
||||
get :index, params: { project_id: project, query: "Zoe" }, xhr: true
|
||||
|
||||
@@ -244,12 +245,4 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
|
||||
{ files: [contract_file] }
|
||||
end
|
||||
|
||||
def schedule_demo
|
||||
t 'broadcasts.splash.actions.book_demo'
|
||||
end
|
||||
|
||||
def create_stream
|
||||
t 'broadcasts.splash.actions.create_stream'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe CastingCallInterviewsController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:account) { user.primary_account }
|
||||
let(:project) { create(:project, account: user.primary_account) }
|
||||
let(:casting_call) { create(:casting_call, project: project, title: "My Interview") }
|
||||
|
||||
before do
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
describe "#index" do
|
||||
it "returns a successful response" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "only shows completed interviews" do
|
||||
create(:casting_call_interview, casting_call: casting_call, interviewed_at: Time.zone.now, performer_name: "John Doe")
|
||||
create(:casting_call_interview, casting_call: casting_call, interviewed_at: nil, performer_name: "Jane Doe")
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content("John Doe")
|
||||
expect(response.body).not_to have_content("Jane Doe")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
let!(:casting_call_interview) { create(:casting_call_interview, :with_files, casting_call: casting_call, interviewed_at: Time.zone.now, performer_name: "Jane Doe") }
|
||||
|
||||
it "shows files of casting call interview" do
|
||||
get :show, params: { project_id: project, id: casting_call_interview.id }
|
||||
|
||||
expect(response.body).to have_content("Filename")
|
||||
expect(response.body).to have_content("location_photo.png")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,126 +0,0 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe CastingCallsController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:account) { user.primary_account }
|
||||
let(:project) { create(:project, account: user.primary_account) }
|
||||
|
||||
before do
|
||||
sign_in user
|
||||
end
|
||||
|
||||
describe "#index" do
|
||||
it "responds successfully" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "renders content" do
|
||||
create(:casting_call, project: project)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link "Create Casting Call"
|
||||
expect(response.body).to have_content "Active"
|
||||
end
|
||||
|
||||
context "when there are many records" do
|
||||
it "paginates the table" do
|
||||
create_list(:casting_call, 20, project: project)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link("2", href: project_casting_calls_path(project, page: 2))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#new" do
|
||||
it "responds successfully" do
|
||||
get :new, params: { project_id: project }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(assigns(:casting_call)).to be_a_new(CastingCall)
|
||||
expect(response).to render_template(:new)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "does create a new record" do
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, casting_call: casting_call_params }
|
||||
}.to change(CastingCall, :count)
|
||||
end
|
||||
|
||||
it "logs an event" do
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, casting_call: casting_call_params }
|
||||
}.to have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_casting_call, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
end
|
||||
|
||||
it "submits data to hubspot form" do
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, casting_call: casting_call_params }
|
||||
}.to have_enqueued_job(SubmitHubspotFormJob)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let!(:casting_call) { create(:casting_call, project: project, description: "My description" ) }
|
||||
|
||||
it "updates casting call request" do
|
||||
patch :update, params: { project_id: project.id, id: casting_call.id, casting_call: update_params }
|
||||
|
||||
expect(casting_call.reload.description).to eq("This is updated description")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
let!(:casting_call) { create(:casting_call, project: project, description: "Casting Call Request") }
|
||||
|
||||
it "responds successfully" do
|
||||
get :show, params: { project_id: project.id, id: casting_call.id }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(assigns(:casting_call)).to eq(casting_call)
|
||||
end
|
||||
|
||||
it "renders content" do
|
||||
get :show, params: { project_id: project.id, id: casting_call.id }
|
||||
|
||||
expect(response.body).to have_content "Casting Call Request"
|
||||
expect(response.body).to have_content "Active"
|
||||
end
|
||||
end
|
||||
|
||||
describe "#cancel" do
|
||||
let!(:casting_call) { create(:casting_call, project: project, description: "Casting Call to be Cancelled") }
|
||||
|
||||
it "responds with redirect" do
|
||||
post :cancel, params: { project_id: project.id, id: casting_call.id }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to(project_casting_calls_path(project))
|
||||
expect(flash.notice).not_to be_nil
|
||||
end
|
||||
|
||||
it "updates the status to 'Cancelled'" do
|
||||
expect {
|
||||
post :cancel, params: { project_id: project.id, id: casting_call.id }
|
||||
}.to change { casting_call.reload.status }.from("Active").to("Cancelled")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def casting_call_params
|
||||
attributes_for(:casting_call).except(:status, :user_email)
|
||||
end
|
||||
|
||||
def update_params
|
||||
{ description: "This is updated description" }
|
||||
end
|
||||
end
|
||||
@@ -1,58 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe InterviewDownloadsController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:current_user) { create(:user) }
|
||||
let(:project) { create(:project, :discovery_client, account: current_user.primary_account) }
|
||||
let(:casting_call) { create(:casting_call, project: project, title: "My Title") }
|
||||
let(:casting_call_interview) { create(:casting_call_interview, casting_call: casting_call, performer_name: "John Doe") }
|
||||
|
||||
before do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "enqueues zip file generation job" do
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, casting_call_interview_id: casting_call_interview.id }, format: :js
|
||||
}.to have_enqueued_job(GenerateInterviewFilesZipJob)
|
||||
end
|
||||
|
||||
it "creates a download record with 'not_started' status" do
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, casting_call_interview_id: casting_call_interview.id }, format: :js
|
||||
}.to change(Download, :count).by(1)
|
||||
|
||||
expect(Download.last.status).to eq('not_started')
|
||||
end
|
||||
|
||||
context "When there is no existing job" do
|
||||
it "shows a notification to user" do
|
||||
allow(ProjectsChannel).to receive(:broadcast_download_generation_update).with(be_kind_of(Download), I18n.t("interview_downloads.download.pending", release_type: "Casting Call Interview"))
|
||||
|
||||
post :create, params: { project_id: project.id, casting_call_interview_id: casting_call_interview.id }, format: :js
|
||||
|
||||
expect(ProjectsChannel).to have_received(:broadcast_download_generation_update).with(be_kind_of(Download), I18n.t("interview_downloads.download.pending", release_type: "Casting Call Interview"))
|
||||
end
|
||||
end
|
||||
|
||||
context "When there are existing jobs" do
|
||||
let(:appearance_release_download) { create(:download, project_id: project.id, name: "#{project.name.parameterize}_appearance-releases") }
|
||||
let(:acquired_media_release_download) { create(:download, project_id: project.id, name: "#{project.name.parameterize}_acquired-media-releases", release_type: "AcquiredMediaRelease") }
|
||||
|
||||
before do
|
||||
allow(Download).to receive_message_chain(:unfinished_desc_order, :offset).and_return([acquired_media_release_download, appearance_release_download])
|
||||
allow(ProjectsChannel).to receive(:broadcast_download_generation_update)
|
||||
end
|
||||
|
||||
it "shows names of other contracts in the notification, which are in progress" do
|
||||
broadcast_message = "<p>Your Casting Call Interview files are being prepared for download. You will be notified when it's ready.\n</p>\n<p class=\"mt-3\">The following downloads are also in progress:</p> \n<ul>\n <li>Acquired Media Release contracts (as of less than a minute ago)\n </li>\n <li>Appearance Release contracts (as of less than a minute ago)\n </li>\n</ul>\n"
|
||||
|
||||
post :create, params: { project_id: project.id, casting_call_interview_id: casting_call_interview.id }, format: :js
|
||||
|
||||
expect(ProjectsChannel).to have_received(:broadcast_download_generation_update).with(be_kind_of(Download), broadcast_message)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,44 +0,0 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Public::CastingCallInterviewsController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe "#show" do
|
||||
let(:casting_call_interview) { create(:casting_call_interview) }
|
||||
|
||||
it "responds successfully" do
|
||||
get :show, params: { token: casting_call_interview.token }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(assigns(:casting_call_interview)).to eq(casting_call_interview)
|
||||
end
|
||||
|
||||
it "shows casting call interview details" do
|
||||
get :show, params: { token: casting_call_interview.token }
|
||||
|
||||
expect(response.body).to have_content(casting_call_interview.performer_name)
|
||||
expect(response.body).to have_content(casting_call_interview.interview_date)
|
||||
expect(response.body).to have_link("Start Interview")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let(:casting_call_interview) { create(:casting_call_interview) }
|
||||
|
||||
it "responds successfully" do
|
||||
patch :update, params: { token: casting_call_interview.token, casting_call_interview: casting_call_interview_params }
|
||||
|
||||
expect(response).to redirect_to casting_call_interview_url(token: casting_call_interview.token)
|
||||
expect(flash.notice).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def casting_call_interview_params
|
||||
path = Rails.root.join("spec", "fixtures", "files", "contract.pdf")
|
||||
file = Rack::Test::UploadedFile.new(path, "application/pdf")
|
||||
|
||||
{ files: [file]}
|
||||
end
|
||||
end
|
||||
@@ -1,28 +0,0 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Public::CastingCallsController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe "#show" do
|
||||
let(:casting_call) { create(:casting_call) }
|
||||
|
||||
it "responds successfully" do
|
||||
get :show, params: { token: casting_call.token }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(assigns(:casting_call)).to eq(casting_call)
|
||||
end
|
||||
|
||||
it "shows casting call details" do
|
||||
get :show, params: { token: casting_call.token }
|
||||
|
||||
expect(response.body).to have_content(casting_call.title)
|
||||
expect(response.body).to have_content(casting_call.description)
|
||||
expect(response.body).to have_content(casting_call.project_description)
|
||||
expect(response.body).to have_content(casting_call.interview_instructions)
|
||||
expect(response.body).to have_content(casting_call.interview_requirements)
|
||||
expect(response.body).to have_content(casting_call.questions)
|
||||
expect(response.body).to have_link("Schedule an Audition")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -19,29 +19,14 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template,
|
||||
project: project,
|
||||
question_1_text: "Question 1",
|
||||
question_2_text: "Question 2"
|
||||
)
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
post :create, params: {
|
||||
account_id: user.primary_account.to_param,
|
||||
project_id: project,
|
||||
contract_template_id: contract_template,
|
||||
medical_release: {
|
||||
person_address_city: "Albuquerque",
|
||||
question_2_answer: "Answer 2"
|
||||
}
|
||||
}
|
||||
|
||||
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, medical_release: { person_address_city: "Albuquerque" } }
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match /Person first name can't be blank/
|
||||
expect(body).to match /Person last name can't be blank/
|
||||
expect(body).to match />can't be blank</
|
||||
expect(body).to match /Question 1 #{question_answer_validation_error}/
|
||||
expect(body).not_to match /Question 2 #{question_answer_validation_error}/
|
||||
end
|
||||
|
||||
it "responds with success " do
|
||||
@@ -83,8 +68,4 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
|
||||
|
||||
{ signature_base64: data_uri }
|
||||
end
|
||||
|
||||
def question_answer_validation_error
|
||||
t 'medical_releases.custom_validation_errors.question_answer_is_required'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -18,14 +18,7 @@ RSpec.describe TaskRequestsController, type: :controller do
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "renders splash page if there are no task requests" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link "Create Task Request"
|
||||
expect(response.body).to have_link schedule_demo
|
||||
end
|
||||
|
||||
it "renders task requests table if there are task requests" do
|
||||
it "renders content" do
|
||||
create(:task_request, project: project, description: "Another Request")
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
@@ -71,7 +64,7 @@ RSpec.describe TaskRequestsController, type: :controller do
|
||||
it "submits data to hubspot form" do
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, task_request: task_request_params }
|
||||
}.to have_enqueued_job(SubmitHubspotFormJob)
|
||||
}.to have_enqueued_job(SubmitHubspotTaskRequestFormJob)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -133,8 +126,4 @@ RSpec.describe TaskRequestsController, type: :controller do
|
||||
def update_params
|
||||
{ description: "This is updated description" }
|
||||
end
|
||||
|
||||
def schedule_demo
|
||||
t 'task_requests.splash.actions.book_demo'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -20,7 +20,6 @@ RSpec.describe VideosController, type: :controller do
|
||||
end
|
||||
|
||||
it "has a search form" do
|
||||
create(:video, project: project)
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_button("search-button")
|
||||
@@ -44,7 +43,7 @@ RSpec.describe VideosController, type: :controller do
|
||||
end
|
||||
|
||||
|
||||
it "renders content if there are existing videos" do
|
||||
it "renders content" do
|
||||
video = create(:video, project: project, name: "My Video", number: "001", created_at: 1.day.ago)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
@@ -59,11 +58,10 @@ RSpec.describe VideosController, type: :controller do
|
||||
end
|
||||
|
||||
context "when there are no records" do
|
||||
it "renders splash screen" do
|
||||
it "renders an empty message" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_link "Upload New Video"
|
||||
expect(response.body).to have_link schedule_demo
|
||||
expect(response.body).to have_content("Videos will appear here")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -279,8 +277,4 @@ RSpec.describe VideosController, type: :controller do
|
||||
def video_update_params
|
||||
attributes_for(:video, :with_graphics_only_edl_file, :with_audio_only_edl_file, name: "Test Video").except(:file)
|
||||
end
|
||||
|
||||
def schedule_demo
|
||||
t 'videos.splash.actions.book_demo'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
FactoryBot.define do
|
||||
factory :casting_call_interview do
|
||||
association :casting_call
|
||||
performer_name 'John Doe'
|
||||
zoom_meeting_url 'https://us04web.zoom.us/j/1111111111?pwd=aDZCS1dzZ2lWdDZJcHBhVnNIclB4QT03'
|
||||
interview_date { 10.days.from_now }
|
||||
interviewed_at { nil }
|
||||
|
||||
trait :with_files do
|
||||
files { [Rack::Test::UploadedFile.new('spec/fixtures/files/location_photo.png', 'image/png')] }
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,15 +0,0 @@
|
||||
FactoryBot.define do
|
||||
factory :casting_call do
|
||||
association :project
|
||||
user_email 'test@email.com'
|
||||
description "Casting call description"
|
||||
project_description "Casting call project description"
|
||||
interview_instructions "Interview instructions"
|
||||
interview_requirements "Interview requirements"
|
||||
questions "Questions"
|
||||
|
||||
trait :cancelled do
|
||||
cancelled_at { Time.zone.now }
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -16,7 +16,6 @@ FactoryBot.define do
|
||||
appearance_release: true,
|
||||
location_release: true,
|
||||
material_release: true,
|
||||
misc_release: true,
|
||||
medical_release: true,
|
||||
music_release: true,
|
||||
talent_release: true,
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
feature "Admin managing casting call interviews" do
|
||||
let(:current_user) { create(:user, admin: true, email: "user@test.com") }
|
||||
let(:project) { create(:project, account: current_user.primary_account, name: "Test Project") }
|
||||
|
||||
before do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
scenario "admin cannot create casting call interview with invalid zoom url", js: true do
|
||||
visit admin_casting_call_interviews_path
|
||||
cc = create(:casting_call, title: "SpecialCastingCall")
|
||||
|
||||
click_link create_casting_call_interview_button
|
||||
expect(page).to have_content new_casting_call_interview_heading
|
||||
|
||||
fill_in performer_name_field, with: "TestName"
|
||||
select cc.title, from: casting_call_field
|
||||
fill_in zoom_meeting_url_field, with: "malformed url"
|
||||
|
||||
expect do
|
||||
click_on submit_casting_call_interview_form
|
||||
end.to change(CastingCallInterview, :count).by(0)
|
||||
expect(page).to have_content zoom_meeting_url_invalid_error
|
||||
|
||||
fill_in zoom_meeting_url_field, with: "https://similar.google.com/j/24324324?pwd=334kni3j4"
|
||||
|
||||
expect do
|
||||
click_on submit_casting_call_interview_form
|
||||
end.to change(CastingCallInterview, :count).by(0)
|
||||
expect(page).to have_content zoom_meeting_url_invalid_error
|
||||
|
||||
fill_in zoom_meeting_url_field, with: "https://s01.zoom.us/j/343434?pwd=dawidj34ijij"
|
||||
|
||||
expect do
|
||||
click_on submit_casting_call_interview_form
|
||||
end.to change(CastingCallInterview, :count).by(1)
|
||||
expect(page).to have_content create_casting_call_interview_button
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_casting_call_interview_button
|
||||
t 'admin.casting_call_interviews.index.actions.new'
|
||||
end
|
||||
|
||||
def new_casting_call_interview_heading
|
||||
t 'admin.casting_call_interviews.new.heading'
|
||||
end
|
||||
|
||||
def submit_casting_call_interview_form
|
||||
t 'helpers.submit.casting_call_interview.create'
|
||||
end
|
||||
|
||||
def zoom_meeting_url_invalid_error
|
||||
t 'casting_call_interviews.validation_errors.invalid_meeting_url'
|
||||
end
|
||||
|
||||
def performer_name_field
|
||||
'casting_call_interview[performer_name]'
|
||||
end
|
||||
|
||||
def zoom_meeting_url_field
|
||||
'casting_call_interview[zoom_meeting_url]'
|
||||
end
|
||||
|
||||
def casting_call_field
|
||||
'casting_call_interview[casting_call_id]'
|
||||
end
|
||||
end
|
||||
@@ -32,7 +32,7 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
select 'None', from: 'Restriction'
|
||||
click_on 'Create Release Template'
|
||||
|
||||
expect(page).to have_content(create_contract_template_success_message)
|
||||
expect(page).to have_content('The release template has been created')
|
||||
end
|
||||
|
||||
scenario 'medical release template has a guardian clause field' do
|
||||
@@ -43,28 +43,10 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
fill_hidden guardian_clause_field, with: 'Guardian clause text'
|
||||
click_on 'Create Release Template'
|
||||
|
||||
expect(page).to have_content(create_contract_template_success_message)
|
||||
expect(page).to have_content('The release template has been created')
|
||||
expect(ContractTemplate.last.guardian_clause.body.to_s).to match /Guardian clause text/
|
||||
end
|
||||
|
||||
scenario 'misc release templates has guardian clause and questionnaire', js: true do
|
||||
visit new_project_contract_template_path(project)
|
||||
|
||||
fill_in 'Name', with: 'My Misc Release'
|
||||
select 'Misc Release', from: 'Release type'
|
||||
|
||||
expect(page).to have_selector('label', text: 'Guardian Clause')
|
||||
MiscRelease::NUMBER_OF_CUSTOM_FIELDS.times do |n|
|
||||
expect(page).to have_field(question_field(n+1))
|
||||
end
|
||||
|
||||
fill_in_trix 'contract_template_guardian_clause', with: 'Guardian clause text'
|
||||
fill_in question_field(1), with: 'How much experience do you have in the industry?'
|
||||
click_on 'Create Release Template'
|
||||
|
||||
expect(page).to have_content(create_contract_template_success_message)
|
||||
end
|
||||
|
||||
scenario 'preview new talent release template without guardian clause' do
|
||||
visit new_project_contract_template_path(project)
|
||||
select 'Talent Release', from: 'Release type'
|
||||
@@ -168,13 +150,13 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
scenario 'Should not allow negative fees' do
|
||||
fill_in 'Fee', with: '-200'
|
||||
click_on 'Create Release Template'
|
||||
expect(page).not_to have_content(create_contract_template_success_message)
|
||||
expect(page).not_to have_content('The release template has been created')
|
||||
end
|
||||
|
||||
scenario 'Should not allow fees with more than 9 digits' do
|
||||
fill_in 'Fee', with: '9999999999'
|
||||
click_on 'Create Release Template'
|
||||
expect(page).not_to have_content(create_contract_template_success_message)
|
||||
expect(page).not_to have_content('The release template has been created')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -310,14 +292,6 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
'contract_template_guardian_clause_trix_input_contract_template'
|
||||
end
|
||||
|
||||
def create_contract_template_success_message
|
||||
'The release template has been created'
|
||||
end
|
||||
|
||||
def question_field(n)
|
||||
"Question #{n} text"
|
||||
end
|
||||
|
||||
def fill_hidden(id, with:)
|
||||
find(:xpath, "//input[@id='#{id}']", visible: false).set with
|
||||
end
|
||||
|
||||
@@ -30,24 +30,6 @@ feature 'User managing appearance releases' do
|
||||
expect(page).to have_content(successful_submission_message)
|
||||
end
|
||||
|
||||
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
visit new_account_project_contract_template_appearance_release_path(project.account, project, contract_template)
|
||||
|
||||
all('input[data-required-tag="guardian"]').each do |field|
|
||||
expect(field['required']).to eq 'false'
|
||||
expect(field).not_to be_visible
|
||||
end
|
||||
|
||||
page.check person_is_minor_checkbox
|
||||
|
||||
all('input[data-required-tag="guardian"]').each do |field|
|
||||
expect(field['required']).to eq 'true'
|
||||
expect(field).to be_visible
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'creating a release for a minor', js: true do
|
||||
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
||||
|
||||
@@ -68,7 +50,6 @@ feature 'User managing appearance releases' do
|
||||
fill_in guardian_first_name_field, with: 'Guardian'
|
||||
fill_in guardian_last_name_field, with: 'Name'
|
||||
fill_in guardian_phone_field, with: '001101'
|
||||
fill_in guardian_email_field, with: 'valid@email.com'
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
fill_in_person_address_fields
|
||||
@@ -79,6 +60,11 @@ feature 'User managing appearance releases' do
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||
|
||||
fill_in guardian_email_field, with: 'invalid@email'
|
||||
click_button submit_release_button
|
||||
expect(page).to have_content('Guardian email is not an email')
|
||||
|
||||
fill_in guardian_email_field, with: 'valid@email.com'
|
||||
fill_in_guardian_address_fields
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||
@@ -113,7 +99,6 @@ feature 'User managing appearance releases' do
|
||||
fill_in guardian_first_name_field, with: 'Guardian'
|
||||
fill_in guardian_last_name_field, with: 'Name'
|
||||
fill_in guardian_phone_field, with: '001101'
|
||||
fill_in guardian_email_field, with: 'valid@email.com'
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
fill_in_person_address_fields
|
||||
@@ -124,6 +109,11 @@ feature 'User managing appearance releases' do
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||
|
||||
fill_in guardian_email_field, with: 'invalid@email'
|
||||
click_button submit_release_button
|
||||
expect(page).to have_content('Guardian email is not an email')
|
||||
|
||||
fill_in guardian_email_field, with: 'valid@email.com'
|
||||
fill_in_guardian_address_fields
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||
|
||||
@@ -12,13 +12,6 @@ feature 'User managing broadcasts' do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: 'id', key: 'key', playback_id: 'playback_id'))
|
||||
end
|
||||
|
||||
scenario "splash page is shown if there are no existing streams" do
|
||||
visit project_broadcasts_path(project)
|
||||
|
||||
expect(page).to have_content schedule_demo
|
||||
expect(page).to have_content create_stream
|
||||
end
|
||||
|
||||
scenario 'creating and deleting a broadcast', js: true do
|
||||
visit new_project_broadcast_path(project)
|
||||
|
||||
@@ -138,29 +131,6 @@ feature 'User managing broadcasts' do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'When the user is associate' do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
it 'does not show button to create new live stream' do
|
||||
visit project_broadcasts_path(project)
|
||||
|
||||
expect(page).to have_content schedule_demo
|
||||
expect(page).not_to have_content create_stream
|
||||
end
|
||||
end
|
||||
|
||||
context 'When the user is account manager' do
|
||||
let(:current_user) { create(:user, :account_manager) }
|
||||
|
||||
it 'does show button to create new live stream' do
|
||||
visit project_broadcasts_path(project)
|
||||
|
||||
expect(page).to have_content schedule_demo
|
||||
expect(page).to have_content create_stream
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
private
|
||||
@@ -181,12 +151,4 @@ feature 'User managing broadcasts' do
|
||||
def switch_view_dropdown
|
||||
'Switch View'
|
||||
end
|
||||
|
||||
def schedule_demo
|
||||
t 'broadcasts.splash.actions.book_demo'
|
||||
end
|
||||
|
||||
def create_stream
|
||||
t 'broadcasts.splash.actions.create_stream'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,114 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
feature "User managing casting calls" do
|
||||
let(:current_user) { create(:user) }
|
||||
let(:project) { create(:project, account: current_user.primary_account) }
|
||||
|
||||
before :each do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
scenario "casting calls table is visible" do
|
||||
visit project_casting_calls_path(project)
|
||||
|
||||
expect(page).to have_content "Created On"
|
||||
expect(page).to have_content "Title"
|
||||
expect(page).to have_content "Status"
|
||||
end
|
||||
|
||||
scenario "sees list of casting calls" do
|
||||
visit project_casting_calls_path(project)
|
||||
|
||||
expect(page).to have_content no_casting_calls_label
|
||||
|
||||
casting_call = create(:casting_call, project: project)
|
||||
|
||||
visit project_casting_calls_path(project)
|
||||
|
||||
expect(page).not_to have_content no_casting_calls_label
|
||||
|
||||
expect(page).to have_content casting_call.created_at.try(:strftime, '%D')
|
||||
expect(page).to have_content casting_call.title
|
||||
expect(page).to have_content casting_call.status
|
||||
end
|
||||
|
||||
scenario "can create casting call requests" do
|
||||
visit project_casting_calls_path(project)
|
||||
|
||||
expect(page).to have_content no_casting_calls_label
|
||||
click_on add_new_casting_call_label
|
||||
|
||||
fill_in title_field, with: "Title"
|
||||
fill_in description_field, with: "Description"
|
||||
fill_in project_description_field, with: "Project Description"
|
||||
fill_in interview_instructions_field, with: "Interview instructions"
|
||||
fill_in interview_requirements_field, with: "Interview requirements"
|
||||
fill_in questions_field, with: "Questions"
|
||||
|
||||
click_on "Create Casting call"
|
||||
|
||||
expect(page).to have_content("Your casting call request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds.")
|
||||
end
|
||||
|
||||
scenario "can update casting call requests" do
|
||||
create(:casting_call, title: "Title", project: project)
|
||||
visit project_casting_calls_path(project)
|
||||
|
||||
click_on manage_button
|
||||
click_on "Edit"
|
||||
|
||||
fill_in title_field, with: "New Title"
|
||||
|
||||
click_on "Update Casting call"
|
||||
|
||||
expect(page).to have_content("The casting call request has been updated")
|
||||
end
|
||||
|
||||
scenario "can cancel a casting call request" do
|
||||
create(:casting_call, title: "Title", project: project)
|
||||
visit project_casting_calls_path(project)
|
||||
|
||||
click_on manage_button
|
||||
click_on "Cancel"
|
||||
|
||||
expect(page).to have_content("The casting call request has been cancelled")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def no_casting_calls_label
|
||||
"Casting calls will appear here"
|
||||
end
|
||||
|
||||
def manage_button
|
||||
t "casting_calls.casting_call.actions.manage"
|
||||
end
|
||||
|
||||
def add_new_casting_call_label
|
||||
t "casting_calls.index.actions.new"
|
||||
end
|
||||
|
||||
def title_field
|
||||
t "casting_calls.form.labels.title"
|
||||
end
|
||||
|
||||
def description_field
|
||||
t "casting_calls.form.labels.description"
|
||||
end
|
||||
|
||||
def project_description_field
|
||||
t "casting_calls.form.labels.project_description"
|
||||
end
|
||||
|
||||
def interview_instructions_field
|
||||
t "casting_calls.form.labels.interview_instructions"
|
||||
end
|
||||
|
||||
def interview_requirements_field
|
||||
t "casting_calls.form.labels.interview_requirements"
|
||||
end
|
||||
|
||||
def questions_field
|
||||
t "casting_calls.form.labels.questions"
|
||||
end
|
||||
end
|
||||
@@ -28,24 +28,6 @@ feature "User managing medical releases" do
|
||||
expect(page).to have_content(successful_submission_message)
|
||||
end
|
||||
|
||||
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
||||
|
||||
all('input[data-required-tag="guardian"]').each do |field|
|
||||
expect(field['required']).to eq 'false'
|
||||
expect(field).not_to be_visible
|
||||
end
|
||||
|
||||
page.check person_is_minor_checkbox
|
||||
|
||||
all('input[data-required-tag="guardian"]').each do |field|
|
||||
expect(field['required']).to eq 'true'
|
||||
expect(field).to be_visible
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'creating a release for a minor', js: true do
|
||||
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
||||
|
||||
@@ -65,7 +47,6 @@ feature "User managing medical releases" do
|
||||
fill_in guardian_first_name_field, with: 'Guardian'
|
||||
fill_in guardian_last_name_field, with: 'Name'
|
||||
fill_in guardian_phone_field, with: '001101'
|
||||
fill_in guardian_email_field, with: "valid@email.com"
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
fill_in_person_address_fields
|
||||
@@ -75,6 +56,11 @@ feature "User managing medical releases" do
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
||||
|
||||
fill_in guardian_email_field, with: 'invalid@email'
|
||||
click_button submit_release_button
|
||||
expect(page).to have_content email_validation_error_for('Guardian')
|
||||
|
||||
fill_in guardian_email_field, with: 'valid@email.com'
|
||||
fill_in_guardian_address_fields
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
||||
@@ -108,7 +94,6 @@ feature "User managing medical releases" do
|
||||
fill_in guardian_first_name_field, with: 'Guardian'
|
||||
fill_in guardian_last_name_field, with: 'Name'
|
||||
fill_in guardian_phone_field, with: '001101'
|
||||
fill_in guardian_email_field, with: "valid@email.com"
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
fill_in_person_address_fields
|
||||
@@ -118,6 +103,11 @@ feature "User managing medical releases" do
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
||||
|
||||
fill_in guardian_email_field, with: 'invalid@email'
|
||||
click_button submit_release_button
|
||||
expect(page).to have_content email_validation_error_for('Guardian')
|
||||
|
||||
fill_in guardian_email_field, with: 'valid@email.com'
|
||||
fill_in_guardian_address_fields
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
||||
@@ -131,43 +121,6 @@ feature "User managing medical releases" do
|
||||
expect(page).to have_content(successful_submission_message)
|
||||
expect(MedicalRelease.last.guardian_2_first_name).to eq 'Second'
|
||||
end
|
||||
|
||||
scenario 'when signing release, question answers are required', js: true do
|
||||
project = create(:project, members: current_user, account: current_user.primary_account)
|
||||
contract_template = create(:contract_template,
|
||||
project: project,
|
||||
question_1_text: 'Question 1',
|
||||
question_2_text: 'Question 2'
|
||||
)
|
||||
|
||||
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
||||
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
||||
|
||||
expect do
|
||||
click_button submit_release_button
|
||||
end.to change(MedicalRelease, :count).by(0)
|
||||
expect(page).not_to have_content(successful_submission_message)
|
||||
|
||||
fill_in answer_field_for_question(1), with: 'Answer 1'
|
||||
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
||||
|
||||
expect do
|
||||
click_button submit_release_button
|
||||
end.to change(MedicalRelease, :count).by(0)
|
||||
expect(page).not_to have_content(successful_submission_message)
|
||||
|
||||
fill_in answer_field_for_question(2), with: 'Answer 2'
|
||||
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
||||
|
||||
expect do
|
||||
click_button submit_release_button
|
||||
end.to change(MedicalRelease, :count).by(1)
|
||||
expect(page).to have_content(successful_submission_message)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
context "when signed in as account manager" do
|
||||
@@ -443,8 +396,4 @@ feature "User managing medical releases" do
|
||||
def guardian_2_information_heading
|
||||
t 'public.medical_releases.new.guardian_2_info.heading'
|
||||
end
|
||||
|
||||
def answer_field_for_question(number)
|
||||
"medical_release[question_#{number}_answer]"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,52 +4,6 @@ feature "User managing misc releases" do
|
||||
let(:current_user) { create(:user) }
|
||||
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
||||
|
||||
context 'when signed out' do
|
||||
scenario 'creating a release for an adult', js: true do
|
||||
project = create(:project, members: current_user, account: current_user.primary_account)
|
||||
contract_template = create(:misc_release_contract_template,
|
||||
question_1_text: "Question 1",
|
||||
project: project)
|
||||
|
||||
visit new_account_project_contract_template_misc_release_path(project.account, project, contract_template)
|
||||
|
||||
expect(page).to have_content("QUESTIONNAIRE")
|
||||
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
fill_in_person_address_fields
|
||||
fill_in person_phone_field, with: '555-555-5555'
|
||||
fill_in person_email_field, with: 'jane.doe@test.com'
|
||||
fill_in question_1_field, with: "Answer 1"
|
||||
drop_file Rails.root.join(file_fixture("person_photo.png")), type: :dropzone
|
||||
draw_signature file_fixture("signature.png"), "misc_release_signature_base64"
|
||||
|
||||
expect do
|
||||
click_button submit_release_button
|
||||
end.to change(MiscRelease, :count).by(1)
|
||||
|
||||
expect(page).to have_content(successful_submission_message)
|
||||
end
|
||||
|
||||
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
visit new_account_project_contract_template_misc_release_path(project.account, project, contract_template)
|
||||
|
||||
all('input[data-required-tag="guardian"]').each do |field|
|
||||
expect(field['required']).to eq 'false'
|
||||
expect(field).not_to be_visible
|
||||
end
|
||||
|
||||
page.check person_is_minor_checkbox
|
||||
|
||||
all('input[data-required-tag="guardian"]').each do |field|
|
||||
expect(field['required']).to eq 'true'
|
||||
expect(field).to be_visible
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when signed in as account manager" do
|
||||
before do
|
||||
sign_in current_user
|
||||
@@ -71,52 +25,6 @@ feature "User managing misc releases" do
|
||||
click_link *view_release_pdf_link_for(native_release)
|
||||
expect(content_type).to eq('application/pdf')
|
||||
end
|
||||
|
||||
scenario 'viewing the contract PDF' do
|
||||
misc_release = create(:misc_release,
|
||||
:native,
|
||||
contract_template: build(:misc_release_contract_template, question_1_text: 'Q1'),
|
||||
question_1_answer: 'A1',
|
||||
project: project,
|
||||
person_first_name: 'Jane',
|
||||
person_last_name: 'Doe',
|
||||
tag_list: 'Woman, Brunette',
|
||||
notes: [
|
||||
build(:note,
|
||||
content: 'Note 1',
|
||||
user: build(:user, email: 'jane.doe@test.com'),
|
||||
email: 'jane.doe@test.com',
|
||||
created_at: DateTime.new(2020, 2, 21, 12, 0, 0)),
|
||||
build(:note,
|
||||
content: 'Note 2',
|
||||
user: build(:user, email: 'john.doe@test.com'),
|
||||
email: 'john.doe@test.com',
|
||||
created_at: DateTime.new(2020, 2, 20, 11, 0, 0))
|
||||
])
|
||||
|
||||
sign_in(current_user)
|
||||
visit project_misc_releases_path(project)
|
||||
click_link *view_release_pdf_link_for(misc_release)
|
||||
|
||||
expect(content_type).to eq('application/pdf')
|
||||
expect(content_disposition).to include('inline')
|
||||
expect(pdf_filename).to include('doe-jane')
|
||||
expect(pdf_body).to have_content('Jane Doe')
|
||||
expect(pdf_body).to have_content('NOTES')
|
||||
expect(pdf_body).to have_content('Note 1')
|
||||
expect(pdf_body).to have_content('jane.doe@test.com')
|
||||
expect(pdf_body).to have_content('2/21/20 12:00 PM')
|
||||
expect(pdf_body).to have_content('Note 2')
|
||||
expect(pdf_body).to have_content('john.doe@test.com')
|
||||
expect(pdf_body).to have_content('2/20/20 11:00 AM')
|
||||
expect(pdf_body).to have_content('TAGS')
|
||||
expect(pdf_body).to have_content('Woman')
|
||||
expect(pdf_body).to have_content('Brunette')
|
||||
expect(pdf_body).not_to have_content('Guardian Email')
|
||||
expect(pdf_body).to have_content('QUESTIONNAIRE')
|
||||
expect(pdf_body).to have_content('Q1')
|
||||
expect(pdf_body).to have_content('A1')
|
||||
end
|
||||
end
|
||||
|
||||
context "when the user is manager(project manager)" do
|
||||
@@ -144,59 +52,4 @@ feature "User managing misc releases" do
|
||||
def view_release_pdf_link_for(release)
|
||||
['Download', href: misc_release_contracts_path(release, format: 'pdf')]
|
||||
end
|
||||
|
||||
def fill_in_person_address_fields
|
||||
fill_in person_address_street1_field, with: "123 Test Lane"
|
||||
fill_in person_address_city_field, with: "New York"
|
||||
fill_in person_address_state_field, with: "NY"
|
||||
fill_in person_address_zip_field, with: '1000'
|
||||
end
|
||||
|
||||
def person_address_street1_field
|
||||
t('helpers.label.misc_release.person_address_street1')
|
||||
end
|
||||
|
||||
def person_address_city_field
|
||||
t('helpers.label.misc_release.person_address_city')
|
||||
end
|
||||
|
||||
def person_address_state_field
|
||||
t('helpers.label.misc_release.person_address_state')
|
||||
end
|
||||
|
||||
def person_address_zip_field
|
||||
t('helpers.label.misc_release.person_address_zip')
|
||||
end
|
||||
|
||||
def person_first_name_field
|
||||
t('helpers.label.misc_release.person_first_name')
|
||||
end
|
||||
|
||||
def person_last_name_field
|
||||
t('helpers.label.misc_release.person_last_name')
|
||||
end
|
||||
|
||||
def person_email_field
|
||||
t('helpers.label.misc_release.person_email')
|
||||
end
|
||||
|
||||
def person_phone_field
|
||||
t('helpers.label.misc_release.person_phone')
|
||||
end
|
||||
|
||||
def question_1_field
|
||||
'misc_release[question_1_answer]'
|
||||
end
|
||||
|
||||
def submit_release_button
|
||||
t 'shared.submit_release_long'
|
||||
end
|
||||
|
||||
def successful_submission_message
|
||||
"Your release was successfully submitted. Thank you."
|
||||
end
|
||||
|
||||
def person_is_minor_checkbox
|
||||
'misc_release_minor'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -32,24 +32,6 @@ feature "User managing talent releases" do
|
||||
expect(page).to have_content("Your release was successfully submitted. Thank you.")
|
||||
end
|
||||
|
||||
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
visit new_account_project_contract_template_talent_release_path(project.account, project, contract_template)
|
||||
|
||||
all('input[data-required-tag="guardian"]').each do |field|
|
||||
expect(field['required']).to eq 'false'
|
||||
expect(field).not_to be_visible
|
||||
end
|
||||
|
||||
page.check person_is_minor_checkbox
|
||||
|
||||
all('input[data-required-tag="guardian"]').each do |field|
|
||||
expect(field['required']).to eq 'true'
|
||||
expect(field).to be_visible
|
||||
end
|
||||
end
|
||||
|
||||
scenario "creating a release for a minor", js: true do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
@@ -66,8 +48,6 @@ feature "User managing talent releases" do
|
||||
fill_in guardian_first_name_field, with: "Guardian"
|
||||
fill_in guardian_last_name_field, with: "Name"
|
||||
fill_in guardian_phone_field, with: "001101"
|
||||
fill_in guardian_email_field, with: "valid@email.com"
|
||||
fill_in_guardian_address_fields
|
||||
fill_in person_first_name_field, with: "Jane"
|
||||
fill_in person_last_name_field, with: "Doe"
|
||||
fill_in person_address_field, with: "123 Test Lane, New York, NY 10000"
|
||||
@@ -108,9 +88,6 @@ feature "User managing talent releases" do
|
||||
fill_in guardian_first_name_field, with: "Guardian"
|
||||
fill_in guardian_last_name_field, with: "Name"
|
||||
fill_in guardian_phone_field, with: "001101"
|
||||
fill_in guardian_email_field, with: "valid@email.com"
|
||||
|
||||
fill_in_guardian_address_fields
|
||||
|
||||
fill_in guardian_2_first_name_field, with: "Second"
|
||||
fill_in guardian_2_last_name_field, with: "Guardian"
|
||||
@@ -410,30 +387,10 @@ feature "User managing talent releases" do
|
||||
"talent_release[guardian_2_last_name]"
|
||||
end
|
||||
|
||||
def guardian_address_street1_field
|
||||
"talent_release[guardian_address_street1]"
|
||||
end
|
||||
|
||||
def guardian_address_city_field
|
||||
"talent_release[guardian_address_city]"
|
||||
end
|
||||
|
||||
def guardian_address_state_field
|
||||
"talent_release[guardian_address_state]"
|
||||
end
|
||||
|
||||
def guardian_address_zip_field
|
||||
"talent_release[guardian_address_zip]"
|
||||
end
|
||||
|
||||
def guardian_phone_field
|
||||
"Guardian phone"
|
||||
end
|
||||
|
||||
def guardian_email_field
|
||||
"talent_release[guardian_email]"
|
||||
end
|
||||
|
||||
def guardian_photo_field
|
||||
"talent_release[guardian_photo]"
|
||||
end
|
||||
@@ -548,11 +505,4 @@ feature "User managing talent releases" do
|
||||
def contract_field
|
||||
"talent_release[contract]"
|
||||
end
|
||||
|
||||
def fill_in_guardian_address_fields
|
||||
fill_in guardian_address_street1_field, with: "124 Test Lane"
|
||||
fill_in guardian_address_city_field, with: "New York"
|
||||
fill_in guardian_address_state_field, with: "NY"
|
||||
fill_in guardian_address_zip_field, with: '1000'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,14 +8,7 @@ feature "User managing task requests" do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
scenario "splash page is shown if there are no task requests" do
|
||||
visit project_task_requests_path(project)
|
||||
|
||||
expect(page).to have_content schedule_demo
|
||||
end
|
||||
|
||||
scenario "task requests table is visible" do
|
||||
create(:task_request, project: project, description: 'Short Desc')
|
||||
visit project_task_requests_path(project)
|
||||
|
||||
expect(page).to have_content "Created On"
|
||||
@@ -26,6 +19,10 @@ feature "User managing task requests" do
|
||||
end
|
||||
|
||||
scenario "sees list of task requests" do
|
||||
visit project_task_requests_path(project)
|
||||
|
||||
expect(page).to have_content no_task_requests_label
|
||||
|
||||
task_request = create(:task_request, project: project)
|
||||
|
||||
visit project_task_requests_path(project)
|
||||
@@ -116,8 +113,4 @@ feature "User managing task requests" do
|
||||
def long_description_text
|
||||
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
|
||||
end
|
||||
|
||||
def schedule_demo
|
||||
t 'task_requests.splash.actions.book_demo'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
require "rails_helper"
|
||||
|
||||
feature "User managing videos" do
|
||||
let(:current_user) { create(:user, :manager) }
|
||||
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
||||
let(:current_user) { create(:user) }
|
||||
let(:project) { create(:project, account: current_user.primary_account) }
|
||||
let!(:video) do
|
||||
create(:video,
|
||||
:with_graphics_only_edl_file,
|
||||
@@ -17,14 +17,6 @@ feature "User managing videos" do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
scenario "splash page is shown if there are no existing videos" do
|
||||
Video.delete_all
|
||||
visit project_videos_path(project)
|
||||
|
||||
expect(page).to have_content schedule_demo
|
||||
expect(page).to have_content upload_new_video
|
||||
end
|
||||
|
||||
scenario "creating a video", js: true do
|
||||
visit project_videos_path(project)
|
||||
click_link "Upload New Video"
|
||||
@@ -104,30 +96,6 @@ feature "User managing videos" do
|
||||
expect(page).to have_content("Second Video")
|
||||
end
|
||||
|
||||
context 'When the user is associate' do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
it 'does show button to upload new video' do
|
||||
Video.delete_all
|
||||
visit project_videos_path(project)
|
||||
|
||||
expect(page).to have_content schedule_demo
|
||||
expect(page).to have_content upload_new_video
|
||||
end
|
||||
end
|
||||
|
||||
context 'When the user is account manager' do
|
||||
let(:current_user) { create(:user, :account_manager) }
|
||||
|
||||
it 'does show button to upload new video' do
|
||||
Video.delete_all
|
||||
visit project_videos_path(project)
|
||||
|
||||
expect(page).to have_content schedule_demo
|
||||
expect(page).to have_content upload_new_video
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def fill_in_video_fields(data)
|
||||
@@ -147,12 +115,4 @@ feature "User managing videos" do
|
||||
def update_video_notice
|
||||
t "videos.update.notice"
|
||||
end
|
||||
|
||||
def schedule_demo
|
||||
t 'videos.splash.actions.book_demo'
|
||||
end
|
||||
|
||||
def upload_new_video
|
||||
t 'videos.splash.actions.upload_video'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe GenerateInterviewFilesZipJob do
|
||||
let(:project) { create(:project) }
|
||||
let(:download) { create(:download, project: project, release_type: "CastingCallInterview", name: "my-title_john-doe") }
|
||||
let(:casting_call) { create(:casting_call, project: project, title: "My Title") }
|
||||
let(:casting_call_interview) { create(:casting_call_interview, casting_call: casting_call, performer_name: "John Doe") }
|
||||
|
||||
before do
|
||||
dir = Rails.root.join("spec", "fixtures", "files")
|
||||
files = ["contract.pdf", "AppearanceRelease.pdf"]
|
||||
# Attachments in the test environment do not persist to cloud storage
|
||||
# Therefore we want to stub calls to `open` with a cloud storage URL
|
||||
allow_any_instance_of(InterviewFilesCollectionService).to receive(:open).and_return(StringIO.new("file data"))
|
||||
allow_any_instance_of(InterviewFilesCollectionService).to receive(:build).and_yield(dir, files)
|
||||
end
|
||||
|
||||
describe ".perform_later" do
|
||||
it "enqueues a background job for generating zip file" do
|
||||
expect {
|
||||
GenerateInterviewFilesZipJob.perform_later(project, download, casting_call_interview)
|
||||
}.to have_enqueued_job
|
||||
end
|
||||
end
|
||||
|
||||
describe ".perform_now" do
|
||||
it "updates a download record and creates attachment for it" do
|
||||
GenerateInterviewFilesZipJob.perform_now(project, download, casting_call_interview)
|
||||
|
||||
expect(download.project).to eq project
|
||||
expect(download.release_type).to eq "CastingCallInterview"
|
||||
expect(download.name).to eq "my-title_john-doe"
|
||||
expect(download.status).to eq "success"
|
||||
expect(download.file).to be_attached
|
||||
end
|
||||
|
||||
context "When there are errors" do
|
||||
let(:error) { StandardError.new("Casting Call Interview files not found.") }
|
||||
|
||||
before do
|
||||
allow(ProjectsChannel).to receive(:broadcast_download_generation_update).with(download, I18n.t("interview_downloads.download.failure"))
|
||||
allow_any_instance_of(InterviewFilesCollectionService).to receive(:build).and_raise(StandardError, "Casting Call Interview files not found.")
|
||||
end
|
||||
|
||||
it "updates status to 'failure' and sends user a notification" do
|
||||
GenerateInterviewFilesZipJob.perform_now(project, download, casting_call_interview)
|
||||
|
||||
expect(download.status).to eq "failure"
|
||||
expect(ProjectsChannel).to have_received(:broadcast_download_generation_update).with(download, I18n.t("interview_downloads.download.failure"))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
after do
|
||||
# Delete the file created in fixture.
|
||||
# Or the tests will fail on next run due to already existing files in existing zip.
|
||||
path = Rails.root.join("spec", "fixtures", "files")
|
||||
File.delete("#{path}/my-title_john-doe.zip") if File.exists? "#{path}/my-title_john-doe.zip"
|
||||
end
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user