Compare commits
5 Commits
remove-zoo
...
allow-task
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c17f41525d | ||
|
|
d12cec8487 | ||
|
|
bde18ab0f1 | ||
|
|
fc320a3421 | ||
|
|
7f49f31ebf |
@@ -11,7 +11,6 @@ $body-color: #4A4A4A;
|
|||||||
$primary: #6F89FF;
|
$primary: #6F89FF;
|
||||||
$blue: #0092ff;
|
$blue: #0092ff;
|
||||||
$red: #F9002B;
|
$red: #F9002B;
|
||||||
$dark-red: #CE004A;
|
|
||||||
$green: #51B61B;
|
$green: #51B61B;
|
||||||
$teal: #32C498;
|
$teal: #32C498;
|
||||||
$purple: #5139EE;
|
$purple: #5139EE;
|
||||||
|
|||||||
@@ -69,13 +69,6 @@ label {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.cast-me {
|
|
||||||
span:last-child {
|
|
||||||
background-color: $dark-red;
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.disabled {
|
&.disabled {
|
||||||
span:last-child {
|
span:last-child {
|
||||||
background-color: $gray-500 !important;
|
background-color: $gray-500 !important;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class AccountsController < ApplicationController
|
|||||||
|
|
||||||
if sign_in(user)
|
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)
|
TrackAnalyticsJob.perform_later(user, user.primary_account, :track_guest_sign_up, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||||
SubmitHubspotFormJob.perform_later(first_name: user.first_name, last_name: user.last_name, email: user.email, company: account.name, i_m_interested_in: user.interested_product_name, form_guid: ENV["HUBSPOT_FORM_GUID"])
|
SubmitHubspotFormJob.perform_later(user.first_name, user.last_name, user.email, account.name, i_m_interested_in: user.interested_product_name)
|
||||||
redirect_to signed_in_root_path
|
redirect_to signed_in_root_path
|
||||||
else
|
else
|
||||||
redirect_to new_session_path, alert: t(".notice")
|
redirect_to new_session_path, alert: t(".notice")
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
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)
|
|
||||||
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
|
|
||||||
11
app/controllers/api/medical_releases_controller.rb
Normal file
11
app/controllers/api/medical_releases_controller.rb
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
class Api::MedicalReleasesController < Api::ReleasesController
|
||||||
|
deserializable_resource :medical_release, only: [:create, :update]
|
||||||
|
|
||||||
|
def model_name
|
||||||
|
"medical_release"
|
||||||
|
end
|
||||||
|
|
||||||
|
def attributes_for_index
|
||||||
|
[:name]
|
||||||
|
end
|
||||||
|
end
|
||||||
11
app/controllers/api/misc_releases_controller.rb
Normal file
11
app/controllers/api/misc_releases_controller.rb
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
class Api::MiscReleasesController < Api::ReleasesController
|
||||||
|
deserializable_resource :misc_release, only: [:create, :update]
|
||||||
|
|
||||||
|
def model_name
|
||||||
|
"misc_release"
|
||||||
|
end
|
||||||
|
|
||||||
|
def attributes_for_index
|
||||||
|
[:name]
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -10,8 +10,10 @@ class Api::SyncController < Api::ApiController
|
|||||||
@appearance_releases = (AppearanceRelease.where(project: accessible_projects))
|
@appearance_releases = (AppearanceRelease.where(project: accessible_projects))
|
||||||
@location_releases = (LocationRelease.where(project: accessible_projects))
|
@location_releases = (LocationRelease.where(project: accessible_projects))
|
||||||
@material_releases = (MaterialRelease.where(project: accessible_projects))
|
@material_releases = (MaterialRelease.where(project: accessible_projects))
|
||||||
|
@medical_releases = MedicalRelease.where(project: accessible_projects)
|
||||||
|
@misc_releases = MiscRelease.where(project: accessible_projects)
|
||||||
@talent_releases = (TalentRelease.where(project: accessible_projects))
|
@talent_releases = (TalentRelease.where(project: accessible_projects))
|
||||||
@notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @talent_releases + @acquired_media_releases ))
|
@notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @medical_releases + @misc_releases + @talent_releases + @acquired_media_releases ))
|
||||||
|
|
||||||
render json: {
|
render json: {
|
||||||
data: {
|
data: {
|
||||||
@@ -22,6 +24,8 @@ class Api::SyncController < Api::ApiController
|
|||||||
appearance_releases: releases_query(@appearance_releases),
|
appearance_releases: releases_query(@appearance_releases),
|
||||||
location_releases: releases_query(@location_releases),
|
location_releases: releases_query(@location_releases),
|
||||||
material_releases: releases_query(@material_releases),
|
material_releases: releases_query(@material_releases),
|
||||||
|
medical_releases: releases_query(@medical_releases),
|
||||||
|
misc_releases: releases_query(@misc_releases),
|
||||||
talent_releases: releases_query(@talent_releases),
|
talent_releases: releases_query(@talent_releases),
|
||||||
notes: @notes
|
notes: @notes
|
||||||
}
|
}
|
||||||
|
|||||||
21
app/controllers/approvals_controller.rb
Normal file
21
app/controllers/approvals_controller.rb
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
class ApprovalsController < ApplicationController
|
||||||
|
include MedicalReleaseContext
|
||||||
|
|
||||||
|
before_action :set_medical_release
|
||||||
|
before_action :set_project
|
||||||
|
|
||||||
|
layout "project"
|
||||||
|
|
||||||
|
def create
|
||||||
|
@medical_release.approve_by(current_user)
|
||||||
|
if @medical_release.save
|
||||||
|
redirect_to [@project, :medical_releases], notice: t('.release_approved')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def set_project
|
||||||
|
@project = @medical_release.project
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -33,6 +33,11 @@ class BroadcastsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
unless params.has_key?(:broadcast)
|
||||||
|
@broadcast.regenerate_token
|
||||||
|
redirect_to([@project, @broadcast], notice: t('.reset_notice')) and return
|
||||||
|
end
|
||||||
|
|
||||||
@broadcast.update(broadcast_params)
|
@broadcast.update(broadcast_params)
|
||||||
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
||||||
|
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
class CastingCallsController < ApplicationController
|
|
||||||
layout "project"
|
|
||||||
|
|
||||||
before_action :set_project
|
|
||||||
before_action :build_casting_call, only: [:new, :create]
|
|
||||||
before_action :set_casting_call, only: [:show, :edit, :update, :cancel]
|
|
||||||
|
|
||||||
def index
|
|
||||||
@casting_calls = casting_calls.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def new
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@casting_call.attributes = casting_call_params_with_email
|
|
||||||
|
|
||||||
if @casting_call.save
|
|
||||||
log_create_analytics
|
|
||||||
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 casting_call_params
|
|
||||||
params.require(:casting_call).permit(:title, :description, :project_description, :interview_instructions, :interview_requirements, :questions)
|
|
||||||
end
|
|
||||||
|
|
||||||
def casting_call_params_with_email
|
|
||||||
casting_call_params.merge(user_email: Current.user.email)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_casting_call
|
|
||||||
@casting_call = authorize casting_calls.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def casting_calls
|
|
||||||
authorize policy_scope(@project.casting_calls)
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_casting_call
|
|
||||||
@casting_call = authorize @project.casting_calls.build
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_create_analytics
|
|
||||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_casting_call, user_agent: request.user_agent, user_ip: request.remote_ip)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
class 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
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
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])
|
|
||||||
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
|
|
||||||
@@ -62,10 +62,11 @@ class ContractTemplatesController < ApplicationController
|
|||||||
def contract_template_params
|
def contract_template_params
|
||||||
params
|
params
|
||||||
.require(:contract_template)
|
.require(:contract_template)
|
||||||
.permit(:name, :release_type, :body, :guardian_clause, :fee,
|
.permit(:name, :release_type, :body, :guardian_clause,
|
||||||
|
:signature_legal_text, :fee,
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
:territory_id, :territory_text,
|
:territory_id, :territory_text,
|
||||||
:term_id, :term_text,
|
:term_id, :term_text, :accessibility,
|
||||||
:restriction_id, :restriction_text,
|
:restriction_id, :restriction_text,
|
||||||
:question_1_text, :question_2_text,
|
:question_1_text, :question_2_text,
|
||||||
:question_3_text, :question_4_text,
|
:question_3_text, :question_4_text,
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
class Public::CastingCallsController < Public::BaseController
|
|
||||||
skip_after_action :verify_authorized
|
|
||||||
before_action :set_casting_call, only: [:show]
|
|
||||||
|
|
||||||
def show
|
|
||||||
render layout: 'application'
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_casting_call
|
|
||||||
@casting_call = CastingCall.find_by_token(params[:token])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -28,8 +28,9 @@ class StreamNotificationsController < ApplicationController
|
|||||||
asset_uid = notification.dig(:object, :id)
|
asset_uid = notification.dig(:object, :id)
|
||||||
playback_uid = notification.dig(:data, :playback_ids, 0, :id)
|
playback_uid = notification.dig(:data, :playback_ids, 0, :id)
|
||||||
file_name = notification.dig(:data, :static_renditions, :files, -1, :name)
|
file_name = notification.dig(:data, :static_renditions, :files, -1, :name)
|
||||||
|
duration = notification.dig(:data, :duration)
|
||||||
|
|
||||||
recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name)
|
recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name, duration: duration)
|
||||||
recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
||||||
|
|
||||||
link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank")
|
link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank")
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class TaskRequestsController < ApplicationController
|
|||||||
if @task_request.save
|
if @task_request.save
|
||||||
log_create_analytics
|
log_create_analytics
|
||||||
taskme_url = url_for([:admin, @task_request])
|
taskme_url = url_for([:admin, @task_request])
|
||||||
SubmitHubspotFormJob.perform_later(email: @task_request.user_email, taskme_url: taskme_url, form_guid: ENV["HUBSPOT_TASK_REQUEST_FORM_GUID"])
|
SubmitHubspotTaskRequestFormJob.perform_later(@task_request.user_email, taskme_url)
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,4 +5,12 @@ module TooltipHelper
|
|||||||
concat tag.div(class: "tooltip-inner")
|
concat tag.div(class: "tooltip-inner")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_approval_data_for_medical_release(medical_release)
|
||||||
|
if medical_release.approved_by_user_name.present?
|
||||||
|
"#{medical_release.approved_by_user_name} [#{medical_release.approved_by_user_email}]"
|
||||||
|
else
|
||||||
|
medical_release.approved_by_user_email
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -6,8 +6,8 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
before_perform do |job|
|
before_perform do |job|
|
||||||
@project = job.arguments.first
|
@project = job.arguments.first
|
||||||
@download = job.arguments.second
|
@download = job.arguments.second
|
||||||
release_type = job.arguments.third
|
@release_type = job.arguments.third
|
||||||
@folder_name = "#{@project.name.parameterize}_#{get_release_name(release_type).gsub('_', '-')}"
|
@folder_name = "#{@project.name.parameterize}_#{get_release_name(@release_type).gsub('_', '-')}"
|
||||||
@download.update!(name: @folder_name, status: :pending)
|
@download.update!(name: @folder_name, status: :pending)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -20,9 +20,14 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
files.each do |attachment|
|
files.each do |attachment|
|
||||||
zipfile.add(attachment, File.join("#{dir}/", attachment))
|
zipfile.add(attachment, File.join("#{dir}/", attachment))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if @release_type.constantize.include?(CsvExportable)
|
||||||
|
csv_file = generate_csv releases
|
||||||
|
zipfile.get_output_stream("#{@folder_name}.csv") { |f| f.puts(csv_file) }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@download.file.attach(io: File.open(zipfile_name), filename: @folder_name)
|
@download.file.attach(io: File.open(zipfile_name), filename: "#{@folder_name}.zip")
|
||||||
end
|
end
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
Rails.logger.error("Failed to generate download for project (##{project.id}) with release type #{release_type}\n" + e.message)
|
Rails.logger.error("Failed to generate download for project (##{project.id}) with release type #{release_type}\n" + e.message)
|
||||||
@@ -43,6 +48,19 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def generate_csv(releases)
|
||||||
|
release_class = @release_type.constantize
|
||||||
|
headers = release_class.csv_headers
|
||||||
|
|
||||||
|
CSV.generate(headers: true) do |csv|
|
||||||
|
csv << headers
|
||||||
|
releases.each do |release|
|
||||||
|
csv_row_data = release.to_csv_row
|
||||||
|
csv << csv_row_data
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def get_release_name(release_type)
|
def get_release_name(release_type)
|
||||||
release_type.constantize.model_name.plural
|
release_type.constantize.model_name.plural
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,11 +1,19 @@
|
|||||||
class SubmitHubspotFormJob < ApplicationJob
|
class SubmitHubspotFormJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(first_name, last_name, email, company_name, additional_params = {})
|
||||||
return unless params[:form_guid].present?
|
hubspot_form_guid = ENV["HUBSPOT_FORM_GUID"]
|
||||||
|
return unless hubspot_form_guid.present?
|
||||||
|
|
||||||
form = Hubspot::Form.new("guid" => params[:form_guid])
|
submission_params = {
|
||||||
is_form_sumitted = form.submit(params.except(:form_guid))
|
first_name: first_name,
|
||||||
|
last_name: last_name,
|
||||||
|
email: email,
|
||||||
|
company: company_name
|
||||||
|
}.merge(additional_params)
|
||||||
|
|
||||||
|
form = Hubspot::Form.new("guid" => hubspot_form_guid)
|
||||||
|
is_form_sumitted = form.submit(submission_params)
|
||||||
|
|
||||||
raise StandardError.new "Failed to submit the hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
|
raise StandardError.new "Failed to submit the hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
|
||||||
end
|
end
|
||||||
|
|||||||
18
app/jobs/submit_hubspot_task_request_form_job.rb
Normal file
18
app/jobs/submit_hubspot_task_request_form_job.rb
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
class SubmitHubspotTaskRequestFormJob < ApplicationJob
|
||||||
|
queue_as :default
|
||||||
|
|
||||||
|
def perform(user_email, taskme_url)
|
||||||
|
hubspot_task_request_form_guid = ENV["HUBSPOT_TASK_REQUEST_FORM_GUID"]
|
||||||
|
return unless hubspot_task_request_form_guid.present?
|
||||||
|
|
||||||
|
submission_params = {
|
||||||
|
email: user_email,
|
||||||
|
taskme_url: taskme_url
|
||||||
|
}
|
||||||
|
|
||||||
|
form = Hubspot::Form.new("guid" => hubspot_task_request_form_guid)
|
||||||
|
is_form_sumitted = form.submit(submission_params)
|
||||||
|
|
||||||
|
raise StandardError.new "Failed to submit the task request hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -4,8 +4,6 @@ class Account < ApplicationRecord
|
|||||||
has_many :account_auths
|
has_many :account_auths
|
||||||
has_many :users, through: :account_auths
|
has_many :users, through: :account_auths
|
||||||
has_many :projects, dependent: :destroy
|
has_many :projects, dependent: :destroy
|
||||||
has_many :casting_calls, through: :projects
|
|
||||||
has_many :casting_submissions, through: :projects
|
|
||||||
has_many :videos, through: :projects
|
has_many :videos, through: :projects
|
||||||
has_many :contract_templates, through: :projects
|
has_many :contract_templates, through: :projects
|
||||||
|
|
||||||
@@ -61,8 +59,6 @@ class Account < ApplicationRecord
|
|||||||
MedicalRelease.where(project: projects),
|
MedicalRelease.where(project: projects),
|
||||||
MiscRelease.where(project: projects),
|
MiscRelease.where(project: projects),
|
||||||
MatchingRequest.where(project: projects),
|
MatchingRequest.where(project: projects),
|
||||||
CastingCall.where(project: projects),
|
|
||||||
self.casting_submissions,
|
|
||||||
self
|
self
|
||||||
])).sum(:byte_size).to_f
|
])).sum(:byte_size).to_f
|
||||||
end
|
end
|
||||||
@@ -91,10 +87,6 @@ class Account < ApplicationRecord
|
|||||||
ENV["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
|
end
|
||||||
|
|
||||||
def castme_enabled?
|
|
||||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "castme"
|
|
||||||
end
|
|
||||||
|
|
||||||
def plan_name
|
def plan_name
|
||||||
case plan_uid.to_s
|
case plan_uid.to_s
|
||||||
when "deliverme"
|
when "deliverme"
|
||||||
@@ -105,8 +97,6 @@ class Account < ApplicationRecord
|
|||||||
"ReleaseME"
|
"ReleaseME"
|
||||||
when "taskme"
|
when "taskme"
|
||||||
"TaskME"
|
"TaskME"
|
||||||
when "castme"
|
|
||||||
"CastME"
|
|
||||||
when "me_suite"
|
when "me_suite"
|
||||||
"ME Suite"
|
"ME Suite"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,6 +9,13 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
include Signable
|
include Signable
|
||||||
include Syncable
|
include Syncable
|
||||||
include PersonName
|
include PersonName
|
||||||
|
include CsvExportable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[name file_infos_count]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
has_many :file_infos, as: :releasable, dependent: :destroy
|
has_many :file_infos, as: :releasable, dependent: :destroy
|
||||||
|
|
||||||
@@ -57,4 +64,8 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
def uses_edl?
|
def uses_edl?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def file_infos_count
|
||||||
|
file_infos.any? ? file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -15,6 +15,13 @@ class AppearanceRelease < ApplicationRecord
|
|||||||
include SecondGuardianPhotoable
|
include SecondGuardianPhotoable
|
||||||
include GuardianName
|
include GuardianName
|
||||||
include SecondGuardianName
|
include SecondGuardianName
|
||||||
|
include CsvExportable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[name contact_info]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
has_one_attached :person_photo
|
has_one_attached :person_photo
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
class CastingSubmission < ApplicationRecord
|
|
||||||
belongs_to :casting_call
|
|
||||||
has_many_attached :files
|
|
||||||
has_one_attached :interview_recording
|
|
||||||
|
|
||||||
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
|
|
||||||
end
|
|
||||||
56
app/models/concerns/csv_exportable.rb
Normal file
56
app/models/concerns/csv_exportable.rb
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module CsvExportable
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
COMMON_HEADERS = %i[notes tags signed_at].freeze
|
||||||
|
COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze
|
||||||
|
|
||||||
|
included do
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
|
||||||
|
def csv_headers
|
||||||
|
headers = custom_csv_exportable_headers + COMMON_HEADERS
|
||||||
|
|
||||||
|
headers.map do |header|
|
||||||
|
I18n.t("#{model_name.plural}.index.table_headers.#{header}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_csv_row
|
||||||
|
(self.class.custom_csv_exportable_headers + COMMON_VALUES).map do |function|
|
||||||
|
send(function)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def contact_info
|
||||||
|
contact_info = ''
|
||||||
|
contact_info += "#{person_address}; " if person_address.present?
|
||||||
|
contact_info += "P: #{person_phone}; " if person_phone.present?
|
||||||
|
contact_info += "E: #{person_email}" if person_email.present?
|
||||||
|
contact_info.delete_suffix '; '
|
||||||
|
end
|
||||||
|
|
||||||
|
def clean_notes
|
||||||
|
notes = ''
|
||||||
|
self.notes.order_by_recent.each do |note|
|
||||||
|
notes += "#{note.content}(#{note.email}), "
|
||||||
|
end
|
||||||
|
notes.delete_suffix ', '
|
||||||
|
end
|
||||||
|
|
||||||
|
def clean_tags
|
||||||
|
tags = ''
|
||||||
|
self.tags.each do |tag|
|
||||||
|
tags += "#{tag.name}, "
|
||||||
|
end
|
||||||
|
tags.delete_suffix ', '
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -21,6 +21,7 @@ class ContractTemplate < ApplicationRecord
|
|||||||
monetize :fee_cents
|
monetize :fee_cents
|
||||||
has_rich_text :body
|
has_rich_text :body
|
||||||
has_rich_text :guardian_clause
|
has_rich_text :guardian_clause
|
||||||
|
has_rich_text :signature_legal_text
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :release_type, presence: true
|
validates :release_type, presence: true
|
||||||
@@ -42,6 +43,8 @@ class ContractTemplate < ApplicationRecord
|
|||||||
scope :non_archived, -> { where(archived_at: nil) }
|
scope :non_archived, -> { where(archived_at: nil) }
|
||||||
scope :order_by_name, -> { order(:name) }
|
scope :order_by_name, -> { order(:name) }
|
||||||
|
|
||||||
|
enum accessibility: [:public_template, :private_template]
|
||||||
|
|
||||||
def fee?
|
def fee?
|
||||||
!fee.zero?
|
!fee.zero?
|
||||||
end
|
end
|
||||||
@@ -65,4 +68,10 @@ class ContractTemplate < ApplicationRecord
|
|||||||
def has_questionnaire?
|
def has_questionnaire?
|
||||||
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
|
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def attributes
|
||||||
|
result = super()
|
||||||
|
result[:signature_legal_text] = signature_legal_text.as_json
|
||||||
|
result
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,6 +10,13 @@ class LocationRelease < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
|
include CsvExportable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[name address]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
composed_of :address,
|
composed_of :address,
|
||||||
mapping: [
|
mapping: [
|
||||||
|
|||||||
@@ -10,6 +10,13 @@ class MaterialRelease < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
|
include CsvExportable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[name]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
composed_of :person_address,
|
composed_of :person_address,
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
|
|||||||
@@ -11,6 +11,13 @@ class MedicalRelease < ApplicationRecord
|
|||||||
include SecondGuardianPhotoable
|
include SecondGuardianPhotoable
|
||||||
include GuardianName
|
include GuardianName
|
||||||
include SecondGuardianName
|
include SecondGuardianName
|
||||||
|
include CsvExportable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[approved? name contact_info]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||||
|
|
||||||
@@ -100,6 +107,18 @@ class MedicalRelease < ApplicationRecord
|
|||||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def approve_by(user)
|
||||||
|
return unless approved_at.nil?
|
||||||
|
|
||||||
|
self.approved_by_user_name = user.full_name
|
||||||
|
self.approved_by_user_email = user.email
|
||||||
|
self.approved_at = Time.zone.now
|
||||||
|
end
|
||||||
|
|
||||||
|
def approved?
|
||||||
|
approved_at.present?
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def valid_answers
|
def valid_answers
|
||||||
|
|||||||
@@ -9,6 +9,13 @@ class MiscRelease < ApplicationRecord
|
|||||||
include PersonName
|
include PersonName
|
||||||
include GuardianName
|
include GuardianName
|
||||||
include GuardianPhotoable
|
include GuardianPhotoable
|
||||||
|
include CsvExportable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[name contact_info]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,13 @@ class MusicRelease < ApplicationRecord
|
|||||||
include Searchable
|
include Searchable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
|
include CsvExportable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[name file_infos_count composers_count publishers_count]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
has_many :file_infos, as: :releasable, dependent: :destroy
|
has_many :file_infos, as: :releasable, dependent: :destroy
|
||||||
has_many :composers, dependent: :destroy
|
has_many :composers, dependent: :destroy
|
||||||
@@ -72,6 +79,18 @@ class MusicRelease < ApplicationRecord
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def file_infos_count
|
||||||
|
file_infos.size
|
||||||
|
end
|
||||||
|
|
||||||
|
def composers_count
|
||||||
|
composers.size
|
||||||
|
end
|
||||||
|
|
||||||
|
def publishers_count
|
||||||
|
publishers.size
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def publisher_percentages_add_up_to_100
|
def publisher_percentages_add_up_to_100
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ class Project < ApplicationRecord
|
|||||||
has_many :talent_releases, dependent: :destroy
|
has_many :talent_releases, dependent: :destroy
|
||||||
has_many :medical_releases, dependent: :destroy
|
has_many :medical_releases, dependent: :destroy
|
||||||
has_many :misc_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 :videos, dependent: :destroy
|
||||||
has_many :imports, dependent: :destroy
|
has_many :imports, dependent: :destroy
|
||||||
has_many :contract_templates, dependent: :destroy
|
has_many :contract_templates, dependent: :destroy
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class QrCode
|
|||||||
url = Rails.application.routes.url_helpers.url_for(route)
|
url = Rails.application.routes.url_helpers.url_for(route)
|
||||||
filename = [contract_template.project.name, contract_template.name].map(&:parameterize).join("_")
|
filename = [contract_template.project.name, contract_template.name].map(&:parameterize).join("_")
|
||||||
|
|
||||||
new(url, filename)
|
new(url, "#{filename}.png")
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(url, filename = "qrcode.png")
|
def initialize(url, filename = "qrcode.png")
|
||||||
|
|||||||
@@ -14,6 +14,13 @@ class TalentRelease < ApplicationRecord
|
|||||||
include SecondGuardianPhotoable
|
include SecondGuardianPhotoable
|
||||||
include GuardianName
|
include GuardianName
|
||||||
include SecondGuardianName
|
include SecondGuardianName
|
||||||
|
include CsvExportable
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[name phone email]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
composed_of :person_address,
|
composed_of :person_address,
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
@@ -86,6 +93,14 @@ class TalentRelease < ApplicationRecord
|
|||||||
person_name
|
person_name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def phone
|
||||||
|
person_phone
|
||||||
|
end
|
||||||
|
|
||||||
|
def email
|
||||||
|
person_email
|
||||||
|
end
|
||||||
|
|
||||||
def filename_suffix
|
def filename_suffix
|
||||||
"#{person_last_name} #{person_first_name}"
|
"#{person_last_name} #{person_first_name}"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ class TaskRequest < ApplicationRecord
|
|||||||
|
|
||||||
scope :order_by_recent, -> { order(created_at: :desc) }
|
scope :order_by_recent, -> { order(created_at: :desc) }
|
||||||
|
|
||||||
validates :time_allowed, numericality: { only_integer: true, greater_than_or_equal_to: 2 }
|
validates :time_allowed, numericality: { only_integer: true, greater_than_or_equal_to: 2 }, allow_blank: true
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
class CastingCallPolicy < ApplicationPolicy
|
|
||||||
def index?
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def show?
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def create?
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy?
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def update?
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def cancel?
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -3,8 +3,10 @@ class ContractTemplatePolicy < ApplicationPolicy
|
|||||||
def resolve
|
def resolve
|
||||||
if user.account_manager?
|
if user.account_manager?
|
||||||
scope.left_outer_joins(:project).where(projects: {account: user.account})
|
scope.left_outer_joins(:project).where(projects: {account: user.account})
|
||||||
else
|
elsif user.manager?
|
||||||
scope.left_outer_joins(project: :project_memberships).where(project_memberships: { user_id: user.id })
|
scope.left_outer_joins(project: :project_memberships).where(project_memberships: { user_id: user.id })
|
||||||
|
else
|
||||||
|
scope.public_template.left_outer_joins(project: :project_memberships).where(project_memberships: { user_id: user.id })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -15,6 +15,14 @@ class MedicalReleasePolicy < ReleasePolicy
|
|||||||
user.manager? || user.account_manager?
|
user.manager? || user.account_manager?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def review?
|
||||||
|
user.account_manager?
|
||||||
|
end
|
||||||
|
|
||||||
|
def approve?
|
||||||
|
review?
|
||||||
|
end
|
||||||
|
|
||||||
def edit_photos?
|
def edit_photos?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -40,8 +40,4 @@ class ProjectPolicy < ApplicationPolicy
|
|||||||
def show_task_results?
|
def show_task_results?
|
||||||
show?
|
show?
|
||||||
end
|
end
|
||||||
|
|
||||||
def show_casting_submission_results?
|
|
||||||
show?
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -170,24 +170,6 @@ class Analytics
|
|||||||
end
|
end
|
||||||
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
|
private
|
||||||
|
|
||||||
attr_reader :user, :account, :backend
|
attr_reader :user, :account, :backend
|
||||||
|
|||||||
@@ -10,9 +10,6 @@
|
|||||||
<li class="nav-item">
|
<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") %>
|
<%= link_to fa_icon("tasks fw", text: "Task Requests"), [:admin, :task_requests], class: class_string("nav-link", "active" => controller_name == "task_requests") %>
|
||||||
</li>
|
</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">
|
<li class="nav-item">
|
||||||
<%= link_to fa_icon("bug fw", text: "Errors"), "https://sentry.io/bigmedia/", class: "nav-link", target: :_blank %>
|
<%= link_to fa_icon("bug fw", text: "Errors"), "https://sentry.io/bigmedia/", class: "nav-link", target: :_blank %>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
<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 %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
<%= 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/*", 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 %>
|
|
||||||
|
|
||||||
|
|
||||||
<% 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 %>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
<div class="d-flex flex-row justify-content-between align-items-center mb-3">
|
|
||||||
<% if policy(CastingCall).new? %>
|
|
||||||
<%= link_to fa_icon("plus", text: t(".actions.new")), [:new, :admin, :casting_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>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -43,12 +43,6 @@
|
|||||||
<%= product_wordmark :deliver_me, class: class_string("d-inline-block", "disabled" => !Current.account.deliverme_enabled?) %>
|
<%= product_wordmark :deliver_me, class: class_string("d-inline-block", "disabled" => !Current.account.deliverme_enabled?) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</li>
|
</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>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<hr class="divider-light mx-n4">
|
<hr class="divider-light mx-n4">
|
||||||
|
|||||||
15
app/views/approvals/new.html.erb
Normal file
15
app/views/approvals/new.html.erb
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<div class="card shadow-sm">
|
||||||
|
<%= card_header text: t(".heading"), close_action_path: [@project, :medical_releases] %>
|
||||||
|
<div class="card-body">
|
||||||
|
<embed class="embeded-contract-preview" type="application/pdf" src="<%= url_for [@medical_release, :contracts, format: "pdf"] %>" width="90%" height="1200" />
|
||||||
|
|
||||||
|
<%= bootstrap_form_with model: @medical_release, method: :post, url: medical_release_approvals_path(@medical_release), local: true do |form| %>
|
||||||
|
<div class="row align-items-center text-center mt-4">
|
||||||
|
<%= link_to t("shared.cancel"), [@medical_release.project, :medical_releases], class: "col-3 text-reset" %>
|
||||||
|
<div class="col-9">
|
||||||
|
<%= form.button t('.actions.approve'), id: "approve_release", class: class_string("btn btn-block btn-success btn-primary"), data: { disable_with: t("shared.disable_with") } %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -102,6 +102,7 @@
|
|||||||
<i class="fa fa-clipboard"></i>
|
<i class="fa fa-clipboard"></i>
|
||||||
Copy URL
|
Copy URL
|
||||||
</button>
|
</button>
|
||||||
|
<%= link_to t('.actions.reset_url'), [@project, @broadcast], method: :patch, class: "btn btn-danger" %>
|
||||||
</div>
|
</div>
|
||||||
<% else %>
|
<% else %>
|
||||||
<input type="text" class="form-control" value="<%= broadcast_url(@broadcast.token) %>" readonly>
|
<input type="text" class="form-control" value="<%= broadcast_url(@broadcast.token) %>" readonly>
|
||||||
@@ -110,6 +111,7 @@
|
|||||||
<i class="fa fa-clipboard"></i>
|
<i class="fa fa-clipboard"></i>
|
||||||
Copy URL
|
Copy URL
|
||||||
</button>
|
</button>
|
||||||
|
<%= link_to t('.actions.reset_url'), [@project, @broadcast], method: :patch, class: "btn btn-danger" %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<div class="card-body p-0">
|
<div class="card-body p-0">
|
||||||
<div class="embed-responsive embed-responsive-16by9">
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
<div class="embed-responsive-item">
|
<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 style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/435943632" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<%= casting_call.created_at.strftime('%D') %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%= casting_call.title %>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%= casting_call.status %>
|
|
||||||
</td>
|
|
||||||
<td class="text-right">
|
|
||||||
<div class="btn-group">
|
|
||||||
<%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
|
|
||||||
<div class="dropdown-menu dropdown-menu-right">
|
|
||||||
<%= link_to fa_icon("link fw", text: "Copy Audition URL"), casting_call_url(casting_call.token), class: "dropdown-item", data: { behavior: "clipboard" } %>
|
|
||||||
<% if policy(casting_call).show? %>
|
|
||||||
<%= link_to fa_icon("tasks fw", text: "View"), [casting_call.project, casting_call], class: "dropdown-item", target: '_blank' %>
|
|
||||||
<% end %>
|
|
||||||
<% if policy(casting_call).edit? %>
|
|
||||||
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, casting_call.project, casting_call], class: "dropdown-item" %>
|
|
||||||
<% end %>
|
|
||||||
<% if policy(casting_call).cancel? && !casting_call.cancelled? %>
|
|
||||||
<%= link_to fa_icon("ban fw", text: "Cancel"), [:cancel, casting_call.project, casting_call], class: "dropdown-item", method: :post %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
<%= errors_summary_for casting_call %>
|
|
||||||
|
|
||||||
<%= bootstrap_form_with model: model, url: [@project, @casting_call, show_chat: true], local: true do |form| %>
|
|
||||||
<div class="alert alert-info text-center text-md-left">
|
|
||||||
<%= fa_icon "info-circle" %>
|
|
||||||
<strong><%= t '.info_message' %></strong>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%= form.text_field :title %>
|
|
||||||
<%= 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 %>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<div class="card shadow-sm">
|
|
||||||
<%= card_header text: t(".heading"), close_action_path: [@project, :casting_calls] %>
|
|
||||||
<div class="card-body">
|
|
||||||
<%= render "form", model: [@project, @casting_call], casting_call: @casting_call, project: @project %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
<%= product_wordmark :cast_me, class: "small mb-3" %>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div class="d-md-flex d-sm-flex flex-sm-column flex-md-row flex-md-wrap mb-3">
|
|
||||||
<% if policy(CastingCall).new? %>
|
|
||||||
<%= link_to fa_icon("plus", text: t(".actions.new")), [:new, @project, :casting_call], class: "btn btn-primary mb-2" %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="border bg-white rounded shadow-sm pb-3 table-responsive">
|
|
||||||
<table class="table table-striped tr-px-4 align-all-middle">
|
|
||||||
<thead class="thead-light">
|
|
||||||
<tr>
|
|
||||||
<th><%= t(".table_headers.casting_call_created_on") %></th>
|
|
||||||
<th><%= t(".table_headers.casting_call_title") %></th>
|
|
||||||
<th><%= t(".table_headers.casting_call_status") %></th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="casting_calls">
|
|
||||||
<% if @casting_calls.any? %>
|
|
||||||
<%= render @casting_calls %>
|
|
||||||
<% else %>
|
|
||||||
<tr>
|
|
||||||
<td colspan="20" class="py-4 text-center text-muted"><%= t(".empty") %></td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="casting_calls_pagination" class="mt-3">
|
|
||||||
<%= will_paginate @casting_calls %>
|
|
||||||
</div>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
<div class="card shadow-sm">
|
|
||||||
<%= card_header text: t(".heading"), close_action_path: [@project, :casting_calls] %>
|
|
||||||
<div class="card-body">
|
|
||||||
<%= render "form", model: [@project, @casting_call], casting_call: @casting_call, project: @project %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
<% content_for :header do %>
|
|
||||||
<header class="container-fluid py-3 border-bottom sticky-top bg-light">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col-4 text-center">
|
|
||||||
<%= product_wordmark(:cast_me, class: 'navbar-brand') %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="card shadow-sm">
|
|
||||||
<%= card_header text: @casting_call.title, close_action_path: [@project, :casting_calls] %>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6 col-sm-12">
|
|
||||||
<dl>
|
|
||||||
<%= description_list_pair_for @casting_call, :title, append: ":" %>
|
|
||||||
<%= description_list_pair_for @casting_call, :description, append: ":" %>
|
|
||||||
<%= description_list_pair_for @casting_call, :project_description, append: ":" %>
|
|
||||||
<%= description_list_pair_for @casting_call, :created_at, append: ":" %>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 col-sm-12">
|
|
||||||
<dl>
|
|
||||||
<%= description_list_pair_for @casting_call, :status, append: ":" %>
|
|
||||||
<%= description_list_pair_for @casting_call, :interview_instructions, append: ":" %>
|
|
||||||
<%= description_list_pair_for @casting_call, :interview_requirements, append: ":" %>
|
|
||||||
<%= description_list_pair_for @casting_call, :questions, append: ":" %>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<% unless @casting_call.cancelled? %>
|
|
||||||
<div class="row align-items-center justify-content-center mt-3">
|
|
||||||
<%= link_to "Schedule an Audition", ENV["CASTME_AUDITION_BOOKING_URL"], target: "_blank", class: "btn btn-primary" %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<p>Your <%= release_type.titleize %> files are being prepared for download. You will be notified when it's ready.
|
|
||||||
</p>
|
|
||||||
<p class="mt-3">The following downloads are also in progress:</p>
|
|
||||||
<ul>
|
|
||||||
<% downloads.each do |download| %>
|
|
||||||
<% if download.release_type == "reports"%>
|
|
||||||
<li><%= download.release_type.titleize %> (as of <%= time_ago_in_words(download.created_at) %> ago)
|
|
||||||
</li>
|
|
||||||
<% elsif download.release_type == "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>
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<% 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 %>
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<div class="border bg-white rounded shadow-sm pb-3 table-responsive">
|
|
||||||
<table class="table table-striped tr-px-4 align-all-middle">
|
|
||||||
<thead class="thead-light">
|
|
||||||
<tr>
|
|
||||||
<th>Account Name</th>
|
|
||||||
<th>Casting Call Request</th>
|
|
||||||
<th>Perfomer's Name</th>
|
|
||||||
<th>Interviewed At</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="users">
|
|
||||||
<% if @casting_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>
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
<% content_for :header do %>
|
|
||||||
<header class="container-fluid py-3 border-bottom sticky-top bg-light">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col-4 text-center">
|
|
||||||
<%= product_wordmark(:cast_me, class: 'navbar-brand') %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="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 %>
|
|
||||||
new Clappr.Player({
|
|
||||||
parentId: '#casting_submission_video',
|
|
||||||
source: "<%= rails_blob_url(@casting_submission.interview_recording, host: AppHost.new.domain_with_port) %>",
|
|
||||||
width: '100%',
|
|
||||||
height: '100%',
|
|
||||||
mute: true,
|
|
||||||
autoPlay: true,
|
|
||||||
hlsMinimumDvrSize: 1
|
|
||||||
});
|
|
||||||
<% 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>
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<%= contract_template.releases.size %>
|
<%= contract_template.releases.size %>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right">
|
<td class="text-right" nowrap>
|
||||||
<div class="btn-group">
|
<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 } %>
|
<%= 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">
|
<div class="dropdown-menu dropdown-menu-right">
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<%= link_to fa_icon("print", text: "Print"), [:new, contract_template, :blank_contracts], class: "dropdown-item", target: :_blank %>
|
<%= link_to fa_icon("print", text: "Print"), [:new, contract_template, :blank_contracts], class: "dropdown-item", target: :_blank %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if policy(contract_template).destroy? %>
|
<% if policy(contract_template).destroy? %>
|
||||||
<%= link_to fa_icon("archive", text: "Archive"), contract_template, class: "dropdown-item", method: :delete, data: { confirm: "Are you sure?" } %>
|
<%= link_to fa_icon("trash", text: "Delete"), contract_template, class: "dropdown-item", method: :delete, data: { confirm: "Are you sure?" } %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,10 @@
|
|||||||
<%= form.text_field :name, wrapper_class: "col-sm-6" %>
|
<%= form.text_field :name, wrapper_class: "col-sm-6" %>
|
||||||
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc) } }, class: "form-control custom-select" %>
|
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc) } }, class: "form-control custom-select" %>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-row mb-3">
|
||||||
|
<%= form.radio_button :accessibility, :public_template, label: "Public", wrapper_class: "mr-3" %>
|
||||||
|
<%= form.radio_button :accessibility, :private_template, label: "Private" %>
|
||||||
|
</div>
|
||||||
<div class="form-row" id="fee_field">
|
<div class="form-row" id="fee_field">
|
||||||
<%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", wrapper_class: "col-sm-6" %>
|
<%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", wrapper_class: "col-sm-6" %>
|
||||||
</div>
|
</div>
|
||||||
@@ -25,6 +29,11 @@
|
|||||||
<%= form.rich_text_area :guardian_clause %>
|
<%= form.rich_text_area :guardian_clause %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="signature_legal_text">
|
||||||
|
<%= form.form_group do %>
|
||||||
|
<%= form.rich_text_area :signature_legal_text %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= field_set_tag content_tag(:span, t(".custom_fields.heading"), class: "h6 text-muted text-uppercase"), id: "custom_fields", style: "display: none;" do %>
|
<%= field_set_tag content_tag(:span, t(".custom_fields.heading"), class: "h6 text-muted text-uppercase"), id: "custom_fields", style: "display: none;" do %>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<div class="card-body p-0">
|
<div class="card-body p-0">
|
||||||
<div class="embed-responsive embed-responsive-16by9">
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
<div class="embed-responsive-item">
|
<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 style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/435942851" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
13
app/views/contracts/_for_office_use_only.erb
Normal file
13
app/views/contracts/_for_office_use_only.erb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<% if preview %>
|
||||||
|
<h1>PREVIEW ONLY</h1>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<p class="heading"><strong><u><%= t '.heading' %></u></strong></p>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<%= description_list_pair t('.description_labels.producer'), releasable.project.account.name %>
|
||||||
|
<%= description_list_pair t('.description_labels.production'), releasable.project.name %>
|
||||||
|
<%= description_list_pair t('.description_labels.employee_issued_to'), releasable.name %>
|
||||||
|
<%= description_list_pair t('.description_labels.issued_by'), releasable.approved_by_user_name %>
|
||||||
|
<%= description_list_pair t('.description_labels.date_issued'), releasable.approved_at %>
|
||||||
|
</dl>
|
||||||
@@ -25,6 +25,13 @@
|
|||||||
<div class="page">
|
<div class="page">
|
||||||
<%= render "contracts/signature_page", releasable: releasable, contract_template: contract_template, preview: preview %>
|
<%= render "contracts/signature_page", releasable: releasable, contract_template: contract_template, preview: preview %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<% if releasable.class == MedicalRelease && releasable.approved? %>
|
||||||
|
<div class="page">
|
||||||
|
<%= render "contracts/for_office_use_only", releasable: releasable, preview: preview %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<% if releasable.class == AcquiredMediaRelease %>
|
<% if releasable.class == AcquiredMediaRelease %>
|
||||||
<div class="page">
|
<div class="page">
|
||||||
<%= render "contracts/files", release: releasable, preview: preview %>
|
<%= render "contracts/files", release: releasable, preview: preview %>
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
<tr id="<%= dom_id(medical_release) %>">
|
<tr id="<%= dom_id(medical_release) %>">
|
||||||
<td data-behavior="select"><%= check_box_tag "medical_release_ids[]", medical_release.id, false %></td>
|
<td data-behavior="select"><%= check_box_tag "medical_release_ids[]", medical_release.id, false %></td>
|
||||||
|
<td class="text-center">
|
||||||
|
<% if medical_release.approved? %>
|
||||||
|
<% tooltip_user_data = get_approval_data_for_medical_release(medical_release) %>
|
||||||
|
<i class="fa fa-check-circle fa-2x text-success"
|
||||||
|
data-toggle="tooltip"
|
||||||
|
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: medical_release.approved_at %>"></i>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<% if medical_release.photo.attached? %>
|
<% if medical_release.photo.attached? %>
|
||||||
<%= image_tag medium_variant(medical_release.photo), class: "img-fluid" %>
|
<%= image_tag medium_variant(medical_release.photo), class: "img-fluid" %>
|
||||||
@@ -37,6 +45,9 @@
|
|||||||
<% if policy(medical_release.tags).new? %>
|
<% if policy(medical_release.tags).new? %>
|
||||||
<%= link_to fa_icon("tags fw", text: "Tags"), [:new, medical_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %>
|
<%= link_to fa_icon("tags fw", text: "Tags"), [:new, medical_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<% if policy(MedicalRelease).review? %>
|
||||||
|
<%= link_to fa_icon("search fw", text: t('.actions.review')), new_medical_release_approvals_path(medical_release), class: "dropdown-item" %>
|
||||||
|
<% end %>
|
||||||
<% if policy(MedicalRelease).download_single? && policy(Contract).show? && (medical_release.contract.attached? || medical_release.contract_template.present?) %>
|
<% if policy(MedicalRelease).download_single? && policy(Contract).show? && (medical_release.contract.attached? || medical_release.contract_template.present?) %>
|
||||||
<%= link_to fa_icon("download fw", text: "Download"), [medical_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
|
<%= link_to fa_icon("download fw", text: "Download"), [medical_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<thead class="thead-light">
|
<thead class="thead-light">
|
||||||
<tr>
|
<tr>
|
||||||
<th data-behavior="all-selectable"><%= check_box_tag "medical_release_ids[]", false, false %></th>
|
<th data-behavior="all-selectable"><%= check_box_tag "medical_release_ids[]", false, false %></th>
|
||||||
|
<th><%= t '.table_headers.approved'%></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
<th><%= MedicalRelease.human_attribute_name(:person_name) %></th>
|
<th><%= MedicalRelease.human_attribute_name(:person_name) %></th>
|
||||||
<th><%= MedicalRelease.human_attribute_name(:contact_info) %></th>
|
<th><%= MedicalRelease.human_attribute_name(:contact_info) %></th>
|
||||||
|
|||||||
15
app/views/medical_releases/review.html.erb
Normal file
15
app/views/medical_releases/review.html.erb
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<div class="card shadow-sm">
|
||||||
|
<%= card_header text: t(".heading"), close_action_path: [@project, :medical_releases] %>
|
||||||
|
<div class="card-body">
|
||||||
|
<embed class="embeded-contract-preview" type="application/pdf" src="<%= url_for [@medical_release, :contracts, format: "pdf"] %>" width="90%" height="1200" />
|
||||||
|
|
||||||
|
<%= bootstrap_form_with model: @medical_release, method: :patch, url: [:approve, @medical_release], local: true do |form| %>
|
||||||
|
<div class="row align-items-center text-center mt-4">
|
||||||
|
<%= link_to t("shared.cancel"), [@medical_release.project, :medical_releases], class: "col-3 text-reset" %>
|
||||||
|
<div class="col-9">
|
||||||
|
<%= form.button t('.actions.approve'), id: "approve_release", class: class_string("btn btn-block btn-success btn-primary"), data: { disable_with: t("shared.disable_with") } %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -21,11 +21,6 @@
|
|||||||
<%= link_to t("projects.show.tasks"), [@project, :tasks], class: "text-decoration-none text-reset stretched-link" %>
|
<%= link_to t("projects.show.tasks"), [@project, :tasks], class: "text-decoration-none text-reset stretched-link" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% 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>
|
</div>
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".signature.heading") do %>
|
<%= card_field_set_tag t(".signature.heading") do %>
|
||||||
<%= render "shared/signature_fields", form: form %>
|
<%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
|
|||||||
@@ -156,7 +156,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".signature.heading") do %>
|
<%= card_field_set_tag t(".signature.heading") do %>
|
||||||
<%= render "shared/signature_fields", form: form %>
|
<%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
<% content_for :header do %>
|
|
||||||
<header class="container-fluid py-3 border-bottom sticky-top bg-light">
|
|
||||||
<div class="row align-items-center justify-content-center">
|
|
||||||
<div class="col-4 text-center">
|
|
||||||
<%= product_wordmark(:cast_me, class: 'navbar-brand') %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="card shadow-sm">
|
|
||||||
<%= card_header text: @casting_call.title %>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-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>
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
<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>
|
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".signature.heading") do %>
|
<%= card_field_set_tag t(".signature.heading") do %>
|
||||||
<%= render "shared/signature_fields", form: form, instruction: 'An Authorized Signatory' %>
|
<%= render "shared/signature_fields", form: form, instruction: 'An Authorized Signatory', signature_legal_text: @contract_template.signature_legal_text %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".signature.heading") do %>
|
<%= card_field_set_tag t(".signature.heading") do %>
|
||||||
<%= render "shared/signature_fields", form: form, instruction: 'For Owner or Authorized Signatory' %>
|
<%= render "shared/signature_fields", form: form, instruction: 'For Owner or Authorized Signatory', signature_legal_text: @contract_template.signature_legal_text %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".signature.heading") do %>
|
<%= card_field_set_tag t(".signature.heading") do %>
|
||||||
<%= render "shared/signature_fields", form: form %>
|
<%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
|
|||||||
@@ -39,9 +39,7 @@
|
|||||||
<%= form.text_field :person_first_name, required: true, wrapper_class: "col-sm-6" %>
|
<%= form.text_field :person_first_name, required: true, wrapper_class: "col-sm-6" %>
|
||||||
<%= form.text_field :person_last_name, required: true, wrapper_class: "col-sm-6" %>
|
<%= form.text_field :person_last_name, required: true, wrapper_class: "col-sm-6" %>
|
||||||
<%= form.phone_field :person_phone, wrapper_class: "col-sm-6" %>
|
<%= form.phone_field :person_phone, wrapper_class: "col-sm-6" %>
|
||||||
</div>
|
<%= form.email_field :person_email, required: true, wrapper_class: "col-sm-6" %>
|
||||||
<div class="form-row">
|
|
||||||
<%= form.email_field :person_email, wrapper_class: "col-sm-6" %>
|
|
||||||
</div>
|
</div>
|
||||||
<%= render "shared/address_fields", form: form, subject: "person" %>
|
<%= render "shared/address_fields", form: form, subject: "person" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -97,7 +95,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".signature.heading") do %>
|
<%= card_field_set_tag t(".signature.heading") do %>
|
||||||
<%= render "shared/signature_fields", form: form %>
|
<%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
|
|||||||
@@ -131,7 +131,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".signature.heading") do %>
|
<%= card_field_set_tag t(".signature.heading") do %>
|
||||||
<%= render "shared/signature_fields", form: form %>
|
<%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="mt-5">
|
<div class="mt-5">
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
<% if params[:show_chat] %>
|
|
||||||
<%= javascript_include_tag "//js.hs-scripts.com/7344617.js", defer: "defer", async: true, id: "hs-script-loader" %>
|
|
||||||
<%= javascript_tag nonce: true do %>
|
|
||||||
function onConversationsAPIReady() {
|
|
||||||
window.HubSpotConversations.widget.load({ widgetOpen: true });
|
|
||||||
window.HubSpotConversations.widget.open();
|
|
||||||
}
|
|
||||||
if (window.HubSpotConversations) {
|
|
||||||
onConversationsAPIReady();
|
|
||||||
} else {
|
|
||||||
window.hsConversationsOnReady = [onConversationsAPIReady];
|
|
||||||
}
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
@@ -12,4 +12,8 @@
|
|||||||
<%= fa_icon "refresh" %> <%= t "shared.clear" %>
|
<%= fa_icon "refresh" %> <%= t "shared.clear" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<% if local_assigns[:signature_legal_text] && signature_legal_text.present? %>
|
||||||
|
<div class="alert alert-warning font-weight-bold"><%= signature_legal_text %></div>
|
||||||
|
<% end %>
|
||||||
@@ -1,9 +1,19 @@
|
|||||||
<%= errors_summary_for task_request %>
|
<%= errors_summary_for task_request %>
|
||||||
|
|
||||||
<%= bootstrap_form_with model: model, url: [@project, @task_request, show_chat: true], local: true do |form| %>
|
<%= bootstrap_form_with model: model, url: [@project, @task_request, show_chat: true], local: true do |form| %>
|
||||||
<div class="alert alert-info text-center text-md-left">
|
|
||||||
<%= fa_icon "info-circle" %>
|
<div class="d-flex">
|
||||||
<strong><%= t '.info_message' %></strong>
|
<div class="row">
|
||||||
|
<div class="col-xl-10 col-12">
|
||||||
|
<div class="alert alert-info text-center text-md-left">
|
||||||
|
<%= fa_icon "info-circle" %>
|
||||||
|
<strong><%= t '.info_message' %></strong>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xl-2 col-12">
|
||||||
|
<%= form.submit t('.actions.chat_now'), class: "btn btn-block btn-warning pt-4 pb-4 mb-1", data: { disable_with: t("shared.disable_with") } %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= form.text_area :description, label: t('.labels.description') %>
|
<%= form.text_area :description, label: t('.labels.description') %>
|
||||||
|
|||||||
@@ -1,2 +1,16 @@
|
|||||||
<%= render "shared/initiate_hubspot_chat" %>
|
<% 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>
|
<p class="alert alert-success p-3 lead text-center"><%= t '.success_message' %></p>
|
||||||
|
<%= link_to fa_icon("arrow-left", text: "Back"), [@project, :task_requests], class: "btn btn-primary" %>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<%= 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' %>
|
<%= 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? %>
|
<% 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" %>
|
<%= link_to t(".actions.upload_video"), [:landing, @project, :videos], class: "btn btn-success border align-self-center h-50 pb-2" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<div class="card-body p-0">
|
<div class="card-body p-0">
|
||||||
<div class="embed-responsive embed-responsive-16by9">
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
<div class="embed-responsive-item">
|
<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 style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/435943995" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ en:
|
|||||||
empty: Acquired Media Releases will appear here
|
empty: Acquired Media Releases will appear here
|
||||||
table_headers:
|
table_headers:
|
||||||
file_infos_count: No. Files
|
file_infos_count: No. Files
|
||||||
|
name: Name
|
||||||
notes: Notes
|
notes: Notes
|
||||||
signed_at: Date Signed
|
signed_at: Date Signed
|
||||||
tags: Tags
|
tags: Tags
|
||||||
@@ -70,9 +71,6 @@ en:
|
|||||||
person_phone: Phone
|
person_phone: Phone
|
||||||
person_photo: Photo
|
person_photo: Photo
|
||||||
signed_on: Date
|
signed_on: Date
|
||||||
casting_call:
|
|
||||||
interview_instructions: Welcome message
|
|
||||||
interview_requirements: Goodbye message
|
|
||||||
location_release:
|
location_release:
|
||||||
person_company: Company
|
person_company: Company
|
||||||
person_email: Email
|
person_email: Email
|
||||||
@@ -100,22 +98,6 @@ en:
|
|||||||
application:
|
application:
|
||||||
header:
|
header:
|
||||||
sign_out: Sign Out
|
sign_out: Sign Out
|
||||||
casting_submissions:
|
|
||||||
complete:
|
|
||||||
notice: The casting submission has been completed
|
|
||||||
create:
|
|
||||||
notice: The casting submission has been created
|
|
||||||
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:
|
task_requests:
|
||||||
index:
|
index:
|
||||||
empty: Task requests will appear here
|
empty: Task requests will appear here
|
||||||
@@ -170,6 +152,8 @@ en:
|
|||||||
empty: Appearance Releases will appear here
|
empty: Appearance Releases will appear here
|
||||||
imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release
|
imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release
|
||||||
table_headers:
|
table_headers:
|
||||||
|
contact_info: Contact info
|
||||||
|
name: Name
|
||||||
notes: Notes
|
notes: Notes
|
||||||
signed_at: Date Signed
|
signed_at: Date Signed
|
||||||
tags: Tags
|
tags: Tags
|
||||||
@@ -190,6 +174,13 @@ en:
|
|||||||
sidebar:
|
sidebar:
|
||||||
files: Files
|
files: Files
|
||||||
team_member: Team Member
|
team_member: Team Member
|
||||||
|
approvals:
|
||||||
|
create:
|
||||||
|
release_approved: Medical release has been approved
|
||||||
|
new:
|
||||||
|
actions:
|
||||||
|
approve: Approve
|
||||||
|
heading: Review Medical Release
|
||||||
blank_contracts:
|
blank_contracts:
|
||||||
new:
|
new:
|
||||||
number_of_copies_label: Number of copies
|
number_of_copies_label: Number of copies
|
||||||
@@ -226,6 +217,9 @@ en:
|
|||||||
new:
|
new:
|
||||||
heading:
|
heading:
|
||||||
Create Live Stream
|
Create Live Stream
|
||||||
|
show:
|
||||||
|
actions:
|
||||||
|
reset_url: Reset URL
|
||||||
splash:
|
splash:
|
||||||
actions:
|
actions:
|
||||||
book_demo: Schedule a Demo
|
book_demo: Schedule a Demo
|
||||||
@@ -244,45 +238,11 @@ en:
|
|||||||
share_stream: Share live stream link with clients
|
share_stream: Share live stream link with clients
|
||||||
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
||||||
stream_multiple_cameras: Stream multiple cameras at one time
|
stream_multiple_cameras: Stream multiple cameras at one time
|
||||||
|
update:
|
||||||
|
reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
|
||||||
bulk_taggings:
|
bulk_taggings:
|
||||||
new_bulk_tag_modal:
|
new_bulk_tag_modal:
|
||||||
submit: Add
|
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
|
|
||||||
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:
|
contract_downloads:
|
||||||
download:
|
download:
|
||||||
failure: Your download could not be generated.
|
failure: Your download could not be generated.
|
||||||
@@ -343,6 +303,14 @@ en:
|
|||||||
print_QR_code: Print out release QR codes
|
print_QR_code: Print out release QR codes
|
||||||
releases_automatically_organized: Releases are automatically organized as they’re submitted
|
releases_automatically_organized: Releases are automatically organized as they’re submitted
|
||||||
contracts:
|
contracts:
|
||||||
|
for_office_use_only:
|
||||||
|
description_labels:
|
||||||
|
date_issued: Date Issued
|
||||||
|
employee_issued_to: Employee Issued To
|
||||||
|
issued_by: Issued By
|
||||||
|
producer: Producer
|
||||||
|
production: Production
|
||||||
|
heading: For Office Use Only
|
||||||
photos:
|
photos:
|
||||||
guardian_2_photo_heading: Second guardian photo
|
guardian_2_photo_heading: Second guardian photo
|
||||||
guardian_photo_heading: Guardian photo
|
guardian_photo_heading: Guardian photo
|
||||||
@@ -416,13 +384,10 @@ en:
|
|||||||
notice: The release has been updated
|
notice: The release has been updated
|
||||||
helpers:
|
helpers:
|
||||||
help:
|
help:
|
||||||
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:
|
contract_template:
|
||||||
fee: Leave at $0.00 for no-fee
|
fee: Leave at $0.00 for no-fee
|
||||||
guardian_clause: Leave blank if not required for this contract
|
guardian_clause: Leave blank if not required for this contract
|
||||||
|
signature_legal_text: Leave blank if not required for this contract
|
||||||
task_request:
|
task_request:
|
||||||
time_allowed: Minimum of 2 hours, no partial hours allowed
|
time_allowed: Minimum of 2 hours, no partial hours allowed
|
||||||
video:
|
video:
|
||||||
@@ -478,13 +443,6 @@ en:
|
|||||||
person_last_name: Last name
|
person_last_name: Last name
|
||||||
person_name: Name
|
person_name: Name
|
||||||
person_phone: Phone number
|
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:
|
location_release:
|
||||||
address_city: City
|
address_city: City
|
||||||
address_country: Country
|
address_country: Country
|
||||||
@@ -734,8 +692,6 @@ en:
|
|||||||
broadcast:
|
broadcast:
|
||||||
create: Create Live Stream
|
create: Create Live Stream
|
||||||
update: Save Changes
|
update: Save Changes
|
||||||
casting_submission:
|
|
||||||
create: Create Casting Submission
|
|
||||||
contract_template:
|
contract_template:
|
||||||
create: Create Release Template
|
create: Create Release Template
|
||||||
directory:
|
directory:
|
||||||
@@ -794,6 +750,7 @@ en:
|
|||||||
empty: Location Releases will appear here
|
empty: Location Releases will appear here
|
||||||
table_headers:
|
table_headers:
|
||||||
address: Address
|
address: Address
|
||||||
|
name: Name
|
||||||
notes: Notes
|
notes: Notes
|
||||||
signed_at: Date Signed
|
signed_at: Date Signed
|
||||||
tags: Tags
|
tags: Tags
|
||||||
@@ -828,6 +785,7 @@ en:
|
|||||||
search: Search
|
search: Search
|
||||||
empty: Material Releases will appear here
|
empty: Material Releases will appear here
|
||||||
table_headers:
|
table_headers:
|
||||||
|
name: Name
|
||||||
notes: Notes
|
notes: Notes
|
||||||
signed_at: Date Signed
|
signed_at: Date Signed
|
||||||
tags: Tags
|
tags: Tags
|
||||||
@@ -849,12 +807,19 @@ en:
|
|||||||
search: Search
|
search: Search
|
||||||
empty: Medical releases will appear here
|
empty: Medical releases will appear here
|
||||||
table_headers:
|
table_headers:
|
||||||
|
approved: Approved
|
||||||
|
approved?: Approved
|
||||||
|
contact_info: Contact info
|
||||||
|
name: Person name
|
||||||
notes: Notes
|
notes: Notes
|
||||||
signed_at: Date Signed
|
signed_at: Date Signed
|
||||||
tags: Tags
|
tags: Tags
|
||||||
medical_release:
|
medical_release:
|
||||||
actions:
|
actions:
|
||||||
manage: Manage
|
manage: Manage
|
||||||
|
review: Review
|
||||||
|
messages:
|
||||||
|
approved_tooltip: Approved by %{user} on %{timestamp}
|
||||||
misc_releases:
|
misc_releases:
|
||||||
destroy:
|
destroy:
|
||||||
alert: The misc release has been deleted
|
alert: The misc release has been deleted
|
||||||
@@ -863,6 +828,8 @@ en:
|
|||||||
search: Search
|
search: Search
|
||||||
empty: Misc Releases will appear here
|
empty: Misc Releases will appear here
|
||||||
table_headers:
|
table_headers:
|
||||||
|
contact_info: Contact info
|
||||||
|
name: Person name
|
||||||
notes: Notes
|
notes: Notes
|
||||||
signed_at: Date Signed
|
signed_at: Date Signed
|
||||||
tags: Tags
|
tags: Tags
|
||||||
@@ -897,6 +864,7 @@ en:
|
|||||||
table_headers:
|
table_headers:
|
||||||
composers_count: No. Composers
|
composers_count: No. Composers
|
||||||
file_infos_count: No. Files
|
file_infos_count: No. Files
|
||||||
|
name: Name
|
||||||
notes: Notes
|
notes: Notes
|
||||||
publishers_count: No. Publishers
|
publishers_count: No. Publishers
|
||||||
signed_at: Date Signed
|
signed_at: Date Signed
|
||||||
@@ -999,7 +967,6 @@ en:
|
|||||||
show:
|
show:
|
||||||
acquired_media_release: Acquired Media Releases (%{count})
|
acquired_media_release: Acquired Media Releases (%{count})
|
||||||
appearance_release: Appearance Releases (%{count})
|
appearance_release: Appearance Releases (%{count})
|
||||||
casting_submissions: Casting Submissions
|
|
||||||
downloads: Downloads
|
downloads: Downloads
|
||||||
location_release: Location Releases (%{count})
|
location_release: Location Releases (%{count})
|
||||||
material_release: Material Releases (%{count})
|
material_release: Material Releases (%{count})
|
||||||
@@ -1062,12 +1029,6 @@ en:
|
|||||||
broadcasts:
|
broadcasts:
|
||||||
show:
|
show:
|
||||||
alert: That broadcast is no longer available
|
alert: That broadcast is no longer available
|
||||||
casting_submissions:
|
|
||||||
show:
|
|
||||||
heading: Files
|
|
||||||
update: Upload
|
|
||||||
update:
|
|
||||||
notice: Your files have been uploaded successfully
|
|
||||||
location_releases:
|
location_releases:
|
||||||
create:
|
create:
|
||||||
notice: Your release has been signed. Thank you!
|
notice: Your release has been signed. Thank you!
|
||||||
@@ -1244,7 +1205,6 @@ en:
|
|||||||
ago: ago
|
ago: ago
|
||||||
back: Back
|
back: Back
|
||||||
cancel: Cancel
|
cancel: Cancel
|
||||||
cast_me: Cast
|
|
||||||
clear: Clear
|
clear: Clear
|
||||||
close: Close
|
close: Close
|
||||||
csv: CSV
|
csv: CSV
|
||||||
@@ -1301,7 +1261,10 @@ en:
|
|||||||
search: Search
|
search: Search
|
||||||
empty: Talent Releases will appear here
|
empty: Talent Releases will appear here
|
||||||
table_headers:
|
table_headers:
|
||||||
|
email: Email
|
||||||
|
name: Name
|
||||||
notes: Notes
|
notes: Notes
|
||||||
|
phone: Phone
|
||||||
signed_at: Date Signed
|
signed_at: Date Signed
|
||||||
tags: Tags
|
tags: Tags
|
||||||
new:
|
new:
|
||||||
@@ -1321,7 +1284,9 @@ en:
|
|||||||
heading:
|
heading:
|
||||||
Edit Task Request
|
Edit Task Request
|
||||||
form:
|
form:
|
||||||
info_message: After submitting this task request, you'll be connected via chat with a ME Suite representative.
|
actions:
|
||||||
|
chat_now: Chat Now
|
||||||
|
info_message: For best results, please fill out this form prior to being connected with a TaskME assistant. However, if urgent, you can start speaking with a TaskME assistant by pressing the Chat Now button to the right
|
||||||
labels:
|
labels:
|
||||||
additional_notes: Please add any additional notes we should be aware of regarding this task.
|
additional_notes: Please add any additional notes we should be aware of regarding this task.
|
||||||
deadline: What is the deadline for this task?
|
deadline: What is the deadline for this task?
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
es:
|
es:
|
||||||
|
acquired_media_releases:
|
||||||
|
acquired_media_release:
|
||||||
|
no_media: No Media (ES)
|
||||||
|
index:
|
||||||
|
table_headers:
|
||||||
|
file_infos_count: No. Files (ES)
|
||||||
|
name: Name (ES)
|
||||||
|
notes: Notes (ES)
|
||||||
|
signed_at: Date Signed (ES)
|
||||||
|
tags: Tags (ES)
|
||||||
activerecord:
|
activerecord:
|
||||||
attributes:
|
attributes:
|
||||||
appearance_release:
|
appearance_release:
|
||||||
@@ -41,6 +51,12 @@ es:
|
|||||||
heading: Person Photo (ES)
|
heading: Person Photo (ES)
|
||||||
index:
|
index:
|
||||||
imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release (ES)
|
imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release (ES)
|
||||||
|
table_headers:
|
||||||
|
contact_info: ""
|
||||||
|
name: ""
|
||||||
|
notes: ""
|
||||||
|
signed_at: ""
|
||||||
|
tags: ""
|
||||||
shared:
|
shared:
|
||||||
imported_appearance_release_contract_name: Contrato Importado
|
imported_appearance_release_contract_name: Contrato Importado
|
||||||
imported_appearance_release_headshot_name: Retrato Importado
|
imported_appearance_release_headshot_name: Retrato Importado
|
||||||
@@ -50,6 +66,13 @@ es:
|
|||||||
all_releases: All Releases (ES)
|
all_releases: All Releases (ES)
|
||||||
complete_releases: Complete Releases (ES)
|
complete_releases: Complete Releases (ES)
|
||||||
incomplete_releases: Incomplete Releases (ES)
|
incomplete_releases: Incomplete Releases (ES)
|
||||||
|
approvals:
|
||||||
|
create:
|
||||||
|
release_approved: Medical release has been approved (ES)
|
||||||
|
new:
|
||||||
|
actions:
|
||||||
|
approve: Approve (ES)
|
||||||
|
heading: Review Medical Release (ES)
|
||||||
blank_contracts:
|
blank_contracts:
|
||||||
new:
|
new:
|
||||||
number_of_copies_label: Number of copies (ES)
|
number_of_copies_label: Number of copies (ES)
|
||||||
@@ -58,6 +81,9 @@ es:
|
|||||||
do_not_copy_warning: "Do not copy (ES)"
|
do_not_copy_warning: "Do not copy (ES)"
|
||||||
serial_number_label: "Serial Number (ES)"
|
serial_number_label: "Serial Number (ES)"
|
||||||
broadcasts:
|
broadcasts:
|
||||||
|
show:
|
||||||
|
actions:
|
||||||
|
reset_url: Reset URL (ES)
|
||||||
splash:
|
splash:
|
||||||
actions:
|
actions:
|
||||||
book_demo: Schedule a Demo
|
book_demo: Schedule a Demo
|
||||||
@@ -76,6 +102,8 @@ es:
|
|||||||
share_stream: Share live stream link with clients
|
share_stream: Share live stream link with clients
|
||||||
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
||||||
stream_multiple_cameras: Stream multiple cameras at one time
|
stream_multiple_cameras: Stream multiple cameras at one time
|
||||||
|
update:
|
||||||
|
reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
|
||||||
contract_templates:
|
contract_templates:
|
||||||
blank_contracts:
|
blank_contracts:
|
||||||
create:
|
create:
|
||||||
@@ -107,6 +135,14 @@ es:
|
|||||||
print_QR_code: Print out release QR codes (ES)
|
print_QR_code: Print out release QR codes (ES)
|
||||||
releases_automatically_organized: Releases are automatically organized as they’re submitted (ES)
|
releases_automatically_organized: Releases are automatically organized as they’re submitted (ES)
|
||||||
contracts:
|
contracts:
|
||||||
|
for_office_use_only:
|
||||||
|
description_labels:
|
||||||
|
date_issued: Date Issued (ES)
|
||||||
|
employee_issued_to: Employee Issued To (ES)
|
||||||
|
issued_by: Issued By (ES)
|
||||||
|
producer: Producer (ES)
|
||||||
|
production: Production (ES)
|
||||||
|
heading: For Office Use Only (ES)
|
||||||
photos:
|
photos:
|
||||||
guardian_2_photo_heading: Second guardian photo (ES)
|
guardian_2_photo_heading: Second guardian photo (ES)
|
||||||
guardian_photo_heading: Guardian photo (ES)
|
guardian_photo_heading: Guardian photo (ES)
|
||||||
@@ -160,6 +196,7 @@ es:
|
|||||||
contract_template:
|
contract_template:
|
||||||
fee: Leave at $0.00 for no-fee (ES)
|
fee: Leave at $0.00 for no-fee (ES)
|
||||||
guardian_clause: Leave blank if not required for this contract (ES)
|
guardian_clause: Leave blank if not required for this contract (ES)
|
||||||
|
signature_legal_text: Leave blank if not required for this contract (ES)
|
||||||
label:
|
label:
|
||||||
appearance_release:
|
appearance_release:
|
||||||
guardian_2_address_city: Guardian 2 city (ES)
|
guardian_2_address_city: Guardian 2 city (ES)
|
||||||
@@ -272,21 +309,65 @@ es:
|
|||||||
broadcast:
|
broadcast:
|
||||||
create: Create Live Stream (ES)
|
create: Create Live Stream (ES)
|
||||||
update: Save Changes (ES)
|
update: Save Changes (ES)
|
||||||
casting_submission:
|
|
||||||
create: Create casting submission (ES)
|
|
||||||
create: 'Crear %{model}'
|
create: 'Crear %{model}'
|
||||||
|
medical_release:
|
||||||
|
update: Approve (ES)
|
||||||
update: 'Actualizar %{model}'
|
update: 'Actualizar %{model}'
|
||||||
location_releases:
|
location_releases:
|
||||||
form:
|
form:
|
||||||
photos:
|
photos:
|
||||||
dropzone_label: Tap to take a photo of the Property (optional) (ES)
|
dropzone_label: Tap to take a photo of the Property (optional) (ES)
|
||||||
|
index:
|
||||||
|
table_headers:
|
||||||
|
address: Address (ES)
|
||||||
|
notes: Notes (ES)
|
||||||
|
signed_at: Date Signed (ES)
|
||||||
|
tags: Tags (ES)
|
||||||
material_releases:
|
material_releases:
|
||||||
form:
|
form:
|
||||||
photos:
|
photos:
|
||||||
dropzone_label: Tap to take a photo of Licensed Material (optional) (ES)
|
dropzone_label: Tap to take a photo of Licensed Material (optional) (ES)
|
||||||
|
index:
|
||||||
|
table_headers:
|
||||||
|
name: Name (ES)
|
||||||
|
notes: Notes (ES)
|
||||||
|
signed_at: Date Signed (ES)
|
||||||
|
tags: Tags (ES)
|
||||||
medical_releases:
|
medical_releases:
|
||||||
custom_validation_errors:
|
custom_validation_errors:
|
||||||
question_answer_is_required: answer is required (ES)
|
question_answer_is_required: answer is required (ES)
|
||||||
|
index:
|
||||||
|
table_headers:
|
||||||
|
approved: Approved (ES)
|
||||||
|
approved?: Approved (ES)
|
||||||
|
contact_info: Contact info (ES)
|
||||||
|
name: Person name (ES)
|
||||||
|
notes: Notes (ES)
|
||||||
|
signed_at: Date Signed (ES)
|
||||||
|
tags: Tags (ES)
|
||||||
|
medical_release:
|
||||||
|
actions:
|
||||||
|
review: Review (ES)
|
||||||
|
messages:
|
||||||
|
approved_tooltip: ""
|
||||||
|
misc_releases:
|
||||||
|
index:
|
||||||
|
table_headers:
|
||||||
|
contact_info: Contact info (ES)
|
||||||
|
name: Person name (ES)
|
||||||
|
notes: Notes (ES)
|
||||||
|
signed_at: Date Signed (ES)
|
||||||
|
tags: Tags (ES)
|
||||||
|
music_releases:
|
||||||
|
index:
|
||||||
|
table_headers:
|
||||||
|
composers_count: No. Composers (ES)
|
||||||
|
file_infos_count: No. Files (ES)
|
||||||
|
name: Name (ES)
|
||||||
|
notes: Notes (ES)
|
||||||
|
publishers_count: No. Publishers (ES)
|
||||||
|
signed_at: Date Signed (ES)
|
||||||
|
tags: Tags (ES)
|
||||||
public:
|
public:
|
||||||
appearance_releases:
|
appearance_releases:
|
||||||
create:
|
create:
|
||||||
@@ -391,11 +472,21 @@ es:
|
|||||||
heading: Second Guardian Photo (ES)
|
heading: Second Guardian Photo (ES)
|
||||||
guardian_photo:
|
guardian_photo:
|
||||||
heading: Guardian Photo (ES)
|
heading: Guardian Photo (ES)
|
||||||
|
index:
|
||||||
|
table_headers:
|
||||||
|
email: Email (ES)
|
||||||
|
name: Name (ES)
|
||||||
|
notes: Notes (ES)
|
||||||
|
phone: Phone (ES)
|
||||||
|
signed_at: Date Signed (ES)
|
||||||
|
tags: Tags (ES)
|
||||||
task_requests:
|
task_requests:
|
||||||
create:
|
create:
|
||||||
success_message: Your task request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds. (ES)
|
success_message: Your task request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds. (ES)
|
||||||
form:
|
form:
|
||||||
info_message: After submitting this task request, you'll be connected via chat with a ME Suite representative. (ES)
|
actions:
|
||||||
|
chat_now: Chat Now (ES)
|
||||||
|
info_message: For best results, please fill out this form prior to being connected with a TaskME assistant. However, if urgent, you can start speaking with a TaskME assistant by pressing the Chat Now button to the right (ES)
|
||||||
index:
|
index:
|
||||||
table_headers:
|
table_headers:
|
||||||
task_request_description: Description (ES)
|
task_request_description: Description (ES)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ require 'oath/constraints/signed_in'
|
|||||||
require 'sidekiq/web'
|
require 'sidekiq/web'
|
||||||
|
|
||||||
Rails.application.routes.draw do
|
Rails.application.routes.draw do
|
||||||
AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/
|
AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/.freeze
|
||||||
|
|
||||||
concern :confirmable do
|
concern :confirmable do
|
||||||
resources :video_release_confirmations, only: [:new, :create, :destroy]
|
resources :video_release_confirmations, only: [:new, :create, :destroy]
|
||||||
@@ -32,9 +32,6 @@ Rails.application.routes.draw do
|
|||||||
resource :masquerade, only: :create
|
resource :masquerade, only: :create
|
||||||
end
|
end
|
||||||
resources :task_requests, only: [:index, :edit, :update, :show]
|
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
|
root to: "accounts#index", as: :signed_in_root
|
||||||
end
|
end
|
||||||
@@ -69,7 +66,6 @@ Rails.application.routes.draw do
|
|||||||
resource :contract_downloads, only: [:create]
|
resource :contract_downloads, only: [:create]
|
||||||
resources :downloads, only: [:index, :destroy]
|
resources :downloads, only: [:index, :destroy]
|
||||||
resource :report_downloads, only: [:create]
|
resource :report_downloads, only: [:create]
|
||||||
resource :casting_submission_downloads, only: [:create]
|
|
||||||
resources :videos, only: [:index, :new, :create, :edit, :update] do
|
resources :videos, only: [:index, :new, :create, :edit, :update] do
|
||||||
collection do
|
collection do
|
||||||
get :landing
|
get :landing
|
||||||
@@ -109,13 +105,7 @@ Rails.application.routes.draw do
|
|||||||
post :cancel
|
post :cancel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :casting_calls, except: :destroy do
|
|
||||||
member do
|
|
||||||
post :cancel
|
|
||||||
end
|
|
||||||
end
|
|
||||||
resources :tasks, only: :index
|
resources :tasks, only: :index
|
||||||
resources :casting_submissions, only: [:index, :show]
|
|
||||||
end
|
end
|
||||||
resource :profile, only: [:show, :update]
|
resource :profile, only: [:show, :update]
|
||||||
resources :videos, only: [] do
|
resources :videos, only: [] do
|
||||||
@@ -144,17 +134,20 @@ Rails.application.routes.draw do
|
|||||||
resources :broadcasts, param: :token, only: [:show, :update] do
|
resources :broadcasts, param: :token, only: [:show, :update] do
|
||||||
resource :zoom_meeting, only: [:show]
|
resource :zoom_meeting, only: [:show]
|
||||||
end
|
end
|
||||||
resources :casting_calls, param: :token, only: [:show]
|
|
||||||
resources :casting_submissions, param: :token, only: [:show, :update]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :location_releases]
|
RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :medical_releases, :misc_releases, :location_releases].freeze
|
||||||
ALL_RELEASES = RELEASES + [:music_releases, :medical_releases, :misc_releases]
|
ALL_RELEASES = RELEASES + [:music_releases]
|
||||||
|
|
||||||
ALL_RELEASES.each do |release|
|
ALL_RELEASES.each do |release|
|
||||||
resources release, only: [], concerns: :taggable
|
resources release, only: [], concerns: :taggable
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Customization for medical releases
|
||||||
|
resources :medical_releases, only: [], concerns: :taggable do
|
||||||
|
resource :approvals, only: [:new, :create]
|
||||||
|
end
|
||||||
|
|
||||||
resources :bulk_taggings, only: [:new, :create]
|
resources :bulk_taggings, only: [:new, :create]
|
||||||
|
|
||||||
namespace :api do
|
namespace :api do
|
||||||
@@ -170,7 +163,7 @@ Rails.application.routes.draw do
|
|||||||
resources :contract_templates, only: [:index]
|
resources :contract_templates, only: [:index]
|
||||||
end
|
end
|
||||||
resources :contract_templates, only: [:show] do
|
resources :contract_templates, only: [:show] do
|
||||||
RELEASES.each do |release|
|
(RELEASES - [:misc_releases, :medical_releases]).each do |release|
|
||||||
resources release, controller: release, only: [:create]
|
resources release, controller: release, only: [:create]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
class AddDurationToBroadcastRecordings < ActiveRecord::DataMigration
|
||||||
|
def up
|
||||||
|
recordings = BroadcastRecording.where(duration: nil)
|
||||||
|
client = MuxRuby::AssetsApi.new
|
||||||
|
|
||||||
|
recordings.each do |recording|
|
||||||
|
begin
|
||||||
|
response = client.get_asset(recording.asset_uid)
|
||||||
|
duration = response.data.duration
|
||||||
|
recording.update(duration: duration)
|
||||||
|
rescue MuxRuby::ApiError => e
|
||||||
|
Rails.logger.error("Failed to update duration for broadcast recording with id #{recording.id}\n" + e.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
sleep(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
class CreateCastingCalls < ActiveRecord::Migration[6.0]
|
|
||||||
def change
|
|
||||||
create_table :casting_calls do |t|
|
|
||||||
t.references :project
|
|
||||||
t.string :title
|
|
||||||
t.string :user_email
|
|
||||||
t.text :description
|
|
||||||
t.text :project_description
|
|
||||||
t.text :interview_instructions
|
|
||||||
t.text :interview_requirements
|
|
||||||
t.text :questions
|
|
||||||
t.datetime :cancelled_at
|
|
||||||
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
class CreateCastingCallInterviews < ActiveRecord::Migration[6.0]
|
|
||||||
def change
|
|
||||||
create_table :casting_call_interviews do |t|
|
|
||||||
t.references :casting_call, foreign_key: true
|
|
||||||
t.string :performer_name
|
|
||||||
t.string :zoom_meeting_url
|
|
||||||
t.datetime :interview_date
|
|
||||||
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
class AddTokenToCastingCalls < ActiveRecord::Migration[6.0]
|
|
||||||
def change
|
|
||||||
add_column :casting_calls, :token, :string
|
|
||||||
add_index :casting_calls, :token, unique: true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
class AddTokenToCastingCallInterviews < ActiveRecord::Migration[6.0]
|
|
||||||
def change
|
|
||||||
add_column :casting_call_interviews, :token, :string
|
|
||||||
add_index :casting_call_interviews, :token, unique: true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
class AddInterviewedAtToCastingCallInterview < ActiveRecord::Migration[6.0]
|
|
||||||
def change
|
|
||||||
add_column :casting_call_interviews, :interviewed_at, :datetime
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user