Compare commits

..

2 Commits

121 changed files with 339 additions and 3026 deletions

View File

@@ -4,7 +4,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby "2.6.3"
# Bundle edge Rails instead: gem "rails", github: "rails/rails"
gem "rails", "~> 6.0.3.1"
gem "rails", "~> 6.0.0"
# Use postgresql as the database for Active Record
gem "pg", "~> 0.18"
# Use Puma as the app server
@@ -30,9 +30,9 @@ gem "active_storage_base64", "~> 1.0.0"
gem "image_processing", "~> 1.2"
# Use Amazon Web Services S3 for file uploads in production
gem "aws-sdk-s3", "~> 1.48", require: false, group: [:production, :review]
gem "aws-sdk-s3", "~> 1.31.0", require: false, group: [:production, :review]
# Allow AWS API requests to be signed using IAM credentials
gem "aws-sigv4", "~> 1.1"
gem "aws-sigv4", "~> 1.0.2"
# Reduces boot times through caching; required in config/boot.rb
gem "bootsnap", ">= 1.1.0", require: false

View File

@@ -44,71 +44,71 @@ GEM
remote: https://rubygems.org/
specs:
Ascii85 (1.0.3)
actioncable (6.0.3.2)
actionpack (= 6.0.3.2)
actioncable (6.0.0)
actionpack (= 6.0.0)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailbox (6.0.3.2)
actionpack (= 6.0.3.2)
activejob (= 6.0.3.2)
activerecord (= 6.0.3.2)
activestorage (= 6.0.3.2)
activesupport (= 6.0.3.2)
actionmailbox (6.0.0)
actionpack (= 6.0.0)
activejob (= 6.0.0)
activerecord (= 6.0.0)
activestorage (= 6.0.0)
activesupport (= 6.0.0)
mail (>= 2.7.1)
actionmailer (6.0.3.2)
actionpack (= 6.0.3.2)
actionview (= 6.0.3.2)
activejob (= 6.0.3.2)
actionmailer (6.0.0)
actionpack (= 6.0.0)
actionview (= 6.0.0)
activejob (= 6.0.0)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (6.0.3.2)
actionview (= 6.0.3.2)
activesupport (= 6.0.3.2)
rack (~> 2.0, >= 2.0.8)
actionpack (6.0.0)
actionview (= 6.0.0)
activesupport (= 6.0.0)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
actiontext (6.0.3.2)
actionpack (= 6.0.3.2)
activerecord (= 6.0.3.2)
activestorage (= 6.0.3.2)
activesupport (= 6.0.3.2)
actiontext (6.0.0)
actionpack (= 6.0.0)
activerecord (= 6.0.0)
activestorage (= 6.0.0)
activesupport (= 6.0.0)
nokogiri (>= 1.8.5)
actionview (6.0.3.2)
activesupport (= 6.0.3.2)
actionview (6.0.0)
activesupport (= 6.0.0)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
active_storage_base64 (1.0.0)
rails (~> 6.0)
activejob (6.0.3.2)
activesupport (= 6.0.3.2)
activejob (6.0.0)
activesupport (= 6.0.0)
globalid (>= 0.3.6)
activemodel (6.0.3.2)
activesupport (= 6.0.3.2)
activemodel (6.0.0)
activesupport (= 6.0.0)
activemodel-serializers-xml (1.0.2)
activemodel (> 5.x)
activesupport (> 5.x)
builder (~> 3.1)
activerecord (6.0.3.2)
activemodel (= 6.0.3.2)
activesupport (= 6.0.3.2)
activerecord (6.0.0)
activemodel (= 6.0.0)
activesupport (= 6.0.0)
activeresource (5.1.0)
activemodel (>= 5.0, < 7)
activemodel-serializers-xml (~> 1.0)
activesupport (>= 5.0, < 7)
activestorage (6.0.3.2)
actionpack (= 6.0.3.2)
activejob (= 6.0.3.2)
activerecord (= 6.0.3.2)
activestorage (6.0.0)
actionpack (= 6.0.0)
activejob (= 6.0.0)
activerecord (= 6.0.0)
marcel (~> 0.3.1)
activesupport (6.0.3.2)
activesupport (6.0.0)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
zeitwerk (~> 2.1, >= 2.1.8)
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
afm (0.2.2)
@@ -117,22 +117,21 @@ GEM
ast (2.4.0)
autoprefixer-rails (9.7.3)
execjs
aws-eventstream (1.1.0)
aws-partitions (1.337.0)
aws-sdk-core (3.102.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
aws-eventstream (1.0.3)
aws-partitions (1.210.0)
aws-sdk-core (3.46.2)
aws-eventstream (~> 1.0)
aws-partitions (~> 1.0)
aws-sigv4 (~> 1.0)
jmespath (~> 1.0)
aws-sdk-kms (1.35.0)
aws-sdk-core (~> 3, >= 3.99.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.72.0)
aws-sdk-core (~> 3, >= 3.102.1)
aws-sdk-kms (1.13.0)
aws-sdk-core (~> 3, >= 3.39.0)
aws-sigv4 (~> 1.0)
aws-sdk-s3 (1.31.0)
aws-sdk-core (~> 3, >= 3.39.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-sigv4 (~> 1.0)
aws-sigv4 (1.0.3)
axlsx (3.0.0.pre)
htmlentities (~> 4.3, >= 4.3.4)
mimemagic (~> 0.3)
@@ -182,7 +181,7 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.12.2)
concurrent-ruby (1.1.6)
concurrent-ruby (1.1.5)
connection_pool (2.2.2)
countries (2.1.4)
i18n_data (~> 0.8.0)
@@ -231,7 +230,7 @@ GEM
hubspot-ruby (0.9.0)
activesupport (>= 3.0.0)
httparty (>= 0.10.0)
i18n (1.8.3)
i18n (1.8.2)
concurrent-ruby (~> 1.0)
i18n_data (0.8.0)
i18n_yaml_sorter (0.2.0)
@@ -271,22 +270,22 @@ GEM
ruby_dep (~> 1.2)
loaf (0.8.1)
rails (>= 3.2)
loofah (2.6.0)
loofah (2.4.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
mini_mime (>= 0.1.1)
marcel (0.3.3)
mimemagic (~> 0.3.2)
method_source (1.0.0)
method_source (0.9.2)
mime-types (3.3)
mime-types-data (~> 3.2015)
mime-types-data (3.2019.0904)
mimemagic (0.3.5)
mimemagic (0.3.3)
mini_magick (4.9.5)
mini_mime (1.0.2)
mini_portile2 (2.4.0)
minitest (5.14.1)
minitest (5.14.0)
monetize (1.9.2)
money (~> 6.12)
money (6.13.4)
@@ -299,8 +298,8 @@ GEM
msgpack (1.3.1)
multi_xml (0.6.0)
multipart-post (2.1.1)
nio4r (2.5.2)
nokogiri (1.10.9)
nio4r (2.5.1)
nokogiri (1.10.7)
mini_portile2 (~> 2.4.0)
oath (1.1.0)
bcrypt
@@ -338,20 +337,20 @@ GEM
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (6.0.3.2)
actioncable (= 6.0.3.2)
actionmailbox (= 6.0.3.2)
actionmailer (= 6.0.3.2)
actionpack (= 6.0.3.2)
actiontext (= 6.0.3.2)
actionview (= 6.0.3.2)
activejob (= 6.0.3.2)
activemodel (= 6.0.3.2)
activerecord (= 6.0.3.2)
activestorage (= 6.0.3.2)
activesupport (= 6.0.3.2)
rails (6.0.0)
actioncable (= 6.0.0)
actionmailbox (= 6.0.0)
actionmailer (= 6.0.0)
actionpack (= 6.0.0)
actiontext (= 6.0.0)
actionview (= 6.0.0)
activejob (= 6.0.0)
activemodel (= 6.0.0)
activerecord (= 6.0.0)
activestorage (= 6.0.0)
activesupport (= 6.0.0)
bundler (>= 1.3.0)
railties (= 6.0.3.2)
railties (= 6.0.0)
sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.4)
actionpack (>= 5.0.1.x)
@@ -364,9 +363,9 @@ GEM
nokogiri (>= 1.6)
rails-html-sanitizer (1.3.0)
loofah (~> 2.3)
railties (6.0.3.2)
actionpack (= 6.0.3.2)
activesupport (= 6.0.3.2)
railties (6.0.0)
actionpack (= 6.0.0)
activesupport (= 6.0.0)
method_source
rake (>= 0.8.7)
thor (>= 0.20.3, < 2.0)
@@ -470,7 +469,7 @@ GEM
turbolinks-source (5.2.0)
typhoeus (1.3.1)
ethon (>= 0.9.0)
tzinfo (1.2.7)
tzinfo (1.2.6)
thread_safe (~> 0.1)
uglifier (4.1.20)
execjs (>= 0.3.0, < 3)
@@ -495,9 +494,9 @@ GEM
activesupport (>= 4.2)
rack-proxy (>= 0.6.1)
railties (>= 4.2)
websocket-driver (0.7.2)
websocket-driver (0.7.1)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
websocket-extensions (0.1.4)
will_paginate (3.2.1)
will_paginate-bootstrap4 (0.2.2)
will_paginate (~> 3.0, >= 3.0.0)
@@ -505,7 +504,7 @@ GEM
wkhtmltopdf-heroku (2.12.5.0)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.3.1)
zeitwerk (2.2.2)
PLATFORMS
ruby
@@ -515,8 +514,8 @@ DEPENDENCIES
activeresource (= 5.1.0)
acts-as-taggable-on!
analytics-ruby
aws-sdk-s3 (~> 1.48)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (~> 1.31.0)
aws-sigv4 (~> 1.0.2)
axlsx (~> 3.0.0.pre)
axlsx_rails (~> 0.5.2)
axlsx_styler (~> 0.2.0)
@@ -562,7 +561,7 @@ DEPENDENCIES
rack!
rack-contrib (~> 2.0.1)
rack-cors
rails (~> 6.0.3.1)
rails (~> 6.0.0)
rails-controller-testing (~> 1.0.4)
rails-data-migrations (~> 1.2.0)
redcarpet (~> 3.4.0)

View File

@@ -0,0 +1,24 @@
$(document).on("click", "[data-behavior=play_recording]", function() {
if ($(this).hasClass('active')){
return false;
}
var playback_url = $(this).attr("data-playback-url")
$("#broadcast_video").empty();
new Clappr.Player({
parentId: '#broadcast_video',
source: playback_url,
width: '100%',
height: '100%',
autoPlay: true
});
$(".dropdown-menu").children().removeClass('active');
$(".dropdown-menu").children().children('i').remove();
$(this).siblings().removeClass('active');
$(this).siblings().children("i").remove();
$(this).addClass('active');
$(this).prepend('<i class="fa fa-check">&nbsp;</i>');
});

View File

@@ -1,26 +0,0 @@
$(document).on("click", "[data-behavior=play_recording]", function() {
if ($(this).hasClass('active')){
return false;
}
console.warn('Play prev : ', playback_url);
var playback_url = $(this).attr("data-playback-url")
$("#broadcast_video").empty();
new Clappr.Player({
<%= "baseUrl: 'http://cdn.clappr.io/latest'," if Rails.env.test? %>
parentId: '#broadcast_video',
source: playback_url,
width: '100%',
height: '100%',
autoPlay: true
});
$(".dropdown-menu").children().removeClass('active');
$(".dropdown-menu").children().children('i').remove();
$(this).siblings().removeClass('active');
$(this).siblings().children("i").remove();
$(this).addClass('active');
$(this).prepend('<i class="fa fa-check">&nbsp;</i>');
});

View File

@@ -1,13 +0,0 @@
$(document).on("turbolinks:load", function() {
$("[data-behavior=update-required-status]").click(function(e) {
const required = !!($(this)[0] && $(this)[0].checked);
$("[data-required-tag=guardian]").each(function(index, element) {
const labelForField = element.previousSibling;
element.required = required;
labelForField.classList.add("required");
});
});
});

View File

@@ -14,7 +14,6 @@ $red: #F9002B;
$green: #51B61B;
$teal: #32C498;
$purple: #5139EE;
$yellow: #F9BE1B;
$dark: $gray-900;
$success: $teal;
$link-color: $body-color;

View File

