Compare commits
17 Commits
add-splash
...
implement-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
744480740e | ||
|
|
bc1ff4cf39 | ||
|
|
7d4ff7cdb8 | ||
|
|
e41d7603d0 | ||
|
|
0741f8a230 | ||
|
|
f44eca5328 | ||
|
|
cefa30b331 | ||
|
|
2b95849229 | ||
|
|
4c49a5db03 | ||
|
|
35303cb570 | ||
|
|
1127f09263 | ||
|
|
19b1e75384 | ||
|
|
93a4ce462d | ||
|
|
0e16791d8b | ||
|
|
7cdb814d6d | ||
|
|
2dea0f29b9 | ||
|
|
d6a3542308 |
13
app/assets/javascripts/update_required_status.js
Normal file
13
app/assets/javascripts/update_required_status.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
$(document).on("turbolinks:load", function() {
|
||||||
|
$("[data-behavior=update-required-status]").click(function(e) {
|
||||||
|
const required = !!($(this)[0] && $(this)[0].checked);
|
||||||
|
|
||||||
|
|
||||||
|
$("[data-required-tag=guardian]").each(function(index, element) {
|
||||||
|
const labelForField = element.previousSibling;
|
||||||
|
|
||||||
|
element.required = required;
|
||||||
|
labelForField.classList.add("required");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -17,7 +17,9 @@ class Api::ApiController < ActionController::Base
|
|||||||
def return_error(exception)
|
def return_error(exception)
|
||||||
raise exception if Rails.env.test?
|
raise exception if Rails.env.test?
|
||||||
|
|
||||||
logger.error "==Handled======="
|
Raven.capture_exception(exception)
|
||||||
|
|
||||||
|
logger.error "==Handled======"
|
||||||
logger.error exception.message
|
logger.error exception.message
|
||||||
logger.error exception.backtrace.join("\n")
|
logger.error exception.backtrace.join("\n")
|
||||||
logger.error "==Handled======="
|
logger.error "==Handled======="
|
||||||
|
|||||||
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ class Api::UserTokenController < Knock::AuthTokenController
|
|||||||
|
|
||||||
# Catch exception and return JSON-formatted error
|
# Catch exception and return JSON-formatted error
|
||||||
def return_error(exception)
|
def return_error(exception)
|
||||||
|
Raven.capture_exception(exception)
|
||||||
|
|
||||||
logger.error "==Handled======="
|
logger.error "==Handled======="
|
||||||
logger.error exception.message
|
logger.error exception.message
|
||||||
logger.error exception.backtrace.join("\n")
|
logger.error exception.backtrace.join("\n")
|
||||||
|
|||||||
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
|
||||||
@@ -5,6 +5,7 @@ class BroadcastsController < ApplicationController
|
|||||||
before_action :build_broadcast, only: [:new, :create]
|
before_action :build_broadcast, only: [:new, :create]
|
||||||
before_action :set_broadcast, only: [:show, :destroy, :update]
|
before_action :set_broadcast, only: [:show, :destroy, :update]
|
||||||
before_action :set_multi_view_broadcasts, only: [:show]
|
before_action :set_multi_view_broadcasts, only: [:show]
|
||||||
|
before_action :show_splash_screen, only: :index
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
|
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
|
||||||
@@ -49,6 +50,10 @@ class BroadcastsController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def show_splash_screen
|
||||||
|
render :splash if broadcasts.count.zero?
|
||||||
|
end
|
||||||
|
|
||||||
def broadcast_params
|
def broadcast_params
|
||||||
params.require(:broadcast).permit(:name, files: [])
|
params.require(:broadcast).permit(:name, files: [])
|
||||||
end
|
end
|
||||||
|
|||||||
33
app/controllers/contract_templates/duplicates_controller.rb
Normal file
33
app/controllers/contract_templates/duplicates_controller.rb
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class ContractTemplates::DuplicatesController < ApplicationController
|
||||||
|
before_action :set_contract_template
|
||||||
|
|
||||||
|
def create
|
||||||
|
authorize(ContractTemplate)
|
||||||
|
new_contract_template = @contract_template.dup
|
||||||
|
new_contract_template.name = I18n.t('contract_templates.duplicate.name_prefix', template_name: @contract_template.name)
|
||||||
|
|
||||||
|
# Duplicate rich text fields
|
||||||
|
|
||||||
|
new_contract_template.body = @contract_template.body
|
||||||
|
new_contract_template.guardian_clause = @contract_template.guardian_clause
|
||||||
|
new_contract_template.signature_legal_text = @contract_template.signature_legal_text
|
||||||
|
|
||||||
|
if new_contract_template.save
|
||||||
|
redirect_to [:edit, new_contract_template]
|
||||||
|
else
|
||||||
|
redirect_to [@contract_template.project, :contract_templates], alert: t('.error')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def contract_templates
|
||||||
|
policy_scope(ContractTemplate)
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_contract_template
|
||||||
|
@contract_template = contract_templates.find(params[:contract_template_id])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -5,8 +5,10 @@ class ContractTemplatesController < ApplicationController
|
|||||||
|
|
||||||
layout 'project'
|
layout 'project'
|
||||||
|
|
||||||
before_action :set_project, except: [:destroy]
|
before_action :set_project, except: [:destroy, :edit, :update]
|
||||||
before_action :set_contract_template, only: [:destroy]
|
before_action :set_contract_template, only: [:destroy, :edit, :update]
|
||||||
|
before_action :set_project_from_contract_template, only: [:edit, :update]
|
||||||
|
before_action :show_splash_screen, only: :index
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page])
|
@contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page])
|
||||||
@@ -31,6 +33,20 @@ class ContractTemplatesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@release_type = @contract_template.release_type
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@contract_template.attributes = contract_template_params
|
||||||
|
|
||||||
|
if @contract_template.save
|
||||||
|
redirect_to [@project, :contract_templates], notice: t('.notice')
|
||||||
|
else
|
||||||
|
render :edit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@contract_template.archive
|
@contract_template.archive
|
||||||
redirect_to [@contract_template.project, :contract_templates], alert: t('.archived_notice')
|
redirect_to [@contract_template.project, :contract_templates], alert: t('.archived_notice')
|
||||||
@@ -38,6 +54,14 @@ class ContractTemplatesController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def set_project_from_contract_template
|
||||||
|
@project = @contract_template.project
|
||||||
|
end
|
||||||
|
|
||||||
|
def show_splash_screen
|
||||||
|
render :splash if contract_templates.non_archived.count.zero?
|
||||||
|
end
|
||||||
|
|
||||||
def set_contract_template
|
def set_contract_template
|
||||||
@contract_template = authorize contract_templates.find(params[:id])
|
@contract_template = authorize contract_templates.find(params[:id])
|
||||||
end
|
end
|
||||||
@@ -57,18 +81,19 @@ 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,
|
||||||
:question_5_text, :question_6_text,
|
:question_5_text, :question_6_text,
|
||||||
:question_7_text, :question_8_text,
|
:question_7_text, :question_8_text,
|
||||||
:question_9_text, :question_10_text,
|
:question_9_text, :question_10_text,
|
||||||
:question_11_text, :question_12_text,
|
:question_11_text, :question_12_text,
|
||||||
:question_13_text, :question_14_text,
|
:question_13_text, :question_14_text,
|
||||||
:question_15_text)
|
:question_15_text)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ class Public::MiscReleasesController < Public::BaseController
|
|||||||
.permit(
|
.permit(
|
||||||
person_params,
|
person_params,
|
||||||
guardian_params,
|
guardian_params,
|
||||||
|
questionnaire_params,
|
||||||
:signature_base64,
|
:signature_base64,
|
||||||
:locale,
|
:locale,
|
||||||
:contract_template,
|
:contract_template,
|
||||||
@@ -85,6 +86,26 @@ class Public::MiscReleasesController < Public::BaseController
|
|||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def questionnaire_params
|
||||||
|
[
|
||||||
|
:question_1_answer,
|
||||||
|
:question_2_answer,
|
||||||
|
:question_3_answer,
|
||||||
|
:question_4_answer,
|
||||||
|
:question_5_answer,
|
||||||
|
:question_6_answer,
|
||||||
|
:question_7_answer,
|
||||||
|
:question_8_answer,
|
||||||
|
:question_9_answer,
|
||||||
|
:question_10_answer,
|
||||||
|
:question_11_answer,
|
||||||
|
:question_12_answer,
|
||||||
|
:question_13_answer,
|
||||||
|
:question_14_answer,
|
||||||
|
:question_15_answer,
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
def misc_release_params_with_locale
|
def misc_release_params_with_locale
|
||||||
misc_release_params.merge(locale: I18n.locale)
|
misc_release_params.merge(locale: I18n.locale)
|
||||||
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")
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ class VideosController < ApplicationController
|
|||||||
|
|
||||||
before_action :set_project, only: [:index, :new, :create, :landing]
|
before_action :set_project, only: [:index, :new, :create, :landing]
|
||||||
before_action :set_video, only: [:edit, :update]
|
before_action :set_video, only: [:edit, :update]
|
||||||
|
before_action :show_splash_screen, only: :index
|
||||||
|
|
||||||
def landing
|
def landing
|
||||||
authorize Video, :new?
|
authorize Video, :new?
|
||||||
@@ -60,6 +61,10 @@ class VideosController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def show_splash_screen
|
||||||
|
render :splash if videos.count.zero?
|
||||||
|
end
|
||||||
|
|
||||||
def set_project
|
def set_project
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
@project = policy_scope(Project).find(params[:project_id])
|
||||||
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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class Account < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def taskme_enabled?
|
def taskme_enabled?
|
||||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme"
|
ENV["TASKME_ENABLED"] && (plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme")
|
||||||
end
|
end
|
||||||
|
|
||||||
def plan_name
|
def plan_name
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
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
|
||||||
@@ -5,6 +5,8 @@ class ContractTemplate < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include PgSearch
|
include PgSearch
|
||||||
|
|
||||||
|
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||||
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
belongs_to :parent, class_name: 'ContractTemplate', optional: true
|
belongs_to :parent, class_name: 'ContractTemplate', optional: true
|
||||||
has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id'
|
has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id'
|
||||||
@@ -19,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
|
||||||
@@ -40,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
|
||||||
@@ -59,4 +64,18 @@ class ContractTemplate < ApplicationRecord
|
|||||||
def archive
|
def archive
|
||||||
update(archived_at: Time.zone.now)
|
update(archived_at: Time.zone.now)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def has_questionnaire?
|
||||||
|
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
|
||||||
|
end
|
||||||
|
|
||||||
|
def editable?
|
||||||
|
releases.size.zero?
|
||||||
|
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,8 +10,15 @@ class MaterialRelease < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
|
include CsvExportable
|
||||||
composed_of :person_address,
|
|
||||||
|
class << self
|
||||||
|
def custom_csv_exportable_headers
|
||||||
|
%i[name]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
composed_of :person_address,
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
mapping: [
|
mapping: [
|
||||||
%w(person_address_street1 street1),
|
%w(person_address_street1 street1),
|
||||||
@@ -30,15 +37,15 @@ class MaterialRelease < ApplicationRecord
|
|||||||
validates :signature, attached: true
|
validates :signature, attached: true
|
||||||
end
|
end
|
||||||
|
|
||||||
searchable_on %i[
|
searchable_on %i[
|
||||||
name
|
name
|
||||||
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
||||||
]
|
]
|
||||||
|
|
||||||
def contact_person
|
def contact_person
|
||||||
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
||||||
end
|
end
|
||||||
|
|
||||||
def minor?
|
def minor?
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,18 +11,47 @@ 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
|
||||||
|
|
||||||
composed_of :person_address,
|
composed_of :person_address,
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
mapping: [
|
mapping: [
|
||||||
%w(person_address_street1 street1),
|
%w[person_address_street1 street1],
|
||||||
%w(person_address_street2 street2),
|
%w[person_address_street2 street2],
|
||||||
%w(person_address_city city),
|
%w[person_address_city city],
|
||||||
%w(person_address_state state),
|
%w[person_address_state state],
|
||||||
%w(person_address_zip zip),
|
%w[person_address_zip zip],
|
||||||
%w(person_address_country country)
|
%w[person_address_country country]
|
||||||
|
]
|
||||||
|
|
||||||
|
composed_of :guardian_address,
|
||||||
|
class_name: 'Address',
|
||||||
|
mapping: [
|
||||||
|
%w[guardian_address_street1 street1],
|
||||||
|
%w[guardian_address_street2 street2],
|
||||||
|
%w[guardian_address_city city],
|
||||||
|
%w[guardian_address_state state],
|
||||||
|
%w[guardian_address_zip zip],
|
||||||
|
%w[guardian_address_country country]
|
||||||
|
]
|
||||||
|
|
||||||
|
composed_of :guardian_2_address,
|
||||||
|
class_name: 'Address',
|
||||||
|
mapping: [
|
||||||
|
%w[guardian_2_address_street1 street1],
|
||||||
|
%w[guardian_2_address_street2 street2],
|
||||||
|
%w[guardian_2_address_city city],
|
||||||
|
%w[guardian_2_address_state state],
|
||||||
|
%w[guardian_2_address_zip zip],
|
||||||
|
%w[guardian_2_address_country country]
|
||||||
]
|
]
|
||||||
|
|
||||||
def self.face_photo_acceptable_content_types
|
def self.face_photo_acceptable_content_types
|
||||||
@@ -32,6 +61,7 @@ class MedicalRelease < ApplicationRecord
|
|||||||
# These validations apply to all releases
|
# These validations apply to all releases
|
||||||
validates :person_first_name, :person_last_name, presence: true
|
validates :person_first_name, :person_last_name, presence: true
|
||||||
validates :person_email, email: true, allow_blank: true
|
validates :person_email, email: true, allow_blank: true
|
||||||
|
validate :valid_answers
|
||||||
|
|
||||||
acts_as_taggable_on :internal_tags, :tags
|
acts_as_taggable_on :internal_tags, :tags
|
||||||
|
|
||||||
@@ -76,4 +106,27 @@ class MedicalRelease < ApplicationRecord
|
|||||||
def contract_file_name
|
def contract_file_name
|
||||||
"#{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
|
||||||
|
|
||||||
|
def valid_answers
|
||||||
|
(1..ContractTemplate::NUMBER_OF_CUSTOM_FIELDS).each do |index|
|
||||||
|
if contract_template && contract_template["question_#{index}_text"].present? &&
|
||||||
|
public_send("question_#{index}_answer").blank?
|
||||||
|
errors.add("question_#{index}", I18n.t('medical_releases.custom_validation_errors.question_answer_is_required'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,6 +9,15 @@ 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
|
||||||
|
|
||||||
composed_of :person_address,
|
composed_of :person_address,
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
|
|||||||
@@ -7,7 +7,14 @@ 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
|
||||||
has_many :publishers, dependent: :destroy
|
has_many :publishers, 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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -21,6 +23,18 @@ class ContractTemplatePolicy < ApplicationPolicy
|
|||||||
create?
|
create?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def edit?
|
||||||
|
record.editable? && create?
|
||||||
|
end
|
||||||
|
|
||||||
|
def update?
|
||||||
|
edit?
|
||||||
|
end
|
||||||
|
|
||||||
|
def duplicate?
|
||||||
|
create?
|
||||||
|
end
|
||||||
|
|
||||||
def import?
|
def import?
|
||||||
if user.account_manager?
|
if user.account_manager?
|
||||||
record.project.account = user.account
|
record.project.account = user.account
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -11,12 +11,14 @@
|
|||||||
<hr class="divider-light mx-n4">
|
<hr class="divider-light mx-n4">
|
||||||
<nav>
|
<nav>
|
||||||
<ul class="nav nav-pills nav-pills-dark flex-column">
|
<ul class="nav nav-pills nav-pills-dark flex-column">
|
||||||
<li class="nav-item">
|
<% if Current.account.taskme_enabled? %>
|
||||||
<%= link_to [project, :task_requests], class: class_string("nav-link", "active" => controller_name == "task_requests") do %>
|
<li class="nav-item">
|
||||||
<%= lock_icon_for(Current.account, :taskme) %>
|
<%= link_to [project, :task_requests], class: class_string("nav-link", "active" => controller_name == "task_requests") do %>
|
||||||
<%= product_wordmark :task_me, class: class_string("d-inline-block", "disabled" => !Current.account.taskme_enabled?) %>
|
<%= lock_icon_for(Current.account, :taskme) %>
|
||||||
<% end %>
|
<%= product_wordmark :task_me, class: class_string("d-inline-block", "disabled" => !Current.account.taskme_enabled?) %>
|
||||||
</li>
|
<% end %>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<%= link_to [project, :contract_templates], class: class_string("nav-link", "active" => %w(contract_templates release_template_imports).include?(controller_name)) do %>
|
<%= link_to [project, :contract_templates], class: class_string("nav-link", "active" => %w(contract_templates release_template_imports).include?(controller_name)) do %>
|
||||||
<%= lock_icon_for Current.account, :releaseme %>
|
<%= lock_icon_for Current.account, :releaseme %>
|
||||||
|
|||||||
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>
|
||||||
51
app/views/broadcasts/splash.html.erb
Normal file
51
app/views/broadcasts/splash.html.erb
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<div class="d-flex flex-row">
|
||||||
|
<div class="d-flex flex-column">
|
||||||
|
<%= product_wordmark :direct_me, prefix: t('.headings.welcome'), class: "h2" %>
|
||||||
|
<p class="text-muted"><%= t '.headings.subtitle' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
|
||||||
|
<% if policy(Broadcast).new? %>
|
||||||
|
<%= link_to t(".actions.create_stream"), [:new, @project, :broadcast], class: "btn btn-success border align-self-center h-50 pb-2" %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="pt-2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="card-body p-0">
|
||||||
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
|
<div class="embed-responsive-item">
|
||||||
|
<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 class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h3><%= t '.headings.how_it_works' %></h3>
|
||||||
|
<ol>
|
||||||
|
<li><%= t '.list_items.create_stream' %></li>
|
||||||
|
<li><%= t '.list_items.share_stream' %></li>
|
||||||
|
<li><%= t '.list_items.launch_video_conference' %></li>
|
||||||
|
<li><%= t '.list_items.share_files' %></li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h3><%= t '.headings.benefits' %></h3>
|
||||||
|
<ul class="fa-ul ml-5">
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.stream_from_mobile_app'))) %>
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.direct_shoots_anywhere'))) %>
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.share_live_stream'))) %>
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.stream_multiple_cameras'))) %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -15,10 +15,16 @@
|
|||||||
<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">
|
||||||
|
<% if policy(contract_template).edit? %>
|
||||||
|
<%= link_to fa_icon("pencil fw", text: t(".actions.edit")), [:edit, contract_template], class: "dropdown-item" %>
|
||||||
|
<% end %>
|
||||||
|
<% if policy(ContractTemplate).duplicate? %>
|
||||||
|
<%= link_to fa_icon("clone fw", text: t(".actions.duplicate")), contract_template_duplicates_path(contract_template), method: :post, class: "dropdown-item" %>
|
||||||
|
<% end %>
|
||||||
<% if policy(QrCode).show? %>
|
<% if policy(QrCode).show? %>
|
||||||
<%= link_to fa_icon("qrcode", text: t(".actions.qr_code")), [contract_template, :qr_codes], class: "dropdown-item", target: :_blank %>
|
<%= link_to fa_icon("qrcode", text: t(".actions.qr_code")), [contract_template, :qr_codes], class: "dropdown-item", target: :_blank %>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -27,7 +33,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>
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
<%= bootstrap_form_with model: [project, contract_template], local: true do |form| %>
|
<%= bootstrap_form_with model: model, local: true do |form| %>
|
||||||
<%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
|
<%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= 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) } }, class: "form-control custom-select" %>
|
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc) } }, class: "form-control custom-select" %>
|
||||||
|
</div>
|
||||||
|
<div class="form-row mb-3">
|
||||||
|
<%= form.radio_button :accessibility, :public_template, label: "Public", wrapper_class: "mr-3" %>
|
||||||
|
<%= form.radio_button :accessibility, :private_template, label: "Private" %>
|
||||||
</div>
|
</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" %>
|
||||||
@@ -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 %>
|
||||||
|
|||||||
6
app/views/contract_templates/edit.html.erb
Normal file
6
app/views/contract_templates/edit.html.erb
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<div class="card shadow-sm">
|
||||||
|
<%= card_header text: t(".heading"), close_action_path: [@project, :contract_templates] %>
|
||||||
|
<div class="card-body">
|
||||||
|
<%= render "form", model: @contract_template, project: @project, contract_template: @contract_template %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<div class="card shadow-sm">
|
<div class="card shadow-sm">
|
||||||
<%= card_header text: t(".heading"), close_action_path: [@project, :contract_templates] %>
|
<%= card_header text: t(".heading"), close_action_path: [@project, :contract_templates] %>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<%= render "form", project: @project, contract_template: @contract_template %>
|
<%= render "form", model: [@project, @contract_template], project: @project, contract_template: @contract_template %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
50
app/views/contract_templates/splash.html.erb
Normal file
50
app/views/contract_templates/splash.html.erb
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
<div class="d-flex flex-row">
|
||||||
|
<div class="d-flex flex-column">
|
||||||
|
<%= product_wordmark :release_me, prefix: t('.headings.welcome'), class: "h2" %>
|
||||||
|
<p class="text-muted"><%= t '.headings.subtitle' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
|
||||||
|
<% if policy(ContractTemplate).new? %>
|
||||||
|
<%= link_to t(".actions.create_template"), [:new, @project, :contract_template], class: "btn btn-success border align-self-center h-50 pb-2" %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="pt-2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="card-body p-0">
|
||||||
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
|
<div class="embed-responsive-item">
|
||||||
|
<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 class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h3><%= t '.headings.how_it_works' %></h3>
|
||||||
|
<ol>
|
||||||
|
<li><%= t '.list_items.create_releases' %></li>
|
||||||
|
<li><%= t '.list_items.download_mobile_app' %></li>
|
||||||
|
<li><%= t '.list_items.print_QR_code' %></li>
|
||||||
|
<li><%= t '.list_items.releases_automatically_organized' %></li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h3><%= t '.headings.benefits' %></h3>
|
||||||
|
<ul class="fa-ul ml-5">
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.all_releases_available'))) %>
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.manage_large_audience'))) %>
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.add_tags_and_notes'))) %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
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>
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<p class="heading"><strong><u><%= t ".heading" %></u></strong></p>
|
<p class="heading"><strong><u><%= t ".heading.#{releasable.model_name.param_key}" %></u></strong></p>
|
||||||
|
|
||||||
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
<% (1..releasable.class::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||||
<% if contract_template.public_send("question_#{n}_text").present? %>
|
<% if contract_template.public_send("question_#{n}_text").present? %>
|
||||||
<p><strong><%= contract_template.public_send("question_#{n}_text") %></strong></p>
|
<p><strong><%= contract_template.public_send("question_#{n}_text") %></strong></p>
|
||||||
<p><%= releasable.public_send("question_#{n}_answer") %></p>
|
<p><%= releasable.public_send("question_#{n}_answer") %></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -16,15 +16,22 @@
|
|||||||
<%= contract_template.guardian_clause %>
|
<%= contract_template.guardian_clause %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% if releasable.model_name == "MedicalRelease" %>
|
<% if releasable.model_name.in? %w(MedicalRelease MiscRelease) %>
|
||||||
<div class="page">
|
<div class="page">
|
||||||
<%= render "contracts/medical_questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
|
<%= render "contracts/questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<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>
|
||||||
@@ -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">
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<% unless @contract_template.guardian_clause.blank? %>
|
<% unless @contract_template.guardian_clause.blank? %>
|
||||||
<%= form.form_group :minor do %>
|
<%= form.form_group :minor do %>
|
||||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||||
@@ -72,12 +72,12 @@
|
|||||||
<div class="<%= class_string("collapse" => !@appearance_release.minor?) %>" data-ujs-target="guardian-fields">
|
<div class="<%= class_string("collapse" => !@appearance_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||||
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %>
|
<%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||||
<%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %>
|
<%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||||
<%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
|
<%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||||
<%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
|
<%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||||
</div>
|
</div>
|
||||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor? %>
|
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor?, data: { required_tag: "guardian" } %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
@@ -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">
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<% unless @contract_template.guardian_clause.blank? %>
|
<% unless @contract_template.guardian_clause.blank? %>
|
||||||
<%= form.form_group :minor do %>
|
<%= form.form_group :minor do %>
|
||||||
<%= form.check_box :minor, label: t("helpers.label.medical_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
<%= form.check_box :minor, label: t("helpers.label.medical_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||||
<% if @contract_template.public_send("question_#{n}_text").present? %>
|
<% if @contract_template.public_send("question_#{n}_text").present? %>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
<%= form.text_area "question_#{n}_answer", required: true, wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -59,14 +59,12 @@
|
|||||||
<div class="<%= class_string("collapse" => !@medical_release.minor?) %>" data-ujs-target="guardian-fields">
|
<div class="<%= class_string("collapse" => !@medical_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||||
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %>
|
<%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||||
<%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %>
|
<%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||||
<%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6" %>
|
<%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||||
|
<%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-row">
|
<%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor?, data: { required_tag: "guardian" } %>
|
||||||
<%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6" %>
|
|
||||||
</div>
|
|
||||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor? %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
@@ -147,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">
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
<% unless @contract_template.guardian_clause.blank? %>
|
<% unless @contract_template.guardian_clause.blank? %>
|
||||||
<%= form.form_group :minor do %>
|
<%= form.form_group :minor do %>
|
||||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||||
@@ -20,15 +20,26 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% if @contract_template.has_questionnaire? %>
|
||||||
|
<%= card_field_set_tag t(".questionnaire.heading") do %>
|
||||||
|
<% (1..MiscRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||||
|
<% if @contract_template.public_send("question_#{n}_text").present? %>
|
||||||
|
<div class="form-row">
|
||||||
|
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<hr>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".personal_info.heading") do %>
|
<%= card_field_set_tag t(".personal_info.heading") do %>
|
||||||
<div class="alert alert-warning font-weight-bold"><%= t ".personal_info.instructions" %></div>
|
<div class="alert alert-warning font-weight-bold"><%= t ".personal_info.instructions" %></div>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= 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 %>
|
||||||
@@ -43,14 +54,12 @@
|
|||||||
<div class="<%= class_string("collapse" => !@misc_release.minor?) %>" data-ujs-target="guardian-fields">
|
<div class="<%= class_string("collapse" => !@misc_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||||
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %>
|
<%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||||
<%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %>
|
<%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||||
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
|
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||||
|
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-row">
|
<%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
|
||||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
|
|
||||||
</div>
|
|
||||||
<%= render "shared/address_fields", form: form, subject: "guardian" %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
@@ -86,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">
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<% unless @contract_template.guardian_clause.blank? %>
|
<% unless @contract_template.guardian_clause.blank? %>
|
||||||
<%= form.form_group :minor do %>
|
<%= form.form_group :minor do %>
|
||||||
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
<%= card_field_set_tag t(".guardian_clause.heading") do %>
|
||||||
@@ -46,12 +46,12 @@
|
|||||||
<div class="<%= class_string("collapse" => !@talent_release.minor?) %>" data-ujs-target="guardian-fields">
|
<div class="<%= class_string("collapse" => !@talent_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||||
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
<%= card_field_set_tag t(".guardian_info.heading") do %>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %>
|
<%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||||
<%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %>
|
<%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
|
||||||
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
|
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
|
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
|
||||||
</div>
|
</div>
|
||||||
<%= render "shared/address_fields", form: form, subject: "guardian" %>
|
<%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
@@ -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,14 +1,15 @@
|
|||||||
<% field_name_prefix = subject.present? ? "#{subject}_" : "" %>
|
<% field_name_prefix = subject.present? ? "#{subject}_" : "" %>
|
||||||
<% required = required || false %>
|
<% required = required || false %>
|
||||||
|
<% data = data || nil %>
|
||||||
|
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6" %>
|
<%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6", data: data %>
|
||||||
<%= form.text_field "#{field_name_prefix}address_street2", wrapper_class: "col-sm-6" %>
|
<%= form.text_field "#{field_name_prefix}address_street2", wrapper_class: "col-sm-6" %>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-row">
|
<div class="form-row">
|
||||||
<%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6" %>
|
<%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6", data: data %>
|
||||||
<%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3" %>
|
<%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3", data: data %>
|
||||||
<%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3" %>
|
<%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3", data: data %>
|
||||||
</div>
|
</div>
|
||||||
<%= form.form_group "#{field_name_prefix}address_country" do %>
|
<%= form.form_group "#{field_name_prefix}address_country" do %>
|
||||||
<%= form.label "#{field_name_prefix}address_country" %>
|
<%= form.label "#{field_name_prefix}address_country" %>
|
||||||
|
|||||||
@@ -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 %>
|
||||||
@@ -13,3 +13,4 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<% 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" %>
|
||||||
|
|||||||
51
app/views/videos/splash.html.erb
Normal file
51
app/views/videos/splash.html.erb
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<div class="d-flex flex-row">
|
||||||
|
<div class="d-flex flex-column">
|
||||||
|
<%= product_wordmark :deliver_me, prefix: t('.headings.welcome'), class: "h2" %>
|
||||||
|
<p class="text-muted"><%= t '.headings.subtitle' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
|
||||||
|
<% if policy(Video).new? %>
|
||||||
|
<%= link_to t(".actions.upload_video"), [:landing, @project, :videos], class: "btn btn-success border align-self-center h-50 pb-2" %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<div class="pt-2">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="card-body p-0">
|
||||||
|
<div class="embed-responsive embed-responsive-16by9">
|
||||||
|
<div class="embed-responsive-item">
|
||||||
|
<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 class="col">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h3><%= t '.headings.how_it_works' %></h3>
|
||||||
|
<ol>
|
||||||
|
<li><%= t '.list_items.import_video' %></li>
|
||||||
|
<li><%= t '.list_items.import_EDLs' %></li>
|
||||||
|
<li><%= t '.list_items.AI_generates_documents' %></li>
|
||||||
|
<li><%= t '.list_items.download_documents' %></li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h3><%= t '.headings.benefits' %></h3>
|
||||||
|
<ul class="fa-ul ml-5">
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_labor_cost'))) %>
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.more_accurate'))) %>
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.simplifies_cue_sheets'))) %>
|
||||||
|
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.production_elements_logs'))) %>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -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
|
||||||
@@ -151,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
|
||||||
@@ -171,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
|
||||||
@@ -207,6 +217,24 @@ en:
|
|||||||
new:
|
new:
|
||||||
heading:
|
heading:
|
||||||
Create Live Stream
|
Create Live Stream
|
||||||
|
splash:
|
||||||
|
actions:
|
||||||
|
book_demo: Schedule a Demo
|
||||||
|
create_stream: Create New Live Stream
|
||||||
|
headings:
|
||||||
|
benefits: Benefits
|
||||||
|
how_it_works: How It Works
|
||||||
|
subtitle: Remote directing and video village solution
|
||||||
|
welcome: Welcome to
|
||||||
|
list_items:
|
||||||
|
create_stream: Create a live stream
|
||||||
|
direct_shoots_anywhere: Direct shoots anywhere around the world
|
||||||
|
launch_video_conference: Launch Video Conference using plugin
|
||||||
|
share_files: Share files via the ME Suite mobile app
|
||||||
|
share_live_stream: Share live stream with clients all over the the world
|
||||||
|
share_stream: Share live stream link with clients
|
||||||
|
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
||||||
|
stream_multiple_cameras: Stream multiple cameras at one time
|
||||||
bulk_taggings:
|
bulk_taggings:
|
||||||
new_bulk_tag_modal:
|
new_bulk_tag_modal:
|
||||||
submit: Add
|
submit: Add
|
||||||
@@ -222,6 +250,8 @@ en:
|
|||||||
contract_template:
|
contract_template:
|
||||||
actions:
|
actions:
|
||||||
copy_url: Copy Release URL
|
copy_url: Copy Release URL
|
||||||
|
duplicate: Duplicate
|
||||||
|
edit: Edit
|
||||||
manage: Manage
|
manage: Manage
|
||||||
qr_code: QR Code
|
qr_code: QR Code
|
||||||
sign: Sign
|
sign: Sign
|
||||||
@@ -231,9 +261,16 @@ en:
|
|||||||
destroy:
|
destroy:
|
||||||
archived_failure: Failed to archive the release template
|
archived_failure: Failed to archive the release template
|
||||||
archived_notice: The release template has been archived
|
archived_notice: The release template has been archived
|
||||||
|
duplicate:
|
||||||
|
name_prefix: Copy of %{template_name}
|
||||||
|
duplicates:
|
||||||
|
create:
|
||||||
|
error: Failed to duplicate release template
|
||||||
|
edit:
|
||||||
|
heading: Edit Contract Template
|
||||||
form:
|
form:
|
||||||
custom_fields:
|
custom_fields:
|
||||||
heading: Medical Questionnaire
|
heading: Questionnaire
|
||||||
instructions: Please list the questions you wish the signer to answer. Any unused question fields will be hidden.
|
instructions: Please list the questions you wish the signer to answer. Any unused question fields will be hidden.
|
||||||
exploitable_rights:
|
exploitable_rights:
|
||||||
heading: Exploitable Rights
|
heading: Exploitable Rights
|
||||||
@@ -252,9 +289,34 @@ en:
|
|||||||
signed_release_count: No. Signed Releases
|
signed_release_count: No. Signed Releases
|
||||||
new:
|
new:
|
||||||
heading: New Release Template
|
heading: New Release Template
|
||||||
|
splash:
|
||||||
|
actions:
|
||||||
|
book_demo: Schedule a Demo
|
||||||
|
create_template: Create New Release Template
|
||||||
|
headings:
|
||||||
|
benefits: Benefits
|
||||||
|
how_it_works: How It Works
|
||||||
|
subtitle: The easiest way to create and manage releases.
|
||||||
|
welcome: Welcome to
|
||||||
|
list_items:
|
||||||
|
add_tags_and_notes: Add tags and notes to releases for added organization and searchability
|
||||||
|
all_releases_available: All release types available including Covid Medical, Appearance, Location and more
|
||||||
|
create_releases: Create releases for your video shoot
|
||||||
|
download_mobile_app: Download the ME Suite mobile app
|
||||||
|
manage_large_audience: Easily manage large audiences with the crowd control feature
|
||||||
|
print_QR_code: Print out release QR codes
|
||||||
|
releases_automatically_organized: Releases are automatically organized as they’re submitted
|
||||||
|
update:
|
||||||
|
notice: The release template has been updated
|
||||||
contracts:
|
contracts:
|
||||||
medical_questionnaire:
|
for_office_use_only:
|
||||||
heading: Medical Questionnaire
|
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
|
||||||
@@ -264,6 +326,10 @@ en:
|
|||||||
minor_photos_heading:
|
minor_photos_heading:
|
||||||
one: Minor photo
|
one: Minor photo
|
||||||
other: Minor photos
|
other: Minor photos
|
||||||
|
questionnaire:
|
||||||
|
heading:
|
||||||
|
medical_release: Medical Questionnaire
|
||||||
|
misc_release: Questionnaire
|
||||||
signature_page:
|
signature_page:
|
||||||
heading: Signature Page
|
heading: Signature Page
|
||||||
instructions: "By signing this signature page, as of the date listed below, I hereby agree, acknowledge and accept the terms and conditions listed in this %{releasable_name}."
|
instructions: "By signing this signature page, as of the date listed below, I hereby agree, acknowledge and accept the terms and conditions listed in this %{releasable_name}."
|
||||||
@@ -327,6 +393,7 @@ en:
|
|||||||
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:
|
||||||
@@ -451,6 +518,30 @@ 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
|
||||||
|
misc_release:
|
||||||
|
guardian_address_city: Guardian city
|
||||||
|
guardian_address_country: Guardian country
|
||||||
|
guardian_address_state: Guardian state
|
||||||
|
guardian_address_street1: Guardian address
|
||||||
|
guardian_address_street2: Guardian address (Line 2)
|
||||||
|
guardian_address_zip: Guardian zip code
|
||||||
|
guardian_email: Guardian email
|
||||||
|
guardian_first_name: Guardian first name
|
||||||
|
guardian_last_name: Guardian last name
|
||||||
|
guardian_phone: Guardian phone
|
||||||
|
minor: Is the person a minor?
|
||||||
|
person_address_city: City
|
||||||
|
person_address_country: Country
|
||||||
|
person_address_state: State
|
||||||
|
person_address_street1: Address
|
||||||
|
person_address_street2: Address (Line 2)
|
||||||
|
person_address_zip: Zip code
|
||||||
|
person_date_of_birth: Date of birth
|
||||||
|
person_email: Email address
|
||||||
|
person_first_name: First name
|
||||||
|
person_last_name: Last name
|
||||||
|
person_name: Name
|
||||||
|
person_phone: Phone number
|
||||||
music_release:
|
music_release:
|
||||||
person_address: Address
|
person_address: Address
|
||||||
person_address_city: City
|
person_address_city: City
|
||||||
@@ -609,6 +700,7 @@ en:
|
|||||||
update: Save Changes
|
update: Save Changes
|
||||||
contract_template:
|
contract_template:
|
||||||
create: Create Release Template
|
create: Create Release Template
|
||||||
|
update: Save Changes
|
||||||
directory:
|
directory:
|
||||||
create: Create Folder
|
create: Create Folder
|
||||||
new_file: Upload Files
|
new_file: Upload Files
|
||||||
@@ -665,6 +757,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
|
||||||
@@ -699,6 +792,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
|
||||||
@@ -711,6 +805,8 @@ en:
|
|||||||
update:
|
update:
|
||||||
notice: The material release has been updated
|
notice: The material release has been updated
|
||||||
medical_releases:
|
medical_releases:
|
||||||
|
custom_validation_errors:
|
||||||
|
question_answer_is_required: answer is required
|
||||||
destroy:
|
destroy:
|
||||||
alert: The medical release has been deleted
|
alert: The medical release has been deleted
|
||||||
index:
|
index:
|
||||||
@@ -718,12 +814,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
|
||||||
@@ -732,6 +835,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
|
||||||
@@ -766,6 +871,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
|
||||||
@@ -1024,6 +1130,8 @@ en:
|
|||||||
instructions: Now, enter your personal information.
|
instructions: Now, enter your personal information.
|
||||||
photo:
|
photo:
|
||||||
heading: Photos
|
heading: Photos
|
||||||
|
questionnaire:
|
||||||
|
heading: Questionnaire
|
||||||
signature:
|
signature:
|
||||||
heading: Signature
|
heading: Signature
|
||||||
talent_releases:
|
talent_releases:
|
||||||
@@ -1160,7 +1268,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:
|
||||||
@@ -1290,6 +1401,24 @@ en:
|
|||||||
new:
|
new:
|
||||||
heading: Upload Video
|
heading: Upload Video
|
||||||
subheading: 2 of 2 Files
|
subheading: 2 of 2 Files
|
||||||
|
splash:
|
||||||
|
actions:
|
||||||
|
book_demo: Schedule a Demo
|
||||||
|
upload_video: Upload New Video
|
||||||
|
headings:
|
||||||
|
benefits: Benefits
|
||||||
|
how_it_works: How It Works
|
||||||
|
subtitle: Automate your deliverable documents
|
||||||
|
welcome: Welcome to
|
||||||
|
list_items:
|
||||||
|
AI_generates_documents: AI generates deliverable documents
|
||||||
|
download_documents: Download deliverable documents
|
||||||
|
import_EDLs: Import your EDLs
|
||||||
|
import_video: Import your video
|
||||||
|
more_accurate: More accurate than human-generated reports
|
||||||
|
production_elements_logs: Production Elements Logs, and more
|
||||||
|
reduces_labor_cost: Reduces labor costs
|
||||||
|
simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets
|
||||||
update:
|
update:
|
||||||
notice: The video has been updated
|
notice: The video has been updated
|
||||||
video:
|
video:
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -57,10 +80,40 @@ es:
|
|||||||
pdf:
|
pdf:
|
||||||
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:
|
||||||
|
splash:
|
||||||
|
actions:
|
||||||
|
book_demo: Schedule a Demo
|
||||||
|
create_stream: Create New Live Stream
|
||||||
|
headings:
|
||||||
|
benefits: Benefits
|
||||||
|
how_it_works: How It Works
|
||||||
|
subtitle: Remote directing and video village solution
|
||||||
|
welcome: Welcome to
|
||||||
|
list_items:
|
||||||
|
create_stream: Create a live stream
|
||||||
|
direct_shoots_anywhere: Direct shoots anywhere around the world
|
||||||
|
launch_video_conference: Launch Video Conference using plugin
|
||||||
|
share_files: Share files via the ME Suite mobile app
|
||||||
|
share_live_stream: Share live stream with clients all over the the world
|
||||||
|
share_stream: Share live stream link with clients
|
||||||
|
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
|
||||||
|
stream_multiple_cameras: Stream multiple cameras at one time
|
||||||
contract_templates:
|
contract_templates:
|
||||||
blank_contracts:
|
blank_contracts:
|
||||||
create:
|
create:
|
||||||
number_of_copies_invalid_notice: Please enter valid number greater than 0 (ES)
|
number_of_copies_invalid_notice: Please enter valid number greater than 0 (ES)
|
||||||
|
contract_template:
|
||||||
|
actions:
|
||||||
|
duplicate: Duplicate (ES)
|
||||||
|
edit: Edit (ES)
|
||||||
|
duplicate:
|
||||||
|
name_prefix: Copy of %{template_name} (ES)
|
||||||
|
duplicates:
|
||||||
|
create:
|
||||||
|
error: Failed to duplicate release template (ES)
|
||||||
|
edit:
|
||||||
|
heading: Edit Contract Template (ES)
|
||||||
form:
|
form:
|
||||||
custom_fields:
|
custom_fields:
|
||||||
heading: Medical Questionnaire (ES)
|
heading: Medical Questionnaire (ES)
|
||||||
@@ -70,7 +123,34 @@ es:
|
|||||||
heading: Legal (ES)
|
heading: Legal (ES)
|
||||||
release_info:
|
release_info:
|
||||||
heading: Release Info (ES)
|
heading: Release Info (ES)
|
||||||
|
splash:
|
||||||
|
actions:
|
||||||
|
book_demo: Schedule a Demo (ES)
|
||||||
|
create_template: Create New Release Template (ES)
|
||||||
|
headings:
|
||||||
|
benefits: ""
|
||||||
|
how_it_works: How It Works (ES)
|
||||||
|
subtitle: The easiest way to create and manage releases. (ES)
|
||||||
|
welcome: Welcome to (ES)
|
||||||
|
list_items:
|
||||||
|
add_tags_and_notes: Add tags and notes to releases for added organization and searchability (ES)
|
||||||
|
all_releases_available: All release types available including Covid Medical, Appearance, Location and more (ES)
|
||||||
|
create_releases: Create releases for your video shoot (ES)
|
||||||
|
download_mobile_app: Download the ME Suite mobile app (ES)
|
||||||
|
manage_large_audience: Easily manage large audiences with the crowd control feature (ES)
|
||||||
|
print_QR_code: Print out release QR codes (ES)
|
||||||
|
releases_automatically_organized: Releases are automatically organized as they’re submitted (ES)
|
||||||
|
update:
|
||||||
|
notice: The release template has been updated (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)
|
||||||
@@ -124,6 +204,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)
|
||||||
@@ -236,16 +317,67 @@ es:
|
|||||||
broadcast:
|
broadcast:
|
||||||
create: Create Live Stream (ES)
|
create: Create Live Stream (ES)
|
||||||
update: Save Changes (ES)
|
update: Save Changes (ES)
|
||||||
|
contract_template:
|
||||||
|
update: Save changes (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:
|
||||||
|
custom_validation_errors:
|
||||||
|
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:
|
||||||
@@ -350,6 +482,14 @@ 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)
|
||||||
@@ -380,3 +520,22 @@ es:
|
|||||||
manage: Manage (ES)
|
manage: Manage (ES)
|
||||||
open_deliverable: Open Deliverable (ES)
|
open_deliverable: Open Deliverable (ES)
|
||||||
read_more: read more (ES)
|
read_more: read more (ES)
|
||||||
|
videos:
|
||||||
|
splash:
|
||||||
|
actions:
|
||||||
|
book_demo: Schedule a Demo (ES)
|
||||||
|
upload_video: Upload New Video (ES)
|
||||||
|
headings:
|
||||||
|
benefits: Benefits (ES)
|
||||||
|
how_it_works: How It Works (ES)
|
||||||
|
subtitle: Automate your deliverable documents (ES)
|
||||||
|
welcome: Welcome to (ES)
|
||||||
|
list_items:
|
||||||
|
AI_generates_documents: AI generates deliverable documents (ES)
|
||||||
|
download_documents: Download deliverable documents (ES)
|
||||||
|
import_EDLs: Import your EDLs (ES)
|
||||||
|
import_video: Import your video (ES)
|
||||||
|
more_accurate: More accurate than human-generated reports (ES)
|
||||||
|
production_elements_logs: Production Elements Logs, and more (ES)
|
||||||
|
reduces_labor_cost: Reduces labor costs (ES)
|
||||||
|
simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets (ES)
|
||||||
|
|||||||
@@ -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]
|
||||||
@@ -56,9 +56,10 @@ Rails.application.routes.draw do
|
|||||||
resources :talent_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
|
resources :talent_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
|
||||||
resources :medical_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
|
resources :medical_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
|
||||||
resources :misc_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
|
resources :misc_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
|
||||||
resources :contract_templates, only: [:index, :new, :create, :destroy] do
|
resources :contract_templates, only: [:index, :new, :create, :edit, :update, :destroy] do
|
||||||
resource :qr_codes, only: [:show], controller: "contract_templates/qr_codes"
|
resource :qr_codes, only: [:show], controller: "contract_templates/qr_codes"
|
||||||
resource :blank_contracts, only: [:show, :new, :create], controller: "contract_templates/blank_contracts"
|
resource :blank_contracts, only: [:show, :new, :create], controller: "contract_templates/blank_contracts"
|
||||||
|
resource :duplicates, only: [:create], controller: "contract_templates/duplicates"
|
||||||
end
|
end
|
||||||
resource :release_template_imports, only: [:new, :create]
|
resource :release_template_imports, only: [:new, :create]
|
||||||
resources :project_memberships, only: [:index, :create, :destroy]
|
resources :project_memberships, only: [:index, :create, :destroy]
|
||||||
@@ -136,13 +137,18 @@ Rails.application.routes.draw do
|
|||||||
end
|
end
|
||||||
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
|
||||||
@@ -158,7 +164,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
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
class AddQuestionAnswersToMiscReleases < ActiveRecord::Migration[6.0]
|
||||||
|
def change
|
||||||
|
add_column :misc_releases, :question_1_answer, :text
|
||||||
|
add_column :misc_releases, :question_2_answer, :text
|
||||||
|
add_column :misc_releases, :question_3_answer, :text
|
||||||
|
add_column :misc_releases, :question_4_answer, :text
|
||||||
|
add_column :misc_releases, :question_5_answer, :text
|
||||||
|
add_column :misc_releases, :question_6_answer, :text
|
||||||
|
add_column :misc_releases, :question_7_answer, :text
|
||||||
|
add_column :misc_releases, :question_8_answer, :text
|
||||||
|
add_column :misc_releases, :question_9_answer, :text
|
||||||
|
add_column :misc_releases, :question_10_answer, :text
|
||||||
|
add_column :misc_releases, :question_11_answer, :text
|
||||||
|
add_column :misc_releases, :question_12_answer, :text
|
||||||
|
add_column :misc_releases, :question_13_answer, :text
|
||||||
|
add_column :misc_releases, :question_14_answer, :text
|
||||||
|
add_column :misc_releases, :question_15_answer, :text
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
class AddApprovalInfoColumnsToMedicalReleases < ActiveRecord::Migration[6.0]
|
||||||
|
def change
|
||||||
|
add_column :medical_releases, :approved_by_user_name, :text
|
||||||
|
add_column :medical_releases, :approved_by_user_email, :text
|
||||||
|
add_column :medical_releases, :approved_at, :timestamp
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
class AddAccessibilityToContractTemplates < ActiveRecord::Migration[6.0]
|
||||||
|
def change
|
||||||
|
add_column :contract_templates, :accessibility, :integer, default: 0
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
class AddDurationToBroadcastRecordings < ActiveRecord::Migration[6.0]
|
||||||
|
def change
|
||||||
|
add_column :broadcast_recordings, :duration, :float
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -494,7 +494,8 @@ CREATE TABLE public.broadcast_recordings (
|
|||||||
asset_playback_uid character varying NOT NULL,
|
asset_playback_uid character varying NOT NULL,
|
||||||
file_name character varying NOT NULL,
|
file_name character varying NOT NULL,
|
||||||
created_at timestamp(6) without time zone NOT NULL,
|
created_at timestamp(6) without time zone NOT NULL,
|
||||||
updated_at timestamp(6) without time zone NOT NULL
|
updated_at timestamp(6) without time zone NOT NULL,
|
||||||
|
duration double precision
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -629,7 +630,8 @@ CREATE TABLE public.contract_templates (
|
|||||||
question_12_text text,
|
question_12_text text,
|
||||||
question_13_text text,
|
question_13_text text,
|
||||||
question_14_text text,
|
question_14_text text,
|
||||||
question_15_text text
|
question_15_text text,
|
||||||
|
accessibility integer DEFAULT 0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -1045,7 +1047,10 @@ CREATE TABLE public.medical_releases (
|
|||||||
guardian_2_address_city character varying,
|
guardian_2_address_city character varying,
|
||||||
guardian_2_address_state character varying,
|
guardian_2_address_state character varying,
|
||||||
guardian_2_address_zip character varying,
|
guardian_2_address_zip character varying,
|
||||||
guardian_2_address_country character varying
|
guardian_2_address_country character varying,
|
||||||
|
approved_by_user_name text,
|
||||||
|
approved_by_user_email text,
|
||||||
|
approved_at timestamp without time zone
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -1101,7 +1106,22 @@ CREATE TABLE public.misc_releases (
|
|||||||
signed_at timestamp without time zone,
|
signed_at timestamp without time zone,
|
||||||
minor boolean DEFAULT false,
|
minor boolean DEFAULT false,
|
||||||
created_at timestamp(6) without time zone NOT NULL,
|
created_at timestamp(6) without time zone NOT NULL,
|
||||||
updated_at timestamp(6) without time zone NOT NULL
|
updated_at timestamp(6) without time zone NOT NULL,
|
||||||
|
question_1_answer text,
|
||||||
|
question_2_answer text,
|
||||||
|
question_3_answer text,
|
||||||
|
question_4_answer text,
|
||||||
|
question_5_answer text,
|
||||||
|
question_6_answer text,
|
||||||
|
question_7_answer text,
|
||||||
|
question_8_answer text,
|
||||||
|
question_9_answer text,
|
||||||
|
question_10_answer text,
|
||||||
|
question_11_answer text,
|
||||||
|
question_12_answer text,
|
||||||
|
question_13_answer text,
|
||||||
|
question_14_answer text,
|
||||||
|
question_15_answer text
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -3886,6 +3906,10 @@ INSERT INTO "schema_migrations" (version) VALUES
|
|||||||
('20200619085823'),
|
('20200619085823'),
|
||||||
('20200619134853'),
|
('20200619134853'),
|
||||||
('20200622180507'),
|
('20200622180507'),
|
||||||
('20200625144713');
|
('20200625144713'),
|
||||||
|
('20200702152130'),
|
||||||
|
('20200707155717'),
|
||||||
|
('20200709120630'),
|
||||||
|
('20200712181139');
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,21 @@ RSpec.describe Api::ContractTemplatesController, type: :controller do
|
|||||||
|
|
||||||
expect(response).to be_successful
|
expect(response).to be_successful
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'returns electronic signature legal text when present' do
|
||||||
|
ct = create(:contract_template, name: 'ct1', project_id: project.id)
|
||||||
|
ct.signature_legal_text = "some electronic signature legal text"
|
||||||
|
ct.save
|
||||||
|
|
||||||
|
sign_in_to_api(current_user)
|
||||||
|
get :show, params: { id: ct.id }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
|
||||||
|
expect(response.body).to include("signature_legal_text")
|
||||||
|
expect(response.body).to include(ct.signature_legal_text.body.as_json)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
42
spec/controllers/api/medical_releases_controller_spec.rb
Normal file
42
spec/controllers/api/medical_releases_controller_spec.rb
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Api::MedicalReleasesController, type: :controller do
|
||||||
|
let(:current_user) { create(:user) }
|
||||||
|
let(:project) { create(:project, name: 'first', account: current_user.primary_account) }
|
||||||
|
|
||||||
|
describe '#index' do
|
||||||
|
it 'returns a succesful response' do
|
||||||
|
create(:medical_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id)
|
||||||
|
create(:medical_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id)
|
||||||
|
|
||||||
|
sign_in_to_api(current_user)
|
||||||
|
get :index, params: { project_id: project.id }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
expect(response.body).to include 'John'
|
||||||
|
expect(response.body).to include 'Jane'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#show' do
|
||||||
|
it 'returns a succesful response' do
|
||||||
|
release1 = create(:medical_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id)
|
||||||
|
release2 = create(:medical_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id)
|
||||||
|
|
||||||
|
sign_in_to_api(current_user)
|
||||||
|
get :show, params: { id: release1 }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
expect(response.body).to include 'John'
|
||||||
|
expect(response.body).not_to include 'Jane'
|
||||||
|
|
||||||
|
get :show, params: { id: release2 }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
expect(response.body).not_to include 'John'
|
||||||
|
expect(response.body).to include 'Jane'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
42
spec/controllers/api/misc_releases_controller_spec.rb
Normal file
42
spec/controllers/api/misc_releases_controller_spec.rb
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Api::MiscReleasesController, type: :controller do
|
||||||
|
let(:current_user) { create(:user) }
|
||||||
|
let(:project) { create(:project, name: 'first', account: current_user.primary_account) }
|
||||||
|
|
||||||
|
describe '#index' do
|
||||||
|
it 'returns a succesful response' do
|
||||||
|
create(:misc_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id)
|
||||||
|
create(:misc_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id)
|
||||||
|
|
||||||
|
sign_in_to_api(current_user)
|
||||||
|
get :index, params: { project_id: project.id }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
expect(response.body).to include 'John'
|
||||||
|
expect(response.body).to include 'Jane'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#show' do
|
||||||
|
it 'returns a succesful response' do
|
||||||
|
release1 = create(:misc_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id)
|
||||||
|
release2 = create(:misc_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id)
|
||||||
|
|
||||||
|
sign_in_to_api(current_user)
|
||||||
|
get :show, params: { id: release1 }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
expect(response.body).to include 'John'
|
||||||
|
expect(response.body).not_to include 'Jane'
|
||||||
|
|
||||||
|
get :show, params: { id: release2 }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
expect(response.body).not_to include 'John'
|
||||||
|
expect(response.body).to include 'Jane'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -18,6 +18,14 @@ releases = [
|
|||||||
{
|
{
|
||||||
type: :material_release,
|
type: :material_release,
|
||||||
obligatory_attribute: :name
|
obligatory_attribute: :name
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: :medical_release,
|
||||||
|
obligatory_attribute: :person_name
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: :misc_release,
|
||||||
|
obligatory_attribute: :person_name
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,33 @@ RSpec.describe Api::SyncController, type: :controller do
|
|||||||
expect(guardian_photo).to include('id', 'type', 'attributes')
|
expect(guardian_photo).to include('id', 'type', 'attributes')
|
||||||
expect(photo_attributes).to include('filename', 'content_type', 'url', 'thumbnail_url')
|
expect(photo_attributes).to include('filename', 'content_type', 'url', 'thumbnail_url')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'contains misc releases' do
|
||||||
|
create_default_data
|
||||||
|
|
||||||
|
get :index
|
||||||
|
|
||||||
|
misc_releases = attributes_for_type('misc_releases')
|
||||||
|
|
||||||
|
expect(misc_releases.first).to include('id')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'contains misc releases' do
|
||||||
|
create_default_data
|
||||||
|
|
||||||
|
get :index
|
||||||
|
|
||||||
|
medical_releases = attributes_for_type('medical_releases')
|
||||||
|
expect(medical_releases.first).to include('id')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'contains signature legal text for contract templates' do
|
||||||
|
create_default_data_with_signature_legal_text
|
||||||
|
get :index
|
||||||
|
contract_templates = attributes_for_type('contract_templates')
|
||||||
|
expect(contract_templates.first).to include('signature_legal_text')
|
||||||
|
expect(contract_templates.first['signature_legal_text']).to eq ContractTemplate.first.signature_legal_text.as_json
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -120,6 +147,8 @@ RSpec.describe Api::SyncController, type: :controller do
|
|||||||
create(:talent_release, project: project)
|
create(:talent_release, project: project)
|
||||||
create(:location_release, project: project)
|
create(:location_release, project: project)
|
||||||
create(:material_release, project: project)
|
create(:material_release, project: project)
|
||||||
|
create(:medical_release, project: project)
|
||||||
|
create(:misc_release, project: project)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_default_data_with_guardian_info
|
def create_default_data_with_guardian_info
|
||||||
@@ -127,6 +156,13 @@ RSpec.describe Api::SyncController, type: :controller do
|
|||||||
create(:appearance_release, :minor_with_guardian_photo, project: project)
|
create(:appearance_release, :minor_with_guardian_photo, project: project)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_default_data_with_signature_legal_text
|
||||||
|
create_default_data
|
||||||
|
ct = create(:contract_template, name: "with signature legal text", project: Project.first)
|
||||||
|
ct.signature_legal_text = "legal text example"
|
||||||
|
ct.save
|
||||||
|
end
|
||||||
|
|
||||||
def response_body_json
|
def response_body_json
|
||||||
JSON.parse(response.body)
|
JSON.parse(response.body)
|
||||||
end
|
end
|
||||||
|
|||||||
36
spec/controllers/approvals_controller_spec.rb
Normal file
36
spec/controllers/approvals_controller_spec.rb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
RSpec.describe ApprovalsController, type: :controller do
|
||||||
|
render_views
|
||||||
|
|
||||||
|
let(:user) { create(:user) }
|
||||||
|
let(:account) { user.primary_account }
|
||||||
|
let(:project) { create(:project, account: user.primary_account) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
sign_in user
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#new" do
|
||||||
|
let!(:medical_release) { create(:medical_release, project: project) }
|
||||||
|
|
||||||
|
it "responds successfully" do
|
||||||
|
get :new, params: { medical_release_id: medical_release }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#create" do
|
||||||
|
it "changes approval status successfully" do
|
||||||
|
medical_release = create(:medical_release, project: project)
|
||||||
|
|
||||||
|
expect(MedicalRelease.last.approved?).to eq false
|
||||||
|
|
||||||
|
post :create, params: { medical_release_id: medical_release }
|
||||||
|
|
||||||
|
expect(response).to redirect_to [project, :medical_releases]
|
||||||
|
expect(MedicalRelease.last.approved?).to eq true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -22,7 +22,7 @@ RSpec.describe BroadcastsController, type: :controller do
|
|||||||
expect(response).to be_successful
|
expect(response).to be_successful
|
||||||
end
|
end
|
||||||
|
|
||||||
it "renders content" do
|
it "renders content if theere are existing broadcasts" do
|
||||||
create(:broadcast, project: project, name: "Another Broadcast")
|
create(:broadcast, project: project, name: "Another Broadcast")
|
||||||
|
|
||||||
get :index, params: { project_id: project }
|
get :index, params: { project_id: project }
|
||||||
@@ -34,12 +34,13 @@ RSpec.describe BroadcastsController, type: :controller do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "when there are no active broadcasts" do
|
context "when there are no active broadcasts" do
|
||||||
it "renders an empty message" do
|
it "renders splash screen" do
|
||||||
Broadcast.destroy_all
|
Broadcast.destroy_all
|
||||||
|
|
||||||
get :index, params: { project_id: project }
|
get :index, params: { project_id: project }
|
||||||
|
|
||||||
expect(response.body).to have_content("Live streams will appear here")
|
expect(response.body).to have_link create_stream
|
||||||
|
expect(response.body).to have_link schedule_demo
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -55,10 +56,8 @@ RSpec.describe BroadcastsController, type: :controller do
|
|||||||
|
|
||||||
context "for xhr request" do
|
context "for xhr request" do
|
||||||
it "filters the broadcasts by a query param" do
|
it "filters the broadcasts by a query param" do
|
||||||
appearance_releases = [
|
create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Adam")
|
||||||
create(:broadcast, skip_create_callback: true, name: "Stream by Adam"),
|
create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Zoe")
|
||||||
create(:broadcast, skip_create_callback: true, name: "Stream by Zoe"),
|
|
||||||
]
|
|
||||||
|
|
||||||
get :index, params: { project_id: project, query: "Zoe" }, xhr: true
|
get :index, params: { project_id: project, query: "Zoe" }, xhr: true
|
||||||
|
|
||||||
@@ -245,4 +244,12 @@ RSpec.describe BroadcastsController, type: :controller do
|
|||||||
|
|
||||||
{ files: [contract_file] }
|
{ files: [contract_file] }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def schedule_demo
|
||||||
|
t 'broadcasts.splash.actions.book_demo'
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_stream
|
||||||
|
t 'broadcasts.splash.actions.create_stream'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
30
spec/controllers/contract_templates/duplicates_controller.rb
Normal file
30
spec/controllers/contract_templates/duplicates_controller.rb
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
describe ContractTemplates::DuplicatesController do
|
||||||
|
let(:account) { build(:account) }
|
||||||
|
let(:current_user) { create(:user, :manager, primary_account: account) }
|
||||||
|
let(:project) { create(:project, members: [current_user], account: account) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
sign_in(current_user)
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#create' do
|
||||||
|
it "responds with redirect to the edit page for newly created duplicate" do
|
||||||
|
contract_template = create(:contract_template, project: project)
|
||||||
|
|
||||||
|
expect do
|
||||||
|
post :create, params: { contract_template_id: contract_template }
|
||||||
|
end.to change(ContractTemplate, :count).by(1)
|
||||||
|
|
||||||
|
new_ct = ContractTemplate.last
|
||||||
|
|
||||||
|
expect(new_ct.name).to eq t('contract_templates.duplicate.name_prefix', template_name: contract_template.name)
|
||||||
|
expect(new_ct.release_type).to eq contract_template.release_type
|
||||||
|
|
||||||
|
expect(response).to redirect_to [:edit, new_ct]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -19,7 +19,7 @@ describe ContractTemplatesController do
|
|||||||
expect(response).to be_successful
|
expect(response).to be_successful
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'renders content' do
|
it 'renders content if there are contract templates' do
|
||||||
contract_template = create(:contract_template,
|
contract_template = create(:contract_template,
|
||||||
name: 'My Contract Template', fee: 50, release_type: 'appearance',
|
name: 'My Contract Template', fee: 50, release_type: 'appearance',
|
||||||
project: project)
|
project: project)
|
||||||
@@ -39,10 +39,11 @@ describe ContractTemplatesController do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context 'when there are no contract templates' do
|
context 'when there are no contract templates' do
|
||||||
it 'renders an empty message' do
|
it 'renders splash screen' do
|
||||||
get :index, params: { project_id: project }
|
get :index, params: { project_id: project }
|
||||||
|
|
||||||
expect(response.body).to have_content('Release Templates will appear here')
|
expect(response.body).to have_link "Create New Release Template"
|
||||||
|
expect(response.body).to have_link schedule_demo
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -50,6 +51,7 @@ describe ContractTemplatesController do
|
|||||||
let(:current_user) { create(:user, :associate) }
|
let(:current_user) { create(:user, :associate) }
|
||||||
|
|
||||||
it 'does not show the new contract template button' do
|
it 'does not show the new contract template button' do
|
||||||
|
create(:contract_template, project: project)
|
||||||
get :index, params: { project_id: project }
|
get :index, params: { project_id: project }
|
||||||
|
|
||||||
expect(response.body).not_to have_link('Create New Release Template')
|
expect(response.body).not_to have_link('Create New Release Template')
|
||||||
@@ -116,6 +118,57 @@ describe ContractTemplatesController do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#edit' do
|
||||||
|
let(:contract_template) do
|
||||||
|
create(:contract_template,
|
||||||
|
name: 'My Contract Template', fee: 50, release_type: 'appearance',
|
||||||
|
project: project)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'responds ok' do
|
||||||
|
get :edit, params: { project_id: project, id: contract_template }
|
||||||
|
|
||||||
|
expect(response).to be_successful
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when current user is an associate' do
|
||||||
|
let(:current_user) { create(:user, :associate) }
|
||||||
|
|
||||||
|
it 'raises exception' do
|
||||||
|
expect do
|
||||||
|
get :edit, params: { project_id: project, id: contract_template }
|
||||||
|
end.to raise_error(Pundit::NotAuthorizedError)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#update' do
|
||||||
|
let(:contract_template) do
|
||||||
|
create(:contract_template,
|
||||||
|
name: 'My Contract Template', fee: 50, release_type: 'appearance',
|
||||||
|
project: project)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects' do
|
||||||
|
patch :update, params: { project_id: project, id: contract_template, contract_template: contract_template_params }
|
||||||
|
|
||||||
|
expect(response).to redirect_to(project_contract_templates_path(project))
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
context 'when current user is an associate' do
|
||||||
|
let(:current_user) { create(:user, :associate) }
|
||||||
|
|
||||||
|
it 'raises exception' do
|
||||||
|
expect do
|
||||||
|
patch :update, params: { project_id: project, id: contract_template, contract_template: contract_template_params }
|
||||||
|
end.to raise_error(Pundit::NotAuthorizedError)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#destroy' do
|
describe '#destroy' do
|
||||||
let!(:contract_template) { create(:contract_template, project: project) }
|
let!(:contract_template) { create(:contract_template, project: project) }
|
||||||
|
|
||||||
@@ -166,4 +219,8 @@ describe ContractTemplatesController do
|
|||||||
restriction_text: 'restrictions'
|
restriction_text: 'restrictions'
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def schedule_demo
|
||||||
|
t 'contract_templates.splash.actions.book_demo'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -19,14 +19,29 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "displays validation errors" do
|
it "displays validation errors" do
|
||||||
contract_template = create(:contract_template, project: project)
|
contract_template = create(:contract_template,
|
||||||
|
project: project,
|
||||||
|
question_1_text: "Question 1",
|
||||||
|
question_2_text: "Question 2"
|
||||||
|
)
|
||||||
sign_in(user)
|
sign_in(user)
|
||||||
|
|
||||||
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, medical_release: { person_address_city: "Albuquerque" } }
|
post :create, params: {
|
||||||
|
account_id: user.primary_account.to_param,
|
||||||
|
project_id: project,
|
||||||
|
contract_template_id: contract_template,
|
||||||
|
medical_release: {
|
||||||
|
person_address_city: "Albuquerque",
|
||||||
|
question_2_answer: "Answer 2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
body = CGI.unescape_html(response.body)
|
body = CGI.unescape_html(response.body)
|
||||||
expect(body).to match /Person first name can't be blank/
|
expect(body).to match /Person first name can't be blank/
|
||||||
expect(body).to match /Person last name can't be blank/
|
expect(body).to match /Person last name can't be blank/
|
||||||
expect(body).to match />can't be blank</
|
expect(body).to match />can't be blank</
|
||||||
|
expect(body).to match /Question 1 #{question_answer_validation_error}/
|
||||||
|
expect(body).not_to match /Question 2 #{question_answer_validation_error}/
|
||||||
end
|
end
|
||||||
|
|
||||||
it "responds with success " do
|
it "responds with success " do
|
||||||
@@ -68,4 +83,8 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
|
|||||||
|
|
||||||
{ signature_base64: data_uri }
|
{ signature_base64: data_uri }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def question_answer_validation_error
|
||||||
|
t 'medical_releases.custom_validation_errors.question_answer_is_required'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ RSpec.describe VideosController, type: :controller do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "has a search form" do
|
it "has a search form" do
|
||||||
|
create(:video, project: project)
|
||||||
get :index, params: { project_id: project }
|
get :index, params: { project_id: project }
|
||||||
|
|
||||||
expect(response.body).to have_button("search-button")
|
expect(response.body).to have_button("search-button")
|
||||||
@@ -43,7 +44,7 @@ RSpec.describe VideosController, type: :controller do
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
it "renders content" do
|
it "renders content if there are existing videos" do
|
||||||
video = create(:video, project: project, name: "My Video", number: "001", created_at: 1.day.ago)
|
video = create(:video, project: project, name: "My Video", number: "001", created_at: 1.day.ago)
|
||||||
|
|
||||||
get :index, params: { project_id: project }
|
get :index, params: { project_id: project }
|
||||||
@@ -58,10 +59,11 @@ RSpec.describe VideosController, type: :controller do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "when there are no records" do
|
context "when there are no records" do
|
||||||
it "renders an empty message" do
|
it "renders splash screen" do
|
||||||
get :index, params: { project_id: project }
|
get :index, params: { project_id: project }
|
||||||
|
|
||||||
expect(response.body).to have_content("Videos will appear here")
|
expect(response.body).to have_link "Upload New Video"
|
||||||
|
expect(response.body).to have_link schedule_demo
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -277,4 +279,8 @@ RSpec.describe VideosController, type: :controller do
|
|||||||
def video_update_params
|
def video_update_params
|
||||||
attributes_for(:video, :with_graphics_only_edl_file, :with_audio_only_edl_file, name: "Test Video").except(:file)
|
attributes_for(:video, :with_graphics_only_edl_file, :with_audio_only_edl_file, name: "Test Video").except(:file)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def schedule_demo
|
||||||
|
t 'videos.splash.actions.book_demo'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ FactoryBot.define do
|
|||||||
body "This is a test contract template."
|
body "This is a test contract template."
|
||||||
guardian_clause "Is the signer a minor?"
|
guardian_clause "Is the signer a minor?"
|
||||||
fee "$0.00"
|
fee "$0.00"
|
||||||
|
accessibility "public_template"
|
||||||
|
|
||||||
trait :archived do
|
trait :archived do
|
||||||
archived_at Time.zone.now
|
archived_at Time.zone.now
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ FactoryBot.define do
|
|||||||
appearance_release: true,
|
appearance_release: true,
|
||||||
location_release: true,
|
location_release: true,
|
||||||
material_release: true,
|
material_release: true,
|
||||||
|
misc_release: true,
|
||||||
medical_release: true,
|
medical_release: true,
|
||||||
music_release: true,
|
music_release: true,
|
||||||
talent_release: true,
|
talent_release: true,
|
||||||
@@ -48,12 +49,18 @@ FactoryBot.define do
|
|||||||
predefined_client_name "nat_geo"
|
predefined_client_name "nat_geo"
|
||||||
end
|
end
|
||||||
|
|
||||||
factory :project_with_contract_template do
|
factory :project_with_contract_template_public do
|
||||||
after(:build) do |project, _|
|
after(:build) do |project, _|
|
||||||
project.contract_templates << build(:contract_template, project: nil)
|
project.contract_templates << build(:contract_template, project: nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
factory :project_with_contract_template_private do
|
||||||
|
after(:build) do |project, _|
|
||||||
|
project.contract_templates << build(:contract_template, project: nil, accessibility: "private_template")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
factory :project_with_directories do
|
factory :project_with_directories do
|
||||||
after(:build) do |project, _|
|
after(:build) do |project, _|
|
||||||
project.directories << build(:directory, project: nil, name: "Shared")
|
project.directories << build(:directory, project: nil, name: "Shared")
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ RSpec.feature 'User creates task request', type: :feature do
|
|||||||
click_on 'Create Task request'
|
click_on 'Create Task request'
|
||||||
|
|
||||||
expect(page).to have_content task_created_message
|
expect(page).to have_content task_created_message
|
||||||
|
expect(page).to have_link("Back")
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'user can view task request details' do
|
scenario 'user can view task request details' do
|
||||||
@@ -89,4 +90,4 @@ RSpec.feature 'User creates task request', type: :feature do
|
|||||||
def task_created_message
|
def task_created_message
|
||||||
t 'task_requests.create.success_message'
|
t 'task_requests.create.success_message'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ feature "User imports release templates", type: :feature do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "importing two existing templates into a project" do
|
scenario "importing two existing templates into a project" do
|
||||||
|
create(:contract_template, project: project)
|
||||||
visit project_contract_templates_path(project)
|
visit project_contract_templates_path(project)
|
||||||
click_on "Import Release Template"
|
click_on "Import Release Template"
|
||||||
select_templates([project_one_template.id, project_two_template.id])
|
select_templates([project_one_template.id, project_two_template.id])
|
||||||
@@ -31,6 +32,7 @@ feature "User imports release templates", type: :feature do
|
|||||||
end
|
end
|
||||||
|
|
||||||
scenario "searching for a template", js: true do
|
scenario "searching for a template", js: true do
|
||||||
|
create(:contract_template, project: project)
|
||||||
visit project_contract_templates_path(project)
|
visit project_contract_templates_path(project)
|
||||||
click_on "Import Release Template"
|
click_on "Import Release Template"
|
||||||
fill_in "query", with: "Second"
|
fill_in "query", with: "Second"
|
||||||
|
|||||||
@@ -11,6 +11,13 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
|||||||
sign_in(current_user)
|
sign_in(current_user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario 'splash page is shown if tehre are no contract templates' do
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).to have_content create_release_template
|
||||||
|
end
|
||||||
|
|
||||||
scenario 'creating a new release template' do
|
scenario 'creating a new release template' do
|
||||||
visit new_project_contract_template_path(project)
|
visit new_project_contract_template_path(project)
|
||||||
|
|
||||||
@@ -25,7 +32,25 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
|||||||
select 'None', from: 'Restriction'
|
select 'None', from: 'Restriction'
|
||||||
click_on 'Create Release Template'
|
click_on 'Create Release Template'
|
||||||
|
|
||||||
expect(page).to have_content('The release template has been created')
|
expect(page).to have_content(create_contract_template_success_message)
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'creating new release template, all release types accept signature legal text' do
|
||||||
|
all_release_types = ['Acquired Media', 'Appearance', 'Location', 'Material', 'Medical', 'Misc', 'Talent']
|
||||||
|
|
||||||
|
all_release_types.each do |release_type|
|
||||||
|
visit new_project_contract_template_path(project)
|
||||||
|
|
||||||
|
dropdown_selection = "#{release_type} Release"
|
||||||
|
select dropdown_selection, from: 'Release type'
|
||||||
|
|
||||||
|
fill_in 'Name', with: "My #{release_type} template"
|
||||||
|
fill_in_trix signature_legal_text_field, with: 'LL'
|
||||||
|
|
||||||
|
expect do
|
||||||
|
click_on 'Create Release Template'
|
||||||
|
end.to change(ContractTemplate, :count).by(1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'medical release template has a guardian clause field' do
|
scenario 'medical release template has a guardian clause field' do
|
||||||
@@ -36,10 +61,28 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
|||||||
fill_hidden guardian_clause_field, with: 'Guardian clause text'
|
fill_hidden guardian_clause_field, with: 'Guardian clause text'
|
||||||
click_on 'Create Release Template'
|
click_on 'Create Release Template'
|
||||||
|
|
||||||
expect(page).to have_content('The release template has been created')
|
expect(page).to have_content(create_contract_template_success_message)
|
||||||
expect(ContractTemplate.last.guardian_clause.body.to_s).to match /Guardian clause text/
|
expect(ContractTemplate.last.guardian_clause.body.to_s).to match /Guardian clause text/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario 'misc release templates has guardian clause and questionnaire', js: true do
|
||||||
|
visit new_project_contract_template_path(project)
|
||||||
|
|
||||||
|
fill_in 'Name', with: 'My Misc Release'
|
||||||
|
select 'Misc Release', from: 'Release type'
|
||||||
|
|
||||||
|
expect(page).to have_selector('label', text: 'Guardian Clause')
|
||||||
|
MiscRelease::NUMBER_OF_CUSTOM_FIELDS.times do |n|
|
||||||
|
expect(page).to have_field(question_field(n+1))
|
||||||
|
end
|
||||||
|
|
||||||
|
fill_in_trix 'contract_template_guardian_clause', with: 'Guardian clause text'
|
||||||
|
fill_in question_field(1), with: 'How much experience do you have in the industry?'
|
||||||
|
click_on 'Create Release Template'
|
||||||
|
|
||||||
|
expect(page).to have_content(create_contract_template_success_message)
|
||||||
|
end
|
||||||
|
|
||||||
scenario 'preview new talent release template without guardian clause' do
|
scenario 'preview new talent release template without guardian clause' do
|
||||||
visit new_project_contract_template_path(project)
|
visit new_project_contract_template_path(project)
|
||||||
select 'Talent Release', from: 'Release type'
|
select 'Talent Release', from: 'Release type'
|
||||||
@@ -143,13 +186,13 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
|||||||
scenario 'Should not allow negative fees' do
|
scenario 'Should not allow negative fees' do
|
||||||
fill_in 'Fee', with: '-200'
|
fill_in 'Fee', with: '-200'
|
||||||
click_on 'Create Release Template'
|
click_on 'Create Release Template'
|
||||||
expect(page).not_to have_content('The release template has been created')
|
expect(page).not_to have_content(create_contract_template_success_message)
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'Should not allow fees with more than 9 digits' do
|
scenario 'Should not allow fees with more than 9 digits' do
|
||||||
fill_in 'Fee', with: '9999999999'
|
fill_in 'Fee', with: '9999999999'
|
||||||
click_on 'Create Release Template'
|
click_on 'Create Release Template'
|
||||||
expect(page).not_to have_content('The release template has been created')
|
expect(page).not_to have_content(create_contract_template_success_message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -197,7 +240,7 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
|||||||
|
|
||||||
click_on 'Manage'
|
click_on 'Manage'
|
||||||
accept_alert do
|
accept_alert do
|
||||||
click_on 'Archive'
|
click_on 'Delete'
|
||||||
end
|
end
|
||||||
|
|
||||||
expect(page).to have_content('The release template has been archived')
|
expect(page).to have_content('The release template has been archived')
|
||||||
@@ -219,16 +262,127 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
|||||||
expect(page).to have_content('Active template')
|
expect(page).to have_content('Active template')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario 'edit button is visible for not-signed contract template' do
|
||||||
|
create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(edit_button_label, exact: true, count: 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'edit button is not visible for signed contract template' do
|
||||||
|
ct = create(:contract_template, project: project)
|
||||||
|
create(:appearance_release, contract_template: ct)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(edit_button_label, exact: true, count: 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'duplicate button is visible for not signed contract template' do
|
||||||
|
create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(duplicate_button_label, exact: true, count: 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'duplicate button is visible for signed contract template' do
|
||||||
|
ct = create(:contract_template, project: project)
|
||||||
|
create(:appearance_release, contract_template: ct)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(duplicate_button_label, exact: true, count: 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'clicking edit button opens edit page for contract template' do
|
||||||
|
ct = create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content ct.name
|
||||||
|
|
||||||
|
expect(page).not_to have_content 'Updated CT'
|
||||||
|
expect(page).not_to have_content 'Medical'
|
||||||
|
|
||||||
|
click_link edit_button_label
|
||||||
|
|
||||||
|
expect(page).to have_content edit_page_heading
|
||||||
|
|
||||||
|
fill_in name_field, with: 'Updated CT'
|
||||||
|
select 'Medical Release', from: 'Release type'
|
||||||
|
fill_in_trix body_field, with: 'Updated legal text'
|
||||||
|
click_on update_contract_template_button_label
|
||||||
|
|
||||||
|
expect(page).to have_content 'Updated CT'
|
||||||
|
expect(page).to have_content 'Medical'
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'clicking duplicate button opens edit page for newly created contract template' do
|
||||||
|
ct = create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content ct.name
|
||||||
|
|
||||||
|
expect(page).not_to have_content 'Modified duplicate'
|
||||||
|
expect(page).not_to have_content 'Misc'
|
||||||
|
|
||||||
|
expect do
|
||||||
|
click_link duplicate_button_label
|
||||||
|
end.to change(ContractTemplate, :count).by(1)
|
||||||
|
|
||||||
|
expect(page).to have_content edit_page_heading
|
||||||
|
name_input = find("##{name_field}")
|
||||||
|
expect(name_input.value).to eq duplicate_release_name(ct.name)
|
||||||
|
|
||||||
|
fill_in name_field, with: 'Modified duplicate'
|
||||||
|
select 'Misc Release', from: 'Release type'
|
||||||
|
fill_in_trix body_field, with: 'Legal text for duplicate'
|
||||||
|
click_on update_contract_template_button_label
|
||||||
|
|
||||||
|
expect(page).to have_content 'Modified duplicate'
|
||||||
|
expect(page).to have_content 'Misc'
|
||||||
|
expect(ct.body.id).not_to eq ContractTemplate.last.body.id
|
||||||
|
expect(ct.guardian_clause.id).not_to eq ContractTemplate.last.guardian_clause.id
|
||||||
|
expect(ct.signature_legal_text.id).not_to eq ContractTemplate.last.signature_legal_text.id
|
||||||
|
end
|
||||||
|
|
||||||
context 'When the user is associate' do
|
context 'When the user is associate' do
|
||||||
let(:current_user) { create(:user, :associate) }
|
let(:current_user) { create(:user, :associate) }
|
||||||
|
|
||||||
it 'does not show management buttons for release templates' do
|
it 'does not show management buttons for release templates' do
|
||||||
|
create(:contract_template, project: project)
|
||||||
visit project_contract_templates_path(project)
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
expect(page).not_to have_content('Create New Release Template')
|
expect(page).not_to have_content('Create New Release Template')
|
||||||
expect(page).not_to have_content(import_template_button)
|
expect(page).not_to have_content(import_template_button)
|
||||||
expect(page).not_to have_content('Delete')
|
expect(page).not_to have_content('Delete')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'does not show create release button on splash page' do
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).not_to have_content create_release_template
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not show edit button' do
|
||||||
|
create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(edit_button_label, exact: true, count: 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not show duplicate button' do
|
||||||
|
create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(duplicate_button_label, exact: true, count: 0)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'When the user is account manager' do
|
context 'When the user is account manager' do
|
||||||
@@ -240,7 +394,48 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
|||||||
visit project_contract_templates_path(project)
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
click_on 'Manage'
|
click_on 'Manage'
|
||||||
expect(page).to have_content('Archive')
|
expect(page).to have_content('Delete')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not show create release button on splash page' do
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).to have_content create_release_template
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows edit button when contract template is not signed' do
|
||||||
|
create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(edit_button_label, exact: true, count: 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not show edit button when contract template is signed' do
|
||||||
|
ct = create(:contract_template, project: project)
|
||||||
|
create(:appearance_release, contract_template: ct)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(edit_button_label, exact: true, count: 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows duplicate button when contract template is not signed' do
|
||||||
|
create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(duplicate_button_label, exact: true, count: 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'shows duplicate button when contract template is signed' do
|
||||||
|
ct = create(:contract_template, project: project)
|
||||||
|
create(:appearance_release, contract_template: ct)
|
||||||
|
|
||||||
|
visit project_contract_templates_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(duplicate_button_label, exact: true, count: 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -270,7 +465,55 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
|||||||
'contract_template_guardian_clause_trix_input_contract_template'
|
'contract_template_guardian_clause_trix_input_contract_template'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def signature_legal_text_field
|
||||||
|
'contract_template_signature_legal_text'
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_contract_template_success_message
|
||||||
|
'The release template has been created'
|
||||||
|
end
|
||||||
|
|
||||||
|
def question_field(n)
|
||||||
|
"Question #{n} text"
|
||||||
|
end
|
||||||
|
|
||||||
def fill_hidden(id, with:)
|
def fill_hidden(id, with:)
|
||||||
find(:xpath, "//input[@id='#{id}']", visible: false).set with
|
find(:xpath, "//input[@id='#{id}']", visible: false).set with
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def schedule_demo
|
||||||
|
t 'contract_templates.splash.actions.book_demo'
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_release_template
|
||||||
|
t 'contract_templates.splash.actions.create_template'
|
||||||
|
end
|
||||||
|
|
||||||
|
def signature_legal_text_trix_field
|
||||||
|
'Signature legal text'
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit_button_label
|
||||||
|
t 'contract_templates.contract_template.actions.edit'
|
||||||
|
end
|
||||||
|
|
||||||
|
def duplicate_button_label
|
||||||
|
t 'contract_templates.contract_template.actions.duplicate'
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit_page_heading
|
||||||
|
t 'contract_templates.edit.heading'
|
||||||
|
end
|
||||||
|
|
||||||
|
def name_field
|
||||||
|
'contract_template_name'
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_contract_template_button_label
|
||||||
|
t 'helpers.submit.contract_template.update'
|
||||||
|
end
|
||||||
|
|
||||||
|
def duplicate_release_name(template_name = '')
|
||||||
|
t 'contract_templates.duplicate.name_prefix', template_name: template_name
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -41,6 +41,13 @@ feature "User managing acquired_media releases" do
|
|||||||
expect(AcquiredMediaRelease.last.categories).to include("Still Photograph")
|
expect(AcquiredMediaRelease.last.categories).to include("Still Photograph")
|
||||||
expect(page).to have_content("Your release was successfully submitted. Thank you.")
|
expect(page).to have_content("Your release was successfully submitted. Thank you.")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "creating a release, if contract template contains signature legal language, it is shown" do
|
||||||
|
contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text)
|
||||||
|
visit new_account_project_contract_template_acquired_media_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
expect(page).to have_content dummy_signature_legal_text
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when signed in" do
|
context "when signed in" do
|
||||||
@@ -357,4 +364,8 @@ feature "User managing acquired_media releases" do
|
|||||||
def destroy_release_alert
|
def destroy_release_alert
|
||||||
t "acquired_media_releases.destroy.alert"
|
t "acquired_media_releases.destroy.alert"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dummy_signature_legal_text
|
||||||
|
'Some signature legal language'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -30,6 +30,24 @@ feature 'User managing appearance releases' do
|
|||||||
expect(page).to have_content(successful_submission_message)
|
expect(page).to have_content(successful_submission_message)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
||||||
|
contract_template = create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit new_account_project_contract_template_appearance_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
all('input[data-required-tag="guardian"]').each do |field|
|
||||||
|
expect(field['required']).to eq 'false'
|
||||||
|
expect(field).not_to be_visible
|
||||||
|
end
|
||||||
|
|
||||||
|
page.check person_is_minor_checkbox
|
||||||
|
|
||||||
|
all('input[data-required-tag="guardian"]').each do |field|
|
||||||
|
expect(field['required']).to eq 'true'
|
||||||
|
expect(field).to be_visible
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
scenario 'creating a release for a minor', js: true do
|
scenario 'creating a release for a minor', js: true do
|
||||||
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
||||||
|
|
||||||
@@ -50,6 +68,7 @@ feature 'User managing appearance releases' do
|
|||||||
fill_in guardian_first_name_field, with: 'Guardian'
|
fill_in guardian_first_name_field, with: 'Guardian'
|
||||||
fill_in guardian_last_name_field, with: 'Name'
|
fill_in guardian_last_name_field, with: 'Name'
|
||||||
fill_in guardian_phone_field, with: '001101'
|
fill_in guardian_phone_field, with: '001101'
|
||||||
|
fill_in guardian_email_field, with: 'valid@email.com'
|
||||||
fill_in person_first_name_field, with: 'Jane'
|
fill_in person_first_name_field, with: 'Jane'
|
||||||
fill_in person_last_name_field, with: 'Doe'
|
fill_in person_last_name_field, with: 'Doe'
|
||||||
fill_in_person_address_fields
|
fill_in_person_address_fields
|
||||||
@@ -60,11 +79,6 @@ feature 'User managing appearance releases' do
|
|||||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||||
|
|
||||||
fill_in guardian_email_field, with: 'invalid@email'
|
|
||||||
click_button submit_release_button
|
|
||||||
expect(page).to have_content('Guardian email is not an email')
|
|
||||||
|
|
||||||
fill_in guardian_email_field, with: 'valid@email.com'
|
|
||||||
fill_in_guardian_address_fields
|
fill_in_guardian_address_fields
|
||||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||||
@@ -99,6 +113,7 @@ feature 'User managing appearance releases' do
|
|||||||
fill_in guardian_first_name_field, with: 'Guardian'
|
fill_in guardian_first_name_field, with: 'Guardian'
|
||||||
fill_in guardian_last_name_field, with: 'Name'
|
fill_in guardian_last_name_field, with: 'Name'
|
||||||
fill_in guardian_phone_field, with: '001101'
|
fill_in guardian_phone_field, with: '001101'
|
||||||
|
fill_in guardian_email_field, with: 'valid@email.com'
|
||||||
fill_in person_first_name_field, with: 'Jane'
|
fill_in person_first_name_field, with: 'Jane'
|
||||||
fill_in person_last_name_field, with: 'Doe'
|
fill_in person_last_name_field, with: 'Doe'
|
||||||
fill_in_person_address_fields
|
fill_in_person_address_fields
|
||||||
@@ -109,11 +124,6 @@ feature 'User managing appearance releases' do
|
|||||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||||
|
|
||||||
fill_in guardian_email_field, with: 'invalid@email'
|
|
||||||
click_button submit_release_button
|
|
||||||
expect(page).to have_content('Guardian email is not an email')
|
|
||||||
|
|
||||||
fill_in guardian_email_field, with: 'valid@email.com'
|
|
||||||
fill_in_guardian_address_fields
|
fill_in_guardian_address_fields
|
||||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||||
@@ -127,6 +137,13 @@ feature 'User managing appearance releases' do
|
|||||||
expect(page).to have_content(successful_submission_message)
|
expect(page).to have_content(successful_submission_message)
|
||||||
expect(AppearanceRelease.last.guardian_2_first_name).to eq 'Second'
|
expect(AppearanceRelease.last.guardian_2_first_name).to eq 'Second'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "creating a release, if contract template contains signature legal language, it is shown" do
|
||||||
|
contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text)
|
||||||
|
visit new_account_project_contract_template_appearance_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
expect(page).to have_content dummy_signature_legal_text
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when signed in' do
|
context 'when signed in' do
|
||||||
@@ -696,4 +713,8 @@ feature 'User managing appearance releases' do
|
|||||||
def guardian_2_photo_heading
|
def guardian_2_photo_heading
|
||||||
t 'appearance_releases.form.photos.guardian_2_photo.heading'
|
t 'appearance_releases.form.photos.guardian_2_photo.heading'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dummy_signature_legal_text
|
||||||
|
'Some signature legal language'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -12,6 +12,13 @@ feature 'User managing broadcasts' do
|
|||||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: 'id', key: 'key', playback_id: 'playback_id'))
|
allow(MuxLiveStream).to receive(:new).and_return(double(id: 'id', key: 'key', playback_id: 'playback_id'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "splash page is shown if there are no existing streams" do
|
||||||
|
visit project_broadcasts_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).to have_content create_stream
|
||||||
|
end
|
||||||
|
|
||||||
scenario 'creating and deleting a broadcast', js: true do
|
scenario 'creating and deleting a broadcast', js: true do
|
||||||
visit new_project_broadcast_path(project)
|
visit new_project_broadcast_path(project)
|
||||||
|
|
||||||
@@ -131,6 +138,29 @@ feature 'User managing broadcasts' do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'When the user is associate' do
|
||||||
|
let(:current_user) { create(:user, :associate) }
|
||||||
|
|
||||||
|
it 'does not show button to create new live stream' do
|
||||||
|
visit project_broadcasts_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).not_to have_content create_stream
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'When the user is account manager' do
|
||||||
|
let(:current_user) { create(:user, :account_manager) }
|
||||||
|
|
||||||
|
it 'does show button to create new live stream' do
|
||||||
|
visit project_broadcasts_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).to have_content create_stream
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -151,4 +181,12 @@ feature 'User managing broadcasts' do
|
|||||||
def switch_view_dropdown
|
def switch_view_dropdown
|
||||||
'Switch View'
|
'Switch View'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def schedule_demo
|
||||||
|
t 'broadcasts.splash.actions.book_demo'
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_stream
|
||||||
|
t 'broadcasts.splash.actions.create_stream'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -71,6 +71,13 @@ feature "User managing location releases" do
|
|||||||
expect(page).to have_content("Your release was successfully submitted. Thank you.")
|
expect(page).to have_content("Your release was successfully submitted. Thank you.")
|
||||||
expect(LocationRelease.last.photos.attached?).to eq true
|
expect(LocationRelease.last.photos.attached?).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "creating a release, if contract template contains signature legal language, it is shown" do
|
||||||
|
contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text)
|
||||||
|
visit new_account_project_contract_template_location_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
expect(page).to have_content dummy_signature_legal_text
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when signed in" do
|
context "when signed in" do
|
||||||
@@ -375,4 +382,8 @@ feature "User managing location releases" do
|
|||||||
select "Other", from: "Restriction"
|
select "Other", from: "Restriction"
|
||||||
fill_in "Describe other restrictions", with: "Test"
|
fill_in "Describe other restrictions", with: "Test"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dummy_signature_legal_text
|
||||||
|
'Some signature legal language'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -84,6 +84,13 @@ feature "User managing material releases" do
|
|||||||
click_button submit_release_button
|
click_button submit_release_button
|
||||||
expect(page).to have_content success_submit_message
|
expect(page).to have_content success_submit_message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "creating a release, if contract template contains signature legal language, it is shown" do
|
||||||
|
contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text)
|
||||||
|
visit new_account_project_contract_template_material_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
expect(page).to have_content dummy_signature_legal_text
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when signed in" do
|
context "when signed in" do
|
||||||
@@ -382,4 +389,8 @@ feature "User managing material releases" do
|
|||||||
click_button submit_release_button
|
click_button submit_release_button
|
||||||
expect(page).not_to have_content success_submit_message
|
expect(page).not_to have_content success_submit_message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dummy_signature_legal_text
|
||||||
|
'Some signature legal language'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -28,6 +28,24 @@ feature "User managing medical releases" do
|
|||||||
expect(page).to have_content(successful_submission_message)
|
expect(page).to have_content(successful_submission_message)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
||||||
|
contract_template = create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
all('input[data-required-tag="guardian"]').each do |field|
|
||||||
|
expect(field['required']).to eq 'false'
|
||||||
|
expect(field).not_to be_visible
|
||||||
|
end
|
||||||
|
|
||||||
|
page.check person_is_minor_checkbox
|
||||||
|
|
||||||
|
all('input[data-required-tag="guardian"]').each do |field|
|
||||||
|
expect(field['required']).to eq 'true'
|
||||||
|
expect(field).to be_visible
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
scenario 'creating a release for a minor', js: true do
|
scenario 'creating a release for a minor', js: true do
|
||||||
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
||||||
|
|
||||||
@@ -47,6 +65,7 @@ feature "User managing medical releases" do
|
|||||||
fill_in guardian_first_name_field, with: 'Guardian'
|
fill_in guardian_first_name_field, with: 'Guardian'
|
||||||
fill_in guardian_last_name_field, with: 'Name'
|
fill_in guardian_last_name_field, with: 'Name'
|
||||||
fill_in guardian_phone_field, with: '001101'
|
fill_in guardian_phone_field, with: '001101'
|
||||||
|
fill_in guardian_email_field, with: "valid@email.com"
|
||||||
fill_in person_first_name_field, with: 'Jane'
|
fill_in person_first_name_field, with: 'Jane'
|
||||||
fill_in person_last_name_field, with: 'Doe'
|
fill_in person_last_name_field, with: 'Doe'
|
||||||
fill_in_person_address_fields
|
fill_in_person_address_fields
|
||||||
@@ -56,11 +75,6 @@ feature "User managing medical releases" do
|
|||||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||||
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
||||||
|
|
||||||
fill_in guardian_email_field, with: 'invalid@email'
|
|
||||||
click_button submit_release_button
|
|
||||||
expect(page).to have_content email_validation_error_for('Guardian')
|
|
||||||
|
|
||||||
fill_in guardian_email_field, with: 'valid@email.com'
|
|
||||||
fill_in_guardian_address_fields
|
fill_in_guardian_address_fields
|
||||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||||
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
||||||
@@ -94,6 +108,7 @@ feature "User managing medical releases" do
|
|||||||
fill_in guardian_first_name_field, with: 'Guardian'
|
fill_in guardian_first_name_field, with: 'Guardian'
|
||||||
fill_in guardian_last_name_field, with: 'Name'
|
fill_in guardian_last_name_field, with: 'Name'
|
||||||
fill_in guardian_phone_field, with: '001101'
|
fill_in guardian_phone_field, with: '001101'
|
||||||
|
fill_in guardian_email_field, with: "valid@email.com"
|
||||||
fill_in person_first_name_field, with: 'Jane'
|
fill_in person_first_name_field, with: 'Jane'
|
||||||
fill_in person_last_name_field, with: 'Doe'
|
fill_in person_last_name_field, with: 'Doe'
|
||||||
fill_in_person_address_fields
|
fill_in_person_address_fields
|
||||||
@@ -103,11 +118,6 @@ feature "User managing medical releases" do
|
|||||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||||
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
||||||
|
|
||||||
fill_in guardian_email_field, with: 'invalid@email'
|
|
||||||
click_button submit_release_button
|
|
||||||
expect(page).to have_content email_validation_error_for('Guardian')
|
|
||||||
|
|
||||||
fill_in guardian_email_field, with: 'valid@email.com'
|
|
||||||
fill_in_guardian_address_fields
|
fill_in_guardian_address_fields
|
||||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||||
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
draw_signature file_fixture('signature.png'), 'medical_release_signature_base64'
|
||||||
@@ -121,6 +131,50 @@ feature "User managing medical releases" do
|
|||||||
expect(page).to have_content(successful_submission_message)
|
expect(page).to have_content(successful_submission_message)
|
||||||
expect(MedicalRelease.last.guardian_2_first_name).to eq 'Second'
|
expect(MedicalRelease.last.guardian_2_first_name).to eq 'Second'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario 'when signing release, question answers are required', js: true do
|
||||||
|
project = create(:project, members: current_user, account: current_user.primary_account)
|
||||||
|
contract_template = create(:contract_template,
|
||||||
|
project: project,
|
||||||
|
question_1_text: 'Question 1',
|
||||||
|
question_2_text: 'Question 2'
|
||||||
|
)
|
||||||
|
|
||||||
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
fill_in person_first_name_field, with: 'Jane'
|
||||||
|
fill_in person_last_name_field, with: 'Doe'
|
||||||
|
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
||||||
|
|
||||||
|
expect do
|
||||||
|
click_button submit_release_button
|
||||||
|
end.to change(MedicalRelease, :count).by(0)
|
||||||
|
expect(page).not_to have_content(successful_submission_message)
|
||||||
|
|
||||||
|
fill_in answer_field_for_question(1), with: 'Answer 1'
|
||||||
|
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
||||||
|
|
||||||
|
expect do
|
||||||
|
click_button submit_release_button
|
||||||
|
end.to change(MedicalRelease, :count).by(0)
|
||||||
|
expect(page).not_to have_content(successful_submission_message)
|
||||||
|
|
||||||
|
fill_in answer_field_for_question(2), with: 'Answer 2'
|
||||||
|
draw_signature file_fixture("signature.png"), "medical_release_signature_base64"
|
||||||
|
|
||||||
|
expect do
|
||||||
|
click_button submit_release_button
|
||||||
|
end.to change(MedicalRelease, :count).by(1)
|
||||||
|
expect(page).to have_content(successful_submission_message)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario "creating a release, if contract template contains signature legal language, it is shown" do
|
||||||
|
contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text)
|
||||||
|
visit new_account_project_contract_template_medical_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
expect(page).to have_content dummy_signature_legal_text
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when signed in as account manager" do
|
context "when signed in as account manager" do
|
||||||
@@ -128,6 +182,18 @@ feature "User managing medical releases" do
|
|||||||
sign_in current_user
|
sign_in current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do
|
||||||
|
create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
|
||||||
|
visit project_medical_releases_path(project)
|
||||||
|
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0)
|
||||||
|
|
||||||
|
create(:medical_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now)
|
||||||
|
visit project_medical_releases_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1)
|
||||||
|
end
|
||||||
|
|
||||||
scenario "Download All is visible" do
|
scenario "Download All is visible" do
|
||||||
create(:medical_release_with_contract_template, :native, project: project)
|
create(:medical_release_with_contract_template, :native, project: project)
|
||||||
create(:medical_release_with_contract_template, :non_native, project: project)
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||||
@@ -146,6 +212,15 @@ feature "User managing medical releases" do
|
|||||||
expect(page).to have_link("Download", exact: true, count: 2)
|
expect(page).to have_link("Download", exact: true, count: 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "Review action in Manage menu is visible" do
|
||||||
|
create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||||
|
|
||||||
|
visit project_medical_releases_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_link(review_action, exact: true)
|
||||||
|
end
|
||||||
|
|
||||||
scenario "Downloading PDF of native medical release is possible" do
|
scenario "Downloading PDF of native medical release is possible" do
|
||||||
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
|
||||||
@@ -154,6 +229,64 @@ feature "User managing medical releases" do
|
|||||||
click_link *view_release_pdf_link_for(native_release)
|
click_link *view_release_pdf_link_for(native_release)
|
||||||
expect(content_type).to eq('application/pdf')
|
expect(content_type).to eq('application/pdf')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "Reviewing release" do
|
||||||
|
create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
|
||||||
|
visit project_medical_releases_path(project)
|
||||||
|
|
||||||
|
click_link review_action
|
||||||
|
|
||||||
|
expect(page).to have_content review_page_heading
|
||||||
|
expect(page).to have_content approve_button
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'When viewing the contract PDF of approved release there is page for office use only' do
|
||||||
|
medical_release = create(:medical_release_with_contract_template,
|
||||||
|
:native,
|
||||||
|
project: project,
|
||||||
|
person_first_name: 'Jane',
|
||||||
|
person_last_name: 'Doe',
|
||||||
|
approved_by_user_name: "Big Joe",
|
||||||
|
approved_by_user_email: "some@email.com",
|
||||||
|
approved_at: DateTime.now)
|
||||||
|
|
||||||
|
sign_in(current_user)
|
||||||
|
visit project_medical_releases_path(project)
|
||||||
|
click_link *view_release_pdf_link_for(medical_release)
|
||||||
|
|
||||||
|
expect(content_type).to eq('application/pdf')
|
||||||
|
expect(content_disposition).to include('inline')
|
||||||
|
expect(pdf_body).to have_content for_office_use_only.upcase
|
||||||
|
expect(pdf_body).to have_content producer_label
|
||||||
|
expect(pdf_body).to have_content production_label
|
||||||
|
expect(pdf_body).to have_content employee_issued_to_label
|
||||||
|
expect(pdf_body).to have_content issued_by_label
|
||||||
|
expect(pdf_body).to have_content date_issued
|
||||||
|
expect(pdf_body).to have_content 'Big Joe'
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do
|
||||||
|
medical_release = create(:medical_release_with_contract_template,
|
||||||
|
:native,
|
||||||
|
project: project,
|
||||||
|
person_first_name: 'Jane',
|
||||||
|
person_last_name: 'Doe')
|
||||||
|
|
||||||
|
sign_in(current_user)
|
||||||
|
visit project_medical_releases_path(project)
|
||||||
|
click_link *view_release_pdf_link_for(medical_release)
|
||||||
|
|
||||||
|
expect(content_type).to eq('application/pdf')
|
||||||
|
expect(content_disposition).to include('inline')
|
||||||
|
expect(pdf_body).not_to have_content for_office_use_only.upcase
|
||||||
|
expect(pdf_body).not_to have_content producer_label
|
||||||
|
expect(pdf_body).not_to have_content production_label
|
||||||
|
expect(pdf_body).not_to have_content employee_issued_to_label
|
||||||
|
expect(pdf_body).not_to have_content issued_by_label
|
||||||
|
expect(pdf_body).not_to have_content date_issued
|
||||||
|
expect(pdf_body).not_to have_content 'Big Joe'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when the user is manager(project manager)" do
|
context "when the user is manager(project manager)" do
|
||||||
@@ -181,6 +314,15 @@ feature "User managing medical releases" do
|
|||||||
expect(page).to have_link("Download", exact: true, count: 0)
|
expect(page).to have_link("Download", exact: true, count: 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "Review action in Manage menu is not visible" do
|
||||||
|
create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||||
|
|
||||||
|
visit project_medical_releases_path(project)
|
||||||
|
|
||||||
|
expect(page).not_to have_link(review_action, exact: true)
|
||||||
|
end
|
||||||
|
|
||||||
scenario "Downloading PDF of native medical release is not possible" do
|
scenario "Downloading PDF of native medical release is not possible" do
|
||||||
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
|
||||||
@@ -225,6 +367,15 @@ feature "User managing medical releases" do
|
|||||||
expect(page).to have_link("Download", exact: true, count: 0)
|
expect(page).to have_link("Download", exact: true, count: 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "Review action in Manage menu is not visible" do
|
||||||
|
create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||||
|
|
||||||
|
visit project_medical_releases_path(project)
|
||||||
|
|
||||||
|
expect(page).not_to have_link(review_action, exact: true)
|
||||||
|
end
|
||||||
|
|
||||||
scenario "Downloading PDF of native medical release is not possible" do
|
scenario "Downloading PDF of native medical release is not possible" do
|
||||||
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
|
||||||
@@ -396,4 +547,48 @@ feature "User managing medical releases" do
|
|||||||
def guardian_2_information_heading
|
def guardian_2_information_heading
|
||||||
t 'public.medical_releases.new.guardian_2_info.heading'
|
t 'public.medical_releases.new.guardian_2_info.heading'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def answer_field_for_question(number)
|
||||||
|
"medical_release[question_#{number}_answer]"
|
||||||
|
end
|
||||||
|
|
||||||
|
def dummy_signature_legal_text
|
||||||
|
'Some signature legal language'
|
||||||
|
end
|
||||||
|
|
||||||
|
def review_action
|
||||||
|
t 'medical_releases.medical_release.actions.review'
|
||||||
|
end
|
||||||
|
|
||||||
|
def review_page_heading
|
||||||
|
t 'approvals.new.heading'
|
||||||
|
end
|
||||||
|
|
||||||
|
def approve_button
|
||||||
|
t 'approvals.new.actions.approve'
|
||||||
|
end
|
||||||
|
|
||||||
|
def for_office_use_only
|
||||||
|
t 'contracts.for_office_use_only.heading'
|
||||||
|
end
|
||||||
|
|
||||||
|
def producer_label
|
||||||
|
t 'contracts.for_office_use_only.description_labels.producer'
|
||||||
|
end
|
||||||
|
|
||||||
|
def production_label
|
||||||
|
t 'contracts.for_office_use_only.description_labels.production'
|
||||||
|
end
|
||||||
|
|
||||||
|
def employee_issued_to_label
|
||||||
|
t 'contracts.for_office_use_only.description_labels.employee_issued_to'
|
||||||
|
end
|
||||||
|
|
||||||
|
def issued_by_label
|
||||||
|
t 'contracts.for_office_use_only.description_labels.issued_by'
|
||||||
|
end
|
||||||
|
|
||||||
|
def date_issued
|
||||||
|
t 'contracts.for_office_use_only.description_labels.date_issued'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -4,6 +4,59 @@ feature "User managing misc releases" do
|
|||||||
let(:current_user) { create(:user) }
|
let(:current_user) { create(:user) }
|
||||||
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
||||||
|
|
||||||
|
context 'when signed out' do
|
||||||
|
scenario 'creating a release for an adult', js: true do
|
||||||
|
project = create(:project, members: current_user, account: current_user.primary_account)
|
||||||
|
contract_template = create(:misc_release_contract_template,
|
||||||
|
question_1_text: "Question 1",
|
||||||
|
project: project)
|
||||||
|
|
||||||
|
visit new_account_project_contract_template_misc_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
expect(page).to have_content("QUESTIONNAIRE")
|
||||||
|
|
||||||
|
fill_in person_first_name_field, with: 'Jane'
|
||||||
|
fill_in person_last_name_field, with: 'Doe'
|
||||||
|
fill_in_person_address_fields
|
||||||
|
fill_in person_phone_field, with: '555-555-5555'
|
||||||
|
fill_in person_email_field, with: 'jane.doe@test.com'
|
||||||
|
fill_in question_1_field, with: "Answer 1"
|
||||||
|
drop_file Rails.root.join(file_fixture("person_photo.png")), type: :dropzone
|
||||||
|
draw_signature file_fixture("signature.png"), "misc_release_signature_base64"
|
||||||
|
|
||||||
|
expect do
|
||||||
|
click_button submit_release_button
|
||||||
|
end.to change(MiscRelease, :count).by(1)
|
||||||
|
|
||||||
|
expect(page).to have_content(successful_submission_message)
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
||||||
|
contract_template = create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit new_account_project_contract_template_misc_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
all('input[data-required-tag="guardian"]').each do |field|
|
||||||
|
expect(field['required']).to eq 'false'
|
||||||
|
expect(field).not_to be_visible
|
||||||
|
end
|
||||||
|
|
||||||
|
page.check person_is_minor_checkbox
|
||||||
|
|
||||||
|
all('input[data-required-tag="guardian"]').each do |field|
|
||||||
|
expect(field['required']).to eq 'true'
|
||||||
|
expect(field).to be_visible
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
scenario "creating a release, if contract template contains signature legal language, it is shown" do
|
||||||
|
contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text)
|
||||||
|
visit new_account_project_contract_template_misc_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
expect(page).to have_content dummy_signature_legal_text
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "when signed in as account manager" do
|
context "when signed in as account manager" do
|
||||||
before do
|
before do
|
||||||
sign_in current_user
|
sign_in current_user
|
||||||
@@ -25,6 +78,52 @@ feature "User managing misc releases" do
|
|||||||
click_link *view_release_pdf_link_for(native_release)
|
click_link *view_release_pdf_link_for(native_release)
|
||||||
expect(content_type).to eq('application/pdf')
|
expect(content_type).to eq('application/pdf')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario 'viewing the contract PDF' do
|
||||||
|
misc_release = create(:misc_release,
|
||||||
|
:native,
|
||||||
|
contract_template: build(:misc_release_contract_template, question_1_text: 'Q1'),
|
||||||
|
question_1_answer: 'A1',
|
||||||
|
project: project,
|
||||||
|
person_first_name: 'Jane',
|
||||||
|
person_last_name: 'Doe',
|
||||||
|
tag_list: 'Woman, Brunette',
|
||||||
|
notes: [
|
||||||
|
build(:note,
|
||||||
|
content: 'Note 1',
|
||||||
|
user: build(:user, email: 'jane.doe@test.com'),
|
||||||
|
email: 'jane.doe@test.com',
|
||||||
|
created_at: DateTime.new(2020, 2, 21, 12, 0, 0)),
|
||||||
|
build(:note,
|
||||||
|
content: 'Note 2',
|
||||||
|
user: build(:user, email: 'john.doe@test.com'),
|
||||||
|
email: 'john.doe@test.com',
|
||||||
|
created_at: DateTime.new(2020, 2, 20, 11, 0, 0))
|
||||||
|
])
|
||||||
|
|
||||||
|
sign_in(current_user)
|
||||||
|
visit project_misc_releases_path(project)
|
||||||
|
click_link *view_release_pdf_link_for(misc_release)
|
||||||
|
|
||||||
|
expect(content_type).to eq('application/pdf')
|
||||||
|
expect(content_disposition).to include('inline')
|
||||||
|
expect(pdf_filename).to include('doe-jane')
|
||||||
|
expect(pdf_body).to have_content('Jane Doe')
|
||||||
|
expect(pdf_body).to have_content('NOTES')
|
||||||
|
expect(pdf_body).to have_content('Note 1')
|
||||||
|
expect(pdf_body).to have_content('jane.doe@test.com')
|
||||||
|
expect(pdf_body).to have_content('2/21/20 12:00 PM')
|
||||||
|
expect(pdf_body).to have_content('Note 2')
|
||||||
|
expect(pdf_body).to have_content('john.doe@test.com')
|
||||||
|
expect(pdf_body).to have_content('2/20/20 11:00 AM')
|
||||||
|
expect(pdf_body).to have_content('TAGS')
|
||||||
|
expect(pdf_body).to have_content('Woman')
|
||||||
|
expect(pdf_body).to have_content('Brunette')
|
||||||
|
expect(pdf_body).not_to have_content('Guardian Email')
|
||||||
|
expect(pdf_body).to have_content('QUESTIONNAIRE')
|
||||||
|
expect(pdf_body).to have_content('Q1')
|
||||||
|
expect(pdf_body).to have_content('A1')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when the user is manager(project manager)" do
|
context "when the user is manager(project manager)" do
|
||||||
@@ -52,4 +151,63 @@ feature "User managing misc releases" do
|
|||||||
def view_release_pdf_link_for(release)
|
def view_release_pdf_link_for(release)
|
||||||
['Download', href: misc_release_contracts_path(release, format: 'pdf')]
|
['Download', href: misc_release_contracts_path(release, format: 'pdf')]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def fill_in_person_address_fields
|
||||||
|
fill_in person_address_street1_field, with: "123 Test Lane"
|
||||||
|
fill_in person_address_city_field, with: "New York"
|
||||||
|
fill_in person_address_state_field, with: "NY"
|
||||||
|
fill_in person_address_zip_field, with: '1000'
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_address_street1_field
|
||||||
|
t('helpers.label.misc_release.person_address_street1')
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_address_city_field
|
||||||
|
t('helpers.label.misc_release.person_address_city')
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_address_state_field
|
||||||
|
t('helpers.label.misc_release.person_address_state')
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_address_zip_field
|
||||||
|
t('helpers.label.misc_release.person_address_zip')
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_first_name_field
|
||||||
|
t('helpers.label.misc_release.person_first_name')
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_last_name_field
|
||||||
|
t('helpers.label.misc_release.person_last_name')
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_email_field
|
||||||
|
t('helpers.label.misc_release.person_email')
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_phone_field
|
||||||
|
t('helpers.label.misc_release.person_phone')
|
||||||
|
end
|
||||||
|
|
||||||
|
def question_1_field
|
||||||
|
'misc_release[question_1_answer]'
|
||||||
|
end
|
||||||
|
|
||||||
|
def submit_release_button
|
||||||
|
t 'shared.submit_release_long'
|
||||||
|
end
|
||||||
|
|
||||||
|
def successful_submission_message
|
||||||
|
"Your release was successfully submitted. Thank you."
|
||||||
|
end
|
||||||
|
|
||||||
|
def person_is_minor_checkbox
|
||||||
|
'misc_release_minor'
|
||||||
|
end
|
||||||
|
|
||||||
|
def dummy_signature_legal_text
|
||||||
|
'Some signature legal language'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -32,6 +32,24 @@ feature "User managing talent releases" do
|
|||||||
expect(page).to have_content("Your release was successfully submitted. Thank you.")
|
expect(page).to have_content("Your release was successfully submitted. Thank you.")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
|
||||||
|
contract_template = create(:contract_template, project: project)
|
||||||
|
|
||||||
|
visit new_account_project_contract_template_talent_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
all('input[data-required-tag="guardian"]').each do |field|
|
||||||
|
expect(field['required']).to eq 'false'
|
||||||
|
expect(field).not_to be_visible
|
||||||
|
end
|
||||||
|
|
||||||
|
page.check person_is_minor_checkbox
|
||||||
|
|
||||||
|
all('input[data-required-tag="guardian"]').each do |field|
|
||||||
|
expect(field['required']).to eq 'true'
|
||||||
|
expect(field).to be_visible
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
scenario "creating a release for a minor", js: true do
|
scenario "creating a release for a minor", js: true do
|
||||||
contract_template = create(:contract_template, project: project)
|
contract_template = create(:contract_template, project: project)
|
||||||
|
|
||||||
@@ -48,6 +66,8 @@ feature "User managing talent releases" do
|
|||||||
fill_in guardian_first_name_field, with: "Guardian"
|
fill_in guardian_first_name_field, with: "Guardian"
|
||||||
fill_in guardian_last_name_field, with: "Name"
|
fill_in guardian_last_name_field, with: "Name"
|
||||||
fill_in guardian_phone_field, with: "001101"
|
fill_in guardian_phone_field, with: "001101"
|
||||||
|
fill_in guardian_email_field, with: "valid@email.com"
|
||||||
|
fill_in_guardian_address_fields
|
||||||
fill_in person_first_name_field, with: "Jane"
|
fill_in person_first_name_field, with: "Jane"
|
||||||
fill_in person_last_name_field, with: "Doe"
|
fill_in person_last_name_field, with: "Doe"
|
||||||
fill_in person_address_field, with: "123 Test Lane, New York, NY 10000"
|
fill_in person_address_field, with: "123 Test Lane, New York, NY 10000"
|
||||||
@@ -88,6 +108,9 @@ feature "User managing talent releases" do
|
|||||||
fill_in guardian_first_name_field, with: "Guardian"
|
fill_in guardian_first_name_field, with: "Guardian"
|
||||||
fill_in guardian_last_name_field, with: "Name"
|
fill_in guardian_last_name_field, with: "Name"
|
||||||
fill_in guardian_phone_field, with: "001101"
|
fill_in guardian_phone_field, with: "001101"
|
||||||
|
fill_in guardian_email_field, with: "valid@email.com"
|
||||||
|
|
||||||
|
fill_in_guardian_address_fields
|
||||||
|
|
||||||
fill_in guardian_2_first_name_field, with: "Second"
|
fill_in guardian_2_first_name_field, with: "Second"
|
||||||
fill_in guardian_2_last_name_field, with: "Guardian"
|
fill_in guardian_2_last_name_field, with: "Guardian"
|
||||||
@@ -103,6 +126,13 @@ feature "User managing talent releases" do
|
|||||||
expect(TalentRelease.last.guardian_2_photo.attached?).to eq true
|
expect(TalentRelease.last.guardian_2_photo.attached?).to eq true
|
||||||
expect(TalentRelease.last.guardian_2_name).to eq "Second Guardian"
|
expect(TalentRelease.last.guardian_2_name).to eq "Second Guardian"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "creating a release, if contract template contains signature legal language, it is shown" do
|
||||||
|
contract_template = create(:contract_template, project: project, signature_legal_text: dummy_signature_legal_text)
|
||||||
|
visit new_account_project_contract_template_talent_release_path(project.account, project, contract_template)
|
||||||
|
|
||||||
|
expect(page).to have_content dummy_signature_legal_text
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when signed in" do
|
context "when signed in" do
|
||||||
@@ -387,10 +417,30 @@ feature "User managing talent releases" do
|
|||||||
"talent_release[guardian_2_last_name]"
|
"talent_release[guardian_2_last_name]"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def guardian_address_street1_field
|
||||||
|
"talent_release[guardian_address_street1]"
|
||||||
|
end
|
||||||
|
|
||||||
|
def guardian_address_city_field
|
||||||
|
"talent_release[guardian_address_city]"
|
||||||
|
end
|
||||||
|
|
||||||
|
def guardian_address_state_field
|
||||||
|
"talent_release[guardian_address_state]"
|
||||||
|
end
|
||||||
|
|
||||||
|
def guardian_address_zip_field
|
||||||
|
"talent_release[guardian_address_zip]"
|
||||||
|
end
|
||||||
|
|
||||||
def guardian_phone_field
|
def guardian_phone_field
|
||||||
"Guardian phone"
|
"Guardian phone"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def guardian_email_field
|
||||||
|
"talent_release[guardian_email]"
|
||||||
|
end
|
||||||
|
|
||||||
def guardian_photo_field
|
def guardian_photo_field
|
||||||
"talent_release[guardian_photo]"
|
"talent_release[guardian_photo]"
|
||||||
end
|
end
|
||||||
@@ -505,4 +555,15 @@ feature "User managing talent releases" do
|
|||||||
def contract_field
|
def contract_field
|
||||||
"talent_release[contract]"
|
"talent_release[contract]"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def fill_in_guardian_address_fields
|
||||||
|
fill_in guardian_address_street1_field, with: "124 Test Lane"
|
||||||
|
fill_in guardian_address_city_field, with: "New York"
|
||||||
|
fill_in guardian_address_state_field, with: "NY"
|
||||||
|
fill_in guardian_address_zip_field, with: '1000'
|
||||||
|
end
|
||||||
|
|
||||||
|
def dummy_signature_legal_text
|
||||||
|
'Some signature legal language'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
require "rails_helper"
|
require "rails_helper"
|
||||||
|
|
||||||
feature "User managing videos" do
|
feature "User managing videos" do
|
||||||
let(:current_user) { create(:user) }
|
let(:current_user) { create(:user, :manager) }
|
||||||
let(:project) { create(:project, account: current_user.primary_account) }
|
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
||||||
let!(:video) do
|
let!(:video) do
|
||||||
create(:video,
|
create(:video,
|
||||||
:with_graphics_only_edl_file,
|
:with_graphics_only_edl_file,
|
||||||
@@ -17,6 +17,14 @@ feature "User managing videos" do
|
|||||||
sign_in current_user
|
sign_in current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario "splash page is shown if there are no existing videos" do
|
||||||
|
Video.delete_all
|
||||||
|
visit project_videos_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).to have_content upload_new_video
|
||||||
|
end
|
||||||
|
|
||||||
scenario "creating a video", js: true do
|
scenario "creating a video", js: true do
|
||||||
visit project_videos_path(project)
|
visit project_videos_path(project)
|
||||||
click_link "Upload New Video"
|
click_link "Upload New Video"
|
||||||
@@ -96,6 +104,30 @@ feature "User managing videos" do
|
|||||||
expect(page).to have_content("Second Video")
|
expect(page).to have_content("Second Video")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'When the user is associate' do
|
||||||
|
let(:current_user) { create(:user, :associate) }
|
||||||
|
|
||||||
|
it 'does show button to upload new video' do
|
||||||
|
Video.delete_all
|
||||||
|
visit project_videos_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).to have_content upload_new_video
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'When the user is account manager' do
|
||||||
|
let(:current_user) { create(:user, :account_manager) }
|
||||||
|
|
||||||
|
it 'does show button to upload new video' do
|
||||||
|
Video.delete_all
|
||||||
|
visit project_videos_path(project)
|
||||||
|
|
||||||
|
expect(page).to have_content schedule_demo
|
||||||
|
expect(page).to have_content upload_new_video
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def fill_in_video_fields(data)
|
def fill_in_video_fields(data)
|
||||||
@@ -115,4 +147,12 @@ feature "User managing videos" do
|
|||||||
def update_video_notice
|
def update_video_notice
|
||||||
t "videos.update.notice"
|
t "videos.update.notice"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def schedule_demo
|
||||||
|
t 'videos.splash.actions.book_demo'
|
||||||
|
end
|
||||||
|
|
||||||
|
def upload_new_video
|
||||||
|
t 'videos.splash.actions.upload_video'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ describe GenerateContractsZipJob do
|
|||||||
dir = Rails.root.join("spec", "fixtures", "files")
|
dir = Rails.root.join("spec", "fixtures", "files")
|
||||||
files = ["contract.pdf", "AppearanceRelease.pdf"]
|
files = ["contract.pdf", "AppearanceRelease.pdf"]
|
||||||
# Attachments in the test environment do not persist to cloud storage
|
# Attachments in the test environment do not persist to cloud storage
|
||||||
# Therefore we want to stub calls to `open` with a cloud storage URL
|
# Therefore we want to stub calls to `open` with a cloud storage URL
|
||||||
allow_any_instance_of(ReleaseContractCollectionService).to receive(:open).and_return(StringIO.new("file data"))
|
allow_any_instance_of(ReleaseContractCollectionService).to receive(:open).and_return(StringIO.new("file data"))
|
||||||
allow_any_instance_of(ReleaseContractCollectionService).to receive(:build).and_yield(dir, files)
|
allow_any_instance_of(ReleaseContractCollectionService).to receive(:build).and_yield(dir, files)
|
||||||
end
|
end
|
||||||
@@ -35,6 +35,38 @@ describe GenerateContractsZipJob do
|
|||||||
expect(download.file).to be_attached
|
expect(download.file).to be_attached
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "generates ZIP containing CSV file with all releases data for all release types" do
|
||||||
|
release_types = %w[AcquiredMediaRelease AppearanceRelease LocationRelease MaterialRelease MedicalRelease MiscRelease MusicRelease TalentRelease]
|
||||||
|
create_releases_for_all_types
|
||||||
|
|
||||||
|
release_types.each do |type|
|
||||||
|
lowercase_plural = type.constantize.model_name.plural
|
||||||
|
GenerateContractsZipJob.perform_now(project, download, type, project.public_send(lowercase_plural).ids)
|
||||||
|
|
||||||
|
generated_zip = download.file.blob.download
|
||||||
|
csv_file_name = "#{project.name.parameterize}_#{lowercase_plural.gsub('_', '-')}.csv"
|
||||||
|
Zip::InputStream.open(StringIO.new(generated_zip)) do |io|
|
||||||
|
while entry = io.get_next_entry
|
||||||
|
next unless entry.name == csv_file_name
|
||||||
|
|
||||||
|
csv_file = entry.get_input_stream.read
|
||||||
|
|
||||||
|
release_class = Object.const_get type
|
||||||
|
release_headers = release_class.csv_headers
|
||||||
|
|
||||||
|
release_headers.each do |header|
|
||||||
|
expect(csv_file).to match header
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
dummy_zip_file_name = "#{project.name.parameterize}_#{lowercase_plural.gsub('_', '-')}.zip"
|
||||||
|
if File.exist?(file_fixture(dummy_zip_file_name))
|
||||||
|
File.delete(file_fixture(dummy_zip_file_name))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "When there are errors" do
|
context "When there are errors" do
|
||||||
let(:error) { StandardError.new("Contracts or contract templates not found.") }
|
let(:error) { StandardError.new("Contracts or contract templates not found.") }
|
||||||
|
|
||||||
@@ -42,10 +74,10 @@ describe GenerateContractsZipJob do
|
|||||||
allow(ProjectsChannel).to receive(:broadcast_download_generation_update).with(download, I18n.t("contract_downloads.download.failure"))
|
allow(ProjectsChannel).to receive(:broadcast_download_generation_update).with(download, I18n.t("contract_downloads.download.failure"))
|
||||||
allow_any_instance_of(ReleaseContractCollectionService).to receive(:build).and_raise(StandardError, "Contracts or contract templates not found")
|
allow_any_instance_of(ReleaseContractCollectionService).to receive(:build).and_raise(StandardError, "Contracts or contract templates not found")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "updates status to 'failure' and sends user a notification" do
|
it "updates status to 'failure' and sends user a notification" do
|
||||||
GenerateContractsZipJob.perform_now(project, download, "AppearanceRelease", project.appearance_releases.ids)
|
GenerateContractsZipJob.perform_now(project, download, "AppearanceRelease", project.appearance_releases.ids)
|
||||||
|
|
||||||
expect(download.status).to eq "failure"
|
expect(download.status).to eq "failure"
|
||||||
expect(ProjectsChannel).to have_received(:broadcast_download_generation_update).with(download, I18n.t("contract_downloads.download.failure"))
|
expect(ProjectsChannel).to have_received(:broadcast_download_generation_update).with(download, I18n.t("contract_downloads.download.failure"))
|
||||||
end
|
end
|
||||||
@@ -56,6 +88,21 @@ describe GenerateContractsZipJob do
|
|||||||
# Delete the file created in fixture.
|
# Delete the file created in fixture.
|
||||||
# Or the tests will fail on next run due to already existing files in existing zip.
|
# Or the tests will fail on next run due to already existing files in existing zip.
|
||||||
path = Rails.root.join("spec", "fixtures", "files")
|
path = Rails.root.join("spec", "fixtures", "files")
|
||||||
File.delete("#{path}/my-video-project_appearance-releases.zip") if File.exists? "#{path}/my-video-project_appearance-releases.zip"
|
if File.exists? "#{path}/my-video-project_appearance-releases.zip"
|
||||||
|
File.delete("#{path}/my-video-project_appearance-releases.zip")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def create_releases_for_all_types
|
||||||
|
create(:acquired_media_release_with_contract_template, :native, project: project)
|
||||||
|
create(:appearance_release_with_contract_template, :native, project: project, person_name: "John Doe")
|
||||||
|
create(:location_release_with_contract_template, :native, project: project)
|
||||||
|
create(:material_release_with_contract_template, :native, project: project)
|
||||||
|
create(:medical_release_with_contract_template, :native, project: project)
|
||||||
|
create(:misc_release_with_contract_template, :native, project: project)
|
||||||
|
create(:music_release_with_contract_template, project: project)
|
||||||
|
create(:talent_release_with_contract_template, :native, project: project)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -43,4 +43,16 @@ describe ContractTemplate do
|
|||||||
expect(contract_template).to be_duplicated
|
expect(contract_template).to be_duplicated
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#has_questionnaire?' do
|
||||||
|
it 'returns true if there are any questions present' do
|
||||||
|
contract_template = build(:contract_template)
|
||||||
|
|
||||||
|
expect(contract_template).not_to have_questionnaire
|
||||||
|
|
||||||
|
contract_template.question_1_text = 'Q1'
|
||||||
|
|
||||||
|
expect(contract_template).to have_questionnaire
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -22,6 +22,23 @@ RSpec.describe MedicalRelease do
|
|||||||
context "for non-native releases" do
|
context "for non-native releases" do
|
||||||
it { is_expected.to validate_attachment_of(:contract).on(:non_native) }
|
it { is_expected.to validate_attachment_of(:contract).on(:non_native) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "question answers" do
|
||||||
|
let(:project) { create(:project) }
|
||||||
|
let(:contract_template) { create(:contract_template, project: project, question_1_text: 'Question 1') }
|
||||||
|
|
||||||
|
it "returns validation errors if answers are missing" do
|
||||||
|
expect do
|
||||||
|
create(:medical_release, contract_template: contract_template)
|
||||||
|
end.to raise_exception ActiveRecord::RecordInvalid
|
||||||
|
end
|
||||||
|
|
||||||
|
it "creates release if answers are present" do
|
||||||
|
expect do
|
||||||
|
create(:medical_release, contract_template: contract_template, question_1_answer: 'Answer 1')
|
||||||
|
end.to change(MedicalRelease, :count).by(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "attachments" do
|
describe "attachments" do
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ RSpec.describe Project, type: :model do
|
|||||||
|
|
||||||
describe "#import_contract_templates" do
|
describe "#import_contract_templates" do
|
||||||
it "imports contract templates from other projects within the account" do
|
it "imports contract templates from other projects within the account" do
|
||||||
existing_project = create(:project_with_contract_template)
|
existing_project = create(:project_with_contract_template_public)
|
||||||
new_project = create(:project, name: "New Project", account: existing_project.account)
|
new_project = create(:project, name: "New Project", account: existing_project.account)
|
||||||
|
|
||||||
expect {
|
expect {
|
||||||
|
|||||||
@@ -75,14 +75,17 @@ describe ContractTemplatePolicy do
|
|||||||
end
|
end
|
||||||
|
|
||||||
permissions ".scope" do
|
permissions ".scope" do
|
||||||
let!(:member_project) do
|
let!(:member_project_public_template) do
|
||||||
create(:project_with_contract_template, name: "Member Project", members: user, account: account)
|
create(:project_with_contract_template_public, name: "Member Project Public Template", members: user, account: account)
|
||||||
|
end
|
||||||
|
let!(:member_project_private_template) do
|
||||||
|
create(:project_with_contract_template_private, name: "Member Project Private Template", members: user, account: account)
|
||||||
end
|
end
|
||||||
let!(:non_member_project) do
|
let!(:non_member_project) do
|
||||||
create(:project_with_contract_template, name: "Non-Member Project", account: account)
|
create(:project_with_contract_template_public, name: "Non-Member Project", account: account)
|
||||||
end
|
end
|
||||||
let!(:outside_project) do
|
let!(:outside_project) do
|
||||||
create(:project_with_contract_template, name: "Outside Project", account: build(:account))
|
create(:project_with_contract_template_public, name: "Outside Project", account: build(:account))
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:account) { build(:account) }
|
let(:account) { build(:account) }
|
||||||
@@ -93,7 +96,8 @@ describe ContractTemplatePolicy do
|
|||||||
context "for an account manager" do
|
context "for an account manager" do
|
||||||
let(:user) { create(:user, :account_manager, primary_account: account)}
|
let(:user) { create(:user, :account_manager, primary_account: account)}
|
||||||
|
|
||||||
it { is_expected.to include(member_project.contract_templates.first) }
|
it { is_expected.to include(member_project_public_template.contract_templates.first) }
|
||||||
|
it { is_expected.to include(member_project_private_template.contract_templates.first) }
|
||||||
it { is_expected.to include(non_member_project.contract_templates.first) }
|
it { is_expected.to include(non_member_project.contract_templates.first) }
|
||||||
it { is_expected.not_to include(outside_project.contract_templates.first) }
|
it { is_expected.not_to include(outside_project.contract_templates.first) }
|
||||||
end
|
end
|
||||||
@@ -101,15 +105,17 @@ describe ContractTemplatePolicy do
|
|||||||
context "for manager" do
|
context "for manager" do
|
||||||
let(:user) { create(:user, :manager, primary_account: account) }
|
let(:user) { create(:user, :manager, primary_account: account) }
|
||||||
|
|
||||||
it { is_expected.to include(member_project.contract_templates.first) }
|
it { is_expected.to include(member_project_public_template.contract_templates.first) }
|
||||||
|
it { is_expected.to include(member_project_private_template.contract_templates.first) }
|
||||||
it { is_expected.not_to include(non_member_project.contract_templates.first) }
|
it { is_expected.not_to include(non_member_project.contract_templates.first) }
|
||||||
it { is_expected.not_to include(outside_project.contract_templates.first) }
|
it { is_expected.not_to include(outside_project.contract_templates.first) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "for associate" do
|
context "for associate" do
|
||||||
let(:user) { create(:user, :associate, primary_account: account) }
|
let(:user) { create(:user, :associate, primary_account: account) }
|
||||||
|
|
||||||
it { is_expected.to include(member_project.contract_templates.first) }
|
it { is_expected.to include(member_project_public_template.contract_templates.first) }
|
||||||
|
it { is_expected.not_to include(member_project_private_template.contract_templates.first) }
|
||||||
it { is_expected.not_to include(non_member_project.contract_templates.first) }
|
it { is_expected.not_to include(non_member_project.contract_templates.first) }
|
||||||
it { is_expected.not_to include(outside_project.contract_templates.first) }
|
it { is_expected.not_to include(outside_project.contract_templates.first) }
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user