Compare commits
15 Commits
add-splash
...
cast-me-mv
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9a29f1d13a | ||
|
|
4f1ebb27d0 | ||
|
|
95e9a70c4b | ||
|
|
e3acdb4d0e | ||
|
|
96b31b71cf | ||
|
|
da8e187430 | ||
|
|
4c49a5db03 | ||
|
|
35303cb570 | ||
|
|
1127f09263 | ||
|
|
19b1e75384 | ||
|
|
93a4ce462d | ||
|
|
0e16791d8b | ||
|
|
7cdb814d6d | ||
|
|
2dea0f29b9 | ||
|
|
d6a3542308 |
13
app/assets/javascripts/update_required_status.js
Normal file
13
app/assets/javascripts/update_required_status.js
Normal file
@@ -0,0 +1,13 @@
|
||||
$(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");
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -11,6 +11,7 @@ $body-color: #4A4A4A;
|
||||
$primary: #6F89FF;
|
||||
$blue: #0092ff;
|
||||
$red: #F9002B;
|
||||
$dark-red: #CE004A;
|
||||
$green: #51B61B;
|
||||
$teal: #32C498;
|
||||
$purple: #5139EE;
|
||||
|
||||
@@ -69,6 +69,13 @@ label {
|
||||
}
|
||||
}
|
||||
|
||||
&.cast-me {
|
||||
span:last-child {
|
||||
background-color: $dark-red;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
span:last-child {
|
||||
background-color: $gray-500 !important;
|
||||
|
||||
@@ -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(user.first_name, user.last_name, user.email, account.name, i_m_interested_in: user.interested_product_name)
|
||||
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"])
|
||||
redirect_to signed_in_root_path
|
||||
else
|
||||
redirect_to new_session_path, alert: t(".notice")
|
||||
|
||||
70
app/controllers/admin/casting_submissions_controller.rb
Normal file
70
app/controllers/admin/casting_submissions_controller.rb
Normal file
@@ -0,0 +1,70 @@
|
||||
class Admin::CastingSubmissionsController < Admin::ApplicationController
|
||||
before_action :set_casting_submission, only: [:edit, :update, :show, :complete]
|
||||
before_action :build_casting_submission, only: [:new, :create]
|
||||
before_action :set_accounts, only: %i[new create edit]
|
||||
|
||||
def index
|
||||
@casting_submissions = casting_submissions.order_by_recent.paginate(page: params[:page])
|
||||
end
|
||||
|
||||
def create
|
||||
@casting_submission.attributes = casting_submission_params
|
||||
|
||||
if @casting_submission.save
|
||||
redirect_to [:admin, :casting_submissions], notice: t(".notice")
|
||||
else
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if @casting_submission.update(casting_submission_params)
|
||||
redirect_to [:admin, :casting_submissions], notice: t(".notice")
|
||||
else
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
def complete
|
||||
if @casting_submission.update(interviewed_at: Time.zone.now)
|
||||
redirect_to [:admin, :casting_submissions], notice: t(".notice")
|
||||
else
|
||||
redirect_to [:admin, :casting_submissions], notice: t(".alert")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_accounts
|
||||
@accounts = accounts
|
||||
end
|
||||
|
||||
def casting_submission_params
|
||||
params.require(:casting_submission).permit(
|
||||
:casting_call_id, :performer_name, :interview_date,
|
||||
:zoom_meeting_url, :interview_recording, :time_elapsed_1,
|
||||
:time_elapsed_2, :time_elapsed_3, :time_elapsed_4, :time_elapsed_5,
|
||||
:time_elapsed_6, :time_elapsed_7, :time_elapsed_8, :time_elapsed_9,
|
||||
:time_elapsed_10, :time_elapsed_11, :time_elapsed_12, :time_elapsed_13,
|
||||
:time_elapsed_14, :time_elapsed_15, :note_1 , :note_2 , :note_3 , :note_4,
|
||||
:note_5, :note_6, :note_7, :note_8, :note_9, :note_10, :note_11, :note_12, :note_13,
|
||||
:note_14, :note_15
|
||||
)
|
||||
end
|
||||
|
||||
def casting_submissions
|
||||
policy_scope CastingSubmission
|
||||
end
|
||||
|
||||
def set_casting_submission
|
||||
@casting_submission = authorize policy_scope(CastingSubmission).find(params[:id])
|
||||
end
|
||||
|
||||
def accounts
|
||||
policy_scope Account
|
||||
end
|
||||
|
||||
def build_casting_submission
|
||||
@casting_submission = authorize policy_scope(CastingSubmission).build
|
||||
end
|
||||
end
|
||||
@@ -17,7 +17,9 @@ class Api::ApiController < ActionController::Base
|
||||
def return_error(exception)
|
||||
raise exception if Rails.env.test?
|
||||
|
||||
logger.error "==Handled======="
|
||||
Raven.capture_exception(exception)
|
||||
|
||||
logger.error "==Handled======"
|
||||
logger.error exception.message
|
||||
logger.error exception.backtrace.join("\n")
|
||||
logger.error "==Handled======="
|
||||
|
||||
@@ -5,6 +5,8 @@ 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,6 +5,7 @@ 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])
|
||||
@@ -49,6 +50,10 @@ 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
|
||||
|
||||
80
app/controllers/casting_calls_controller.rb
Normal file
80
app/controllers/casting_calls_controller.rb
Normal file
@@ -0,0 +1,80 @@
|
||||
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]
|
||||
before_action :show_splash_screen, only: :index
|
||||
|
||||
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
|
||||
redirect_to [@project, :casting_calls], notice: t(".notice")
|
||||
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 show_splash_screen
|
||||
render :splash if casting_calls.count.zero?
|
||||
end
|
||||
|
||||
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
|
||||
30
app/controllers/casting_submission_downloads_controller.rb
Normal file
30
app/controllers/casting_submission_downloads_controller.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
class CastingSubmissionDownloadsController < ApplicationController
|
||||
include ProjectContext
|
||||
|
||||
before_action :set_project, only: [:create]
|
||||
before_action :set_casting_submission, only: :create
|
||||
|
||||
include ProjectLayout
|
||||
|
||||
def create
|
||||
download = @project.downloads.create!(name: @casting_submission.zip_file_name, release_type: "CastingSubmission")
|
||||
|
||||
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: "CastingSubmission" }, :layout => false
|
||||
ProjectsChannel.broadcast_download_generation_update(download, in_progress_downloads_details)
|
||||
else
|
||||
ProjectsChannel.broadcast_download_generation_update(download, I18n.t("casting_submission_downloads.download.pending", release_type: "CastingSubmission"))
|
||||
end
|
||||
|
||||
GenerateCastingSubmissionFilesZipJob.perform_later(@project, download, @casting_submission)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_casting_submission
|
||||
authorize(Download)
|
||||
@casting_submission = policy_scope(@project.casting_submissions).find(params[:casting_submission_id])
|
||||
end
|
||||
end
|
||||
32
app/controllers/casting_submissions_controller.rb
Normal file
32
app/controllers/casting_submissions_controller.rb
Normal file
@@ -0,0 +1,32 @@
|
||||
class CastingSubmissionsController < ApplicationController
|
||||
before_action :set_project
|
||||
before_action :set_casting_submission, only: [:show]
|
||||
|
||||
include ProjectLayout
|
||||
|
||||
def index
|
||||
@casting_submissions = casting_submissions.completed.order_by_recent.paginate(page: params[:page])
|
||||
end
|
||||
|
||||
def show
|
||||
@casting_call = @casting_submission.casting_call
|
||||
@files = @casting_submission.files.order("created_at DESC").paginate(page: params[:files_page])
|
||||
@markers = @casting_submission.markers
|
||||
|
||||
render layout: 'application'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_project
|
||||
@project = policy_scope(Project).find(params[:project_id])
|
||||
end
|
||||
|
||||
def set_casting_submission
|
||||
@casting_submission = authorize casting_submissions.find(params[:id])
|
||||
end
|
||||
|
||||
def casting_submissions
|
||||
authorize policy_scope(CastingSubmission)
|
||||
end
|
||||
end
|
||||
@@ -7,6 +7,7 @@ class ContractTemplatesController < ApplicationController
|
||||
|
||||
before_action :set_project, except: [:destroy]
|
||||
before_action :set_contract_template, only: [:destroy]
|
||||
before_action :show_splash_screen, only: :index
|
||||
|
||||
def index
|
||||
@contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page])
|
||||
@@ -38,6 +39,10 @@ class ContractTemplatesController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def show_splash_screen
|
||||
render :splash if contract_templates.non_archived.count.zero?
|
||||
end
|
||||
|
||||
def set_contract_template
|
||||
@contract_template = authorize contract_templates.find(params[:id])
|
||||
end
|
||||
|
||||
14
app/controllers/public/casting_calls_controller.rb
Normal file
14
app/controllers/public/casting_calls_controller.rb
Normal file
@@ -0,0 +1,14 @@
|
||||
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
|
||||
25
app/controllers/public/casting_submissions_controller.rb
Normal file
25
app/controllers/public/casting_submissions_controller.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
class Public::CastingSubmissionsController < Public::BaseController
|
||||
skip_after_action :verify_authorized
|
||||
before_action :set_casting_submission, only: [:show, :update]
|
||||
|
||||
def show
|
||||
end
|
||||
|
||||
def update
|
||||
if @casting_submission.update(casting_submission_params)
|
||||
redirect_to casting_submission_url(token: @casting_submission.token), notice: t(".notice")
|
||||
else
|
||||
render :show
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_casting_submission
|
||||
@casting_submission = CastingSubmission.find_by_token(params[:token])
|
||||
end
|
||||
|
||||
def casting_submission_params
|
||||
params.require(:casting_submission).permit(files: [])
|
||||
end
|
||||
end
|
||||
@@ -46,6 +46,7 @@ class Public::MiscReleasesController < Public::BaseController
|
||||
.permit(
|
||||
person_params,
|
||||
guardian_params,
|
||||
questionnaire_params,
|
||||
:signature_base64,
|
||||
:locale,
|
||||
:contract_template,
|
||||
@@ -85,6 +86,26 @@ 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,6 +4,7 @@ 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])
|
||||
@@ -18,7 +19,7 @@ class TaskRequestsController < ApplicationController
|
||||
if @task_request.save
|
||||
log_create_analytics
|
||||
taskme_url = url_for([:admin, @task_request])
|
||||
SubmitHubspotTaskRequestFormJob.perform_later(@task_request.user_email, taskme_url)
|
||||
SubmitHubspotFormJob.perform_later(email: @task_request.user_email, taskme_url: taskme_url, form_guid: ENV["HUBSPOT_TASK_REQUEST_FORM_GUID"])
|
||||
else
|
||||
render :new
|
||||
end
|
||||
@@ -46,6 +47,10 @@ 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,6 +3,7 @@ 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?
|
||||
@@ -60,6 +61,10 @@ 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
|
||||
|
||||
@@ -13,10 +13,13 @@ module WordmarkHelper
|
||||
css += options[:class].to_s
|
||||
|
||||
content_tag(:div, class: css) do
|
||||
safe_join [
|
||||
elements = [
|
||||
content_tag(:span, t("shared.#{product_name}")),
|
||||
content_tag(:span, t("shared.me"))
|
||||
]
|
||||
prefix = options[:prefix]
|
||||
elements.unshift content_tag(:span, "#{prefix} ") unless prefix.blank?
|
||||
safe_join elements
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
43
app/jobs/generate_casting_submission_files_zip_job.rb
Normal file
43
app/jobs/generate_casting_submission_files_zip_job.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
class GenerateCastingSubmissionFilesZipJob < 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_submission = job.arguments.third
|
||||
@download.update!(status: :pending)
|
||||
end
|
||||
|
||||
def perform(project, download, casting_submission)
|
||||
::CastingSubmissionFilesCollectionService.new(casting_submission.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: "CastingSubmission"
|
||||
)
|
||||
|
||||
@download.failure!
|
||||
ProjectsChannel.broadcast_download_generation_update(@download, I18n.t("casting_submission_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("casting_submission_downloads.download.success", downloads_folder_link: downloads_folder_link, download_button: download_button, release_type: "Casting Submission"))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,19 +1,11 @@
|
||||
class SubmitHubspotFormJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(first_name, last_name, email, company_name, additional_params = {})
|
||||
hubspot_form_guid = ENV["HUBSPOT_FORM_GUID"]
|
||||
return unless hubspot_form_guid.present?
|
||||
def perform(params = {})
|
||||
return unless params[:form_guid].present?
|
||||
|
||||
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)
|
||||
form = Hubspot::Form.new("guid" => params[:form_guid])
|
||||
is_form_sumitted = form.submit(params.except(:form_guid))
|
||||
|
||||
raise StandardError.new "Failed to submit the hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
|
||||
end
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
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,6 +4,8 @@ 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_submissions, through: :projects
|
||||
has_many :videos, through: :projects
|
||||
has_many :contract_templates, through: :projects
|
||||
|
||||
@@ -59,6 +61,8 @@ class Account < ApplicationRecord
|
||||
MedicalRelease.where(project: projects),
|
||||
MiscRelease.where(project: projects),
|
||||
MatchingRequest.where(project: projects),
|
||||
CastingCall.where(project: projects),
|
||||
self.casting_submissions,
|
||||
self
|
||||
])).sum(:byte_size).to_f
|
||||
end
|
||||
@@ -84,7 +88,11 @@ class Account < ApplicationRecord
|
||||
end
|
||||
|
||||
def taskme_enabled?
|
||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme"
|
||||
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"
|
||||
end
|
||||
|
||||
def plan_name
|
||||
@@ -97,6 +105,8 @@ class Account < ApplicationRecord
|
||||
"ReleaseME"
|
||||
when "taskme"
|
||||
"TaskME"
|
||||
when "castme"
|
||||
"CastME"
|
||||
when "me_suite"
|
||||
"ME Suite"
|
||||
end
|
||||
|
||||
18
app/models/casting_call.rb
Normal file
18
app/models/casting_call.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
class CastingCall < ApplicationRecord
|
||||
belongs_to :project
|
||||
has_many :casting_submissions, dependent: :destroy
|
||||
|
||||
has_secure_token
|
||||
|
||||
def status
|
||||
if cancelled?
|
||||
"Cancelled"
|
||||
else
|
||||
"Active"
|
||||
end
|
||||
end
|
||||
|
||||
def cancelled?
|
||||
self.cancelled_at.present?
|
||||
end
|
||||
end
|
||||
25
app/models/casting_submission.rb
Normal file
25
app/models/casting_submission.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
class CastingSubmission < ApplicationRecord
|
||||
belongs_to :casting_call
|
||||
has_many_attached :files
|
||||
has_one_attached :interview_recording
|
||||
|
||||
NUMBER_OF_MARKER_FIELDS = 15
|
||||
|
||||
has_secure_token
|
||||
|
||||
validates :performer_name, presence: true
|
||||
|
||||
scope :completed, -> { where.not(interviewed_at: nil) }
|
||||
|
||||
def zip_file_name
|
||||
"#{self.casting_call.title.parameterize}_#{self.performer_name.parameterize}_#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}"
|
||||
end
|
||||
|
||||
def markers
|
||||
(1..NUMBER_OF_MARKER_FIELDS).map do |n|
|
||||
if public_send("time_elapsed_#{n}").present?
|
||||
OpenStruct.new(id: n, time_elapsed: public_send("time_elapsed_#{n}"), note: public_send("note_#{n}") )
|
||||
end
|
||||
end.compact
|
||||
end
|
||||
end
|
||||
@@ -5,6 +5,8 @@ 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'
|
||||
@@ -59,4 +61,8 @@ 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,15 +14,37 @@ 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)
|
||||
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]
|
||||
]
|
||||
|
||||
def self.face_photo_acceptable_content_types
|
||||
@@ -32,6 +54,7 @@ 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
|
||||
|
||||
@@ -76,4 +99,15 @@ 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,6 +10,8 @@ class MiscRelease < ApplicationRecord
|
||||
include GuardianName
|
||||
include GuardianPhotoable
|
||||
|
||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||
|
||||
composed_of :person_address,
|
||||
class_name: "Address",
|
||||
mapping: [
|
||||
|
||||
@@ -15,6 +15,8 @@ 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_submissions, through: :casting_calls
|
||||
has_many :videos, dependent: :destroy
|
||||
has_many :imports, dependent: :destroy
|
||||
has_many :contract_templates, dependent: :destroy
|
||||
|
||||
25
app/policies/casting_call_policy.rb
Normal file
25
app/policies/casting_call_policy.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
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
|
||||
29
app/policies/casting_submission_policy.rb
Normal file
29
app/policies/casting_submission_policy.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
class CastingSubmissionPolicy < 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
|
||||
@@ -40,4 +40,8 @@ class ProjectPolicy < ApplicationPolicy
|
||||
def show_task_results?
|
||||
show?
|
||||
end
|
||||
|
||||
def show_casting_submission_results?
|
||||
show?
|
||||
end
|
||||
end
|
||||
|
||||
24
app/services/casting_submission_files_collection_service.rb
Normal file
24
app/services/casting_submission_files_collection_service.rb
Normal file
@@ -0,0 +1,24 @@
|
||||
class CastingSubmissionFilesCollectionService
|
||||
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,6 +169,24 @@ 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,6 +10,9 @@
|
||||
<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 Submissions"), [:admin, :casting_submissions], class: class_string("nav-link", "active" => controller_name == "casting_submissions") %>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<%= link_to fa_icon("bug fw", text: "Errors"), "https://sentry.io/bigmedia/", class: "nav-link", target: :_blank %>
|
||||
</li>
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<tr id="<%= dom_id(casting_submission) %>">
|
||||
<td>
|
||||
<%= casting_submission.casting_call.project.account.name.titleize %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_submission.casting_call.title.titleize %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_submission.performer_name %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_submission.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_submission_url(token: casting_submission.token), target: "_blank", class: "dropdown-item" %>
|
||||
<%= link_to fa_icon("pencil", text: "Edit"), [:edit, :admin, casting_submission], class: "dropdown-item" %>
|
||||
<% unless casting_submission.interviewed_at.present? %>
|
||||
<%= link_to fa_icon("check", text: "Complete"), [:complete, :admin, casting_submission], method: :post, class: "dropdown-item" %>
|
||||
<% end %>
|
||||
<%= link_to fa_icon("link fw", text: "Copy URL"), casting_submission_url(token: casting_submission.token), class: "dropdown-item", data: { behavior: "clipboard" } %>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
37
app/views/admin/casting_submissions/_form.html.erb
Normal file
37
app/views/admin/casting_submissions/_form.html.erb
Normal file
@@ -0,0 +1,37 @@
|
||||
<%= errors_summary_for casting_submission %>
|
||||
|
||||
<%= 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 %>
|
||||
|
||||
<% unless casting_submission.new_record? %>
|
||||
<%= form.file_field :interview_recording, accept: "video/mp4", data: { direct_upload_url: rails_direct_uploads_url, aws_bucket: ENV['AWS_BUCKET'], aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], signer_url: multipart_signatures_url } %>
|
||||
|
||||
<% if casting_submission.interview_recording.attached? %>
|
||||
<p>
|
||||
<%= link_to casting_submission.interview_recording do %>
|
||||
<%= fa_icon "file-text-o" %> <%= casting_submission.interview_recording.filename %>
|
||||
<% end %>
|
||||
<span class="text-muted"><%= fa_icon "long-arrow-left" %> <em>Current interview recording</em></span>
|
||||
</p>
|
||||
<% end %>
|
||||
<hr>
|
||||
<%= card_field_set_tag t(".casting_submission_markers.heading") do %>
|
||||
<% (1..CastingSubmission::NUMBER_OF_MARKER_FIELDS).each do |n| %>
|
||||
<div class="form-row">
|
||||
<%= form.number_field "time_elapsed_#{n}", wrapper_class: "col-md-6", label: "Elapsed Time #{n} (in seconds)" %>
|
||||
<%= form.text_area "note_#{n}", wrapper_class: "col-md-6", label: "Note #{n}" %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<div class="row align-items-center text-center mt-4">
|
||||
<%= link_to t("shared.cancel"), [:admin, :casting_submissions], class: "col-3 text-reset" %>
|
||||
<div class="col-9">
|
||||
<%= form.submit class: class_string("btn btn-block", ["btn-success", "btn-primary"] => casting_submission.new_record?), data: { disable_with: t("shared.disable_with") } %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
6
app/views/admin/casting_submissions/edit.html.erb
Normal file
6
app/views/admin/casting_submissions/edit.html.erb
Normal file
@@ -0,0 +1,6 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: "Edit Casting Submission", close_action_path: [:admin, :casting_submissions] %>
|
||||
<div class="card-body">
|
||||
<%= render "form", model: [:admin, @casting_submission], casting_submission: @casting_submission %>
|
||||
</div>
|
||||
</div>
|
||||
32
app/views/admin/casting_submissions/index.html.erb
Normal file
32
app/views/admin/casting_submissions/index.html.erb
Normal file
@@ -0,0 +1,32 @@
|
||||
<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_submission], 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_submissions.any? %>
|
||||
<%= render @casting_submissions %>
|
||||
<% else %>
|
||||
<tr>
|
||||
<td colspan="20" class="py-4 text-center text-muted"><%= t(".empty") %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="casting_submissions_pagination" class="mt-3">
|
||||
<%= will_paginate @casting_submissions %>
|
||||
</div>
|
||||
6
app/views/admin/casting_submissions/new.html.erb
Normal file
6
app/views/admin/casting_submissions/new.html.erb
Normal file
@@ -0,0 +1,6 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: t(".heading"), close_action_path: [:admin, :casting_submissions] %>
|
||||
<div class="card-body">
|
||||
<%= render "form", model: [:admin, @casting_submission], casting_submission: @casting_submission, casting_calls: @casting_calls %>
|
||||
</div>
|
||||
</div>
|
||||
@@ -11,12 +11,14 @@
|
||||
<hr class="divider-light mx-n4">
|
||||
<nav>
|
||||
<ul class="nav nav-pills nav-pills-dark flex-column">
|
||||
<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>
|
||||
<% 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, :contract_templates], class: class_string("nav-link", "active" => %w(contract_templates release_template_imports).include?(controller_name)) do %>
|
||||
<%= lock_icon_for Current.account, :releaseme %>
|
||||
@@ -41,6 +43,12 @@
|
||||
<%= 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">
|
||||
|
||||
51
app/views/broadcasts/splash.html.erb
Normal file
51
app/views/broadcasts/splash.html.erb
Normal file
@@ -0,0 +1,51 @@
|
||||
<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>
|
||||
28
app/views/casting_calls/_casting_call.html.erb
Normal file
28
app/views/casting_calls/_casting_call.html.erb
Normal file
@@ -0,0 +1,28 @@
|
||||
<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>
|
||||
24
app/views/casting_calls/_form.html.erb
Normal file
24
app/views/casting_calls/_form.html.erb
Normal file
@@ -0,0 +1,24 @@
|
||||
<%= 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 %>
|
||||
<%= form.text_area :description %>
|
||||
<%= form.text_area :project_description %>
|
||||
<%= field_set_tag t(".headings.chatbot") do %>
|
||||
<%= form.text_area :interview_instructions, rows: 6 %>
|
||||
<%= form.text_area :questions, rows: 8 %>
|
||||
<%= form.text_area :interview_requirements, rows: 6 %>
|
||||
<% end %>
|
||||
|
||||
<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 %>
|
||||
6
app/views/casting_calls/edit.html.erb
Normal file
6
app/views/casting_calls/edit.html.erb
Normal file
@@ -0,0 +1,6 @@
|
||||
<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>
|
||||
37
app/views/casting_calls/index.html.erb
Normal file
37
app/views/casting_calls/index.html.erb
Normal file
@@ -0,0 +1,37 @@
|
||||
<%= 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>
|
||||
6
app/views/casting_calls/new.html.erb
Normal file
6
app/views/casting_calls/new.html.erb
Normal file
@@ -0,0 +1,6 @@
|
||||
<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>
|
||||
38
app/views/casting_calls/show.html.erb
Normal file
38
app/views/casting_calls/show.html.erb
Normal file
@@ -0,0 +1,38 @@
|
||||
<% 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>
|
||||
58
app/views/casting_calls/splash.html.erb
Normal file
58
app/views/casting_calls/splash.html.erb
Normal file
@@ -0,0 +1,58 @@
|
||||
<div class="d-flex flex-row">
|
||||
<div class="d-flex flex-column">
|
||||
<%= product_wordmark :cast_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(CastingCall).new? %>
|
||||
<%= link_to t(".actions.create_casting_call"), [:new, @project, :casting_call], 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_information' %></li>
|
||||
<li><%= t '.list_items.enter_questions' %></li>
|
||||
<li><%= t '.list_items.copy_and_paste_submission_link' %></li>
|
||||
<li><%= t '.list_items.wait_for_the_submission_video' %></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.fewer_team_members_needed'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.fewer_resources_needed'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.more_time_spent_with_quality_candidates'))) %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,17 @@
|
||||
<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 == "CastingSubmission"%>
|
||||
<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>
|
||||
27
app/views/casting_submissions/_casting_submission.html.erb
Normal file
27
app/views/casting_submissions/_casting_submission.html.erb
Normal file
@@ -0,0 +1,27 @@
|
||||
<tr id="<%= dom_id(casting_submission) %>">
|
||||
<td>
|
||||
<%= casting_submission.casting_call.project.account.name.titleize %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_submission.casting_call.title&.titleize %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_submission.performer_name %>
|
||||
</td>
|
||||
<td>
|
||||
<%= casting_submission.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(CastingSubmission).show? %>
|
||||
<%= link_to fa_icon("video-camera", text: "View"), [@project, casting_submission], target: "_blank", class: "dropdown-item" %>
|
||||
<% end %>
|
||||
<% if policy(CastingSubmission).download? %>
|
||||
<%= link_to fa_icon("download", text: "Download"), [@project, :casting_submission_downloads, casting_submission_id: casting_submission.id], method: :post, remote: true, class: "dropdown-item" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
12
app/views/casting_submissions/_file.html.erb
Normal file
12
app/views/casting_submissions/_file.html.erb
Normal file
@@ -0,0 +1,12 @@
|
||||
<li class="my-2" id="<%= dom_id(file) %>">
|
||||
<% if file.variable? %>
|
||||
<%= link_to image_tag(file.variant(resize_and_pad: [300, 300, background: "#F7F8F9"]), class: "bg-light img-thumbnail img-fluid"), file, target: "_blank" %>
|
||||
<% else %>
|
||||
<div class="border rounded bg-light text-muted d-flex justify-content-center align-items-center fix-h-and-w">
|
||||
<%= link_to file, target: "_blank" do %>
|
||||
<%= fa_icon("file", style: "font-size: 2rem") %>
|
||||
<div class="mt-2"><%= file.filename %></div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</li>
|
||||
14
app/views/casting_submissions/_files_section.html.erb
Normal file
14
app/views/casting_submissions/_files_section.html.erb
Normal file
@@ -0,0 +1,14 @@
|
||||
<div class="overflow-auto mh-30">
|
||||
<ul class="list-unstyled d-flex flex-column align-items-center text-center" id="casting_submission_file_list_<%= casting_submission.id %>">
|
||||
<% if files.present? %>
|
||||
<%= render partial: "casting_submissions/file", collection: files %>
|
||||
<% else %>
|
||||
<li class="my-3">
|
||||
Files will appear here.
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<div class="d-flex mt-2 justify-content-center" id="casting_submission_files_pagination_<%= casting_submission.id %>">
|
||||
<%= will_paginate(files, param_name: 'files_page', params: { active_files_tab: casting_submission.id }) if files.present? %>
|
||||
</div>
|
||||
</div>
|
||||
15
app/views/casting_submissions/_video.html.erb
Normal file
15
app/views/casting_submissions/_video.html.erb
Normal file
@@ -0,0 +1,15 @@
|
||||
<% if casting_submission.interview_recording.present? %>
|
||||
<div id="casting_submission_video" class="embed-responsive-item"></div>
|
||||
<% else %>
|
||||
<div id="casting_submission_video" class="embed-responsive-item">
|
||||
<table class="w-100 h-100 bg-secondary">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center align-middle text-white">
|
||||
Video player will appear here when the interview recording is available.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<% end %>
|
||||
26
app/views/casting_submissions/index.html.erb
Normal file
26
app/views/casting_submissions/index.html.erb
Normal file
@@ -0,0 +1,26 @@
|
||||
<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_submissions.any? %>
|
||||
<%= render @casting_submissions %>
|
||||
<% else %>
|
||||
<tr>
|
||||
<td colspan="20" class="py-4 text-center text-muted"><%= t(".empty") %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="casting_submissions_pagination" class="mt-3">
|
||||
<%= will_paginate @casting_submissions %>
|
||||
</div>
|
||||
92
app/views/casting_submissions/show.html.erb
Normal file
92
app/views/casting_submissions/show.html.erb
Normal file
@@ -0,0 +1,92 @@
|
||||
<% 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="row">
|
||||
<div class="col-lg-8 col-md-12 mb-3">
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-start flex-column">
|
||||
<h1 class="h2 mb-1"><%= @casting_submission.performer_name %></h1>
|
||||
<h1 class="h6 mb-1"><%= @casting_call.title %></h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body p-0">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<%= render partial: 'casting_submissions/video', locals: { casting_submission: @casting_submission } %>
|
||||
<% if @casting_submission.interview_recording.present? %>
|
||||
<%= javascript_tag nonce: true do %>
|
||||
var markerData = <%= raw @markers.to_json %>;
|
||||
|
||||
var player = new Clappr.Player({
|
||||
parentId: '#casting_submission_video',
|
||||
source: "<%= rails_blob_url(@casting_submission.interview_recording, host: AppHost.new.domain_with_port) %>",
|
||||
plugins: {
|
||||
core: [ClapprMarkersPlugin]
|
||||
},
|
||||
markersPlugin: {},
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
mute: true,
|
||||
autoPlay: true,
|
||||
hlsMinimumDvrSize: 1
|
||||
});
|
||||
|
||||
markerData.forEach(function(marker, index) {
|
||||
var markers = player.getPlugin("markers-plugin");
|
||||
var marker = new ClapprMarkersPlugin.StandardMarker(Number(marker.table.time_elapsed), marker.table.note)
|
||||
|
||||
markers.addMarker(marker);
|
||||
});
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-12 mb-3">
|
||||
<div class="card shadow-sm mb-3">
|
||||
<div class="card-header">
|
||||
<ul class="nav nav-tabs card-header-tabs">
|
||||
<li class="nav-item">
|
||||
<%= link_to "Home", "#home", class: class_string("nav-link", "active" => !params[:active_tab].present?), data: { toggle: "tab" } %>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<%= link_to "Files", "#files", class: class_string("nav-link", "active" => params[:active_tab] == "files"), data: { toggle: "tab" } %>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="card-body p-3">
|
||||
<div class="tab-content">
|
||||
<div class="<%= class_string("tab-pane fade show", "active" => !params[:active_tab].present?) %>" id="home">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<dl>
|
||||
<%= description_list_pair_for @casting_call, :title, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :status, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :created_at, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :description, append: ":" %>
|
||||
<%= description_list_pair_for @casting_call, :project_description, 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>
|
||||
</div>
|
||||
<div class="<%= class_string("tab-pane fade show", "active" => params[:active_tab] == 'files') %>" id="files">
|
||||
<div class="tab-pane fade show active" id="files_casting_submission_<%= @casting_submission.id %>">
|
||||
<%= render partial: 'casting_submissions/files_section', locals: { casting_submission: @casting_submission, files: @files } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</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) } }, 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 misc) } }, 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" %>
|
||||
|
||||
50
app/views/contract_templates/splash.html.erb
Normal file
50
app/views/contract_templates/splash.html.erb
Normal file
@@ -0,0 +1,50 @@
|
||||
<div class="d-flex flex-row">
|
||||
<div class="d-flex flex-column">
|
||||
<%= product_wordmark :release_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(ContractTemplate).new? %>
|
||||
<%= link_to t(".actions.create_template"), [:new, @project, :contract_template], 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/435200486?app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen" allowfullscreen title="ReleaseME_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_releases' %></li>
|
||||
<li><%= t '.list_items.download_mobile_app' %></li>
|
||||
<li><%= t '.list_items.print_QR_code' %></li>
|
||||
<li><%= t '.list_items.releases_automatically_organized' %></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.all_releases_available'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.manage_large_audience'))) %>
|
||||
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.add_tags_and_notes'))) %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,8 +1,8 @@
|
||||
<p class="heading"><strong><u><%= t ".heading" %></u></strong></p>
|
||||
<p class="heading"><strong><u><%= t ".heading.#{releasable.model_name.param_key}" %></u></strong></p>
|
||||
|
||||
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<% (1..releasable.class::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 == "MedicalRelease" %>
|
||||
<% if releasable.model_name.in? %w(MedicalRelease MiscRelease) %>
|
||||
<div class="page">
|
||||
<%= render "contracts/medical_questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
|
||||
<%= render "contracts/questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
<%= link_to t("projects.show.tasks"), [@project, :tasks], class: "text-decoration-none text-reset stretched-link" %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if policy(Project).show_casting_submission_results? %>
|
||||
<%= render "folder_card" do %>
|
||||
<%= link_to t("projects.show.casting_submissions"), [@project, :casting_submissions], 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: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", 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" %>
|
||||
<%= 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" %>
|
||||
<%= 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" } %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor? %>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor?, data: { required_tag: "guardian" } %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
|
||||
29
app/views/public/casting_calls/show.html.erb
Normal file
29
app/views/public/casting_calls/show.html.erb
Normal file
@@ -0,0 +1,29 @@
|
||||
<% 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-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: ":" %>
|
||||
</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>
|
||||
51
app/views/public/casting_submissions/show.html.erb
Normal file
51
app/views/public/casting_submissions/show.html.erb
Normal file
@@ -0,0 +1,51 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: "Casting submission details" %>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<dl>
|
||||
<%= description_list_pair_for @casting_submission, :performer_name, append: ":" %>
|
||||
<%= description_list_pair_for @casting_submission, :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_submission %>
|
||||
<%= bootstrap_form_with model: @casting_submission, url: casting_submission_path(token: @casting_submission.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_submission.files.each do |file| %>
|
||||
<% unless file.persisted? %>
|
||||
<%= hidden_field_tag "#{@casting_submission.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_submission.files) %>"
|
||||
data-placeholder="<%= dropzone_placeholder_message_for(@casting_submission) %>"
|
||||
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_submission.zoom_meeting_url, target: "_blank", class: "btn btn-primary" %>
|
||||
</div>
|
||||
</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: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.medical_release.minor"), data: { behavior: "update-required-status", 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", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||
<%= form.text_area "question_#{n}_answer", required: true, wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -59,14 +59,12 @@
|
||||
<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" %>
|
||||
<%= 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" %>
|
||||
<%= 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" } %>
|
||||
</div>
|
||||
<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? %>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor?, data: { required_tag: "guardian" } %>
|
||||
<% 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: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<% end %>
|
||||
|
||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||
@@ -20,6 +20,19 @@
|
||||
<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">
|
||||
@@ -43,14 +56,12 @@
|
||||
<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" %>
|
||||
<%= 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" %>
|
||||
<%= 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" } %>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian" %>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "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: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", 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" %>
|
||||
<%= 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" %>
|
||||
<%= 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" } %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian" %>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<% 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" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6", data: data %>
|
||||
<%= 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" %>
|
||||
<%= 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" %>
|
||||
<%= 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 %>
|
||||
</div>
|
||||
<%= form.form_group "#{field_name_prefix}address_country" do %>
|
||||
<%= form.label "#{field_name_prefix}address_country" %>
|
||||
|
||||
15
app/views/shared/_initiate_hubspot_chat.html.erb
Normal file
15
app/views/shared/_initiate_hubspot_chat.html.erb
Normal file
@@ -0,0 +1,15 @@
|
||||
<% 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,15 +1,2 @@
|
||||
<% 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>
|
||||
<%= render "shared/initiate_hubspot_chat" %>
|
||||
<p class="alert alert-success p-3 lead text-center"><%= t '.success_message' %></p>
|
||||
58
app/views/task_requests/splash.html.erb
Normal file
58
app/views/task_requests/splash.html.erb
Normal file
@@ -0,0 +1,58 @@
|
||||
<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>
|
||||
51
app/views/videos/splash.html.erb
Normal file
51
app/views/videos/splash.html.erb
Normal file
@@ -0,0 +1,51 @@
|
||||
<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>
|
||||
@@ -70,6 +70,9 @@ en:
|
||||
person_phone: Phone
|
||||
person_photo: Photo
|
||||
signed_on: Date
|
||||
casting_call:
|
||||
interview_instructions: Welcome message
|
||||
interview_requirements: Goodbye message
|
||||
location_release:
|
||||
person_company: Company
|
||||
person_email: Email
|
||||
@@ -97,6 +100,25 @@ en:
|
||||
application:
|
||||
header:
|
||||
sign_out: Sign Out
|
||||
casting_submissions:
|
||||
complete:
|
||||
notice: The casting submission has been completed
|
||||
create:
|
||||
notice: The casting submission has been created
|
||||
form:
|
||||
casting_submission_markers:
|
||||
heading: Markers
|
||||
index:
|
||||
actions:
|
||||
new: Create Casting Submission
|
||||
empty: Casting submissions will appear here
|
||||
mark_as_completed:
|
||||
alert: Failed to mark casting submission as completed
|
||||
notice: The casting submission has been marked as completed
|
||||
new:
|
||||
heading: New Casting Submission
|
||||
update:
|
||||
notice: The casting submission has been updated
|
||||
task_requests:
|
||||
index:
|
||||
empty: Task requests will appear here
|
||||
@@ -207,9 +229,80 @@ 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_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 successfully.
|
||||
edit:
|
||||
heading: Edit Casting Call
|
||||
form:
|
||||
headings:
|
||||
chatbot: Chatbot Instructions
|
||||
info_message: After submitting this casting call request, you'll be connected via chat with a ME Suite representative.
|
||||
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: Casting Title
|
||||
new:
|
||||
heading: New Casting Call
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo
|
||||
create_casting_call: Create Casting Call
|
||||
headings:
|
||||
benefits: Benefits
|
||||
how_it_works: How It Works
|
||||
subtitle: The media industry's first automated casting bot
|
||||
welcome: Welcome to
|
||||
list_items:
|
||||
copy_and_paste_submission_link: Copy and paste the submission link wherever you want
|
||||
enter_information: Enter information about the role and project
|
||||
enter_questions: Enter the questions you want the Chatbot to ask
|
||||
fewer_resources_needed: Fewer resources needed for first round of casting search
|
||||
fewer_team_members_needed: Fewer team members needed to cast large projects
|
||||
more_time_spent_with_quality_candidates: More time spent with quality casting candidates
|
||||
wait_for_the_submission_video: Wait for the casting bot to deliver you casting submission videos
|
||||
update:
|
||||
notice: The casting call request has been updated
|
||||
casting_submission_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}"
|
||||
casting_submissions:
|
||||
index:
|
||||
empty: Casting Submission results will appear here.
|
||||
show:
|
||||
empty: Casting Submission files and recorded meeetings will appear here.
|
||||
contract_downloads:
|
||||
download:
|
||||
failure: Your download could not be generated.
|
||||
@@ -233,7 +326,7 @@ en:
|
||||
archived_notice: The release template has been archived
|
||||
form:
|
||||
custom_fields:
|
||||
heading: Medical Questionnaire
|
||||
heading: Questionnaire
|
||||
instructions: Please list the questions you wish the signer to answer. Any unused question fields will be hidden.
|
||||
exploitable_rights:
|
||||
heading: Exploitable Rights
|
||||
@@ -252,9 +345,24 @@ en:
|
||||
signed_release_count: No. Signed Releases
|
||||
new:
|
||||
heading: New Release Template
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo
|
||||
create_template: Create New Release Template
|
||||
headings:
|
||||
benefits: Benefits
|
||||
how_it_works: How It Works
|
||||
subtitle: The easiest way to create and manage releases.
|
||||
welcome: Welcome to
|
||||
list_items:
|
||||
add_tags_and_notes: Add tags and notes to releases for added organization and searchability
|
||||
all_releases_available: All release types available including Covid Medical, Appearance, Location and more
|
||||
create_releases: Create releases for your video shoot
|
||||
download_mobile_app: Download the ME Suite mobile app
|
||||
manage_large_audience: Easily manage large audiences with the crowd control feature
|
||||
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
|
||||
@@ -264,6 +372,10 @@ 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}."
|
||||
@@ -324,11 +436,15 @@ en:
|
||||
notice: The release has been updated
|
||||
helpers:
|
||||
help:
|
||||
task_request:
|
||||
time_allowed: Minimum of 2 hours, no partial hours allowed
|
||||
casting_call:
|
||||
interview_instructions: This is the first message the chatbot, BiGGiE, will send. Please include all information and instructions you wish the person to read prior to starting the casting interview.
|
||||
interview_requirements: Please enter a final message and include any post-interview instructions (for example, submitting a headshot, additional photos, videos, etc).
|
||||
questions: Please list, one-by-one, all of the questions you wish the chatbot, BiGGiE, to ask the person.
|
||||
contract_template:
|
||||
fee: Leave at $0.00 for no-fee
|
||||
guardian_clause: Leave blank if not required for this contract
|
||||
task_request:
|
||||
time_allowed: Minimum of 2 hours, no partial hours allowed
|
||||
video:
|
||||
audio_only_edl_file: If you do not upload an Audio Only EDL, the software will not generate a BiG Music Cue Sheet.
|
||||
edl_file: Please follow our directions on exporting the All Tracks EDL. Failure to do so could result in inaccurate and incomplete reporting.
|
||||
@@ -382,6 +498,13 @@ en:
|
||||
person_last_name: Last name
|
||||
person_name: Name
|
||||
person_phone: Phone number
|
||||
casting_call:
|
||||
description: Casting search description
|
||||
interview_instructions: Welcome message
|
||||
interview_requirements: Goodbye message
|
||||
project_description: Project description
|
||||
questions: Questions
|
||||
title: Casting search title
|
||||
location_release:
|
||||
address_city: City
|
||||
address_country: Country
|
||||
@@ -451,6 +574,30 @@ 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
|
||||
@@ -607,6 +754,8 @@ en:
|
||||
broadcast:
|
||||
create: Create Live Stream
|
||||
update: Save Changes
|
||||
casting_submission:
|
||||
create: Create Casting Submission
|
||||
contract_template:
|
||||
create: Create Release Template
|
||||
directory:
|
||||
@@ -711,6 +860,8 @@ 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:
|
||||
@@ -868,6 +1019,7 @@ en:
|
||||
show:
|
||||
acquired_media_release: Acquired Media Releases (%{count})
|
||||
appearance_release: Appearance Releases (%{count})
|
||||
casting_submissions: Casting Submissions
|
||||
downloads: Downloads
|
||||
location_release: Location Releases (%{count})
|
||||
material_release: Material Releases (%{count})
|
||||
@@ -930,6 +1082,12 @@ en:
|
||||
broadcasts:
|
||||
show:
|
||||
alert: That broadcast is no longer available
|
||||
casting_submissions:
|
||||
show:
|
||||
heading: Files
|
||||
update: Upload
|
||||
update:
|
||||
notice: Your files have been uploaded successfully
|
||||
location_releases:
|
||||
create:
|
||||
notice: Your release has been signed. Thank you!
|
||||
@@ -1024,6 +1182,8 @@ en:
|
||||
instructions: Now, enter your personal information.
|
||||
photo:
|
||||
heading: Photos
|
||||
questionnaire:
|
||||
heading: Questionnaire
|
||||
signature:
|
||||
heading: Signature
|
||||
talent_releases:
|
||||
@@ -1104,6 +1264,7 @@ en:
|
||||
ago: ago
|
||||
back: Back
|
||||
cancel: Cancel
|
||||
cast_me: Cast
|
||||
clear: Clear
|
||||
close: Close
|
||||
csv: CSV
|
||||
@@ -1202,6 +1363,23 @@ 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
|
||||
@@ -1273,6 +1451,24 @@ 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,6 +57,45 @@ 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_calls:
|
||||
index:
|
||||
empty: Casting calls will appear here (ES)
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo (ES)
|
||||
create_casting_call: Create Casting Call (ES)
|
||||
headings:
|
||||
benefits: Benefits (ES)
|
||||
how_it_works: How It Works (ES)
|
||||
subtitle: The media industry's first automated casting bot (ES)
|
||||
welcome: Welcome to (ES)
|
||||
list_items:
|
||||
copy_and_paste_submission_link: Copy and paste the submission link wherever you want (ES)
|
||||
enter_information: Enter information about the role and project (ES)
|
||||
enter_questions: Enter the questions you want the Chatbot to ask (ES)
|
||||
fewer_resources_needed: Fewer resources needed for first round of casting search (ES)
|
||||
fewer_team_members_needed: Fewer team members needed to cast large projects (ES)
|
||||
more_time_spent_with_quality_candidates: More time spent with quality casting candidates (ES)
|
||||
wait_for_the_submission_video: Wait for the casting bot to deliver you casting submission videos (ES)
|
||||
contract_templates:
|
||||
blank_contracts:
|
||||
create:
|
||||
@@ -70,6 +109,23 @@ es:
|
||||
heading: Legal (ES)
|
||||
release_info:
|
||||
heading: Release Info (ES)
|
||||
splash:
|
||||
actions:
|
||||
book_demo: Schedule a Demo (ES)
|
||||
create_template: Create New Release Template (ES)
|
||||
headings:
|
||||
benefits: ""
|
||||
how_it_works: How It Works (ES)
|
||||
subtitle: The easiest way to create and manage releases. (ES)
|
||||
welcome: Welcome to (ES)
|
||||
list_items:
|
||||
add_tags_and_notes: Add tags and notes to releases for added organization and searchability (ES)
|
||||
all_releases_available: All release types available including Covid Medical, Appearance, Location and more (ES)
|
||||
create_releases: Create releases for your video shoot (ES)
|
||||
download_mobile_app: Download the ME Suite mobile app (ES)
|
||||
manage_large_audience: Easily manage large audiences with the crowd control feature (ES)
|
||||
print_QR_code: Print out release QR codes (ES)
|
||||
releases_automatically_organized: Releases are automatically organized as they’re submitted (ES)
|
||||
contracts:
|
||||
photos:
|
||||
guardian_2_photo_heading: Second guardian photo (ES)
|
||||
@@ -236,6 +292,8 @@ es:
|
||||
broadcast:
|
||||
create: Create Live Stream (ES)
|
||||
update: Save Changes (ES)
|
||||
casting_submission:
|
||||
create: Create casting submission (ES)
|
||||
create: 'Crear %{model}'
|
||||
update: 'Actualizar %{model}'
|
||||
location_releases:
|
||||
@@ -246,6 +304,9 @@ 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:
|
||||
@@ -358,8 +419,44 @@ 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,6 +32,9 @@ Rails.application.routes.draw do
|
||||
resource :masquerade, only: :create
|
||||
end
|
||||
resources :task_requests, only: [:index, :edit, :update, :show]
|
||||
resources :casting_submissions do
|
||||
post :complete, on: :member
|
||||
end
|
||||
|
||||
root to: "accounts#index", as: :signed_in_root
|
||||
end
|
||||
@@ -66,6 +69,7 @@ Rails.application.routes.draw do
|
||||
resource :contract_downloads, only: [:create]
|
||||
resources :downloads, only: [:index, :destroy]
|
||||
resource :report_downloads, only: [:create]
|
||||
resource :casting_submission_downloads, only: [:create]
|
||||
resources :videos, only: [:index, :new, :create, :edit, :update] do
|
||||
collection do
|
||||
get :landing
|
||||
@@ -105,7 +109,13 @@ 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_submissions, only: [:index, :show]
|
||||
end
|
||||
resource :profile, only: [:show, :update]
|
||||
resources :videos, only: [] do
|
||||
@@ -134,6 +144,8 @@ 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_submissions, param: :token, only: [:show, :update]
|
||||
end
|
||||
|
||||
RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :location_releases]
|
||||
|
||||
17
db/migrate/20200626044744_create_casting_calls.rb
Normal file
17
db/migrate/20200626044744_create_casting_calls.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
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
|
||||
12
db/migrate/20200701121237_create_casting_call_interviews.rb
Normal file
12
db/migrate/20200701121237_create_casting_call_interviews.rb
Normal file
@@ -0,0 +1,12 @@
|
||||
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
|
||||
@@ -0,0 +1,20 @@
|
||||
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
|
||||
6
db/migrate/20200706193123_add_token_to_casting_calls.rb
Normal file
6
db/migrate/20200706193123_add_token_to_casting_calls.rb
Normal file
@@ -0,0 +1,6 @@
|
||||
class AddTokenToCastingCalls < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :casting_calls, :token, :string
|
||||
add_index :casting_calls, :token, unique: true
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,6 @@
|
||||
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
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddInterviewedAtToCastingCallInterview < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :casting_call_interviews, :interviewed_at, :datetime
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
class RenameCastingCallInterviewsToCastingSubmissions < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
rename_table :casting_call_interviews, :casting_submissions
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,35 @@
|
||||
class AddMarkersToCastingSubmissions < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :casting_submissions, :time_elapsed_1, :integer
|
||||
add_column :casting_submissions, :time_elapsed_2, :integer
|
||||
add_column :casting_submissions, :time_elapsed_3, :integer
|
||||
add_column :casting_submissions, :time_elapsed_4, :integer
|
||||
add_column :casting_submissions, :time_elapsed_5, :integer
|
||||
add_column :casting_submissions, :time_elapsed_6, :integer
|
||||
add_column :casting_submissions, :time_elapsed_7, :integer
|
||||
add_column :casting_submissions, :time_elapsed_8, :integer
|
||||
add_column :casting_submissions, :time_elapsed_9, :integer
|
||||
add_column :casting_submissions, :time_elapsed_10, :integer
|
||||
add_column :casting_submissions, :time_elapsed_11, :integer
|
||||
add_column :casting_submissions, :time_elapsed_12, :integer
|
||||
add_column :casting_submissions, :time_elapsed_13, :integer
|
||||
add_column :casting_submissions, :time_elapsed_14, :integer
|
||||
add_column :casting_submissions, :time_elapsed_15, :integer
|
||||
|
||||
add_column :casting_submissions, :note_1, :text
|
||||
add_column :casting_submissions, :note_2, :text
|
||||
add_column :casting_submissions, :note_3, :text
|
||||
add_column :casting_submissions, :note_4, :text
|
||||
add_column :casting_submissions, :note_5, :text
|
||||
add_column :casting_submissions, :note_6, :text
|
||||
add_column :casting_submissions, :note_7, :text
|
||||
add_column :casting_submissions, :note_8, :text
|
||||
add_column :casting_submissions, :note_9, :text
|
||||
add_column :casting_submissions, :note_10, :text
|
||||
add_column :casting_submissions, :note_11, :text
|
||||
add_column :casting_submissions, :note_12, :text
|
||||
add_column :casting_submissions, :note_13, :text
|
||||
add_column :casting_submissions, :note_14, :text
|
||||
add_column :casting_submissions, :note_15, :text
|
||||
end
|
||||
end
|
||||
199
db/structure.sql
199
db/structure.sql
@@ -569,6 +569,112 @@ CREATE SEQUENCE public.broadcasts_id_seq
|
||||
ALTER SEQUENCE public.broadcasts_id_seq OWNED BY public.broadcasts.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: casting_submissions; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public.casting_submissions (
|
||||
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,
|
||||
time_elapsed_1 integer,
|
||||
time_elapsed_2 integer,
|
||||
time_elapsed_3 integer,
|
||||
time_elapsed_4 integer,
|
||||
time_elapsed_5 integer,
|
||||
time_elapsed_6 integer,
|
||||
time_elapsed_7 integer,
|
||||
time_elapsed_8 integer,
|
||||
time_elapsed_9 integer,
|
||||
time_elapsed_10 integer,
|
||||
time_elapsed_11 integer,
|
||||
time_elapsed_12 integer,
|
||||
time_elapsed_13 integer,
|
||||
time_elapsed_14 integer,
|
||||
time_elapsed_15 integer,
|
||||
note_1 text,
|
||||
note_2 text,
|
||||
note_3 text,
|
||||
note_4 text,
|
||||
note_5 text,
|
||||
note_6 text,
|
||||
note_7 text,
|
||||
note_8 text,
|
||||
note_9 text,
|
||||
note_10 text,
|
||||
note_11 text,
|
||||
note_12 text,
|
||||
note_13 text,
|
||||
note_14 text,
|
||||
note_15 text
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_submissions_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.casting_submissions_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_submissions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.casting_submissions_id_seq OWNED BY public.casting_submissions.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: composers; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
@@ -1124,7 +1230,22 @@ 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
|
||||
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
|
||||
);
|
||||
|
||||
|
||||
@@ -1968,6 +2089,20 @@ 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_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: casting_submissions id; Type: DEFAULT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.casting_submissions ALTER COLUMN id SET DEFAULT nextval('public.casting_submissions_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: composers id; Type: DEFAULT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -2289,6 +2424,22 @@ ALTER TABLE ONLY public.broadcasts
|
||||
ADD CONSTRAINT broadcasts_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: casting_submissions casting_submissions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.casting_submissions
|
||||
ADD CONSTRAINT casting_submissions_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: composers composers_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -2714,6 +2865,34 @@ 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_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_casting_submissions_on_casting_call_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX index_casting_submissions_on_casting_call_id ON public.casting_submissions USING btree (casting_call_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_casting_submissions_on_token; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE UNIQUE INDEX index_casting_submissions_on_token ON public.casting_submissions USING btree (token);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_composers_on_music_release_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
@@ -3311,6 +3490,14 @@ ALTER TABLE ONLY public.bookmarks
|
||||
ADD CONSTRAINT fk_rails_15735b7db8 FOREIGN KEY (video_id) REFERENCES public.videos(id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: casting_submissions fk_rails_1583f69fbb; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.casting_submissions
|
||||
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: -
|
||||
--
|
||||
@@ -3914,6 +4101,14 @@ INSERT INTO "schema_migrations" (version) VALUES
|
||||
('20200619085823'),
|
||||
('20200619134853'),
|
||||
('20200622180507'),
|
||||
('20200625144713');
|
||||
('20200625144713'),
|
||||
('20200626044744'),
|
||||
('20200701121237'),
|
||||
('20200702152130'),
|
||||
('20200706193123'),
|
||||
('20200706230803'),
|
||||
('20200707070522'),
|
||||
('20200714175331'),
|
||||
('20200722193459');
|
||||
|
||||
|
||||
|
||||
@@ -54,14 +54,16 @@ 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(
|
||||
"John",
|
||||
"Doe",
|
||||
"test_user+1@test.com",
|
||||
"Test Dev account",
|
||||
i_m_interested_in: "DirectME"
|
||||
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"
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
114
spec/controllers/admin/casting_submissions_controller_spec.rb
Normal file
114
spec/controllers/admin/casting_submissions_controller_spec.rb
Normal file
@@ -0,0 +1,114 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe Admin::CastingSubmissionsController, 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_submission)).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_submission: casting_submission_params }
|
||||
}.to change(CastingSubmission, :count)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#edit" do
|
||||
let(:casting_submission) { create(:casting_submission) }
|
||||
|
||||
it "returns a successful response" do
|
||||
get :edit, params: { id: casting_submission }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "assigns casting submission" do
|
||||
get :edit, params: { id: casting_submission }
|
||||
|
||||
expect(assigns(:casting_submission)).to eq casting_submission
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let(:casting_submission) { create(:casting_submission) }
|
||||
|
||||
it "redirects to casting submissions page" do
|
||||
patch :update, params: { id: casting_submission, casting_submission: update_params }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to admin_casting_submissions_path
|
||||
end
|
||||
|
||||
it "sets a flash notice" do
|
||||
patch :update, params: { id: casting_submission, casting_submission: update_params }
|
||||
|
||||
expect(flash.notice).to eq "The casting submission has been updated"
|
||||
end
|
||||
|
||||
it "updates casting submission" do
|
||||
patch :update, params: { id: casting_submission, casting_submission: update_params }
|
||||
|
||||
expect(casting_submission.reload.zoom_meeting_url).to eq new_zoom_meeting_url
|
||||
end
|
||||
end
|
||||
|
||||
describe "#complete" do
|
||||
let(:casting_submission) { create(:casting_submission) }
|
||||
|
||||
it "sets interviewed_at on casting submission" do
|
||||
expect(casting_submission.interviewed_at).to be_nil
|
||||
|
||||
post :complete, params: { id: casting_submission }
|
||||
|
||||
expect(casting_submission.reload.interviewed_at).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def casting_submission_params
|
||||
casting_call = create(:casting_call)
|
||||
|
||||
attributes_for(:casting_submission).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_submissions.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" do
|
||||
it "renders content if theere are existing broadcasts" do
|
||||
create(:broadcast, project: project, name: "Another Broadcast")
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
@@ -34,12 +34,13 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
end
|
||||
|
||||
context "when there are no active broadcasts" do
|
||||
it "renders an empty message" do
|
||||
it "renders splash screen" do
|
||||
Broadcast.destroy_all
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content("Live streams will appear here")
|
||||
expect(response.body).to have_link create_stream
|
||||
expect(response.body).to have_link schedule_demo
|
||||
end
|
||||
end
|
||||
|
||||
@@ -55,10 +56,8 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
|
||||
context "for xhr request" do
|
||||
it "filters the broadcasts by a query param" do
|
||||
appearance_releases = [
|
||||
create(:broadcast, skip_create_callback: true, name: "Stream by Adam"),
|
||||
create(:broadcast, skip_create_callback: true, name: "Stream by Zoe"),
|
||||
]
|
||||
create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Adam")
|
||||
create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Zoe")
|
||||
|
||||
get :index, params: { project_id: project, query: "Zoe" }, xhr: true
|
||||
|
||||
@@ -245,4 +244,12 @@ 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
|
||||
|
||||
144
spec/controllers/casting_calls_controller_spec.rb
Normal file
144
spec/controllers/casting_calls_controller_spec.rb
Normal file
@@ -0,0 +1,144 @@
|
||||
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 if there are existing broadcasts" 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
|
||||
|
||||
context "when there are no records" do
|
||||
it "renders splash screen" do
|
||||
CastingCall.destroy_all
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).not_to have_content no_casting_calls_message
|
||||
expect(response.body).to have_link create_casting_call
|
||||
expect(response.body).to have_link schedule_demo
|
||||
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
|
||||
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
|
||||
|
||||
def no_casting_calls_message
|
||||
t 'casting_calls.index.empty'
|
||||
end
|
||||
|
||||
def create_casting_call
|
||||
t 'casting_calls.splash.actions.create_casting_call'
|
||||
end
|
||||
|
||||
def schedule_demo
|
||||
t 'casting_calls.splash.actions.book_demo'
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,58 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe CastingSubmissionDownloadsController, 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_submission) { create(:casting_submission, 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_submission_id: casting_submission.id }, format: :js
|
||||
}.to have_enqueued_job(GenerateCastingSubmissionFilesZipJob)
|
||||
end
|
||||
|
||||
it "creates a download record with 'not_started' status" do
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, casting_submission_id: casting_submission.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("casting_submission_downloads.download.pending", release_type: "CastingSubmission"))
|
||||
|
||||
post :create, params: { project_id: project.id, casting_submission_id: casting_submission.id }, format: :js
|
||||
|
||||
expect(ProjectsChannel).to have_received(:broadcast_download_generation_update).with(be_kind_of(Download), I18n.t("casting_submission_downloads.download.pending", release_type: "CastingSubmission"))
|
||||
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 Submission 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_submission_id: casting_submission.id }, format: :js
|
||||
|
||||
expect(ProjectsChannel).to have_received(:broadcast_download_generation_update).with(be_kind_of(Download), broadcast_message)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
44
spec/controllers/casting_submissions_controller_spec.rb
Normal file
44
spec/controllers/casting_submissions_controller_spec.rb
Normal file
@@ -0,0 +1,44 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe CastingSubmissionsController, 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 submissions" do
|
||||
create(:casting_submission, casting_call: casting_call, interviewed_at: Time.zone.now, performer_name: "John Doe")
|
||||
create(:casting_submission, 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_submission) { create(:casting_submission, :with_files, casting_call: casting_call, interviewed_at: Time.zone.now, performer_name: "Jane Doe") }
|
||||
|
||||
it "shows files of casting submission" do
|
||||
get :show, params: { project_id: project, id: casting_submission.id }
|
||||
|
||||
expect(response.body).to have_content(casting_submission.performer_name)
|
||||
expect(response.body).to have_content(casting_submission.casting_call.title)
|
||||
expect(response.body).to have_content(casting_submission.casting_call.project_description)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -19,7 +19,7 @@ describe ContractTemplatesController do
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it 'renders content' do
|
||||
it 'renders content if there are contract templates' do
|
||||
contract_template = create(:contract_template,
|
||||
name: 'My Contract Template', fee: 50, release_type: 'appearance',
|
||||
project: project)
|
||||
@@ -39,10 +39,11 @@ describe ContractTemplatesController do
|
||||
end
|
||||
|
||||
context 'when there are no contract templates' do
|
||||
it 'renders an empty message' do
|
||||
it 'renders splash screen' do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content('Release Templates will appear here')
|
||||
expect(response.body).to have_link "Create New Release Template"
|
||||
expect(response.body).to have_link schedule_demo
|
||||
end
|
||||
end
|
||||
|
||||
@@ -50,6 +51,7 @@ describe ContractTemplatesController do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
it 'does not show the new contract template button' do
|
||||
create(:contract_template, project: project)
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).not_to have_link('Create New Release Template')
|
||||
@@ -166,4 +168,8 @@ describe ContractTemplatesController do
|
||||
restriction_text: 'restrictions'
|
||||
}
|
||||
end
|
||||
|
||||
def schedule_demo
|
||||
t 'contract_templates.splash.actions.book_demo'
|
||||
end
|
||||
end
|
||||
|
||||
25
spec/controllers/public/casting_calls_controller_spec.rb
Normal file
25
spec/controllers/public/casting_calls_controller_spec.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
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_link("Schedule an Audition")
|
||||
end
|
||||
end
|
||||
end
|
||||
44
spec/controllers/public/casting_submissions_controller.rb
Normal file
44
spec/controllers/public/casting_submissions_controller.rb
Normal file
@@ -0,0 +1,44 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Public::CastingSubmissionsController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe "#show" do
|
||||
let(:casting_submission) { create(:casting_submission) }
|
||||
|
||||
it "responds successfully" do
|
||||
get :show, params: { token: casting_submission.token }
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(assigns(:casting_submission)).to eq(casting_submission)
|
||||
end
|
||||
|
||||
it "shows casting call interview details" do
|
||||
get :show, params: { token: casting_submission.token }
|
||||
|
||||
expect(response.body).to have_content(casting_submission.performer_name)
|
||||
expect(response.body).to have_content(casting_submission.interview_date)
|
||||
expect(response.body).to have_link("Start Interview")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
let(:casting_submission) { create(:casting_submission) }
|
||||
|
||||
it "responds successfully" do
|
||||
patch :update, params: { token: casting_submission.token, casting_submission: casting_submission_params }
|
||||
|
||||
expect(response).to redirect_to casting_submission_url(token: casting_submission.token)
|
||||
expect(flash.notice).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def casting_submission_params
|
||||
path = Rails.root.join("spec", "fixtures", "files", "contract.pdf")
|
||||
file = Rack::Test::UploadedFile.new(path, "application/pdf")
|
||||
|
||||
{ files: [file]}
|
||||
end
|
||||
end
|
||||
@@ -19,14 +19,29 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
contract_template = create(:contract_template,
|
||||
project: project,
|
||||
question_1_text: "Question 1",
|
||||
question_2_text: "Question 2"
|
||||
)
|
||||
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" } }
|
||||
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"
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
@@ -68,4 +83,8 @@ 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,7 +18,14 @@ RSpec.describe TaskRequestsController, type: :controller do
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
||||
it "renders content" do
|
||||
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
|
||||
create(:task_request, project: project, description: "Another Request")
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
@@ -64,7 +71,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(SubmitHubspotTaskRequestFormJob)
|
||||
}.to have_enqueued_job(SubmitHubspotFormJob)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -126,4 +133,8 @@ 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,6 +20,7 @@ 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")
|
||||
@@ -43,7 +44,7 @@ RSpec.describe VideosController, type: :controller do
|
||||
end
|
||||
|
||||
|
||||
it "renders content" do
|
||||
it "renders content if there are existing videos" do
|
||||
video = create(:video, project: project, name: "My Video", number: "001", created_at: 1.day.ago)
|
||||
|
||||
get :index, params: { project_id: project }
|
||||
@@ -58,10 +59,11 @@ RSpec.describe VideosController, type: :controller do
|
||||
end
|
||||
|
||||
context "when there are no records" do
|
||||
it "renders an empty message" do
|
||||
it "renders splash screen" do
|
||||
get :index, params: { project_id: project }
|
||||
|
||||
expect(response.body).to have_content("Videos will appear here")
|
||||
expect(response.body).to have_link "Upload New Video"
|
||||
expect(response.body).to have_link schedule_demo
|
||||
end
|
||||
end
|
||||
|
||||
@@ -277,4 +279,8 @@ 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
|
||||
|
||||
16
spec/factories/casting_calls.rb
Normal file
16
spec/factories/casting_calls.rb
Normal file
@@ -0,0 +1,16 @@
|
||||
FactoryBot.define do
|
||||
factory :casting_call do
|
||||
association :project
|
||||
user_email 'test@email.com'
|
||||
title 'Casting Call Title'
|
||||
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
|
||||
17
spec/factories/casting_submissions.rb
Normal file
17
spec/factories/casting_submissions.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
FactoryBot.define do
|
||||
factory :casting_submission 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
|
||||
|
||||
trait :with_interview_recording do
|
||||
interview_recording { Rack::Test::UploadedFile.new('spec/fixtures/files/video_file.mp4', 'video/mp4') }
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -16,6 +16,7 @@ FactoryBot.define do
|
||||
appearance_release: true,
|
||||
location_release: true,
|
||||
material_release: true,
|
||||
misc_release: true,
|
||||
medical_release: true,
|
||||
music_release: true,
|
||||
talent_release: true,
|
||||
|
||||
140
spec/features/admin_managing_casting_submissions_spec.rb
Normal file
140
spec/features/admin_managing_casting_submissions_spec.rb
Normal file
@@ -0,0 +1,140 @@
|
||||
require "rails_helper"
|
||||
|
||||
feature "Admin managing casting submissions" 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 "when creating new casting call interview - interview recording field is not visible" do
|
||||
visit admin_casting_submissions_path
|
||||
|
||||
click_on create_casting_submission_button
|
||||
|
||||
expect(page).to have_content new_casting_submission_heading
|
||||
expect(page).not_to have_field interview_recording_field
|
||||
end
|
||||
|
||||
scenario "admin can upload interview recording video when editing casting call interview" do
|
||||
cc = create(:casting_call)
|
||||
cci = create(:casting_submission, casting_call: cc)
|
||||
|
||||
expect(CastingSubmission.last.interview_recording).not_to be_attached
|
||||
|
||||
visit edit_admin_casting_submission_path(cci)
|
||||
|
||||
expect(page).to have_content edit_casting_submission_heading
|
||||
expect(page).to have_field interview_recording_field
|
||||
expect(page).not_to have_content current_interview_recording_label
|
||||
attach_file interview_recording_field, Rails.root.join(file_fixture('video_file.mp4'))
|
||||
click_on update_casting_submission_button
|
||||
expect(page).to have_content casting_submission_updated_message
|
||||
expect(CastingSubmission.last.interview_recording).to be_attached
|
||||
end
|
||||
|
||||
scenario "when editing casting call interview with already uploaded interview video, interview recording file name link is shown below file field" do
|
||||
cc = create(:casting_call)
|
||||
cci = create(:casting_submission, :with_interview_recording, casting_call: cc)
|
||||
|
||||
expect(CastingSubmission.last.interview_recording).to be_attached
|
||||
|
||||
visit edit_admin_casting_submission_path(cci)
|
||||
|
||||
expect(page).to have_content edit_casting_submission_heading
|
||||
expect(page).to have_content current_interview_recording_label
|
||||
expect(page).to have_link CastingSubmission.last.interview_recording.attachment.blob.filename.to_s
|
||||
end
|
||||
|
||||
scenario "when admin opens view page for casting submission, it does not fail if zoom meeting URL is invalid" do
|
||||
cc = create(:casting_call)
|
||||
cci = create(:casting_submission, casting_call: cc, zoom_meeting_url: "anything")
|
||||
|
||||
visit admin_casting_submissions_path
|
||||
|
||||
click_on manage_button
|
||||
click_link view_link
|
||||
|
||||
expect(page).to have_content casting_submission_details_header
|
||||
expect(page).to have_content interview_files_label
|
||||
expect(page).to have_content cci.performer_name
|
||||
end
|
||||
|
||||
scenario "admin can see copy url" do
|
||||
cc = create(:casting_call)
|
||||
cci = create(:casting_submission, casting_call: cc, zoom_meeting_url: "anything")
|
||||
|
||||
visit admin_casting_submissions_path
|
||||
|
||||
click_on manage_button
|
||||
|
||||
expect(page).to have_content "Copy URL"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_casting_submission_button
|
||||
t 'admin.casting_submissions.index.actions.new'
|
||||
end
|
||||
|
||||
def new_casting_submission_heading
|
||||
t 'admin.casting_submissions.new.heading'
|
||||
end
|
||||
|
||||
def edit_casting_submission_heading
|
||||
'Edit Casting Submission'
|
||||
end
|
||||
|
||||
def update_casting_submission_button
|
||||
'Update Casting submission'
|
||||
end
|
||||
|
||||
def submit_casting_submission_form
|
||||
t 'helpers.submit.casting_submission.create'
|
||||
end
|
||||
|
||||
def zoom_meeting_url_invalid_error
|
||||
t 'casting_submissions.validation_errors.invalid_meeting_url'
|
||||
end
|
||||
|
||||
def performer_name_field
|
||||
'casting_submission[performer_name]'
|
||||
end
|
||||
|
||||
def zoom_meeting_url_field
|
||||
'casting_submission[zoom_meeting_url]'
|
||||
end
|
||||
|
||||
def casting_call_field
|
||||
'casting_submission[casting_call_id]'
|
||||
end
|
||||
|
||||
def casting_submission_updated_message
|
||||
t 'admin.casting_submissions.update.notice'
|
||||
end
|
||||
|
||||
def interview_recording_field
|
||||
'casting_submission[interview_recording]'
|
||||
end
|
||||
|
||||
def current_interview_recording_label
|
||||
'Current interview recording'
|
||||
end
|
||||
|
||||
def manage_button
|
||||
'Manage'
|
||||
end
|
||||
|
||||
def view_link
|
||||
'View'
|
||||
end
|
||||
|
||||
def casting_submission_details_header
|
||||
'Casting submission details'
|
||||
end
|
||||
|
||||
def interview_files_label
|
||||
'INTERVIEW FILES:'
|
||||
end
|
||||
end
|
||||
@@ -13,6 +13,7 @@ feature "User imports release templates", type: :feature do
|
||||
end
|
||||
|
||||
scenario "importing two existing templates into a project" do
|
||||
create(:contract_template, project: project)
|
||||
visit project_contract_templates_path(project)
|
||||
click_on "Import Release Template"
|
||||
select_templates([project_one_template.id, project_two_template.id])
|
||||
@@ -31,6 +32,7 @@ feature "User imports release templates", type: :feature do
|
||||
end
|
||||
|
||||
scenario "searching for a template", js: true do
|
||||
create(:contract_template, project: project)
|
||||
visit project_contract_templates_path(project)
|
||||
click_on "Import Release Template"
|
||||
fill_in "query", with: "Second"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user