@@ -37,14 +37,14 @@ label {
&.release-me {
span:last-child {
background-color: $teal;
color: $white;
color: $body-color;
}
}
&.direct-me {
span:last-child {
background-color: $green;
color: $white;
color: $body-color;
}
}
@@ -58,14 +58,7 @@ label {
&.deliver-me {
span:last-child {
background-color: $purple;
color: $white;
}
}
&.task-me {
span:last-child {
background-color: $yellow;
color: $white;
color: white;
}
}

View File

@@ -17,7 +17,7 @@ class AccountsController < ApplicationController
if sign_in(user)
TrackAnalyticsJob.perform_later(user, user.primary_account, :track_guest_sign_up, user_agent: request.user_agent, user_ip: request.remote_ip)
SubmitHubspotFormJob.perform_later(user.first_name, user.last_name, user.email, account.name, i_m_interested_in: user.interested_product_name)
SubmitHubspotFormJob.perform_later(user.email, account.name, i_m_interested_in: user.interested_product_name)
redirect_to signed_in_root_path
else
redirect_to new_session_path, alert: t(".notice")

View File

@@ -1,36 +0,0 @@
class Admin::TaskRequestsController < Admin::ApplicationController
before_action :set_task_request, only: [:edit, :update, :show]
def index
@task_requests = task_requests.order_by_recent.paginate(page: params[:page])
end
def edit
end
def show
@files = @task_request.files.paginate(page: params[:page])
end
def update
if @task_request.update(task_request_params)
redirect_to [:admin, :task_requests], notice: t(".notice")
else
render :edit
end
end
private
def task_request_params
params.require(:task_request).permit(:status, :deliverable_url)
end
def task_requests
policy_scope TaskRequest
end
def set_task_request
@task_request = authorize policy_scope(TaskRequest).find(params[:id])
end
end

View File

@@ -19,11 +19,5 @@ class Api::AppearanceReleasesController < Api::ReleasesController
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
end
guardian_2_photo = release_create_params[:guardian_2_photo]
if guardian_2_photo
guardian_2_photo[:io] = StringIO.new(Base64.decode64(guardian_2_photo[:io]))
release.guardian_2_photo.attach(io: guardian_2_photo[:io], filename: guardian_2_photo[:filename])
end
end
end

View File

@@ -103,16 +103,10 @@ class Api::ReleasesController < Api::ApiController
if ["appearance_release", "talent_release"].include?(name)
has_many :guardian_photos do
data do
[
@object.guardian_photo.try(:attachment),
@object.guardian_2_photo.try(:attachment)
].compact
[@object.guardian_photo.try(:attachment)].compact
end
meta do
{ count:
(@object.try(:guardian_photo).try(:attached?) ? 1 : 0) +
(@object.try(:guardian_2_photo).try(:attached?) ? 1 : 0)
}
{ count: @object.try(:guardian_photo).try(:attached?) ? 1 : 0 }
end
end
end
@@ -176,7 +170,7 @@ class Api::ReleasesController < Api::ApiController
def release_create_params
parameters = params.require(model_name).permit!
keys = model_constant.new.attributes.keys + [:guardian_photo, :guardian_2_photo, :person_photo, :photos, :signature, :signature_base64, :file_infos_attributes]
keys = model_constant.new.attributes.keys + [:guardian_photo, :person_photo, :photos, :signature, :signature_base64, :file_infos_attributes]
parameters[:signature_base64] = parameters[:signature]
parameters = parameters.slice(*keys).except(:created_at, :updated_at, :id, :user_id, :signature)
parameters

View File

@@ -17,11 +17,5 @@ class Api::TalentReleasesController < Api::ReleasesController
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
end
guardian_2_photo = release_create_params[:guardian_2_photo]
if guardian_2_photo
guardian_2_photo[:io] = StringIO.new(Base64.decode64(guardian_2_photo[:io]))
release.guardian_2_photo.attach(io: guardian_2_photo[:io], filename: guardian_2_photo[:filename])
end
end
end

View File

@@ -5,7 +5,6 @@ class BroadcastsController < ApplicationController
before_action :build_broadcast, only: [:new, :create]
before_action :set_broadcast, only: [:show, :destroy, :update]
before_action :set_multi_view_broadcasts, only: [:show]
before_action :show_splash_screen, only: :index
def index
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
@@ -50,10 +49,6 @@ class BroadcastsController < ApplicationController
private
def show_splash_screen
render :splash if broadcasts.count.zero?
end
def broadcast_params
params.require(:broadcast).permit(:name, files: [])
end

View File

@@ -7,7 +7,6 @@ class ContractTemplatesController < ApplicationController
before_action :set_project, except: [:destroy]
before_action :set_contract_template, only: [:destroy]
before_action :show_splash_screen, only: :index
def index
@contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page])
@@ -39,10 +38,6 @@ class ContractTemplatesController < ApplicationController
private
def show_splash_screen
render :splash if contract_templates.non_archived.count.zero?
end
def set_contract_template
@contract_template = authorize contract_templates.find(params[:id])
end

View File

@@ -46,7 +46,6 @@ class Public::MiscReleasesController < Public::BaseController
.permit(
person_params,
guardian_params,
questionnaire_params,
:signature_base64,
:locale,
:contract_template,
@@ -86,26 +85,6 @@ class Public::MiscReleasesController < Public::BaseController
]
end
def questionnaire_params
[
:question_1_answer,
:question_2_answer,
:question_3_answer,
:question_4_answer,
:question_5_answer,
:question_6_answer,
:question_7_answer,
:question_8_answer,
:question_9_answer,
:question_10_answer,
:question_11_answer,
:question_12_answer,
:question_13_answer,
:question_14_answer,
:question_15_answer,
]
end
def misc_release_params_with_locale
misc_release_params.merge(locale: I18n.locale)
end

View File

@@ -60,14 +60,9 @@ class StreamNotificationsController < ApplicationController
def set_broadcast
if notification_type == "video.asset.static_renditions.ready"
live_stream_id = notification.dig(:stream_notification, :data, :live_stream_id)
@broadcast = Broadcast.find_by(stream_uid: live_stream_id)
@broadcast = Broadcast.find_by!(stream_uid: live_stream_id)
else
@broadcast = Broadcast.find_by(stream_uid: notification_object_id)
end
if @broadcast.nil?
logger.info "Ignoring broadcast from other environment. Type = #{notification_type}. Id = #{live_stream_id} / #{notification_object_id}"
head :ok
@broadcast = Broadcast.find_by!(stream_uid: notification_object_id)
end
end

View File

@@ -1,81 +0,0 @@
class TaskRequestsController < ApplicationController
layout "project"
before_action :set_project
before_action :build_task_request, only: [:new, :create]
before_action :set_task_request, only: [:show, :edit, :update, :cancel]
before_action :show_splash_screen, only: :index
def index
@task_requests = task_requests.order_by_recent.paginate(page: params[:page])
end
def new
end
def create
@task_request.attributes = task_request_params_with_email
if @task_request.save
log_create_analytics
taskme_url = url_for([:admin, @task_request])
SubmitHubspotTaskRequestFormJob.perform_later(@task_request.user_email, taskme_url)
else
render :new
end
end
def show
@files = @task_request.files.paginate(page: params[:page])
end
def edit
end
def update
if @task_request.update(task_request_params)
redirect_to [@project, :task_requests], notice: t(".notice")
else
render :edit
end
end
def cancel
@task_request.cancelled!
redirect_to [@project, :task_requests], notice: t(".notice")
end
private
def show_splash_screen
render :splash if task_requests.count.zero?
end
def task_request_params
params.require(:task_request).permit(:description, :deadline, :time_allowed, :additional_notes, files: [])
end
def task_request_params_with_email
task_request_params.merge(user_email: Current.user.email)
end
def set_project
@project = policy_scope(Project).find(params[:project_id])
end
def set_task_request
@task_request = authorize policy_scope(TaskRequest).find(params[:id])
end
def task_requests
authorize policy_scope(@project.task_requests)
end
def build_task_request
@task_request = authorize @project.task_requests.build
end
def log_create_analytics
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_task_request, user_agent: request.user_agent, user_ip: request.remote_ip)
end
end

View File

@@ -1,19 +0,0 @@
class TasksController < ApplicationController
before_action :set_project
include ProjectLayout
def index
@tasks = task_requests.completed.order_by_recent.paginate(page: params[:page])
end
private
def set_project
@project = policy_scope(Project).find(params[:project_id])
end
def task_requests
authorize policy_scope(@project.task_requests)
end
end

View File

@@ -3,7 +3,6 @@ class VideosController < ApplicationController
before_action :set_project, only: [:index, :new, :create, :landing]
before_action :set_video, only: [:edit, :update]
before_action :show_splash_screen, only: :index
def landing
authorize Video, :new?
@@ -61,10 +60,6 @@ class VideosController < ApplicationController
private
def show_splash_screen
render :splash if videos.count.zero?
end
def set_project
@project = policy_scope(Project).find(params[:project_id])
end

View File

@@ -7,8 +7,8 @@ module DescriptionListHelper
safe_join(tags)
end
def description_list_pair_for(record, attribute, append: nil, custom_label: nil)
term = custom_label.nil? ? translation_for(record, attribute) : custom_label
def description_list_pair_for(record, attribute, append: nil)
term = translation_for(record, attribute)
definition = record.send(attribute)
description_list_pair(term, definition, append: append)

View File

@@ -11,8 +11,6 @@ module DropzoneHelper
t 'location_releases.form.photos.dropzone_label'
when "directory"
"To Add Files to the Folder:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
when "task_request"
"To Add Files for the Task:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
else
"To Add Photos to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera"
end

View File

@@ -13,13 +13,10 @@ module WordmarkHelper
css += options[:class].to_s
content_tag(:div, class: css) do
elements = [
safe_join [
content_tag(:span, t("shared.#{product_name}")),
content_tag(:span, t("shared.me"))
]
prefix = options[:prefix]
elements.unshift content_tag(:span, "#{prefix} ") unless prefix.blank?
safe_join elements
end
end
end

View File

@@ -1,6 +1,5 @@
$(document).on("turbolinks:load", () => {
$('.datepicker-control').datepicker({
format: "yyyy-mm-dd",
todayHighlight: true
format: "yyyy-mm-dd"
});
});

View File

@@ -1,14 +1,12 @@
class SubmitHubspotFormJob < ApplicationJob
queue_as :default
def perform(first_name, last_name, email, company_name, additional_params = {})
def perform(email, company_name, additional_params = {})
hubspot_form_guid = ENV["HUBSPOT_FORM_GUID"]
return unless hubspot_form_guid.present?
submission_params = {
first_name: first_name,
last_name: last_name,
email: email,
email: email,
company: company_name
}.merge(additional_params)

View File

@@ -1,18 +0,0 @@
class SubmitHubspotTaskRequestFormJob < ApplicationJob
queue_as :default
def perform(user_email, taskme_url)
hubspot_task_request_form_guid = ENV["HUBSPOT_TASK_REQUEST_FORM_GUID"]
return unless hubspot_task_request_form_guid.present?
submission_params = {
email: user_email,
taskme_url: taskme_url
}
form = Hubspot::Form.new("guid" => hubspot_task_request_form_guid)
is_form_sumitted = form.submit(submission_params)
raise StandardError.new "Failed to submit the task request hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
end
end

View File

@@ -54,7 +54,6 @@ class Account < ApplicationRecord
Download.where(project: projects),
User.joins(:project_memberships).where(project_memberships: { project: projects }),
Broadcast.where(project: projects),
TaskRequest.where(project: projects),
ZoomMeeting.where(project: projects),
MedicalRelease.where(project: projects),
MiscRelease.where(project: projects),
@@ -83,10 +82,6 @@ class Account < ApplicationRecord
plan_uid.to_s == "me_suite" || plan_uid.to_s == "releaseme"
end
def taskme_enabled?
ENV["TASKME_ENABLED"] && (plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme")
end
def plan_name
case plan_uid.to_s
when "deliverme"
@@ -95,8 +90,6 @@ class Account < ApplicationRecord
"DirectME"
when "releaseme"
"ReleaseME"
when "taskme"
"TaskME"
when "me_suite"
"ME Suite"
end

View File

@@ -5,8 +5,6 @@ class ContractTemplate < ApplicationRecord
include Syncable
include PgSearch
NUMBER_OF_CUSTOM_FIELDS = 15
belongs_to :project
belongs_to :parent, class_name: 'ContractTemplate', optional: true
has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id'
@@ -61,8 +59,4 @@ class ContractTemplate < ApplicationRecord
def archive
update(archived_at: Time.zone.now)
end
def has_questionnaire?
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
end
end

View File

@@ -14,37 +14,15 @@ class MedicalRelease < ApplicationRecord
NUMBER_OF_CUSTOM_FIELDS = 15
composed_of :person_address,
composed_of :person_address,
class_name: "Address",
mapping: [
%w[person_address_street1 street1],
%w[person_address_street2 street2],
%w[person_address_city city],
%w[person_address_state state],
%w[person_address_zip zip],
%w[person_address_country country]
]
composed_of :guardian_address,
class_name: 'Address',
mapping: [
%w[guardian_address_street1 street1],
%w[guardian_address_street2 street2],
%w[guardian_address_city city],
%w[guardian_address_state state],
%w[guardian_address_zip zip],
%w[guardian_address_country country]
]
composed_of :guardian_2_address,
class_name: 'Address',
mapping: [
%w[guardian_2_address_street1 street1],
%w[guardian_2_address_street2 street2],
%w[guardian_2_address_city city],
%w[guardian_2_address_state state],
%w[guardian_2_address_zip zip],
%w[guardian_2_address_country country]
mapping: [
%w(person_address_street1 street1),
%w(person_address_street2 street2),
%w(person_address_city city),
%w(person_address_state state),
%w(person_address_zip zip),
%w(person_address_country country)
]
def self.face_photo_acceptable_content_types
@@ -54,7 +32,6 @@ class MedicalRelease < ApplicationRecord
# These validations apply to all releases
validates :person_first_name, :person_last_name, presence: true
validates :person_email, email: true, allow_blank: true
validate :valid_answers
acts_as_taggable_on :internal_tags, :tags
@@ -99,15 +76,4 @@ class MedicalRelease < ApplicationRecord
def contract_file_name
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
end
private
def valid_answers
(1..ContractTemplate::NUMBER_OF_CUSTOM_FIELDS).each do |index|
if contract_template && contract_template["question_#{index}_text"].present? &&
public_send("question_#{index}_answer").blank?
errors.add("question_#{index}", I18n.t('medical_releases.custom_validation_errors.question_answer_is_required'))
end
end
end
end

View File

@@ -10,8 +10,6 @@ class MiscRelease < ApplicationRecord
include GuardianName
include GuardianPhotoable
NUMBER_OF_CUSTOM_FIELDS = 15
composed_of :person_address,
class_name: "Address",
mapping: [

View File

@@ -24,7 +24,6 @@ class Project < ApplicationRecord
has_many :downloads, dependent: :destroy
has_many :broadcasts, dependent: :destroy
has_many :zoom_meetings, dependent: :destroy
has_many :task_requests, dependent: :destroy
accepts_nested_attributes_for :project_memberships

View File

@@ -1,10 +0,0 @@
class TaskRequest < ApplicationRecord
belongs_to :project
has_many_attached :files
enum status: [:pending, :completed, :cancelled]
scope :order_by_recent, -> { order(created_at: :desc) }
validates :time_allowed, numericality: { only_integer: true, greater_than_or_equal_to: 2 }
end

View File

@@ -12,7 +12,7 @@ class AcquiredMediaReleasePolicy < ApplicationPolicy
end
def destroy?
user.manager? || user.account_manager?
true
end
def tag_multiple?

View File

@@ -16,7 +16,7 @@ class AppearanceReleasePolicy < ReleasePolicy
end
def destroy?
user.manager? || user.account_manager?
true
end
def tag_multiple?

View File

@@ -16,7 +16,7 @@ class LocationReleasePolicy < ReleasePolicy
end
def destroy?
user.manager? || user.account_manager?
true
end
def edit_photos?

View File

@@ -16,7 +16,7 @@ class MaterialReleasePolicy < ReleasePolicy
end
def destroy?
user.manager? || user.account_manager?
true
end
def edit_photos?

View File

@@ -12,7 +12,7 @@ class MedicalReleasePolicy < ReleasePolicy
end
def destroy?
user.manager? || user.account_manager?
true
end
def edit_photos?

View File

@@ -12,7 +12,7 @@ class MiscReleasePolicy < ReleasePolicy
end
def destroy?
user.manager? || user.account_manager?
true
end
def edit_photos?

View File

@@ -12,7 +12,7 @@ class MusicReleasePolicy < ReleasePolicy
end
def destroy?
user.manager? || user.account_manager?
true
end
def tag_multiple?

View File

@@ -36,8 +36,4 @@ class ProjectPolicy < ApplicationPolicy
def show_downloads?
show?
end
def show_task_results?
show?
end
end

View File

@@ -12,7 +12,7 @@ class TalentReleasePolicy < ReleasePolicy
end
def destroy?
user.manager? || user.account_manager?
true
end
def edit_photos?

View File

@@ -1,29 +0,0 @@
class TaskRequestPolicy < ApplicationPolicy
def index?
true
end
def show?
true
end
def create?
true
end
def destroy?
true
end
def update?
true
end
def cancel?
true
end
def open_deliverable?
true
end
end

View File

@@ -151,24 +151,6 @@ class Analytics
)
end
end
def track_create_task_request(user_agent:, user_ip:)
if analytics_enabled?
identify
track(
{
user_id: user.id,
event: "Task request created",
properties: {
account: account.try(:name),
account_id: account.try(:id),
user_agent: user_agent,
ip: user_ip,
},
}
)
end
end
private

View File

@@ -7,9 +7,6 @@
<li class="nav-item">
<%= link_to fa_icon("users fw", text: "Users"), [:admin, :users], class: class_string("nav-link", "active" => controller_name == "users") %>
</li>
<li class="nav-item">
<%= link_to fa_icon("tasks fw", text: "Task Requests"), [:admin, :task_requests], class: class_string("nav-link", "active" => controller_name == "task_requests") %>
</li>
<li class="nav-item">
<%= link_to fa_icon("bug fw", text: "Errors"), "https://sentry.io/bigmedia/", class: "nav-link", target: :_blank %>
</li>

View File

@@ -1,13 +0,0 @@
<%= errors_summary_for task_request %>
<%= bootstrap_form_with model: model, local: true do |form| %>
<%= form.select :status, options_for_select(TaskRequest.statuses.except(:cancelled).keys, task_request.status), {}, class: "form-control custom-select" %>
<%= form.text_field :deliverable_url %>
<div class="row align-items-center text-center mt-4">
<%= link_to t("shared.cancel"), [:admin, :task_requests], class: "col-3 text-reset" %>
<div class="col-9">
<%= form.submit class: class_string("btn btn-block", ["btn-success", "btn-primary"] => task_request.new_record?), data: { disable_with: t("shared.disable_with") } %>
</div>
</div>
<% end %>

View File

@@ -1,32 +0,0 @@
<tr id="<%= dom_id(task_request) %>">
<td>
<%= task_request.id %>
</td>
<td>
<%= task_request.project.account.name %>
</td>
<td>
<%= task_request.project.name %>
</td>
<td>
<%= task_request.created_at.strftime("%D") %>
</td>
<td>
<%= task_request.deadline.try(:strftime, '%D') %>
</td>
<td>
<%= task_request.time_allowed %>
</td>
<td>
<%= task_request.status.titleize %>
</td>
<td class="text-right">
<div class="btn-group">
<%= button_tag "Manage", class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
<div class="dropdown-menu dropdown-menu-right">
<%= link_to fa_icon("tasks", text: "View"), [:admin, task_request], class: "dropdown-item", target: '_blank' %>
<%= link_to fa_icon("pencil", text: "Edit"), [:edit, :admin, task_request], class: "dropdown-item" %>
</div>
</div>
</td>
</tr>

View File

@@ -1,6 +0,0 @@
<div class="card shadow-sm">
<%= card_header text: "Edit Task Request", close_action_path: [:admin, :task_requests] %>
<div class="card-body">
<%= render "form", model: [:admin, @task_request], task_request: @task_request %>
</div>
</div>

View File

@@ -1,25 +0,0 @@
<div class="border bg-white rounded shadow-sm pb-3 table-responsive">
<table class="table table-striped tr-px-4 align-all-middle">
<thead class="thead-light">
<tr>
<th>Task ID</th>
<th>Account Name</th>
<th>Project Name</th>
<th>Created On</th>
<th>Deadline</th>
<th>Time Allowed</th>
<th>Status</th>
<th></th>
</tr>
</thead>
<tbody id="users">
<% if @task_requests.any? %>
<%= render @task_requests %>
<% else %>
<tr>
<td colspan="20" class="py-4 text-center text-muted"><%= t(".empty") %></td>
</tr>
<% end %>
</tbody>
</table>
</div>

View File

@@ -1,49 +0,0 @@
<div class="card shadow-sm">
<%= card_header text: "Task Details", close_action_path: [:admin, :task_requests] %>
<div class="card-body">
<div class="row">
<div class="col-md-6 col-sm-12">
<dl>
<%= description_list_pair_for @task_request.project.account, :name, custom_label: "Account Name", append: ":" %>
<%= description_list_pair_for @task_request.project, :name, custom_label: "Project Name", append: ":" %>
<%= description_list_pair_for @task_request, :created_at, append: ":" %>
<%= description_list_pair_for @task_request, :user_email, append: ":" %>
<%= description_list_pair_for @task_request, :status, append: ":" %>
</dl>
</div>
<div class="col-md-6 col-sm-12">
<dl>
<%= description_list_pair_for @task_request, :deadline, append: ":" %>
<%= description_list_pair_for @task_request, :time_allowed, append: ":" %>
<%= description_list_pair_for @task_request, :description, append: ":" %>
<%= description_list_pair_for @task_request, :additional_notes, append: ":" %>
</dl>
</div>
<div class="col-md-12">
<h2 class="h6 mt-3">Files:</h2>
<div class="pt-2 mx-n3">
<table class="table table-striped tr-px-4 align-all-middle">
<thead class="thead-light">
<tr>
<th>Filename</th>
<th></th>
</tr>
</thead>
<tbody id="task_requests">
<% if @files.any? %>
<%= render partial: "task_requests/file", collection: @files %>
<% else %>
<tr>
<td colspan="12" class="py-4 text-center text-muted"><%= t(".empty") %></td>
</tr>
<% end %>
</tbody>
</table>
<div class="mt-4" id="task_requests_pagiantion">
<%= will_paginate @files %>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -11,14 +11,6 @@
<hr class="divider-light mx-n4">
<nav>
<ul class="nav nav-pills nav-pills-dark flex-column">
<% if Current.account.taskme_enabled? %>
<li class="nav-item">
<%= link_to [project, :task_requests], class: class_string("nav-link", "active" => controller_name == "task_requests") do %>
<%= lock_icon_for(Current.account, :taskme) %>
<%= product_wordmark :task_me, class: class_string("d-inline-block", "disabled" => !Current.account.taskme_enabled?) %>
<% end %>
</li>
<% end %>
<li class="nav-item">
<%= link_to [project, :contract_templates], class: class_string("nav-link", "active" => %w(contract_templates release_template_imports).include?(controller_name)) do %>
<%= lock_icon_for Current.account, :releaseme %>

View File

@@ -33,7 +33,7 @@
<%= link_to "Switch View", "#", class: "btn btn-light border dropdown-toggle", role: "button", id: "dropdownMenuLink", data: { toggle: "dropdown" }, aria: { haspopup: "true", expanded: "false" } %>
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<h5 class="dropdown-header">Live Streams</h5>
<%= link_to fa_icon("check", text: @broadcast.name.titleize), "#", class: "dropdown-item active" %>
<span class="dropdown-item active"><%= fa_icon("check", text: @broadcast.name.titleize) %></span>
<% @multi_view_broadcasts.each do |broadcast| %>
<% if broadcast.id != @broadcast.id %>
<%= link_to broadcast.name.titleize, broadcast.url, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %>
@@ -159,4 +159,4 @@
</div>
</div>
</div>
</div>
<div>

View File

@@ -1,51 +0,0 @@
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<%= product_wordmark :direct_me, prefix: t('.headings.welcome'), class: "h2" %>
<p class="text-muted"><%= t '.headings.subtitle' %>
</div>
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
<% if policy(Broadcast).new? %>
<%= link_to t(".actions.create_stream"), [:new, @project, :broadcast], class: "btn btn-success border align-self-center h-50 pb-2" %>
<% end %>
</div>
<hr>
<div class="pt-2">
<div class="row">
<div class="col">
<div class="card-body p-0">
<div class="embed-responsive embed-responsive-16by9">
<div class="embed-responsive-item">
<iframe src="https://player.vimeo.com/video/435200320?app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen" allowfullscreen title="DirectME_How to_V5"></iframe>
</div>
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col">
<h3><%= t '.headings.how_it_works' %></h3>
<ol>
<li><%= t '.list_items.create_stream' %></li>
<li><%= t '.list_items.share_stream' %></li>
<li><%= t '.list_items.launch_video_conference' %></li>
<li><%= t '.list_items.share_files' %></li>
</ol>
</div>
</div>
<div class="row">
<div class="col">
<h3><%= t '.headings.benefits' %></h3>
<ul class="fa-ul ml-5">
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.stream_from_mobile_app'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.direct_shoots_anywhere'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.share_live_stream'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.stream_multiple_cameras'))) %>
</ul>
</div>
</div>
</div>
</div>
</div>

View File

@@ -2,7 +2,7 @@
<%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
<div class="form-row">
<%= form.text_field :name, wrapper_class: "col-sm-6" %>
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc) } }, class: "form-control custom-select" %>
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical) } }, class: "form-control custom-select" %>
</div>
<div class="form-row" id="fee_field">
<%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", wrapper_class: "col-sm-6" %>

View File

@@ -1,50 +0,0 @@
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<%= product_wordmark :release_me, prefix: t('.headings.welcome'), class: "h2" %>
<p class="text-muted"><%= t '.headings.subtitle' %>
</div>
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
<% if policy(ContractTemplate).new? %>
<%= link_to t(".actions.create_template"), [:new, @project, :contract_template], class: "btn btn-success border align-self-center h-50 pb-2" %>
<% end %>
</div>
<hr>
<div class="pt-2">
<div class="row">
<div class="col">
<div class="card-body p-0">
<div class="embed-responsive embed-responsive-16by9">
<div class="embed-responsive-item">
<iframe src="https://player.vimeo.com/video/435200486?app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen" allowfullscreen title="ReleaseME_How to_V5"></iframe>
</div>
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col">
<h3><%= t '.headings.how_it_works' %></h3>
<ol>
<li><%= t '.list_items.create_releases' %></li>
<li><%= t '.list_items.download_mobile_app' %></li>
<li><%= t '.list_items.print_QR_code' %></li>
<li><%= t '.list_items.releases_automatically_organized' %></li>
</ol>
</div>
</div>
<div class="row">
<div class="col">
<h3><%= t '.headings.benefits' %></h3>
<ul class="fa-ul ml-5">
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.all_releases_available'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.manage_large_audience'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.add_tags_and_notes'))) %>
</ul>
</div>
</div>
</div>
</div>
</div>

View File

@@ -1,8 +1,8 @@
<p class="heading"><strong><u><%= t ".heading.#{releasable.model_name.param_key}" %></u></strong></p>
<p class="heading"><strong><u><%= t ".heading" %></u></strong></p>
<% (1..releasable.class::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
<% if contract_template.public_send("question_#{n}_text").present? %>
<p><strong><%= contract_template.public_send("question_#{n}_text") %></strong></p>
<p><%= releasable.public_send("question_#{n}_answer") %></p>
<% end %>
<% end %>
<% end %>

View File

@@ -16,9 +16,9 @@
<%= contract_template.guardian_clause %>
<% end %>
<% if releasable.model_name.in? %w(MedicalRelease MiscRelease) %>
<% if releasable.model_name == "MedicalRelease" %>
<div class="page">
<%= render "contracts/questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
<%= render "contracts/medical_questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
</div>
<% end %>

View File

@@ -16,11 +16,6 @@
<%= link_to t("projects.show.downloads"), [@project, :downloads], class: "text-decoration-none text-reset stretched-link" %>
<% end %>
<% end %>
<% if policy(Project).show_task_results? %>
<%= render "folder_card" do %>
<%= link_to t("projects.show.tasks"), [@project, :tasks], class: "text-decoration-none text-reset stretched-link" %>
<% end %>
<% end %>
</div>
<hr/>

View File

@@ -16,7 +16,7 @@
<% unless @contract_template.guardian_clause.blank? %>
<%= form.form_group :minor do %>
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<% end %>
<%= card_field_set_tag t(".guardian_clause.heading") do %>
@@ -72,12 +72,12 @@
<div class="<%= class_string("collapse" => !@appearance_release.minor?) %>" data-ujs-target="guardian-fields">
<%= card_field_set_tag t(".guardian_info.heading") do %>
<div class="form-row">
<%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
<%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %>
<%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %>
<%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
<%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
</div>
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor?, data: { required_tag: "guardian" } %>
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor? %>
<% end %>
<hr>

View File

@@ -16,7 +16,7 @@
<% unless @contract_template.guardian_clause.blank? %>
<%= form.form_group :minor do %>
<%= form.check_box :minor, label: t("helpers.label.medical_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<%= form.check_box :minor, label: t("helpers.label.medical_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<% end %>
<%= card_field_set_tag t(".guardian_clause.heading") do %>
@@ -30,7 +30,7 @@
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
<% if @contract_template.public_send("question_#{n}_text").present? %>
<div class="form-row">
<%= form.text_area "question_#{n}_answer", required: true, wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
</div>
<% end %>
<% end %>
@@ -59,12 +59,14 @@
<div class="<%= class_string("collapse" => !@medical_release.minor?) %>" data-ujs-target="guardian-fields">
<%= card_field_set_tag t(".guardian_info.heading") do %>
<div class="form-row">
<%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
<%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %>
<%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %>
<%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6" %>
</div>
<%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor?, data: { required_tag: "guardian" } %>
<div class="form-row">
<%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6" %>
</div>
<%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor? %>
<% end %>
<hr>

View File

@@ -11,7 +11,7 @@
<% unless @contract_template.guardian_clause.blank? %>
<%= form.form_group :minor do %>
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<% end %>
<%= card_field_set_tag t(".guardian_clause.heading") do %>
@@ -20,19 +20,6 @@
<hr>
<% end %>
<% if @contract_template.has_questionnaire? %>
<%= card_field_set_tag t(".questionnaire.heading") do %>
<% (1..MiscRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
<% if @contract_template.public_send("question_#{n}_text").present? %>
<div class="form-row">
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
</div>
<% end %>
<% end %>
<% end %>
<hr>
<% end %>
<%= card_field_set_tag t(".personal_info.heading") do %>
<div class="alert alert-warning font-weight-bold"><%= t ".personal_info.instructions" %></div>
<div class="form-row">
@@ -56,12 +43,14 @@
<div class="<%= class_string("collapse" => !@misc_release.minor?) %>" data-ujs-target="guardian-fields">
<%= card_field_set_tag t(".guardian_info.heading") do %>
<div class="form-row">
<%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %>
<%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %>
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
</div>
<%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
<div class="form-row">
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
</div>
<%= render "shared/address_fields", form: form, subject: "guardian" %>
<% end %>
<hr>

View File

@@ -16,7 +16,7 @@
<% unless @contract_template.guardian_clause.blank? %>
<%= form.form_group :minor do %>
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
<% end %>
<%= card_field_set_tag t(".guardian_clause.heading") do %>
@@ -46,12 +46,12 @@
<div class="<%= class_string("collapse" => !@talent_release.minor?) %>" data-ujs-target="guardian-fields">
<%= card_field_set_tag t(".guardian_info.heading") do %>
<div class="form-row">
<%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
<%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %>
<%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %>
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
</div>
<%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %>
<%= render "shared/address_fields", form: form, subject: "guardian" %>
<% end %>
<hr>

View File

@@ -1,15 +1,14 @@
<% field_name_prefix = subject.present? ? "#{subject}_" : "" %>
<% required = required || false %>
<% data = data || nil %>
<div class="form-row">
<%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6", data: data %>
<%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6" %>
<%= form.text_field "#{field_name_prefix}address_street2", wrapper_class: "col-sm-6" %>
</div>
<div class="form-row">
<%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6", data: data %>
<%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3", data: data %>
<%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3", data: data %>
<%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6" %>
<%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3" %>
<%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3" %>
</div>
<%= form.form_group "#{field_name_prefix}address_country" do %>
<%= form.label "#{field_name_prefix}address_country" %>

View File

@@ -1,6 +0,0 @@
<tr>
<td><%= file.filename %></td>
<td class="text-right">
<%= link_to fa_icon("download"), file, target: "_blank" %>
</td>
</tr>

View File

@@ -1,39 +0,0 @@
<%= errors_summary_for task_request %>
<%= bootstrap_form_with model: model, url: [@project, @task_request, show_chat: true], local: true do |form| %>
<div class="alert alert-info text-center text-md-left">
<%= fa_icon "info-circle" %>
<strong><%= t '.info_message' %></strong>
</div>
<%= form.text_area :description, label: t('.labels.description') %>
<%= form.text_field :deadline, class: "datepicker-control", label: t('.labels.deadline') %>
<%= form.number_field :time_allowed, label: t('.labels.time_allowed'), min: 2, step: 1, pattern: "\d+" %>
<%= form.text_area :additional_notes, label: t('.labels.additional_notes') %>
<%= field_set_tag content_tag(:span, t('.labels.files'), class: "h6 text-muted text-uppercase") do %>
<div class="field d-none">
<%= form.label :files %>
<%= form.file_field :files, disable: true, direct_upload: true, multiple: true, id: "task_request_files", hide_label: true %>
<% task_request.files.each do |file| %>
<% unless file.persisted? %>
<%= hidden_field_tag "#{task_request.model_name.param_key}[files][]", file.signed_id %>
<% end %>
<% end %>
</div>
<div class="dropzone field border-dashed"
data-accepted-files="audio/*,image/*,video/*,application/*"
data-behavior="dropzone"
data-file-input-id="task_request_files"
data-existing-files="<%= mock_photos_json(task_request.files) %>"
data-placeholder="<%= dropzone_placeholder_message_for(task_request) %>"
data-submit-button="#submit_folder"></div>
<% end %>
<div class="row align-items-center text-center mt-4">
<%= link_to t("shared.cancel"), [project, :task_requests], class: "col-3 text-reset" %>
<div class="col-9">
<%= form.submit class: class_string("btn btn-block", ["btn-success", "btn-primary"] => task_request.new_record?), data: { disable_with: t("shared.disable_with") } %>
</div>
</div>
<% end %>

View File

@@ -1,45 +0,0 @@
<tr>
<td>
<%= task_request.created_at.strftime('%D') %>
</td>
<td>
<%= task_request.deadline.try(:strftime, '%D') %>
</td>
<td>
<%= truncate(task_request.description) {
link_to t('.actions.read_more'),
'#',
class: 'alert-link',
data: {
toggle: "popover",
content: task_request.description,
trigger: "hover"
}
} %>
</td>
<td>
<%= task_request.time_allowed %>
</td>
<td>
<%= task_request.status.titleize %>
</td>
<td class="text-right">
<div class="btn-group">
<%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
<div class="dropdown-menu dropdown-menu-right">
<% if policy(task_request).show? %>
<%= link_to fa_icon("tasks fw", text: "View"), [task_request.project, task_request], class: "dropdown-item", target: '_blank' %>
<% end %>
<% if policy(task_request).edit? %>
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, task_request.project, task_request], class: "dropdown-item" %>
<% end %>
<% if policy(task_request).open_deliverable? && task_request.status == "completed" %>
<%= link_to fa_icon("external-link fw", text: t(".actions.open_deliverable")), task_request.deliverable_url, class: "dropdown-item", target: '_blank' %>
<% end %>
<% if policy(task_request).cancel? && !task_request.cancelled? %>
<%= link_to fa_icon("ban fw", text: "Cancel"), [:cancel, task_request.project, task_request], class: "dropdown-item", method: :post %>
<% end %>
</div>
</div>
</td>
</tr>

View File

@@ -1,15 +0,0 @@
<% if params[:show_chat] %>
<%= javascript_include_tag "//js.hs-scripts.com/7344617.js", defer: "defer", async: true, id: "hs-script-loader" %>
<%= javascript_tag nonce: true do %>
function onConversationsAPIReady() {
window.HubSpotConversations.widget.load({ widgetOpen: true });
window.HubSpotConversations.widget.open();
}
if (window.HubSpotConversations) {
onConversationsAPIReady();
} else {
window.hsConversationsOnReady = [onConversationsAPIReady];
}
<% end %>
<% end %>
<p class="alert alert-success p-3 lead text-center"><%= t '.success_message' %></p>

View File

@@ -1,6 +0,0 @@
<div class="card shadow-sm">
<%= card_header text: t(".heading"), close_action_path: [@project, :task_requests] %>
<div class="card-body">
<%= render "form", model: [@project, @task_request], task_request: @task_request, project: @project %>
</div>
</div>

View File

@@ -1,39 +0,0 @@
<%= product_wordmark :task_me, class: "small mb-3" %>
<div class="row">
<div class="col-md-12">
<div class="d-md-flex d-sm-flex flex-sm-column flex-md-row flex-md-wrap mb-3">
<% if policy(TaskRequest).new? %>
<%= link_to fa_icon("plus", text: t(".actions.new")), [:new, @project, :task_request], class: "btn btn-primary mb-2" %>
<% end %>
</div>
</div>
</div>
<div class="border bg-white rounded shadow-sm pb-3 table-responsive">
<table class="table table-striped tr-px-4 align-all-middle">
<thead class="thead-light">
<tr>
<th><%= t(".table_headers.task_request_created_on") %></th>
<th><%= t(".table_headers.task_request_deadline") %></th>
<th><%= t(".table_headers.task_request_description") %></th>
<th><%= t(".table_headers.task_request_time_allowed") %></th>
<th><%= t(".table_headers.task_request_status") %></th>
<th></th>
</tr>
</thead>
<tbody id="task_requests">
<% if @task_requests.any? %>
<%= render @task_requests %>
<% else %>
<tr>
<td colspan="20" class="py-4 text-center text-muted"><%= t(".empty") %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
<div id="task_requests_pagination" class="mt-3">
<%= will_paginate @task_requests %>
</div>

View File

@@ -1,6 +0,0 @@
<div class="card shadow-sm">
<%= card_header text: t(".heading"), close_action_path: [@project, :task_requests] %>
<div class="card-body">
<%= render "form", model: [@project, @task_request], task_request: @task_request, project: @project %>
</div>
</div>

View File

@@ -1,46 +0,0 @@
<div class="card shadow-sm">
<%= card_header text: "Task Details", close_action_path: [@project, :task_requests] %>
<div class="card-body">
<div class="row">
<div class="col-md-6 col-sm-12">
<dl>
<%= description_list_pair_for @task_request, :description, append: ":" %>
<%= description_list_pair_for @task_request, :created_at, append: ":" %>
<%= description_list_pair_for @task_request, :status, append: ":" %>
</dl>
</div>
<div class="col-md-6 col-sm-12">
<dl>
<%= description_list_pair_for @task_request, :deadline, append: ":" %>
<%= description_list_pair_for @task_request, :time_allowed, append: ":" %>
<%= description_list_pair_for @task_request, :additional_notes, append: ":" %>
</dl>
</div>
<div class="col-md-12">
<h2 class="h6 mt-3">Files:</h2>
<div class="pt-2 mx-n3">
<table class="table table-striped tr-px-4 align-all-middle">
<thead class="thead-light">
<tr>
<th>Filename</th>
<th></th>
</tr>
</thead>
<tbody id="task_requests">
<% if @files.any? %>
<%= render partial: "file", collection: @files %>
<% else %>
<tr>
<td colspan="12" class="py-4 text-center text-muted"><%= t(".empty") %></td>
</tr>
<% end %>
</tbody>
</table>
<div class="mt-4" id="task_requests_pagiantion">
<%= will_paginate @files %>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -1,58 +0,0 @@
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<%= product_wordmark :task_me, prefix: t('.headings.welcome'), class: "h2" %>
<p class="text-muted"><%= t '.headings.subtitle' %>
</div>
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
<% if policy(TaskRequest).new? %>
<%= link_to t(".actions.create_task_request"), [:new, @project, :task_request], class: "btn btn-success border align-self-center h-50 pb-2" %>
<% end %>
</div>
<hr>
<div class="pt-2">
<div class="row">
<div class="col">
<div class="card-body p-0">
<div class="embed-responsive embed-responsive-16by9">
<div class="embed-responsive-item">
<table class="w-100 h-100 bg-secondary">
<tbody>
<tr>
<td class="text-center align-middle text-white">
Video tutorial will be available soon
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col">
<h3><%= t '.headings.how_it_works' %></h3>
<ol>
<li><%= t '.list_items.enter_task_request' %></li>
<li><%= t '.list_items.state_deadline' %></li>
<li><%= t '.list_items.enter_number_of_hours' %></li>
<li><%= t '.list_items.virtual_assistant_delivers_task' %></li>
</ol>
</div>
</div>
<div class="row">
<div class="col">
<h3><%= t '.headings.benefits' %></h3>
<ul class="fa-ul ml-5">
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_need_for_full_time_staff'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_workload'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.spend_per_task'))) %>
</ul>
</div>
</div>
</div>
</div>
</div>

View File

@@ -1,17 +0,0 @@
<tr>
<td>
<%= task.created_at.strftime('%D') %>
</td>
<td>
<%= task.deadline.try(:strftime, '%D') %>
</td>
<td>
<%= task.time_allowed %>
</td>
<td>
<%= task.status.titleize %>
</td>
<td>
<%= link_to "View Deliverable", task.deliverable_url, target: "_blank" %>
</td>
</tr>

View File

@@ -1,26 +0,0 @@
<div class="border bg-white rounded shadow-sm pb-3 table-responsive">
<table class="table table-striped tr-px-4 align-all-middle">
<thead class="thead-light">
<tr>
<th><%= t(".table_headers.task_request_created_on") %></th>
<th><%= t(".table_headers.task_request_deadline") %></th>
<th><%= t(".table_headers.task_request_time_allowed") %></th>
<th><%= t(".table_headers.task_request_status") %></th>
<th><%= t(".table_headers.task_request_results") %></th>
</tr>
</thead>
<tbody id="task_requests">
<% if @tasks.any? %>
<%= render partial: "task", collection: @tasks %>
<% else %>
<tr>
<td colspan="5" class="py-4 text-center text-muted"><%= t(".empty") %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
<div id="task_requests_pagination" class="mt-3">
<%= will_paginate @tasks %>
</div>

View File

@@ -1,51 +0,0 @@
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<%= product_wordmark :deliver_me, prefix: t('.headings.welcome'), class: "h2" %>
<p class="text-muted"><%= t '.headings.subtitle' %>
</div>
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
<% if policy(Video).new? %>
<%= link_to t(".actions.upload_video"), [:new, @project, :video], class: "btn btn-success border align-self-center h-50 pb-2" %>
<% end %>
</div>
<hr>
<div class="pt-2">
<div class="row">
<div class="col">
<div class="card-body p-0">
<div class="embed-responsive embed-responsive-16by9">
<div class="embed-responsive-item">
<iframe src="https://player.vimeo.com/video/435200434?app_id=122963" width="426" height="240" frameborder="0" allow="autoplay; fullscreen" allowfullscreen title="DeliverME_How to_V5"></iframe>
</div>
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col">
<h3><%= t '.headings.how_it_works' %></h3>
<ol>
<li><%= t '.list_items.import_video' %></li>
<li><%= t '.list_items.import_EDLs' %></li>
<li><%= t '.list_items.AI_generates_documents' %></li>
<li><%= t '.list_items.download_documents' %></li>
</ol>
</div>
</div>
<div class="row">
<div class="col">
<h3><%= t '.headings.benefits' %></h3>
<ul class="fa-ul ml-5">
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.reduces_labor_cost'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.more_accurate'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.simplifies_cue_sheets'))) %>
<%= content_tag(:li, fa_icon("check li", text: t('.list_items.production_elements_logs'))) %>
</ul>
</div>
</div>
</div>
</div>
</div>

View File

@@ -97,13 +97,6 @@ en:
application:
header:
sign_out: Sign Out
task_requests:
index:
empty: Task requests will appear here
show:
empty: Attached files will appear here.
update:
notice: The task request has been updated successfully
users:
create:
notice: The user was created
@@ -207,24 +200,6 @@ en:
new:
heading:
Create Live Stream
splash:
actions:
book_demo: Schedule a Demo
create_stream: Create New Live Stream
headings:
benefits: Benefits
how_it_works: How It Works
subtitle: Remote directing and video village solution
welcome: Welcome to
list_items:
create_stream: Create a live stream
direct_shoots_anywhere: Direct shoots anywhere around the world
launch_video_conference: Launch Video Conference using plugin
share_files: Share files via the ME Suite mobile app
share_live_stream: Share live stream with clients all over the the world
share_stream: Share live stream link with clients
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
stream_multiple_cameras: Stream multiple cameras at one time
bulk_taggings:
new_bulk_tag_modal:
submit: Add
@@ -251,7 +226,7 @@ en:
archived_notice: The release template has been archived
form:
custom_fields:
heading: Questionnaire
heading: Medical Questionnaire
instructions: Please list the questions you wish the signer to answer. Any unused question fields will be hidden.
exploitable_rights:
heading: Exploitable Rights
@@ -270,24 +245,9 @@ en:
signed_release_count: No. Signed Releases
new:
heading: New Release Template
splash:
actions:
book_demo: Schedule a Demo
create_template: Create New Release Template
headings:
benefits: Benefits
how_it_works: How It Works
subtitle: The easiest way to create and manage releases.
welcome: Welcome to
list_items:
add_tags_and_notes: Add tags and notes to releases for added organization and searchability
all_releases_available: All release types available including Covid Medical, Appearance, Location and more
create_releases: Create releases for your video shoot
download_mobile_app: Download the ME Suite mobile app
manage_large_audience: Easily manage large audiences with the crowd control feature
print_QR_code: Print out release QR codes
releases_automatically_organized: Releases are automatically organized as theyre submitted
contracts:
medical_questionnaire:
heading: Medical Questionnaire
photos:
guardian_2_photo_heading: Second guardian photo
guardian_photo_heading: Guardian photo
@@ -297,10 +257,6 @@ en:
minor_photos_heading:
one: Minor photo
other: Minor photos
questionnaire:
heading:
medical_release: Medical Questionnaire
misc_release: Questionnaire
signature_page:
heading: Signature Page
instructions: "By signing this signature page, as of the date listed below, I hereby agree, acknowledge and accept the terms and conditions listed in this %{releasable_name}."
@@ -364,8 +320,6 @@ en:
contract_template:
fee: Leave at $0.00 for no-fee
guardian_clause: Leave blank if not required for this contract
task_request:
time_allowed: Minimum of 2 hours, no partial hours allowed
video:
audio_only_edl_file: If you do not upload an Audio Only EDL, the software will not generate a BiG Music Cue Sheet.
edl_file: Please follow our directions on exporting the All Tracks EDL. Failure to do so could result in inaccurate and incomplete reporting.
@@ -488,30 +442,6 @@ en:
person_last_name: Last name
person_name: Name
person_phone: Phone number
misc_release:
guardian_address_city: Guardian city
guardian_address_country: Guardian country
guardian_address_state: Guardian state
guardian_address_street1: Guardian address
guardian_address_street2: Guardian address (Line 2)
guardian_address_zip: Guardian zip code
guardian_email: Guardian email
guardian_first_name: Guardian first name
guardian_last_name: Guardian last name
guardian_phone: Guardian phone
minor: Is the person a minor?
person_address_city: City
person_address_country: Country
person_address_state: State
person_address_street1: Address
person_address_street2: Address (Line 2)
person_address_zip: Zip code
person_date_of_birth: Date of birth
person_email: Email address
person_first_name: First name
person_last_name: Last name
person_name: Name
person_phone: Phone number
music_release:
person_address: Address
person_address_city: City
@@ -772,8 +702,6 @@ en:
update:
notice: The material release has been updated
medical_releases:
custom_validation_errors:
question_answer_is_required: answer is required
destroy:
alert: The medical release has been deleted
index:
@@ -939,7 +867,6 @@ en:
music_release: Music Releases (%{count})
report: Reports
talent_release: Talent Releases (%{count})
tasks: Tasks
public:
acquired_media_releases:
new:
@@ -1087,8 +1014,6 @@ en:
instructions: Now, enter your personal information.
photo:
heading: Photos
questionnaire:
heading: Questionnaire
signature:
heading: Signature
talent_releases:
@@ -1193,7 +1118,6 @@ en:
tag_multiple_releases: Add Tag
tag_multiple_releases_form:
submit: Add
task_me: Task
tags:
form:
submit: Add
@@ -1235,71 +1159,6 @@ en:
manage: Manage
update:
notice: The talent release has been updated
task_requests:
cancel:
notice: Task has been cancelled successfully.
create:
notice: Task request created succussfully.
success_message: Your task request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds.
edit:
heading:
Edit Task Request
form:
info_message: After submitting this task request, you'll be connected via chat with a ME Suite representative.
labels:
additional_notes: Please add any additional notes we should be aware of regarding this task.
deadline: What is the deadline for this task?
description: Please describe the task.
files: Please attach any files related to this task
time_allowed: How many hours would you like a TaskME representative to work on this task?
index:
actions:
new: Create Task Request
empty: Task requests will appear here.
table_headers:
task_request_created_on: Created On
task_request_deadline: Deadline
task_request_description: Description
task_request_results: Task Results
task_request_status: Status
task_request_time_allowed: Time Allowed
new:
heading: New Task Request
show:
empty: Attached files will appear here.
splash:
actions:
book_demo: Schedule a Demo
create_task_request: Create Task Request
headings:
benefits: Benefits
how_it_works: How It Works
subtitle: Pay-by-the-hour, digitally-enabled remote assistants
welcome: Welcome to
list_items:
enter_number_of_hours: Enter the number of hours you want the task worked on
enter_task_request: Enter your task request
reduces_need_for_full_time_staff: Reduces need to hire full-time staff
reduces_workload: Reduces workload for current staff
spend_per_task: Spend as little as $60 per task
state_deadline: State your deadline
virtual_assistant_delivers_task: Virtual assistant delivers task via TaskME portal
task_request:
actions:
manage: Manage
open_deliverable: Open Deliverable
read_more: read more
update:
notice: Task request updated successfully.
tasks:
index:
empty: Tasks will appear here.
table_headers:
task_request_created_on: Created On
task_request_deadline: Deadline
task_request_results: Task Results
task_request_status: Status
task_request_time_allowed: Time Allowed
user_mailer:
existing_account:
subject: You've been added as a ME Suite Account Manager
@@ -1355,24 +1214,6 @@ en:
new:
heading: Upload Video
subheading: 2 of 2 Files
splash:
actions:
book_demo: Schedule a Demo
upload_video: Upload New Video
headings:
benefits: Benefits
how_it_works: How It Works
subtitle: Automate your deliverable documents
welcome: Welcome to
list_items:
AI_generates_documents: AI generates deliverable documents
download_documents: Download deliverable documents
import_EDLs: Import your EDLs
import_video: Import your video
more_accurate: More accurate than human-generated reports
production_elements_logs: Production Elements Logs, and more
reduces_labor_cost: Reduces labor costs
simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets
update:
notice: The video has been updated
video:

View File

@@ -57,25 +57,6 @@ es:
pdf:
do_not_copy_warning: "Do not copy (ES)"
serial_number_label: "Serial Number (ES)"
broadcasts:
splash:
actions:
book_demo: Schedule a Demo
create_stream: Create New Live Stream
headings:
benefits: Benefits
how_it_works: How It Works
subtitle: Remote directing and video village solution
welcome: Welcome to
list_items:
create_stream: Create a live stream
direct_shoots_anywhere: Direct shoots anywhere around the world
launch_video_conference: Launch Video Conference using plugin
share_files: Share files via the ME Suite mobile app
share_live_stream: Share live stream with clients all over the the world
share_stream: Share live stream link with clients
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
stream_multiple_cameras: Stream multiple cameras at one time
contract_templates:
blank_contracts:
create:
@@ -89,23 +70,6 @@ es:
heading: Legal (ES)
release_info:
heading: Release Info (ES)
splash:
actions:
book_demo: Schedule a Demo (ES)
create_template: Create New Release Template (ES)
headings:
benefits: ""
how_it_works: How It Works (ES)
subtitle: The easiest way to create and manage releases. (ES)
welcome: Welcome to (ES)
list_items:
add_tags_and_notes: Add tags and notes to releases for added organization and searchability (ES)
all_releases_available: All release types available including Covid Medical, Appearance, Location and more (ES)
create_releases: Create releases for your video shoot (ES)
download_mobile_app: Download the ME Suite mobile app (ES)
manage_large_audience: Easily manage large audiences with the crowd control feature (ES)
print_QR_code: Print out release QR codes (ES)
releases_automatically_organized: Releases are automatically organized as theyre submitted (ES)
contracts:
photos:
guardian_2_photo_heading: Second guardian photo (ES)
@@ -282,9 +246,6 @@ es:
form:
photos:
dropzone_label: Tap to take a photo of Licensed Material (optional) (ES)
medical_releases:
custom_validation_errors:
question_answer_is_required: answer is required (ES)
public:
appearance_releases:
create:
@@ -389,52 +350,3 @@ es:
heading: Second Guardian Photo (ES)
guardian_photo:
heading: Guardian Photo (ES)
task_requests:
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)
form:
info_message: After submitting this task request, you'll be connected via chat with a ME Suite representative. (ES)
index:
table_headers:
task_request_description: Description (ES)
splash:
actions:
book_demo: Schedule a Demo (ES)
create_task_request: Create Task Request
headings:
benefits: Benefits (ES)
how_it_works: How It Works (ES)
subtitle: Pay-by-the-hour, digitally-enabled remote assistants (ES)
welcome: Welcome to (ES)
list_items:
enter_number_of_hours: Enter the number of hours you want the task worked on (ES)
enter_task_request: Enter your task request (ES)
reduces_need_for_full_time_staff: Reduces need to hire full-time staff (ES)
reduces_workload: Reduces workload for current staff (ES)
spend_per_task: Spend as little as $60 per task (ES)
state_deadline: State your deadline (ES)
virtual_assistant_delivers_task: Virtual assistant delivers task via TaskME portal (ES)
task_request:
actions:
manage: Manage (ES)
open_deliverable: Open Deliverable (ES)
read_more: read more (ES)
videos:
splash:
actions:
book_demo: Schedule a Demo (ES)
upload_video: Upload New Video (ES)
headings:
benefits: Benefits (ES)
how_it_works: How It Works (ES)
subtitle: Automate your deliverable documents (ES)
welcome: Welcome to (ES)
list_items:
AI_generates_documents: AI generates deliverable documents (ES)
download_documents: Download deliverable documents (ES)
import_EDLs: Import your EDLs (ES)
import_video: Import your video (ES)
more_accurate: More accurate than human-generated reports (ES)
production_elements_logs: Production Elements Logs, and more (ES)
reduces_labor_cost: Reduces labor costs (ES)
simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets (ES)

View File

@@ -31,7 +31,6 @@ Rails.application.routes.draw do
resources :users, only: [:index, :new, :create, :edit, :update, :destroy] do
resource :masquerade, only: :create
end
resources :task_requests, only: [:index, :edit, :update, :show]
root to: "accounts#index", as: :signed_in_root
end
@@ -100,12 +99,6 @@ Rails.application.routes.draw do
delete :destroy_file
end
end
resources :task_requests, except: :destroy do
member do
post :cancel
end
end
resources :tasks, only: :index
end
resource :profile, only: [:show, :update]
resources :videos, only: [] do

View File

@@ -1,14 +0,0 @@
class CreateTaskRequests < ActiveRecord::Migration[6.0]
def change
create_table :task_requests do |t|
t.references :project
t.text :description
t.datetime :deadline
t.string :time_allowed
t.text :additional_notes
t.integer :status, default: 0
t.timestamps
end
end
end

View File

@@ -1,5 +0,0 @@
class AddDeliverableUrlToTaskRequests < ActiveRecord::Migration[6.0]
def change
add_column :task_requests, :deliverable_url, :string
end
end

View File

@@ -1,5 +0,0 @@
class AddUserEmailToTaskRequests < ActiveRecord::Migration[6.0]
def change
add_column :task_requests, :user_email, :string
end
end

View File

@@ -1,20 +0,0 @@
class AddQuestionAnswersToMiscReleases < ActiveRecord::Migration[6.0]
def change
add_column :misc_releases, :question_1_answer, :text
add_column :misc_releases, :question_2_answer, :text
add_column :misc_releases, :question_3_answer, :text
add_column :misc_releases, :question_4_answer, :text
add_column :misc_releases, :question_5_answer, :text
add_column :misc_releases, :question_6_answer, :text
add_column :misc_releases, :question_7_answer, :text
add_column :misc_releases, :question_8_answer, :text
add_column :misc_releases, :question_9_answer, :text
add_column :misc_releases, :question_10_answer, :text
add_column :misc_releases, :question_11_answer, :text
add_column :misc_releases, :question_12_answer, :text
add_column :misc_releases, :question_13_answer, :text
add_column :misc_releases, :question_14_answer, :text
add_column :misc_releases, :question_15_answer, :text
end
end

View File

@@ -1101,22 +1101,7 @@ CREATE TABLE public.misc_releases (
signed_at timestamp without time zone,
minor boolean DEFAULT false,
created_at timestamp(6) without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL,
question_1_answer text,
question_2_answer text,
question_3_answer text,
question_4_answer text,
question_5_answer text,
question_6_answer text,
question_7_answer text,
question_8_answer text,
question_9_answer text,
question_10_answer text,
question_11_answer text,
question_12_answer text,
question_13_answer text,
question_14_answer text,
question_15_answer text
updated_at timestamp(6) without time zone NOT NULL
);
@@ -1551,44 +1536,6 @@ CREATE SEQUENCE public.talent_releases_id_seq
ALTER SEQUENCE public.talent_releases_id_seq OWNED BY public.talent_releases.id;
--
-- Name: task_requests; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.task_requests (
id bigint NOT NULL,
project_id bigint,
description text,
deadline timestamp without time zone,
time_allowed character varying,
additional_notes text,
status integer DEFAULT 0,
created_at timestamp(6) without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL,
deliverable_url character varying,
user_email character varying
);
--
-- Name: task_requests_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.task_requests_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: task_requests_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.task_requests_id_seq OWNED BY public.task_requests.id;
--
-- Name: terms; Type: TABLE; Schema: public; Owner: -
--
@@ -2117,13 +2064,6 @@ ALTER TABLE ONLY public.tags ALTER COLUMN id SET DEFAULT nextval('public.tags_id
ALTER TABLE ONLY public.talent_releases ALTER COLUMN id SET DEFAULT nextval('public.talent_releases_id_seq'::regclass);
--
-- Name: task_requests id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.task_requests ALTER COLUMN id SET DEFAULT nextval('public.task_requests_id_seq'::regclass);
--
-- Name: terms id; Type: DEFAULT; Schema: public; Owner: -
--
@@ -2468,14 +2408,6 @@ ALTER TABLE ONLY public.talent_releases
ADD CONSTRAINT talent_releases_pkey PRIMARY KEY (id);
--
-- Name: task_requests task_requests_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.task_requests
ADD CONSTRAINT task_requests_pkey PRIMARY KEY (id);
--
-- Name: terms terms_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
@@ -3114,13 +3046,6 @@ CREATE INDEX index_talent_releases_on_term_id ON public.talent_releases USING bt
CREATE INDEX index_talent_releases_on_territory_id ON public.talent_releases USING btree (territory_id);
--
-- Name: index_task_requests_on_project_id; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_task_requests_on_project_id ON public.task_requests USING btree (project_id);
--
-- Name: index_unreleased_appearances_on_video_id; Type: INDEX; Schema: public; Owner: -
--
@@ -3885,14 +3810,11 @@ INSERT INTO "schema_migrations" (version) VALUES
('20200430190412'),
('20200507110804'),
('20200512161738'),
('20200518200245'),
('20200519191908'),
('20200526113516'),
('20200603090419'),
('20200606044747'),
('20200610085411'),
('20200610140459'),
('20200610143327'),
('20200612121539'),
('20200615131722'),
('20200615133602'),
@@ -3901,7 +3823,6 @@ INSERT INTO "schema_migrations" (version) VALUES
('20200619085823'),
('20200619134853'),
('20200622180507'),
('20200625144713'),
('20200702152130');
('20200625144713');

View File

@@ -57,8 +57,6 @@ RSpec.describe AccountsController, type: :controller do
expect {
post :create, params: params
}.to have_enqueued_job(SubmitHubspotFormJob).with(
"John",
"Doe",
"test_user+1@test.com",
"Test Dev account",
i_m_interested_in: "DirectME"

View File

@@ -1,68 +0,0 @@
require "rails_helper"
RSpec.describe Admin::TaskRequestsController, type: :controller do
render_views
let!(:current_user) { create(:user, :admin) }
before do
sign_in(current_user)
end
describe "#index" do
it "returns a successful response" do
get :index
expect(response).to be_successful
end
end
describe "#edit" do
let(:task_request) { create(:task_request) }
it "returns a successful response" do
get :edit, params: { id: task_request }
expect(response).to be_successful
end
it "assigns task request" do
get :edit, params: { id: task_request }
expect(assigns(:task_request)).to eq task_request
end
end
describe "#update" do
let(:task_request) { create(:task_request) }
it "redirects to task requests page" do
patch :update, params: { id: task_request, task_request: update_params }
expect(response).to be_redirect
expect(response).to redirect_to admin_task_requests_path
end
it "sets a flash notice" do
patch :update, params: { id: task_request, task_request: update_params }
expect(flash.notice).to eq "The task request has been updated successfully"
end
it "updates task request" do
patch :update, params: { id: task_request, task_request: update_params }
expect(task_request.reload.status).to eq("completed")
expect(task_request.reload.deliverable_url).to eq("example.com/deliverables")
end
end
private
def update_params
{
status: "completed",
deliverable_url: "example.com/deliverables"
}
end
end

View File

@@ -37,26 +37,23 @@ RSpec.describe Api::AppearanceReleasesController, type: :controller do
it 'includes photos' do
project = create(:project, account_id: current_user.primary_account.id)
appearance_release = create(:appearance_release,
:with_person_photo, :with_guardian_photo, :with_guardian_2_photo,
project: project)
appearance_release = create(:appearance_release, person_first_name: 'Release', person_last_name: 'Name', project: project)
sign_in_to_api(current_user)
get :show, params: { id: appearance_release.id }
[appearance_release.person_photo, appearance_release.guardian_photo, appearance_release.guardian_2_photo].each do |photo|
data = {
'id' => photo.id.to_s,
'type' => 'active_storage_attachment',
'attributes' => {
'content_type' => photo.content_type,
'filename' => photo.filename.to_s,
'url' => photo_path_for(photo),
'thumbnail_url' => photo_variant_path_for(photo, '150x150')
}
photo = appearance_release.person_photo
data = {
'id' => photo.id.to_s,
'type' => 'active_storage_attachment',
'attributes' => {
'content_type' => photo.content_type,
'filename' => photo.filename.to_s,
'url' => photo_path_for(photo),
'thumbnail_url' => photo_variant_path_for(photo, '150x150')
}
expect(response_body_included_attributes).to include(data)
end
}
expect(response_body_included_attributes).to include(data)
end
end
@@ -187,46 +184,7 @@ RSpec.describe Api::AppearanceReleasesController, type: :controller do
expect(appearance_release.guardian_photo).to be_attached
end
it 'returns 201 for minor without second guardian photo' do
post :create, params: @parameters.deep_merge(appearance_release: {
minor: true,
guardian_2_name: 'Guardian 2 Name',
guardian_2_phone: '101010',
})
expect(response.status).to eq 201
expect(AppearanceRelease.last.signature).to be_attached
expect(AppearanceRelease.last.guardian_2_photo).not_to be_attached
end
it 'returns 201 for minor with second guardian photo' do
post :create, params: @parameters.deep_merge(appearance_release: {
minor: true,
guardian_2_name: 'Guardian 2 Name',
guardian_2_phone: '101010',
guardian_2_photo: {
io: guardian_photo_base64,
filename: 'guardian_2_photo.jpeg'
}
})
expect(response.status).to eq 201
appearance_release = AppearanceRelease.last
photo = appearance_release.guardian_2_photo
data = {
'id' => photo.id.to_s,
'type' => 'active_storage_attachment',
'attributes' => {
'content_type' => photo.content_type,
'filename' => photo.filename.to_s,
'url' => photo_path_for(photo),
'thumbnail_url' => photo_variant_path_for(photo, '150x150')
}
}
expect(response_body_included_attributes).to include(data)
expect(appearance_release.signature).to be_attached
expect(appearance_release.guardian_2_photo).to be_attached
end
end
private

View File

@@ -32,28 +32,26 @@ RSpec.describe Api::TalentReleasesController, type: :controller do
end
it 'includes photos' do
project = create(:project, account_id: current_user.primary_account.id)
talent_release = create(:talent_release,
:with_guardian_photo, :with_guardian_2_photo,
project: project)
tested_release = create("talent_release_with_photo", person_name: 'Release 1', project: project)
sign_in_to_api(current_user)
get :show, params: { id: talent_release.id }
sign_in_to_api(current_user)
get :show, params: { id: tested_release.id }
[talent_release.photos, talent_release.guardian_photo, talent_release.guardian_2_photo].flatten.each do |photo|
data = {
'id' => photo.id.to_s,
'type' => 'active_storage_attachment',
'attributes' => {
'content_type' => photo.content_type,
'filename' => photo.filename.to_s,
'url' => photo_path_for(photo),
'thumbnail_url' => photo_variant_path_for(photo, '150x150')
}
}
expect(response_body_included_attributes).to include(data)
end
end
tested_release.photos.each do |photo|
data = {
'id' => photo.id.to_s,
'type' => 'active_storage_attachment',
'attributes' => {
'content_type' => photo.content_type,
'filename' => photo.filename.to_s,
'url' => photo_path_for(photo),
'thumbnail_url' => photo_variant_path_for(photo, '150x150')
}
}
expect(response_body_included_attributes).to include(data)
end
end
end
describe '#create' do
@@ -182,47 +180,6 @@ RSpec.describe Api::TalentReleasesController, type: :controller do
expect(talent_release.signature).to be_attached
expect(talent_release.guardian_photo).to be_attached
end
it 'returns 201 for minor without second guardian photo' do
post :create, params: @parameters.deep_merge(talent_release: {
minor: true,
guardian_2_name: 'Guardian 2 Name',
guardian_2_phone: '101010',
})
expect(response.status).to eq 201
expect(TalentRelease.last.signature).to be_attached
expect(TalentRelease.last.guardian_2_photo).not_to be_attached
end
it 'returns 201 for minor with second guardian photo' do
post :create, params: @parameters.deep_merge(talent_release: {
minor: true,
guardian_2_name: 'Guardian 2 Name',
guardian_2_phone: '101010',
guardian_2_photo: {
io: guardian_photo_base64,
filename: 'guardian_2_photo.jpeg'
}
})
expect(response.status).to eq 201
talent_release = TalentRelease.last
photo = talent_release.guardian_2_photo
data = {
'id' => photo.id.to_s,
'type' => 'active_storage_attachment',
'attributes' => {
'content_type' => photo.content_type,
'filename' => photo.filename.to_s,
'url' => photo_path_for(photo),
'thumbnail_url' => photo_variant_path_for(photo, '150x150')
}
}
expect(response_body_included_attributes).to include(data)
expect(talent_release.signature).to be_attached
expect(talent_release.guardian_2_photo).to be_attached
end
end
private

View File

@@ -22,7 +22,7 @@ RSpec.describe BroadcastsController, type: :controller do
expect(response).to be_successful
end
it "renders content if theere are existing broadcasts" do
it "renders content" do
create(:broadcast, project: project, name: "Another Broadcast")
get :index, params: { project_id: project }
@@ -34,13 +34,12 @@ RSpec.describe BroadcastsController, type: :controller do
end
context "when there are no active broadcasts" do
it "renders splash screen" do
it "renders an empty message" do
Broadcast.destroy_all
get :index, params: { project_id: project }
expect(response.body).to have_link create_stream
expect(response.body).to have_link schedule_demo
expect(response.body).to have_content("Live streams will appear here")
end
end
@@ -56,8 +55,10 @@ RSpec.describe BroadcastsController, type: :controller do
context "for xhr request" do
it "filters the broadcasts by a query param" do
create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Adam")
create(:broadcast, project: project, skip_create_callback: true, name: "Stream by Zoe")
appearance_releases = [
create(:broadcast, skip_create_callback: true, name: "Stream by Adam"),
create(:broadcast, skip_create_callback: true, name: "Stream by Zoe"),
]
get :index, params: { project_id: project, query: "Zoe" }, xhr: true
@@ -244,12 +245,4 @@ RSpec.describe BroadcastsController, type: :controller do
{ files: [contract_file] }
end
def schedule_demo
t 'broadcasts.splash.actions.book_demo'
end
def create_stream
t 'broadcasts.splash.actions.create_stream'
end
end

View File

@@ -19,7 +19,7 @@ describe ContractTemplatesController do
expect(response).to be_successful
end
it 'renders content if there are contract templates' do
it 'renders content' do
contract_template = create(:contract_template,
name: 'My Contract Template', fee: 50, release_type: 'appearance',
project: project)
@@ -39,11 +39,10 @@ describe ContractTemplatesController do
end
context 'when there are no contract templates' do
it 'renders splash screen' do
it 'renders an empty message' do
get :index, params: { project_id: project }
expect(response.body).to have_link "Create New Release Template"
expect(response.body).to have_link schedule_demo
expect(response.body).to have_content('Release Templates will appear here')
end
end
@@ -51,7 +50,6 @@ describe ContractTemplatesController do
let(:current_user) { create(:user, :associate) }
it 'does not show the new contract template button' do
create(:contract_template, project: project)
get :index, params: { project_id: project }
expect(response.body).not_to have_link('Create New Release Template')
@@ -168,8 +166,4 @@ describe ContractTemplatesController do
restriction_text: 'restrictions'
}
end
def schedule_demo
t 'contract_templates.splash.actions.book_demo'
end
end

View File

@@ -19,29 +19,14 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
end
it "displays validation errors" do
contract_template = create(:contract_template,
project: project,
question_1_text: "Question 1",
question_2_text: "Question 2"
)
contract_template = create(:contract_template, project: project)
sign_in(user)
post :create, params: {
account_id: user.primary_account.to_param,
project_id: project,
contract_template_id: contract_template,
medical_release: {
person_address_city: "Albuquerque",
question_2_answer: "Answer 2"
}
}
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, medical_release: { person_address_city: "Albuquerque" } }
body = CGI.unescape_html(response.body)
expect(body).to match /Person first name can't be blank/
expect(body).to match /Person last name can't be blank/
expect(body).to match />can't be blank</
expect(body).to match /Question 1 #{question_answer_validation_error}/
expect(body).not_to match /Question 2 #{question_answer_validation_error}/
end
it "responds with success " do
@@ -83,8 +68,4 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
{ signature_base64: data_uri }
end
def question_answer_validation_error
t 'medical_releases.custom_validation_errors.question_answer_is_required'
end
end

View File

@@ -7,7 +7,6 @@ RSpec.describe StreamNotificationsController, type: :controller do
let(:active_status) { {type: "video.live_stream.active", object: { id: "mux_stream" }} }
let(:disconnected_status) { {type: "video.live_stream.disconnected", object: { id: "mux_stream" }} }
let(:idle_status) { {type: "video.live_stream.idle", object: { id: "mux_stream" }} }
let(:idle_status_for_unknown_broadcast) { {type: "video.live_stream.idle", object: { id: "unknown-id" }} }
let(:asset_ready) { {
type: "video.asset.static_renditions.ready",
object: { id: "asset_uid" },
@@ -60,12 +59,6 @@ RSpec.describe StreamNotificationsController, type: :controller do
expect(BroadcastsChannel).to have_received(:stream_recording_ready)
end
it "returns OK response even for non-existing broadcast" do
post :create, params: idle_status_for_unknown_broadcast
expect(response).to be_successful
end
end
after do

View File

@@ -1,140 +0,0 @@
require 'rails_helper'
RSpec.describe TaskRequestsController, type: :controller do
render_views
let(:user) { create(:user) }
let(:account) { user.primary_account }
let(:project) { create(:project, account: user.primary_account) }
before do
sign_in user
end
describe "#index" do
it "responds successfully" do
get :index, params: { project_id: project }
expect(response).to be_successful
end
it "renders splash page if there are no task requests" do
get :index, params: { project_id: project }
expect(response.body).to have_link "Create Task Request"
expect(response.body).to have_link schedule_demo
end
it "renders task requests table if there are task requests" do
create(:task_request, project: project, description: "Another Request")
get :index, params: { project_id: project }
expect(response.body).to have_link "Create Task Request"
expect(response.body).to have_content "Pending"
end
context "when there are many records" do
it "paginates the table" do
create_list(:task_request, 20, project: project)
get :index, params: { project_id: project }
expect(response.body).to have_link("2", href: project_task_requests_path(project, page: 2))
end
end
end
describe "#new" do
it "responds successfully" do
get :new, params: { project_id: project }
expect(response).to be_successful
expect(assigns(:task_request)).to be_a_new(TaskRequest)
expect(response).to render_template(:new)
end
end
describe "#create" do
it "does create a new record" do
expect {
post :create, params: { project_id: project.id, task_request: task_request_params }
}.to change(TaskRequest, :count)
end
it "logs an event" do
expect {
post :create, params: { project_id: project.id, task_request: task_request_params }
}.to have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_task_request, user_agent: "Rails Testing", user_ip: "0.0.0.0")
end
it "submits data to hubspot form" do
expect {
post :create, params: { project_id: project.id, task_request: task_request_params }
}.to have_enqueued_job(SubmitHubspotTaskRequestFormJob)
end
end
describe "#update" do
let!(:task_request) { create(:task_request, project: project, description: "My description" ) }
it "updates task request" do
patch :update, params: { project_id: project.id, id: task_request.id, task_request: update_params }
expect(task_request.reload.description).to eq("This is updated description")
end
end
describe "#show" do
let!(:task_request) { create(:task_request, project: project, description: "Task Request") }
it "responds successfully" do
get :show, params: { project_id: project.id, id: task_request.id }
expect(response).to be_successful
expect(assigns(:task_request)).to eq(task_request)
end
it "renders content" do
get :show, params: { project_id: project.id, id: task_request.id }
expect(response.body).to have_content "Task Request"
expect(response.body).to have_content "pending"
end
end
describe "#cancel" do
let!(:task_request) { create(:task_request, project: project, description: "Task to be cancelled") }
it "responds with redirect" do
post :cancel, params: { project_id: project.id, id: task_request.id }
expect(response).to be_redirect
expect(response).to redirect_to(project_task_requests_path(project))
expect(flash.notice).not_to be_nil
end
it "updates the status to 'cancelled'" do
expect {
post :cancel, params: { project_id: project.id, id: task_request.id }
}.to change { task_request.reload.status }.from("pending").to("cancelled")
end
end
private
def task_request_params
attributes = attributes_for(:task_request).except(:status, :user_email)
files = 2.times.map { Rack::Test::UploadedFile.new(file_fixture("location_photo.png"), "image/png") }
attributes.merge({ files: files })
end
def update_params
{ description: "This is updated description" }
end
def schedule_demo
t 'task_requests.splash.actions.book_demo'
end
end

View File

@@ -1,40 +0,0 @@
require 'rails_helper'
RSpec.describe TasksController, type: :controller do
render_views
let(:user) { create(:user) }
let(:account) { user.primary_account }
let(:project) { create(:project, account: user.primary_account) }
before do
sign_in user
end
describe "#index" do
it "responds successfully" do
get :index, params: { project_id: project }
expect(response).to be_successful
end
it "renders content" do
create(:task_request, :completed, project: project, description: "Another Request")
get :index, params: { project_id: project }
expect(response.body).to have_content "Completed"
expect(response.body).to have_link "View Deliverable"
end
context "when there are many records" do
it "paginates the table" do
create_list(:task_request, 20, :completed, project: project)
get :index, params: { project_id: project }
expect(response.body).to have_link("2", href: project_tasks_path(project, page: 2))
end
end
end
end

View File

@@ -20,7 +20,6 @@ RSpec.describe VideosController, type: :controller do
end
it "has a search form" do
create(:video, project: project)
get :index, params: { project_id: project }
expect(response.body).to have_button("search-button")
@@ -44,7 +43,7 @@ RSpec.describe VideosController, type: :controller do
end
it "renders content if there are existing videos" do
it "renders content" do
video = create(:video, project: project, name: "My Video", number: "001", created_at: 1.day.ago)
get :index, params: { project_id: project }
@@ -59,11 +58,10 @@ RSpec.describe VideosController, type: :controller do
end
context "when there are no records" do
it "renders splash screen" do
it "renders an empty message" do
get :index, params: { project_id: project }
expect(response.body).to have_link "Upload New Video"
expect(response.body).to have_link schedule_demo
expect(response.body).to have_content("Videos will appear here")
end
end
@@ -279,8 +277,4 @@ RSpec.describe VideosController, type: :controller do
def video_update_params
attributes_for(:video, :with_graphics_only_edl_file, :with_audio_only_edl_file, name: "Test Video").except(:file)
end
def schedule_demo
t 'videos.splash.actions.book_demo'
end
end

View File

@@ -58,7 +58,10 @@ FactoryBot.define do
guardian_address_state "State"
guardian_address_zip "ZIP"
guardian_address_country "Country"
with_guardian_photo
guardian_photo do
path = Rails.root.join("spec", "fixtures", "files", "pratt.jpg")
Rack::Test::UploadedFile.new(path, "image/jpeg")
end
end
trait :without_person_photo do
@@ -71,20 +74,6 @@ FactoryBot.define do
end
end
trait :with_guardian_photo do
guardian_photo do
path = Rails.root.join("spec", "fixtures", "files", "pratt.jpg")
Rack::Test::UploadedFile.new(path, "image/jpeg")
end
end
trait :with_guardian_2_photo do
guardian_2_photo do
path = Rails.root.join("spec", "fixtures", "files", "pratt.jpg")
Rack::Test::UploadedFile.new(path, "image/jpeg")
end
end
trait :with_person_photo_only do
end

View File

@@ -16,7 +16,6 @@ FactoryBot.define do
appearance_release: true,
location_release: true,
material_release: true,
misc_release: true,
medical_release: true,
music_release: true,
talent_release: true,

View File

@@ -35,23 +35,12 @@ FactoryBot.define do
guardian_first_name "Jamie"
guardian_last_name "Doe"
guardian_phone "123-555-1234"
with_guardian_photo
end
trait :with_guardian_photo do
guardian_photo do
path = Rails.root.join("spec", "fixtures", "files", "pratt.jpg")
Rack::Test::UploadedFile.new(path, "image/jpeg")
end
end
trait :with_guardian_2_photo do
guardian_2_photo do
path = Rails.root.join("spec", "fixtures", "files", "pratt.jpg")
Rack::Test::UploadedFile.new(path, "image/jpeg")
end
end
factory :talent_release_with_contract_template do
after(:build) do |talent_release, _|
talent_release.contract_template = build(:talent_release_contract_template)

View File

@@ -1,20 +0,0 @@
FactoryBot.define do
factory :task_request do
association :project
user_email 'test@email.com'
deadline { 10.days.from_now }
time_allowed 5
description "Task request"
additional_notes "Additional notes"
status 0
trait :completed do
deliverable_url "example.com/deliverables"
status 1
end
trait :with_files do
files { [Rack::Test::UploadedFile.new('spec/fixtures/files/contract.pdf', 'application/pdf')] }
end
end
end

View File

@@ -1,108 +0,0 @@
require "rails_helper"
feature "Admin managing task requests" do
let(:current_user) { create(:user, admin: true, email: "user@test.com") }
let(:project) { create(:project, account: current_user.primary_account, name: "Test Project") }
before do
sign_in current_user
end
scenario "admin should see View action for task request in Manage dropdown", js: true do
create(:task_request)
visit admin_task_requests_path
click_on 'Manage'
expect(page).to have_content 'View'
end
scenario "admin can open detail view of task request", js: true do
task_request = create(:task_request, :with_files)
visit admin_task_requests_path
click_on 'Manage'
click_link 'View'
switch_to_window(windows.last)
expect(page).to have_content 'Account Name'
expect(page).to have_content task_request.project.account.name
expect(page).to have_content 'Project Name'
expect(page).to have_content task_request.project.name
expect(page).to have_content 'Description'
expect(page).to have_content task_request.description
expect(page).to have_content 'Created At'
expect(page).to have_content task_request.created_at
expect(page).to have_content 'User Email'
expect(page).to have_content task_request.user_email
expect(page).to have_content 'Deadline'
expect(page).to have_content task_request.deadline
expect(page).to have_content 'Time Allowed'
expect(page).to have_content task_request.time_allowed
expect(page).to have_content 'Additional Notes'
expect(page).to have_content task_request.additional_notes
expect(page).to have_content 'Status'
expect(page).to have_content task_request.status
expect(page).to have_content 'Files'
task_request.files.each do |file|
expect(page).to have_content file.blob.filename
end
end
scenario "no files attached label is shown if there are no files attached to the task request", js:true do
create(:task_request)
visit admin_task_requests_path
click_on 'Manage'
click_link 'View'
switch_to_window(windows.last)
expect(page).to have_content 'Attached files will appear here.'
end
scenario "task requests table is visible" do
visit admin_task_requests_path
expect(page).to have_content "Task ID"
expect(page).to have_content "Account Name"
expect(page).to have_content "Project Name"
expect(page).to have_content "Created On"
expect(page).to have_content "Deadline"
expect(page).to have_content "Time Allowed"
expect(page).to have_content "Status"
end
scenario "sees list of task requests" do
visit admin_task_requests_path
expect(page).to have_content no_task_requests_label
task_request = create(:task_request)
visit admin_task_requests_path
expect(page).not_to have_content no_task_requests_label
expect(page).to have_content task_request.id
expect(page).to have_content task_request.project.account.name
expect(page).to have_content task_request.project.name
expect(page).to have_content task_request.created_at.try(:strftime, '%D')
expect(page).to have_content task_request.deadline.try(:strftime, '%D')
expect(page).to have_content task_request.time_allowed
expect(page).to have_content task_request.status.capitalize
end
private
def no_task_requests_label
"Task requests will appear here"
end
end

View File

@@ -1,92 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.feature 'User creates task request', type: :feature do
let(:current_user) { create(:user, :manager) }
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
before do
sign_in(current_user)
end
scenario 'creating a new task request' do
visit new_project_task_request_path(project)
fill_in description_field, with: 'Description of the task'
fill_in deadline_field, with: '2020-06-24'
fill_in time_allowed_field, with: '30'
fill_in additional_notes_field, with: 'Additional note about the task'
click_on 'Create Task request'
expect(page).to have_content task_created_message
end
scenario 'user can view task request details' do
create(:task_request, project: project, description: 'Description of the task', deadline: '2020-07-23', time_allowed: '10', additional_notes: 'Additional note about the task')
visit project_task_request_path(project, TaskRequest.first)
expect(page).to have_content('Description of the task')
expect(page).to have_content('2020-07-23')
expect(page).to have_content('10')
expect(page).to have_content('Additional note about the task')
end
scenario 'user can update existing task request' do
create(:task_request, project: project, description: 'Description of the task', deadline: '2020-08-23', time_allowed: '10', additional_notes: 'Additional note about the task')
visit edit_project_task_request_path(project, TaskRequest.first)
fill_in deadline_field, with: '2020-07-01'
fill_in time_allowed_field, with: '13'
click_on 'Update Task request'
expect(page).to have_content('13')
expect(page).to have_content('07/01/20')
end
scenario 'user can cancel a task request' do
create(:task_request, project: project, description: 'Description of the task', deadline: '2020-08-23', time_allowed: '10', additional_notes: 'Additional note about the task')
visit project_task_requests_path(project)
click_on 'Manage'
click_link 'Cancel'
expect(page).to have_content('Cancelled')
end
scenario 'user can view completed tasks' do
create_list(:task_request, 5, project: project, status: 'completed')
create_list(:task_request, 5, project: project, status: 'pending')
visit project_tasks_path(project)
expect(page).to have_content('Completed')
expect(page).not_to have_content('Pending')
end
private
def description_field
t "task_requests.form.labels.description"
end
def deadline_field
t "task_requests.form.labels.deadline"
end
def time_allowed_field
t "task_requests.form.labels.time_allowed"
end
def additional_notes_field
t "task_requests.form.labels.additional_notes"
end
def task_created_message
t 'task_requests.create.success_message'
end
end

View File

@@ -13,7 +13,6 @@ feature "User imports release templates", type: :feature do
end
scenario "importing two existing templates into a project" do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
click_on "Import Release Template"
select_templates([project_one_template.id, project_two_template.id])
@@ -32,7 +31,6 @@ feature "User imports release templates", type: :feature do
end
scenario "searching for a template", js: true do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
click_on "Import Release Template"
fill_in "query", with: "Second"

View File

@@ -11,13 +11,6 @@ RSpec.feature 'User manages contract templates', type: :feature do
sign_in(current_user)
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
visit new_project_contract_template_path(project)
@@ -32,7 +25,7 @@ RSpec.feature 'User manages contract templates', type: :feature do
select 'None', from: 'Restriction'
click_on 'Create Release Template'
expect(page).to have_content(create_contract_template_success_message)
expect(page).to have_content('The release template has been created')
end
scenario 'medical release template has a guardian clause field' do
@@ -43,28 +36,10 @@ RSpec.feature 'User manages contract templates', type: :feature do
fill_hidden guardian_clause_field, with: 'Guardian clause text'
click_on 'Create Release Template'
expect(page).to have_content(create_contract_template_success_message)
expect(page).to have_content('The release template has been created')
expect(ContractTemplate.last.guardian_clause.body.to_s).to match /Guardian clause text/
end
scenario 'misc release templates has guardian clause and questionnaire', js: true do
visit new_project_contract_template_path(project)
fill_in 'Name', with: 'My Misc Release'
select 'Misc Release', from: 'Release type'
expect(page).to have_selector('label', text: 'Guardian Clause')
MiscRelease::NUMBER_OF_CUSTOM_FIELDS.times do |n|
expect(page).to have_field(question_field(n+1))
end
fill_in_trix 'contract_template_guardian_clause', with: 'Guardian clause text'
fill_in question_field(1), with: 'How much experience do you have in the industry?'
click_on 'Create Release Template'
expect(page).to have_content(create_contract_template_success_message)
end
scenario 'preview new talent release template without guardian clause' do
visit new_project_contract_template_path(project)
select 'Talent Release', from: 'Release type'
@@ -168,13 +143,13 @@ RSpec.feature 'User manages contract templates', type: :feature do
scenario 'Should not allow negative fees' do
fill_in 'Fee', with: '-200'
click_on 'Create Release Template'
expect(page).not_to have_content(create_contract_template_success_message)
expect(page).not_to have_content('The release template has been created')
end
scenario 'Should not allow fees with more than 9 digits' do
fill_in 'Fee', with: '9999999999'
click_on 'Create Release Template'
expect(page).not_to have_content(create_contract_template_success_message)
expect(page).not_to have_content('The release template has been created')
end
end
@@ -248,20 +223,12 @@ RSpec.feature 'User manages contract templates', type: :feature do
let(:current_user) { create(:user, :associate) }
it 'does not show management buttons for release templates' do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
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('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).not_to have_content create_release_template
end
end
context 'When the user is account manager' do
@@ -275,13 +242,6 @@ RSpec.feature 'User manages contract templates', type: :feature do
click_on 'Manage'
expect(page).to have_content('Archive')
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
end
private
@@ -310,23 +270,7 @@ RSpec.feature 'User manages contract templates', type: :feature do
'contract_template_guardian_clause_trix_input_contract_template'
end
def create_contract_template_success_message
'The release template has been created'
end
def question_field(n)
"Question #{n} text"
end
def fill_hidden(id, with:)
find(:xpath, "//input[@id='#{id}']", visible: false).set with
end
def schedule_demo
t 'contract_templates.splash.actions.book_demo'
end
def create_release_template
t 'contract_templates.splash.actions.create_template'
end
end

Some files were not shown because too many files have changed in this diff Show More