Compare commits

...

10 Commits

Author SHA1 Message Date
Bilal
7fe1dadaf2 fix failing spec related to clappr ttf asset 2020-07-24 03:21:43 +02:00
Bilal
c6c10587c8 fix bug with autoplay 2020-07-23 15:33:07 +02:00
Senad Uka
8f13589c55 upstream sync 2020-07-22 19:14:34 +00:00
Senad Uka
cd0de9154c Upstream sync 2020-07-22 13:38:19 +00:00
Senad Uka
2590b6bdc9 Upstream sync 2020-07-21 13:12:27 +00:00
Senad Uka
40f241b75f Usptream sync 2020-07-20 13:28:40 +00:00
Senad Uka
add8304eab Master upstream sync 2020-07-16 18:02:45 +02:00
Senad Uka
f04d34d337 Upstream sync 2020-07-16 17:38:21 +02:00
Senad Uka
c033f5df17 Upstream sync 2020-07-16 17:27:57 +02:00
Senad Uka
7f49f31ebf Master sync 2020-07-15 11:58:34 +02:00
102 changed files with 2052 additions and 132 deletions

View File

@@ -21,11 +21,13 @@ $(document).on "turbolinks:load", ->
refreshBroadcastVideo: (data) -> refreshBroadcastVideo: (data) ->
$("#broadcast_updates").html data.status_content $("#broadcast_updates").html data.status_content
if data.streamer_status == 'recording' && data.status == 'active' stream_selected = $("#broadcast_video").data('videoType') == 'stream';
if data.streamer_status == 'recording' && data.status == 'active' && stream_selected
$("#broadcast_video").html data.video_content $("#broadcast_video").html data.video_content
new (Clappr.Player)( new (Clappr.Player)(
<%= "baseUrl: 'http://cdn.clappr.io/latest'," if Rails.env.test? %>
parentId: '#broadcast_video' parentId: '#broadcast_video'
source: data.playback_url source: data.full_live_stream_playback_url
width: '100%', width: '100%',
height: '100%', height: '100%',
mute: true, mute: true,

View File

@@ -0,0 +1,50 @@
$(document).on("click", "[data-behavior=select_contract_template]", function() {
var _this = this;
var checkbox = $(this).children("input:checkbox");
selectContractTemplate(_this, checkbox);
});
$(document).on("click", "[data-behavior=select_contract_template] input[type='checkbox']", function(e) {
e.stopPropagation();
var _this = this;
var checkbox = $(this);
selectContractTemplate(_this, checkbox);
});
function selectContractTemplate(clicked_element, checkbox) {
if (clicked_element.hasChildNodes()) {
if(checkbox.prop("checked")) {
checkbox.prop('checked', false);
} else {
checkbox.prop('checked', true);
}
}
var checked = checkbox.prop("checked");
var project_id = JSON.parse($('#group_qr_code').attr('data-project-id'));
var contract_template_ids = JSON.parse($('#group_qr_code').attr('data-contract-template-ids'));
var selected_contract_template_id = checkbox.val();
if (checked && !contract_template_ids.includes(selected_contract_template_id)) {
contract_template_ids.push(selected_contract_template_id);
} else if(!checked && contract_template_ids.includes(selected_contract_template_id)) {
contract_template_ids.splice( $.inArray(selected_contract_template_id, contract_template_ids), 1 );
}
$('#group_qr_code').attr('data-contract-template-ids', JSON.stringify(contract_template_ids));
if (contract_template_ids.length >= 2) {
multi_sign_ids = $.param({multi_sign_ids: contract_template_ids});
contract_template_url = "/en/contract_templates/" + contract_template_ids[0] + "/qr_codes?" + multi_sign_ids
$("#group_qr_code").attr("href", contract_template_url);
$("#group_qr_code").attr("target", "_blank");
$("#group_qr_code").removeClass('disabled');
} else if (contract_template_ids.length < 2) {
$("#group_qr_code").attr("href", "javascript:void(0);");
$("#group_qr_code").addClass('disabled');
}
}

View File

@@ -3,7 +3,7 @@ $(document).on("click", "[data-behavior=play_recording]", function() {
return false; return false;
} }
console.warn('Play prev : ', playback_url); $("#broadcast_video").data('videoType', 'recording');
var playback_url = $(this).attr("data-playback-url") var playback_url = $(this).attr("data-playback-url")
$("#broadcast_video").empty(); $("#broadcast_video").empty();
@@ -23,4 +23,6 @@ $(document).on("click", "[data-behavior=play_recording]", function() {
$(this).siblings().children("i").remove(); $(this).siblings().children("i").remove();
$(this).addClass('active'); $(this).addClass('active');
$(this).prepend('<i class="fa fa-check">&nbsp;</i>'); $(this).prepend('<i class="fa fa-check">&nbsp;</i>');
}); });
$(document).on("click", "[data-behavior=play_stream]", function() { $("#broadcast_video").data('videoType', 'stream'); });

View File

@@ -16,6 +16,7 @@ class BroadcastsChannel < ApplicationCable::Channel
event: :broadcast_stream_update, event: :broadcast_stream_update,
status: broadcast.status, status: broadcast.status,
playback_url: broadcast.stream_playback_url, playback_url: broadcast.stream_playback_url,
full_live_stream_playback_url: broadcast.full_live_stream_playback_url,
video_content: video_content, video_content: video_content,
status_content: status_content, status_content: status_content,
streamer_status: broadcast.streamer_status streamer_status: broadcast.streamer_status

View File

@@ -1,21 +1,28 @@
class ApprovalsController < ApplicationController class ApprovalsController < ApplicationController
include MedicalReleaseContext before_action :set_releasable
before_action :set_medical_release
before_action :set_project before_action :set_project
layout "project" layout "project"
def create def create
@medical_release.approve_by(current_user) @releasable.approve_by(current_user)
if @medical_release.save
redirect_to [@project, :medical_releases], notice: t('.release_approved') if @releasable.save
redirect_to [@project, "#{@releasable_param.name.pluralize}"], notice: t('.release_approved', release_type: @releasable.model_name.human)
end end
end end
private private
def releasable_param
@releasable_param ||= ReleasableParam.new(params.to_unsafe_h)
end
def set_releasable
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id)
end
def set_project def set_project
@project = @medical_release.project @project = @releasable.project
end end
end end

View File

@@ -33,6 +33,11 @@ class BroadcastsController < ApplicationController
end end
def update def update
unless params.has_key?(:broadcast)
@broadcast.regenerate_token
redirect_to([@project, @broadcast], notice: t('.reset_notice')) and return
end
@broadcast.update(broadcast_params) @broadcast.update(broadcast_params)
@files = @broadcast.files.order("created_at DESC").paginate(page: 1) @files = @broadcast.files.order("created_at DESC").paginate(page: 1)
@@ -55,7 +60,7 @@ class BroadcastsController < ApplicationController
end end
def broadcast_params def broadcast_params
params.require(:broadcast).permit(:name, files: []) params.require(:broadcast).permit(:name, :shoot_location_time_zone, files: [])
end end
def set_project def set_project

View File

@@ -0,0 +1,33 @@
# frozen_string_literal: true
class ContractTemplates::DuplicatesController < ApplicationController
before_action :set_contract_template
def create
authorize(ContractTemplate)
new_contract_template = @contract_template.dup
new_contract_template.name = I18n.t('contract_templates.duplicate.name_prefix', template_name: @contract_template.name)
# Duplicate rich text fields
new_contract_template.body = @contract_template.body
new_contract_template.guardian_clause = @contract_template.guardian_clause
new_contract_template.signature_legal_text = @contract_template.signature_legal_text
if new_contract_template.save
redirect_to [:edit, new_contract_template]
else
redirect_to [@contract_template.project, :contract_templates], alert: t('.error')
end
end
private
def contract_templates
policy_scope(ContractTemplate)
end
def set_contract_template
@contract_template = contract_templates.find(params[:contract_template_id])
end
end

View File

@@ -16,7 +16,12 @@ class ContractTemplates::QrCodesController < ApplicationController
end end
def qr_code def qr_code
authorize QrCode.build_from_contract_template(@contract_template) if params[:multi_sign_ids].present?
contract_templates_group = authorize contract_templates.where(id: params[:multi_sign_ids]).order_by_recent
authorize QrCode.build_from_multiple_contract_templates(contract_templates_group, @contract_template.project)
else
authorize QrCode.build_from_contract_template(@contract_template)
end
end end
def download_attributes def download_attributes

View File

@@ -5,8 +5,9 @@ class ContractTemplatesController < ApplicationController
layout 'project' layout 'project'
before_action :set_project, except: [:destroy] before_action :set_project, except: [:destroy, :edit, :update]
before_action :set_contract_template, only: [:destroy] before_action :set_contract_template, only: [:destroy, :edit, :update]
before_action :set_project_from_contract_template, only: [:edit, :update]
before_action :show_splash_screen, only: :index before_action :show_splash_screen, only: :index
def index def index
@@ -32,6 +33,20 @@ class ContractTemplatesController < ApplicationController
end end
end end
def edit
@release_type = @contract_template.release_type
end
def update
@contract_template.attributes = contract_template_params
if @contract_template.save
redirect_to [@project, :contract_templates], notice: t('.notice')
else
render :edit
end
end
def destroy def destroy
@contract_template.archive @contract_template.archive
redirect_to [@contract_template.project, :contract_templates], alert: t('.archived_notice') redirect_to [@contract_template.project, :contract_templates], alert: t('.archived_notice')
@@ -39,6 +54,10 @@ class ContractTemplatesController < ApplicationController
private private
def set_project_from_contract_template
@project = @contract_template.project
end
def show_splash_screen def show_splash_screen
render :splash if contract_templates.non_archived.count.zero? render :splash if contract_templates.non_archived.count.zero?
end end

View File

@@ -0,0 +1,18 @@
class Public::ContractTemplatesController < Public::BaseController
skip_after_action :verify_authorized, :verify_policy_scoped
before_action :set_account, :set_project
def index
@contract_templates = @project.contract_templates.where(id: params[:contract_template_ids]).order_by_name.paginate(page: params[:page])
end
private
def set_project
@project = @account.projects.find(params[:project_id])
end
def set_account
@account = Account.find_by(slug: params[:account_id])
end
end

View File

@@ -14,6 +14,10 @@ class StreamNotificationsController < ApplicationController
when "video.live_stream.recording" when "video.live_stream.recording"
@broadcast.streamer_recording! @broadcast.streamer_recording!
notify_users notify_users
when "video.asset.ready"
full_live_stream_playback_uid = notification.dig(:data, :playback_ids, 0, :id)
@broadcast.update(full_live_stream_playback_uid: full_live_stream_playback_uid)
notify_users
when "video.live_stream.active" when "video.live_stream.active"
@broadcast.active! @broadcast.active!
notify_users notify_users
@@ -59,7 +63,8 @@ class StreamNotificationsController < ApplicationController
end end
def set_broadcast def set_broadcast
if notification_type == "video.asset.static_renditions.ready" case notification_type
when "video.asset.static_renditions.ready", "video.asset.ready"
live_stream_id = notification.dig(:stream_notification, :data, :live_stream_id) 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 else

View File

@@ -6,11 +6,11 @@ module TooltipHelper
end end
end end
def get_approval_data_for_medical_release(medical_release) def get_approval_data_for_releasable(release)
if medical_release.approved_by_user_name.present? if release.approved_by_user_name.present?
"#{medical_release.approved_by_user_name} [#{medical_release.approved_by_user_email}]" "#{release.approved_by_user_name} [#{release.approved_by_user_email}]"
else else
medical_release.approved_by_user_email release.approved_by_user_email
end end
end end
end end

View File

@@ -10,6 +10,7 @@ class AcquiredMediaRelease < ApplicationRecord
include Syncable include Syncable
include PersonName include PersonName
include CsvExportable include CsvExportable
include Approvable
class << self class << self
def custom_csv_exportable_headers def custom_csv_exportable_headers

View File

@@ -16,6 +16,7 @@ class AppearanceRelease < ApplicationRecord
include GuardianName include GuardianName
include SecondGuardianName include SecondGuardianName
include CsvExportable include CsvExportable
include Approvable
class << self class << self
def custom_csv_exportable_headers def custom_csv_exportable_headers

View File

@@ -30,6 +30,10 @@ class Broadcast < ApplicationRecord
"https://stream.mux.com/#{stream_playback_uid}.m3u8" "https://stream.mux.com/#{stream_playback_uid}.m3u8"
end end
def full_live_stream_playback_url
full_live_stream_playback_uid.blank? ? stream_playback_url : "https://stream.mux.com/#{full_live_stream_playback_uid}.m3u8"
end
def stream_server_url def stream_server_url
ENV['MUX_BROADCAST_SERVER_URL'] ENV['MUX_BROADCAST_SERVER_URL']
end end

View File

@@ -14,6 +14,6 @@ class BroadcastRecording < ApplicationRecord
end end
def download_file_name def download_file_name
"#{broadcast_name}_Date_#{created_at.strftime("%Y-%m-%d")}_Time_#{created_at.strftime("%T")}".parameterize "#{broadcast_name}_Date_#{created_at.in_time_zone(broadcast.shoot_location_time_zone).strftime("%Y-%m-%d")}_Time_#{created_at.in_time_zone(broadcast.shoot_location_time_zone).strftime("%T")}".parameterize
end end
end end

View File

@@ -0,0 +1,17 @@
module Approvable
extend ActiveSupport::Concern
included do
def approve_by(user)
return unless approved_at.nil?
self.approved_by_user_name = user.full_name
self.approved_by_user_email = user.email
self.approved_at = Time.zone.now
end
def approved?
self.approved_at.present?
end
end
end

View File

@@ -3,7 +3,7 @@
module CsvExportable module CsvExportable
extend ActiveSupport::Concern extend ActiveSupport::Concern
COMMON_HEADERS = %i[notes tags signed_at].freeze COMMON_HEADERS = %i[approved? notes tags signed_at].freeze
COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze
included do included do

View File

@@ -69,9 +69,13 @@ class ContractTemplate < ApplicationRecord
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence } (1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
end end
def editable?
releases.size.zero?
end
def attributes def attributes
result = super() result = super()
result[:signature_legal_text] = signature_legal_text.as_json result[:signature_legal_text] = signature_legal_text.as_json
result result
end end
end end

View File

@@ -11,6 +11,7 @@ class LocationRelease < ApplicationRecord
include Taggable include Taggable
include PersonName include PersonName
include CsvExportable include CsvExportable
include Approvable
class << self class << self
def custom_csv_exportable_headers def custom_csv_exportable_headers

View File

@@ -11,6 +11,7 @@ class MaterialRelease < ApplicationRecord
include Taggable include Taggable
include PersonName include PersonName
include CsvExportable include CsvExportable
include Approvable
class << self class << self
def custom_csv_exportable_headers def custom_csv_exportable_headers

View File

@@ -12,10 +12,11 @@ class MedicalRelease < ApplicationRecord
include GuardianName include GuardianName
include SecondGuardianName include SecondGuardianName
include CsvExportable include CsvExportable
include Approvable
class << self class << self
def custom_csv_exportable_headers def custom_csv_exportable_headers
%i[approved? name contact_info] %i[name contact_info]
end end
end end
@@ -107,18 +108,6 @@ class MedicalRelease < ApplicationRecord
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}" "#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
end end
def approve_by(user)
return unless approved_at.nil?
self.approved_by_user_name = user.full_name
self.approved_by_user_email = user.email
self.approved_at = Time.zone.now
end
def approved?
approved_at.present?
end
private private
def valid_answers def valid_answers

View File

@@ -10,6 +10,7 @@ class MiscRelease < ApplicationRecord
include GuardianName include GuardianName
include GuardianPhotoable include GuardianPhotoable
include CsvExportable include CsvExportable
include Approvable
class << self class << self
def custom_csv_exportable_headers def custom_csv_exportable_headers

View File

@@ -8,6 +8,7 @@ class MusicRelease < ApplicationRecord
include Taggable include Taggable
include PersonName include PersonName
include CsvExportable include CsvExportable
include Approvable
class << self class << self
def custom_csv_exportable_headers def custom_csv_exportable_headers

View File

@@ -13,6 +13,18 @@ class QrCode
new(url, "#{filename}.png") new(url, "#{filename}.png")
end end
def self.build_from_multiple_contract_templates(contract_templates, project)
account = project.account
locale = I18n.locale
host = AppHost.new.domain_with_port
route = [account, project, :contract_templates, contract_template_ids: contract_templates.ids, locale: I18n.locale, host: AppHost.new.domain_with_port]
url = Rails.application.routes.url_helpers.url_for(route)
filename = [project.account.name, project.name].map(&:parameterize).join("_")
new(url, "#{filename}.png")
end
def initialize(url, filename = "qrcode.png") def initialize(url, filename = "qrcode.png")
@url = url @url = url
@filename = filename @filename = filename

View File

@@ -15,6 +15,7 @@ class TalentRelease < ApplicationRecord
include GuardianName include GuardianName
include SecondGuardianName include SecondGuardianName
include CsvExportable include CsvExportable
include Approvable
class << self class << self
def custom_csv_exportable_headers def custom_csv_exportable_headers
@@ -110,7 +111,7 @@ class TalentRelease < ApplicationRecord
end end
def uses_edl? def uses_edl?
false true
end end
def second_guardian_present? def second_guardian_present?

View File

@@ -6,5 +6,5 @@ class TaskRequest < ApplicationRecord
scope :order_by_recent, -> { order(created_at: :desc) } scope :order_by_recent, -> { order(created_at: :desc) }
validates :time_allowed, numericality: { only_integer: true, greater_than_or_equal_to: 2 } validates :time_allowed, numericality: { only_integer: true, greater_than_or_equal_to: 2 }, allow_blank: true
end end

View File

@@ -30,4 +30,12 @@ class AcquiredMediaReleasePolicy < ApplicationPolicy
def download_multiple? def download_multiple?
true true
end end
def review?
user.account_manager?
end
def approve?
review?
end
end end

View File

@@ -26,4 +26,12 @@ class AppearanceReleasePolicy < ReleasePolicy
def download_multiple? def download_multiple?
true true
end end
def review?
user.account_manager?
end
def approve?
review?
end
end end

View File

@@ -23,6 +23,18 @@ class ContractTemplatePolicy < ApplicationPolicy
create? create?
end end
def edit?
record.editable? && create?
end
def update?
edit?
end
def duplicate?
create?
end
def import? def import?
if user.account_manager? if user.account_manager?
record.project.account = user.account record.project.account = user.account

View File

@@ -34,4 +34,12 @@ class LocationReleasePolicy < ReleasePolicy
def download_multiple? def download_multiple?
true true
end end
def review?
user.account_manager?
end
def approve?
review?
end
end end

View File

@@ -34,4 +34,12 @@ class MaterialReleasePolicy < ReleasePolicy
def download_multiple? def download_multiple?
true true
end end
def review?
user.account_manager?
end
def approve?
review?
end
end end

View File

@@ -38,4 +38,12 @@ class MiscReleasePolicy < ReleasePolicy
def download_multiple? def download_multiple?
download_single? download_single?
end end
def review?
user.account_manager?
end
def approve?
review?
end
end end

View File

@@ -22,4 +22,12 @@ class MusicReleasePolicy < ReleasePolicy
def download_multiple? def download_multiple?
true true
end end
def review?
user.account_manager?
end
def approve?
review?
end
end end

View File

@@ -34,4 +34,12 @@ class TalentReleasePolicy < ReleasePolicy
def download_multiple? def download_multiple?
true true
end end
def review?
user.account_manager?
end
def approve?
review?
end
end end

View File

@@ -1,5 +1,13 @@
<tr id="<%= dom_id(acquired_media_release) %>"> <tr id="<%= dom_id(acquired_media_release) %>">
<td data-behavior="select"><%= check_box_tag "acquired_media_release_ids[]", acquired_media_release.id, false %></td> <td data-behavior="select"><%= check_box_tag "acquired_media_release_ids[]", acquired_media_release.id, false %></td>
<td class="text-center">
<% if acquired_media_release.approved? %>
<% tooltip_user_data = get_approval_data_for_releasable(acquired_media_release) %>
<i class="fa fa-check-circle fa-2x text-success"
data-toggle="tooltip"
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: acquired_media_release.approved_at %>"></i>
<% end %>
</td>
<td> <td>
<%= acquired_media_release.name %> <%= acquired_media_release.name %>
</td> </td>
@@ -35,6 +43,9 @@
<% if policy(Contract).show? && (acquired_media_release.contract.attached? || acquired_media_release.contract_template.present?) %> <% if policy(Contract).show? && (acquired_media_release.contract.attached? || acquired_media_release.contract_template.present?) %>
<%= link_to fa_icon("download fw", text: "Download"), [acquired_media_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> <%= link_to fa_icon("download fw", text: "Download"), [acquired_media_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
<% end %> <% end %>
<% if policy(AcquiredMediaRelease).review? %>
<%= link_to fa_icon("search fw", text: t('.actions.review')), new_acquired_media_release_approvals_path(acquired_media_release), class: "dropdown-item" %>
<% end %>
<% if policy(acquired_media_release).edit? %> <% if policy(acquired_media_release).edit? %>
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, acquired_media_release], class: "dropdown-item" %> <%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, acquired_media_release], class: "dropdown-item" %>
<% end %> <% end %>

View File

@@ -26,6 +26,7 @@
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th data-behavior="all-selectable"><%= check_box_tag "acquired_media_release_ids[]", false, false %></th> <th data-behavior="all-selectable"><%= check_box_tag "acquired_media_release_ids[]", false, false %></th>
<th><%= t '.table_headers.approved'%></th>
<th><%= AcquiredMediaRelease.human_attribute_name(:name) %></th> <th><%= AcquiredMediaRelease.human_attribute_name(:name) %></th>
<th><%= t(".table_headers.file_infos_count") %></th> <th><%= t(".table_headers.file_infos_count") %></th>
<th><%= t(".table_headers.notes") %></th> <th><%= t(".table_headers.notes") %></th>

View File

@@ -1,5 +1,13 @@
<tr id="<%= dom_id(appearance_release) %>"> <tr id="<%= dom_id(appearance_release) %>">
<td data-behavior="select"><%= check_box_tag "appearance_release_ids[]", appearance_release.id, false %></td> <td data-behavior="select"><%= check_box_tag "appearance_release_ids[]", appearance_release.id, false %></td>
<td class="text-center">
<% if appearance_release.approved? %>
<% tooltip_user_data = get_approval_data_for_releasable(appearance_release) %>
<i class="fa fa-check-circle fa-2x text-success"
data-toggle="tooltip"
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: appearance_release.approved_at %>"></i>
<% end %>
</td>
<td> <td>
<% if appearance_release.photo.attached? %> <% if appearance_release.photo.attached? %>
<%= image_tag medium_variant(appearance_release.photo) %> <%= image_tag medium_variant(appearance_release.photo) %>
@@ -39,6 +47,9 @@
<% if policy(Contract).show? && (appearance_release.contract.attached? || appearance_release.contract_template.present?) %> <% if policy(Contract).show? && (appearance_release.contract.attached? || appearance_release.contract_template.present?) %>
<%= link_to fa_icon("download fw", text: "Download"), [appearance_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> <%= link_to fa_icon("download fw", text: "Download"), [appearance_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
<% end %> <% end %>
<% if policy(AppearanceRelease).review? %>
<%= link_to fa_icon("search fw", text: t('.actions.review')), new_appearance_release_approvals_path(appearance_release), class: "dropdown-item" %>
<% end %>
<% if policy(appearance_release).edit? %> <% if policy(appearance_release).edit? %>
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, appearance_release], class: "dropdown-item" %> <%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, appearance_release], class: "dropdown-item" %>
<% end %> <% end %>

View File

@@ -44,6 +44,7 @@
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th data-behavior="all-selectable"><%= check_box_tag "appearance_release_ids[]", false, false %></th> <th data-behavior="all-selectable"><%= check_box_tag "appearance_release_ids[]", false, false %></th>
<th><%= t '.table_headers.approved'%></th>
<th></th> <th></th>
<th><%= AppearanceRelease.human_attribute_name(:person_name) %></th> <th><%= AppearanceRelease.human_attribute_name(:person_name) %></th>
<th><%= AppearanceRelease.human_attribute_name(:contact_info) %></th> <th><%= AppearanceRelease.human_attribute_name(:contact_info) %></th>

View File

@@ -1,11 +1,11 @@
<div class="card shadow-sm"> <div class="card shadow-sm">
<%= card_header text: t(".heading"), close_action_path: [@project, :medical_releases] %> <%= card_header text: t(".heading", release_type: @releasable_param.name.titleize), close_action_path: [@project, "#{@releasable_param.name.pluralize}"] %>
<div class="card-body"> <div class="card-body">
<embed class="embeded-contract-preview" type="application/pdf" src="<%= url_for [@medical_release, :contracts, format: "pdf"] %>" width="90%" height="1200" /> <embed class="embeded-contract-preview" type="application/pdf" src="<%= url_for [@releasable, :contracts, format: "pdf"] %>" width="90%" height="1200" />
<%= bootstrap_form_with model: @medical_release, method: :post, url: medical_release_approvals_path(@medical_release), local: true do |form| %> <%= bootstrap_form_with model: @releasable, method: :post, url: public_send("#{@releasable_param.name}_approvals_path", @releasable), local: true do |form| %>
<div class="row align-items-center text-center mt-4"> <div class="row align-items-center text-center mt-4">
<%= link_to t("shared.cancel"), [@medical_release.project, :medical_releases], class: "col-3 text-reset" %> <%= link_to t("shared.cancel"), [@releasable.project, "#{@releasable_param.name.pluralize}"], class: "col-3 text-reset" %>
<div class="col-9"> <div class="col-9">
<%= form.button t('.actions.approve'), id: "approve_release", class: class_string("btn btn-block btn-success btn-primary"), data: { disable_with: t("shared.disable_with") } %> <%= form.button t('.actions.approve'), id: "approve_release", class: class_string("btn btn-block btn-success btn-primary"), data: { disable_with: t("shared.disable_with") } %>
</div> </div>

View File

@@ -3,6 +3,9 @@
<td> <td>
<%= broadcast.name %> <%= broadcast.name %>
</td> </td>
<td>
<%= broadcast.shoot_location_time_zone %>
</td>
<td> <td>
<%= broadcast.status.titleize %> <%= broadcast.status.titleize %>
</td> </td>

View File

@@ -2,6 +2,7 @@
<%= bootstrap_form_with model: model, local: true do |form| %> <%= bootstrap_form_with model: model, local: true do |form| %>
<%= form.text_field :name %> <%= form.text_field :name %>
<%= form.time_zone_select(:shoot_location_time_zone, nil, label: "Time zone of shoot location") %>
<div class="row align-items-center text-center mt-4"> <div class="row align-items-center text-center mt-4">
<%= link_to t("shared.cancel"), [project, :broadcasts], class: "col-3 text-reset" %> <%= link_to t("shared.cancel"), [project, :broadcasts], class: "col-3 text-reset" %>

View File

@@ -1,7 +1,7 @@
<% if broadcast.streamer_recording? && broadcast.active? %> <% if broadcast.streamer_recording? && broadcast.active? %>
<div id="broadcast_video" class="embed-responsive-item"></div> <div id="broadcast_video" class="embed-responsive-item" data-video-type="stream"></div>
<% else %> <% else %>
<div id="broadcast_video" class="embed-responsive-item"> <div id="broadcast_video" class="embed-responsive-item" data-video-type="stream">
<table class="w-100 h-100 bg-secondary"> <table class="w-100 h-100 bg-secondary">
<tbody> <tbody>
<tr> <tr>

View File

@@ -22,6 +22,7 @@
<tr> <tr>
<th></th> <th></th>
<th><%= t(".table_headers.broadcast_name") %></th> <th><%= t(".table_headers.broadcast_name") %></th>
<th><%= t(".table_headers.broadcast_time_zone") %></th>
<th><%= t(".table_headers.broadcast_status") %></th> <th><%= t(".table_headers.broadcast_status") %></th>
<th><%= t(".table_headers.broadcast_created_at") %></th> <th><%= t(".table_headers.broadcast_created_at") %></th>
<th></th> <th></th>
@@ -32,7 +33,7 @@
<%= render @broadcasts %> <%= render @broadcasts %>
<% else %> <% else %>
<tr> <tr>
<td colspan="5" class="py-4 text-center text-muted"><%= t(".empty") %></td> <td colspan="6" class="py-4 text-center text-muted"><%= t(".empty") %></td>
</tr> </tr>
<% end %> <% end %>
</tbody> </tbody>

View File

@@ -33,10 +33,10 @@
<%= link_to "Switch View", "#", class: "btn btn-light border dropdown-toggle", role: "button", id: "dropdownMenuLink", data: { toggle: "dropdown" }, aria: { haspopup: "true", expanded: "false" } %> <%= 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"> <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<h5 class="dropdown-header">Live Streams</h5> <h5 class="dropdown-header">Live Streams</h5>
<%= link_to fa_icon("check", text: @broadcast.name.titleize), "#", class: "dropdown-item active" %> <%= link_to fa_icon("check", text: @broadcast.name.titleize), "#", data: { behavior: "play_stream"}, class: "dropdown-item active" %>
<% @multi_view_broadcasts.each do |broadcast| %> <% @multi_view_broadcasts.each do |broadcast| %>
<% if broadcast.id != @broadcast.id %> <% if broadcast.id != @broadcast.id %>
<%= link_to broadcast.name.titleize, broadcast.url, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %> <%= link_to broadcast.name.titleize, broadcast.url, data: { behavior: "play_stream"}, class: class_string("dropdown-item", "active" => @broadcast.id == broadcast.id) %>
<% end %> <% end %>
<% end %> <% end %>
<h5 class="dropdown-header">Previous Sessions</h5> <h5 class="dropdown-header">Previous Sessions</h5>
@@ -102,6 +102,7 @@
<i class="fa fa-clipboard"></i> <i class="fa fa-clipboard"></i>
Copy URL Copy URL
</button> </button>
<%= link_to t('.actions.reset_url'), [@project, @broadcast], method: :patch, class: "btn btn-danger" %>
</div> </div>
<% else %> <% else %>
<input type="text" class="form-control" value="<%= broadcast_url(@broadcast.token) %>" readonly> <input type="text" class="form-control" value="<%= broadcast_url(@broadcast.token) %>" readonly>
@@ -110,6 +111,7 @@
<i class="fa fa-clipboard"></i> <i class="fa fa-clipboard"></i>
Copy URL Copy URL
</button> </button>
<%= link_to t('.actions.reset_url'), [@project, @broadcast], method: :patch, class: "btn btn-danger" %>
</div> </div>
<% end %> <% end %>
</div> </div>

View File

@@ -1,4 +1,5 @@
<tr> <tr>
<td data-behavior="select_contract_template"><%= check_box_tag "contract_template_ids[]", contract_template.id, false %></td>
<td> <td>
<%= contract_template.name %> <%= contract_template.name %>
</td> </td>
@@ -19,6 +20,12 @@
<div class="btn-group"> <div class="btn-group">
<%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %> <%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
<div class="dropdown-menu dropdown-menu-right"> <div class="dropdown-menu dropdown-menu-right">
<% if policy(contract_template).edit? %>
<%= link_to fa_icon("pencil fw", text: t(".actions.edit")), [:edit, contract_template], class: "dropdown-item" %>
<% end %>
<% if policy(ContractTemplate).duplicate? %>
<%= link_to fa_icon("clone fw", text: t(".actions.duplicate")), contract_template_duplicates_path(contract_template), method: :post, class: "dropdown-item" %>
<% end %>
<% if policy(QrCode).show? %> <% if policy(QrCode).show? %>
<%= link_to fa_icon("qrcode", text: t(".actions.qr_code")), [contract_template, :qr_codes], class: "dropdown-item", target: :_blank %> <%= link_to fa_icon("qrcode", text: t(".actions.qr_code")), [contract_template, :qr_codes], class: "dropdown-item", target: :_blank %>
<% end %> <% end %>

View File

@@ -1,4 +1,4 @@
<%= bootstrap_form_with model: [project, contract_template], local: true do |form| %> <%= bootstrap_form_with model: model, local: true do |form| %>
<%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %> <%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
<div class="form-row"> <div class="form-row">
<%= form.text_field :name, wrapper_class: "col-sm-6" %> <%= form.text_field :name, wrapper_class: "col-sm-6" %>

View File

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

View File

@@ -5,12 +5,14 @@
<%= link_to fa_icon("plus", text: t(".actions.new")), [:new, @project, :contract_template], class: "btn btn-primary" %> <%= link_to fa_icon("plus", text: t(".actions.new")), [:new, @project, :contract_template], class: "btn btn-primary" %>
<%= link_to fa_icon("clone", text: t(".actions.import")), [:new, @project, :release_template_imports], class: "btn btn-secondary" %> <%= link_to fa_icon("clone", text: t(".actions.import")), [:new, @project, :release_template_imports], class: "btn btn-secondary" %>
<% end %> <% end %>
<%= link_to "Group QR Code", "javascript:void(0);", class: "btn btn-light border disabled", id: "group_qr_code", data: { project_id: @project.id, contract_template_ids: [] } %>
</p> </p>
<div class="border bg-white rounded shadow-sm pb-3 table-responsive"> <div class="border bg-white rounded shadow-sm pb-3 table-responsive">
<table class="table table-striped tr-px-4 align-all-middle"> <table class="table table-striped tr-px-4 align-all-middle">
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th></th>
<th><%= ContractTemplate.human_attribute_name(:name) %></th> <th><%= ContractTemplate.human_attribute_name(:name) %></th>
<th><%= ContractTemplate.human_attribute_name(:fee) %></th> <th><%= ContractTemplate.human_attribute_name(:fee) %></th>
<th><%= t(".table_headers.release_type") %></th> <th><%= t(".table_headers.release_type") %></th>

View File

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

View File

@@ -7,7 +7,7 @@
<dl> <dl>
<%= description_list_pair t('.description_labels.producer'), releasable.project.account.name %> <%= description_list_pair t('.description_labels.producer'), releasable.project.account.name %>
<%= description_list_pair t('.description_labels.production'), releasable.project.name %> <%= description_list_pair t('.description_labels.production'), releasable.project.name %>
<%= description_list_pair t('.description_labels.employee_issued_to'), releasable.name %> <%= description_list_pair t('.description_labels.issued_to'), releasable.name %>
<%= description_list_pair t('.description_labels.issued_by'), releasable.approved_by_user_name %> <%= description_list_pair t('.description_labels.issued_by'), releasable.approved_by_user_name %>
<%= description_list_pair t('.description_labels.date_issued'), releasable.approved_at %> <%= description_list_pair t('.description_labels.date_issued'), releasable.approved_at %>
</dl> </dl>

View File

@@ -26,7 +26,7 @@
<%= render "contracts/signature_page", releasable: releasable, contract_template: contract_template, preview: preview %> <%= render "contracts/signature_page", releasable: releasable, contract_template: contract_template, preview: preview %>
</div> </div>
<% if releasable.class == MedicalRelease && releasable.approved? %> <% if releasable.respond_to?(:approved?) && releasable.approved? %>
<div class="page"> <div class="page">
<%= render "contracts/for_office_use_only", releasable: releasable, preview: preview %> <%= render "contracts/for_office_use_only", releasable: releasable, preview: preview %>
</div> </div>

View File

@@ -1,5 +1,13 @@
<tr id="<%= dom_id(location_release) %>"> <tr id="<%= dom_id(location_release) %>">
<td data-behavior="select"><%= check_box_tag "location_release_ids[]", location_release.id, false %></td> <td data-behavior="select"><%= check_box_tag "location_release_ids[]", location_release.id, false %></td>
<td class="text-center">
<% if location_release.approved? %>
<% tooltip_user_data = get_approval_data_for_releasable(location_release) %>
<i class="fa fa-check-circle fa-2x text-success"
data-toggle="tooltip"
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: location_release.approved_at %>"></i>
<% end %>
</td>
<td> <td>
<% if location_release.photo.attached? %> <% if location_release.photo.attached? %>
<%= image_tag medium_variant(location_release.photo), class: "img-fluid" %> <%= image_tag medium_variant(location_release.photo), class: "img-fluid" %>
@@ -39,6 +47,9 @@
<% if policy(Contract).show? && (location_release.contract.attached? || location_release.contract_template.present?) %> <% if policy(Contract).show? && (location_release.contract.attached? || location_release.contract_template.present?) %>
<%= link_to fa_icon("download fw", text: "Download"), [location_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> <%= link_to fa_icon("download fw", text: "Download"), [location_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
<% end %> <% end %>
<% if policy(LocationRelease).review? %>
<%= link_to fa_icon("search fw", text: t('.actions.review')), new_location_release_approvals_path(location_release), class: "dropdown-item" %>
<% end %>
<% if policy(location_release).edit? %> <% if policy(location_release).edit? %>
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, location_release], class: "dropdown-item" %> <%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, location_release], class: "dropdown-item" %>
<% end %> <% end %>

View File

@@ -26,6 +26,7 @@
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th data-behavior="all-selectable"><%= check_box_tag "location_release_ids[]", false, false %></th> <th data-behavior="all-selectable"><%= check_box_tag "location_release_ids[]", false, false %></th>
<th><%= t '.table_headers.approved'%></th>
<th></th> <th></th>
<th><%= LocationRelease.human_attribute_name(:name) %></th> <th><%= LocationRelease.human_attribute_name(:name) %></th>
<th><%= t(".table_headers.address") %> <th><%= t(".table_headers.address") %>

View File

@@ -1,5 +1,13 @@
<tr id="<%= dom_id(material_release) %>"> <tr id="<%= dom_id(material_release) %>">
<td data-behavior="select"><%= check_box_tag "material_release_ids[]", material_release.id, false %></td> <td data-behavior="select"><%= check_box_tag "material_release_ids[]", material_release.id, false %></td>
<td class="text-center">
<% if material_release.approved? %>
<% tooltip_user_data = get_approval_data_for_releasable(material_release) %>
<i class="fa fa-check-circle fa-2x text-success"
data-toggle="tooltip"
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: material_release.approved_at %>"></i>
<% end %>
</td>
<td> <td>
<% if material_release.photo.attached? %> <% if material_release.photo.attached? %>
<%= image_tag medium_variant(material_release.photo), class: "img-fluid" %> <%= image_tag medium_variant(material_release.photo), class: "img-fluid" %>
@@ -36,6 +44,9 @@
<% if policy(Contract).show? && (material_release.contract.attached? || material_release.contract_template.present?) %> <% if policy(Contract).show? && (material_release.contract.attached? || material_release.contract_template.present?) %>
<%= link_to fa_icon("download fw", text: "Download"), [material_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> <%= link_to fa_icon("download fw", text: "Download"), [material_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
<% end %> <% end %>
<% if policy(MaterialRelease).review? %>
<%= link_to fa_icon("search fw", text: t('.actions.review')), new_material_release_approvals_path(material_release), class: "dropdown-item" %>
<% end %>
<% if policy(material_release).edit? %> <% if policy(material_release).edit? %>
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, material_release], class: "dropdown-item" %> <%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, material_release], class: "dropdown-item" %>
<% end %> <% end %>

View File

@@ -26,6 +26,7 @@
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th data-behavior="all-selectable"><%= check_box_tag "material_release_ids[]", false, false %></th> <th data-behavior="all-selectable"><%= check_box_tag "material_release_ids[]", false, false %></th>
<th><%= t '.table_headers.approved'%></th>
<th></th> <th></th>
<th><%= MaterialRelease.human_attribute_name(:name) %></th> <th><%= MaterialRelease.human_attribute_name(:name) %></th>
<th><%= t(".table_headers.notes") %></th> <th><%= t(".table_headers.notes") %></th>

View File

@@ -2,7 +2,7 @@
<td data-behavior="select"><%= check_box_tag "medical_release_ids[]", medical_release.id, false %></td> <td data-behavior="select"><%= check_box_tag "medical_release_ids[]", medical_release.id, false %></td>
<td class="text-center"> <td class="text-center">
<% if medical_release.approved? %> <% if medical_release.approved? %>
<% tooltip_user_data = get_approval_data_for_medical_release(medical_release) %> <% tooltip_user_data = get_approval_data_for_releasable(medical_release) %>
<i class="fa fa-check-circle fa-2x text-success" <i class="fa fa-check-circle fa-2x text-success"
data-toggle="tooltip" data-toggle="tooltip"
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: medical_release.approved_at %>"></i> title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: medical_release.approved_at %>"></i>

View File

@@ -1,5 +1,13 @@
<tr id="<%= dom_id(misc_release) %>"> <tr id="<%= dom_id(misc_release) %>">
<td data-behavior="select"><%= check_box_tag "misc_release_ids[]", misc_release.id, false %></td> <td data-behavior="select"><%= check_box_tag "misc_release_ids[]", misc_release.id, false %></td>
<td class="text-center">
<% if misc_release.approved? %>
<% tooltip_user_data = get_approval_data_for_releasable(misc_release) %>
<i class="fa fa-check-circle fa-2x text-success"
data-toggle="tooltip"
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: misc_release.approved_at %>"></i>
<% end %>
</td>
<td> <td>
<% if misc_release.photo.attached? %> <% if misc_release.photo.attached? %>
<%= image_tag medium_variant(misc_release.photo), class: "img-fluid" %> <%= image_tag medium_variant(misc_release.photo), class: "img-fluid" %>
@@ -36,6 +44,9 @@
<% if policy(misc_release.tags).new? %> <% if policy(misc_release.tags).new? %>
<%= link_to fa_icon("tags fw", text: "Tags"), [:new, misc_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %> <%= link_to fa_icon("tags fw", text: "Tags"), [:new, misc_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %>
<% end %> <% end %>
<% if policy(MiscRelease).review? %>
<%= link_to fa_icon("search fw", text: t('.actions.review')), new_misc_release_approvals_path(misc_release), class: "dropdown-item" %>
<% end %>
<% if policy(MedicalRelease).download_single? && policy(Contract).show? && (misc_release.contract.attached? || misc_release.contract_template.present?) %> <% if policy(MedicalRelease).download_single? && policy(Contract).show? && (misc_release.contract.attached? || misc_release.contract_template.present?) %>
<%= link_to fa_icon("download fw", text: "Download"), [misc_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> <%= link_to fa_icon("download fw", text: "Download"), [misc_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
<% end %> <% end %>

View File

@@ -22,6 +22,7 @@
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th data-behavior="all-selectable"><%= check_box_tag "misc_release_ids[]", false, false %></th> <th data-behavior="all-selectable"><%= check_box_tag "misc_release_ids[]", false, false %></th>
<th><%= t '.table_headers.approved'%></th>
<th></th> <th></th>
<th><%= MiscRelease.human_attribute_name(:person_name) %></th> <th><%= MiscRelease.human_attribute_name(:person_name) %></th>
<th><%= MiscRelease.human_attribute_name(:contact_info) %></th> <th><%= MiscRelease.human_attribute_name(:contact_info) %></th>

View File

@@ -1,5 +1,13 @@
<tr id="<%= dom_id(music_release) %>"> <tr id="<%= dom_id(music_release) %>">
<td data-behavior="select"><%= check_box_tag "music_release_ids[]", music_release.id, false %></td> <td data-behavior="select"><%= check_box_tag "music_release_ids[]", music_release.id, false %></td>
<td class="text-center">
<% if music_release.approved? %>
<% tooltip_user_data = get_approval_data_for_releasable(music_release) %>
<i class="fa fa-check-circle fa-2x text-success"
data-toggle="tooltip"
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: music_release.approved_at %>"></i>
<% end %>
</td>
<td> <td>
<%= music_release.name %> <%= music_release.name %>
</td> </td>
@@ -36,6 +44,9 @@
<% if policy(Contract).show? && (music_release.contract.attached? || music_release.contract_template.present?) %> <% if policy(Contract).show? && (music_release.contract.attached? || music_release.contract_template.present?) %>
<%= link_to fa_icon("download fw", text: "Download"), [music_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> <%= link_to fa_icon("download fw", text: "Download"), [music_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
<% end %> <% end %>
<% if policy(MusicRelease).review? %>
<%= link_to fa_icon("search fw", text: t('.actions.review')), new_music_release_approvals_path(music_release), class: "dropdown-item" %>
<% end %>
<% if policy(music_release).edit? %> <% if policy(music_release).edit? %>
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, music_release], class: "dropdown-item" %> <%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, music_release], class: "dropdown-item" %>
<% end %> <% end %>

View File

@@ -25,6 +25,7 @@
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th data-behavior="all-selectable"><%= check_box_tag "music_release_ids[]", false, false %></th> <th data-behavior="all-selectable"><%= check_box_tag "music_release_ids[]", false, false %></th>
<th><%= t '.table_headers.approved'%></th>
<th><%= MusicRelease.human_attribute_name(:name) %></th> <th><%= MusicRelease.human_attribute_name(:name) %></th>
<th><%= t(".table_headers.file_infos_count") %></th> <th><%= t(".table_headers.file_infos_count") %></th>
<th><%= t(".table_headers.composers_count") %></th> <th><%= t(".table_headers.composers_count") %></th>

View File

@@ -0,0 +1,8 @@
<tr>
<td>
<%= contract_template.name %>
</td>
<td class="text-right" nowrap>
<%= link_to t(".actions.sign"), [:new, contract_template.project.account, contract_template.project, contract_template, "#{contract_template.release_type}_release"], class: "btn btn-sm btn-primary", target: :_blank %>
</td>
</tr>

View File

@@ -0,0 +1,27 @@
<% content_for :header do %>
<header class="container-fluid py-3 border-bottom sticky-top bg-light">
<div class="row align-items-center justify-content-center">
<div class="col-4 text-center">
<h1 class="h4 m-0"><%= @account.name %></h1>
</div>
</div>
</header>
<% end %>
<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><%= ContractTemplate.human_attribute_name(:name) %></th>
<th></th>
</tr>
</thead>
<tbody>
<%= render @contract_templates %>
</tbody>
</table>
</div>
<div class="mt-3">
<%= will_paginate @contract_templates %>
</div>

View File

@@ -1,5 +1,13 @@
<tr id="<%= dom_id(talent_release) %>"> <tr id="<%= dom_id(talent_release) %>">
<td data-behavior="select"><%= check_box_tag "talent_release_ids[]", talent_release.id, false %></td> <td data-behavior="select"><%= check_box_tag "talent_release_ids[]", talent_release.id, false %></td>
<td class="text-center">
<% if talent_release.approved? %>
<% tooltip_user_data = get_approval_data_for_releasable(talent_release) %>
<i class="fa fa-check-circle fa-2x text-success"
data-toggle="tooltip"
title="<%= t '.messages.approved_tooltip', user: tooltip_user_data, timestamp: talent_release.approved_at %>"></i>
<% end %>
</td>
<td> <td>
<% if talent_release.photo.attached? %> <% if talent_release.photo.attached? %>
<%= image_tag medium_variant(talent_release.photo), class: "img-fluid" %> <%= image_tag medium_variant(talent_release.photo), class: "img-fluid" %>
@@ -42,6 +50,9 @@
<% if policy(Contract).show? && (talent_release.contract.attached? || talent_release.contract_template.present?) %> <% if policy(Contract).show? && (talent_release.contract.attached? || talent_release.contract_template.present?) %>
<%= link_to fa_icon("download fw", text: "Download"), [talent_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> <%= link_to fa_icon("download fw", text: "Download"), [talent_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
<% end %> <% end %>
<% if policy(TalentRelease).review? %>
<%= link_to fa_icon("search fw", text: t('.actions.review')), new_talent_release_approvals_path(talent_release), class: "dropdown-item" %>
<% end %>
<% if policy(talent_release).edit? %> <% if policy(talent_release).edit? %>
<%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, talent_release], class: "dropdown-item" %> <%= link_to fa_icon("pencil fw", text: "Edit"), [:edit, talent_release], class: "dropdown-item" %>
<% end %> <% end %>

View File

@@ -26,6 +26,7 @@
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<th data-behavior="all-selectable"><%= check_box_tag "talent_release_ids[]", false, false %></th> <th data-behavior="all-selectable"><%= check_box_tag "talent_release_ids[]", false, false %></th>
<th><%= t '.table_headers.approved'%></th>
<th></th> <th></th>
<th><%= TalentRelease.human_attribute_name(:person_name) %></th> <th><%= TalentRelease.human_attribute_name(:person_name) %></th>
<th><%= TalentRelease.human_attribute_name(:person_phone) %></th> <th><%= TalentRelease.human_attribute_name(:person_phone) %></th>

View File

@@ -1,9 +1,19 @@
<%= errors_summary_for task_request %> <%= errors_summary_for task_request %>
<%= bootstrap_form_with model: model, url: [@project, @task_request, show_chat: true], local: true do |form| %> <%= bootstrap_form_with model: model, url: [@project, @task_request, show_chat: true], local: true do |form| %>
<div class="alert alert-info text-center text-md-left">
<%= fa_icon "info-circle" %> <div class="d-flex">
<strong><%= t '.info_message' %></strong> <div class="row">
<div class="col-xl-10 col-12">
<div class="alert alert-info text-center text-md-left">
<%= fa_icon "info-circle" %>
<strong><%= t '.info_message' %></strong>
</div>
</div>
<div class="col-xl-2 col-12">
<%= form.submit t('.actions.chat_now'), class: "btn btn-block btn-warning pt-4 pb-4 mb-1", data: { disable_with: t("shared.disable_with") } %>
</div>
</div>
</div> </div>
<%= form.text_area :description, label: t('.labels.description') %> <%= form.text_area :description, label: t('.labels.description') %>

View File

@@ -1,3 +1,6 @@
unless Rails.env.test? unless Rails.env.test?
allowed_hosts = ENV['ALLOWED_HOSTS'].to_s.split(",")
Rails.application.config.hosts << AppHost.new.domain Rails.application.config.hosts << AppHost.new.domain
Rails.application.config.hosts += allowed_hosts
end end

View File

@@ -29,6 +29,9 @@ en:
acquired_media_release: acquired_media_release:
actions: actions:
manage: Manage manage: Manage
review: Review
messages:
approved_tooltip: Approved by %{user} on %{timestamp}
no_media: No Media no_media: No Media
create: create:
notice: The acquired media release has been created notice: The acquired media release has been created
@@ -49,6 +52,7 @@ en:
search: Search search: Search
empty: Acquired Media Releases will appear here empty: Acquired Media Releases will appear here
table_headers: table_headers:
approved: Approved
file_infos_count: No. Files file_infos_count: No. Files
name: Name name: Name
notes: Notes notes: Notes
@@ -121,6 +125,9 @@ en:
appearance_release: appearance_release:
actions: actions:
manage: Manage manage: Manage
review: Review
messages:
approved_tooltip: Approved by %{user} on %{timestamp}
no_photos: Needs Photo no_photos: Needs Photo
create: create:
failed_import: Failed to create appearance release for files listed below failed_import: Failed to create appearance release for files listed below
@@ -152,6 +159,7 @@ en:
empty: Appearance Releases will appear here empty: Appearance Releases will appear here
imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release
table_headers: table_headers:
approved: Approved
contact_info: Contact info contact_info: Contact info
name: Name name: Name
notes: Notes notes: Notes
@@ -176,11 +184,11 @@ en:
team_member: Team Member team_member: Team Member
approvals: approvals:
create: create:
release_approved: Medical release has been approved release_approved: "%{release_type} has been approved"
new: new:
actions: actions:
approve: Approve approve: Approve
heading: Review Medical Release heading: "Review %{release_type}"
blank_contracts: blank_contracts:
new: new:
number_of_copies_label: Number of copies number_of_copies_label: Number of copies
@@ -214,9 +222,13 @@ en:
broadcast_created_at: Created Date broadcast_created_at: Created Date
broadcast_name: Name broadcast_name: Name
broadcast_status: Status broadcast_status: Status
broadcast_time_zone: Time Zone of Shoot Location
new: new:
heading: heading:
Create Live Stream Create Live Stream
show:
actions:
reset_url: Reset URL
splash: splash:
actions: actions:
book_demo: Schedule a Demo book_demo: Schedule a Demo
@@ -235,6 +247,8 @@ en:
share_stream: Share live stream link with clients share_stream: Share live stream link with clients
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
stream_multiple_cameras: Stream multiple cameras at one time stream_multiple_cameras: Stream multiple cameras at one time
update:
reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
bulk_taggings: bulk_taggings:
new_bulk_tag_modal: new_bulk_tag_modal:
submit: Add submit: Add
@@ -250,6 +264,8 @@ en:
contract_template: contract_template:
actions: actions:
copy_url: Copy Release URL copy_url: Copy Release URL
duplicate: Duplicate
edit: Edit
manage: Manage manage: Manage
qr_code: QR Code qr_code: QR Code
sign: Sign sign: Sign
@@ -259,6 +275,13 @@ en:
destroy: destroy:
archived_failure: Failed to archive the release template archived_failure: Failed to archive the release template
archived_notice: The release template has been archived archived_notice: The release template has been archived
duplicate:
name_prefix: Copy of %{template_name}
duplicates:
create:
error: Failed to duplicate release template
edit:
heading: Edit Contract Template
form: form:
custom_fields: custom_fields:
heading: Questionnaire heading: Questionnaire
@@ -297,12 +320,14 @@ en:
manage_large_audience: Easily manage large audiences with the crowd control feature manage_large_audience: Easily manage large audiences with the crowd control feature
print_QR_code: Print out release QR codes print_QR_code: Print out release QR codes
releases_automatically_organized: Releases are automatically organized as theyre submitted releases_automatically_organized: Releases are automatically organized as theyre submitted
update:
notice: The release template has been updated
contracts: contracts:
for_office_use_only: for_office_use_only:
description_labels: description_labels:
date_issued: Date Issued date_issued: Date Issued
employee_issued_to: Employee Issued To
issued_by: Issued By issued_by: Issued By
issued_to: Issued To
producer: Producer producer: Producer
production: Production production: Production
heading: For Office Use Only heading: For Office Use Only
@@ -689,6 +714,7 @@ en:
update: Save Changes update: Save Changes
contract_template: contract_template:
create: Create Release Template create: Create Release Template
update: Save Changes
directory: directory:
create: Create Folder create: Create Folder
new_file: Upload Files new_file: Upload Files
@@ -745,6 +771,7 @@ en:
empty: Location Releases will appear here empty: Location Releases will appear here
table_headers: table_headers:
address: Address address: Address
approved: Approved
name: Name name: Name
notes: Notes notes: Notes
signed_at: Date Signed signed_at: Date Signed
@@ -752,6 +779,9 @@ en:
location_release: location_release:
actions: actions:
manage: Manage manage: Manage
review: Review
messages:
approved_tooltip: Approved by %{user} on %{timestamp}
no_photos: Needs Photo no_photos: Needs Photo
new: new:
heading: Import Location Release heading: Import Location Release
@@ -780,6 +810,7 @@ en:
search: Search search: Search
empty: Material Releases will appear here empty: Material Releases will appear here
table_headers: table_headers:
approved: Approved
name: Name name: Name
notes: Notes notes: Notes
signed_at: Date Signed signed_at: Date Signed
@@ -787,6 +818,9 @@ en:
material_release: material_release:
actions: actions:
manage: Manage manage: Manage
review: Review
messages:
approved_tooltip: Approved by %{user} on %{timestamp}
no_photos: Needs Photo no_photos: Needs Photo
new: new:
heading: Import Material Release (Products / Logos) heading: Import Material Release (Products / Logos)
@@ -823,6 +857,7 @@ en:
search: Search search: Search
empty: Misc Releases will appear here empty: Misc Releases will appear here
table_headers: table_headers:
approved: Approved
contact_info: Contact info contact_info: Contact info
name: Person name name: Person name
notes: Notes notes: Notes
@@ -831,6 +866,9 @@ en:
misc_release: misc_release:
actions: actions:
manage: Manage manage: Manage
review: Review
messages:
approved_tooltip: Approved by %{user} on %{timestamp}
music_releases: music_releases:
create: create:
notice: The music release has been created notice: The music release has been created
@@ -857,6 +895,7 @@ en:
search: Search search: Search
empty: Music Releases will appear here empty: Music Releases will appear here
table_headers: table_headers:
approved: Approved
composers_count: No. Composers composers_count: No. Composers
file_infos_count: No. Files file_infos_count: No. Files
name: Name name: Name
@@ -867,6 +906,9 @@ en:
music_release: music_release:
actions: actions:
manage: Manage manage: Manage
review: Review
messages:
approved_tooltip: Approved by %{user} on %{timestamp}
new: new:
heading: Import Music Release heading: Import Music Release
update: update:
@@ -1024,6 +1066,16 @@ en:
broadcasts: broadcasts:
show: show:
alert: That broadcast is no longer available alert: That broadcast is no longer available
contract_templates:
contract_template:
actions:
sign: Sign
no_fee: No Fee
index:
heading: Release Templates
table_headers:
release_type: Type of Release
signed_release_count: No. Signed Releases
location_releases: location_releases:
create: create:
notice: Your release has been signed. Thank you! notice: Your release has been signed. Thank you!
@@ -1256,6 +1308,7 @@ en:
search: Search search: Search
empty: Talent Releases will appear here empty: Talent Releases will appear here
table_headers: table_headers:
approved: Approved
email: Email email: Email
name: Name name: Name
notes: Notes notes: Notes
@@ -1267,6 +1320,9 @@ en:
talent_release: talent_release:
actions: actions:
manage: Manage manage: Manage
review: Review
messages:
approved_tooltip: Approved by %{user} on %{timestamp}
update: update:
notice: The talent release has been updated notice: The talent release has been updated
task_requests: task_requests:
@@ -1279,7 +1335,9 @@ en:
heading: heading:
Edit Task Request Edit Task Request
form: form:
info_message: After submitting this task request, you'll be connected via chat with a ME Suite representative. actions:
chat_now: Chat Now
info_message: For best results, please fill out this form prior to being connected with a TaskME assistant. However, if urgent, you can start speaking with a TaskME assistant by pressing the Chat Now button to the right
labels: labels:
additional_notes: Please add any additional notes we should be aware of regarding this task. additional_notes: Please add any additional notes we should be aware of regarding this task.
deadline: What is the deadline for this task? deadline: What is the deadline for this task?

View File

@@ -81,6 +81,9 @@ es:
do_not_copy_warning: "Do not copy (ES)" do_not_copy_warning: "Do not copy (ES)"
serial_number_label: "Serial Number (ES)" serial_number_label: "Serial Number (ES)"
broadcasts: broadcasts:
show:
actions:
reset_url: Reset URL (ES)
splash: splash:
actions: actions:
book_demo: Schedule a Demo book_demo: Schedule a Demo
@@ -99,10 +102,23 @@ es:
share_stream: Share live stream link with clients share_stream: Share live stream link with clients
stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera stream_from_mobile_app: Stream from ME Suite Mobile app, or via a professional camera
stream_multiple_cameras: Stream multiple cameras at one time stream_multiple_cameras: Stream multiple cameras at one time
update:
reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
contract_templates: contract_templates:
blank_contracts: blank_contracts:
create: create:
number_of_copies_invalid_notice: Please enter valid number greater than 0 (ES) number_of_copies_invalid_notice: Please enter valid number greater than 0 (ES)
contract_template:
actions:
duplicate: Duplicate (ES)
edit: Edit (ES)
duplicate:
name_prefix: Copy of %{template_name} (ES)
duplicates:
create:
error: Failed to duplicate release template (ES)
edit:
heading: Edit Contract Template (ES)
form: form:
custom_fields: custom_fields:
heading: Medical Questionnaire (ES) heading: Medical Questionnaire (ES)
@@ -129,12 +145,14 @@ es:
manage_large_audience: Easily manage large audiences with the crowd control feature (ES) manage_large_audience: Easily manage large audiences with the crowd control feature (ES)
print_QR_code: Print out release QR codes (ES) print_QR_code: Print out release QR codes (ES)
releases_automatically_organized: Releases are automatically organized as theyre submitted (ES) releases_automatically_organized: Releases are automatically organized as theyre submitted (ES)
update:
notice: The release template has been updated (ES)
contracts: contracts:
for_office_use_only: for_office_use_only:
description_labels: description_labels:
date_issued: Date Issued (ES) date_issued: Date Issued (ES)
employee_issued_to: Employee Issued To (ES)
issued_by: Issued By (ES) issued_by: Issued By (ES)
issued_to: Issued To (ES)
producer: Producer (ES) producer: Producer (ES)
production: Production (ES) production: Production (ES)
heading: For Office Use Only (ES) heading: For Office Use Only (ES)
@@ -304,6 +322,8 @@ es:
broadcast: broadcast:
create: Create Live Stream (ES) create: Create Live Stream (ES)
update: Save Changes (ES) update: Save Changes (ES)
contract_template:
update: Save changes (ES)
create: 'Crear %{model}' create: 'Crear %{model}'
medical_release: medical_release:
update: Approve (ES) update: Approve (ES)
@@ -479,7 +499,9 @@ es:
create: create:
success_message: Your task request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds. (ES) success_message: Your task request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds. (ES)
form: form:
info_message: After submitting this task request, you'll be connected via chat with a ME Suite representative. (ES) actions:
chat_now: Chat Now (ES)
info_message: For best results, please fill out this form prior to being connected with a TaskME assistant. However, if urgent, you can start speaking with a TaskME assistant by pressing the Chat Now button to the right (ES)
index: index:
table_headers: table_headers:
task_request_description: Description (ES) task_request_description: Description (ES)

View File

@@ -22,6 +22,9 @@ Rails.application.routes.draw do
concern :file_infoable do concern :file_infoable do
resource :file_infos, only: [:edit, :update] resource :file_infos, only: [:edit, :update]
end end
concern :approvable do
resource :approvals, only: [:new, :create]
end
constraints AdminSignedInConstraint.new do constraints AdminSignedInConstraint.new do
namespace :admin do namespace :admin do
@@ -56,9 +59,10 @@ Rails.application.routes.draw do
resources :talent_releases, except: [:show], concerns: [:contractable, :notable, :photoable] resources :talent_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
resources :medical_releases, except: [:show], concerns: [:contractable, :notable, :photoable] resources :medical_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
resources :misc_releases, except: [:show], concerns: [:contractable, :notable, :photoable] resources :misc_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
resources :contract_templates, only: [:index, :new, :create, :destroy] do resources :contract_templates, only: [:index, :new, :create, :edit, :update, :destroy] do
resource :qr_codes, only: [:show], controller: "contract_templates/qr_codes" resource :qr_codes, only: [:show], controller: "contract_templates/qr_codes"
resource :blank_contracts, only: [:show, :new, :create], controller: "contract_templates/blank_contracts" resource :blank_contracts, only: [:show, :new, :create], controller: "contract_templates/blank_contracts"
resource :duplicates, only: [:create], controller: "contract_templates/duplicates"
end end
resource :release_template_imports, only: [:new, :create] resource :release_template_imports, only: [:new, :create]
resources :project_memberships, only: [:index, :create, :destroy] resources :project_memberships, only: [:index, :create, :destroy]
@@ -120,7 +124,7 @@ Rails.application.routes.draw do
scope module: :public do scope module: :public do
resources :accounts, only: [] do resources :accounts, only: [] do
resources :projects, only: [] do resources :projects, only: [] do
resources :contract_templates, only: [] do resources :contract_templates, only: [:index] do
resources :talent_releases, only: [:new, :create] resources :talent_releases, only: [:new, :create]
resources :appearance_releases, only: [:new, :create] resources :appearance_releases, only: [:new, :create]
resources :acquired_media_releases, only: [:new, :create] resources :acquired_media_releases, only: [:new, :create]
@@ -140,12 +144,7 @@ Rails.application.routes.draw do
ALL_RELEASES = RELEASES + [:music_releases] ALL_RELEASES = RELEASES + [:music_releases]
ALL_RELEASES.each do |release| ALL_RELEASES.each do |release|
resources release, only: [], concerns: :taggable resources release, only: [], concerns: [:taggable, :approvable]
end
# Customization for medical releases
resources :medical_releases, only: [], concerns: :taggable do
resource :approvals, only: [:new, :create]
end end
resources :bulk_taggings, only: [:new, :create] resources :bulk_taggings, only: [:new, :create]

View File

@@ -0,0 +1,7 @@
class AddApprovalFieldsToMusicReleases < ActiveRecord::Migration[6.0]
def change
add_column :music_releases, :approved_by_user_name, :text
add_column :music_releases, :approved_by_user_email, :text
add_column :music_releases, :approved_at, :timestamp
end
end

View File

@@ -0,0 +1,7 @@
class AddApprovalFieldsToMiscReleases < ActiveRecord::Migration[6.0]
def change
add_column :misc_releases, :approved_by_user_name, :text
add_column :misc_releases, :approved_by_user_email, :text
add_column :misc_releases, :approved_at, :timestamp
end
end

View File

@@ -0,0 +1,7 @@
class AddApprovalFieldsToAcquiredMediaReleases < ActiveRecord::Migration[6.0]
def change
add_column :acquired_media_releases, :approved_by_user_name, :text
add_column :acquired_media_releases, :approved_by_user_email, :text
add_column :acquired_media_releases, :approved_at, :timestamp
end
end

View File

@@ -0,0 +1,7 @@
class AddApprovalFieldsToMaterialReleases < ActiveRecord::Migration[6.0]
def change
add_column :material_releases, :approved_by_user_name, :text
add_column :material_releases, :approved_by_user_email, :text
add_column :material_releases, :approved_at, :timestamp
end
end

View File

@@ -0,0 +1,7 @@
class AddApprovalFieldsToLocationReleases < ActiveRecord::Migration[6.0]
def change
add_column :location_releases, :approved_by_user_name, :text
add_column :location_releases, :approved_by_user_email, :text
add_column :location_releases, :approved_at, :timestamp
end
end

View File

@@ -0,0 +1,7 @@
class AddApprovalFieldsToTalentReleases < ActiveRecord::Migration[6.0]
def change
add_column :talent_releases, :approved_by_user_name, :text
add_column :talent_releases, :approved_by_user_email, :text
add_column :talent_releases, :approved_at, :timestamp
end
end

View File

@@ -0,0 +1,7 @@
class AddApprovalFieldsToAppearanceReleases < ActiveRecord::Migration[6.0]
def change
add_column :appearance_releases, :approved_by_user_name, :text
add_column :appearance_releases, :approved_by_user_email, :text
add_column :appearance_releases, :approved_at, :timestamp
end
end

View File

@@ -0,0 +1,5 @@
class AddShootLocationTimeZoneToBroadcasts < ActiveRecord::Migration[6.0]
def change
add_column :broadcasts, :shoot_location_time_zone, :string, default: "UTC"
end
end

View File

@@ -0,0 +1,5 @@
class AddFullLiveStreamPlaybackUrlToBroadcasts < ActiveRecord::Migration[6.0]
def change
add_column :broadcasts, :full_live_stream_playback_uid, :string
end
end

View File

@@ -9,20 +9,6 @@ SET xmloption = content;
SET client_min_messages = warning; SET client_min_messages = warning;
SET row_security = off; SET row_security = off;
--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -
--
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -
--
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
-- --
-- Name: fuzzystrmatch; Type: EXTENSION; Schema: -; Owner: - -- Name: fuzzystrmatch; Type: EXTENSION; Schema: -; Owner: -
-- --
@@ -172,7 +158,10 @@ CREATE TABLE public.acquired_media_releases (
description text, description text,
person_first_name character varying, person_first_name character varying,
person_last_name character varying, person_last_name character varying,
signed_at timestamp without time zone signed_at timestamp without time zone,
approved_by_user_name text,
approved_by_user_email text,
approved_at timestamp without time zone
); );
@@ -352,7 +341,10 @@ CREATE TABLE public.appearance_releases (
guardian_2_address_city character varying, guardian_2_address_city character varying,
guardian_2_address_state character varying, guardian_2_address_state character varying,
guardian_2_address_zip character varying, guardian_2_address_zip character varying,
guardian_2_address_country character varying guardian_2_address_country character varying,
approved_by_user_name text,
approved_by_user_email text,
approved_at timestamp without time zone
); );
@@ -547,7 +539,9 @@ CREATE TABLE public.broadcasts (
stream_key character varying, stream_key character varying,
stream_playback_uid character varying, stream_playback_uid character varying,
token character varying, token character varying,
streamer_status integer DEFAULT 0 streamer_status integer DEFAULT 0,
shoot_location_time_zone character varying DEFAULT 'UTC'::character varying,
full_live_stream_playback_uid character varying
); );
@@ -891,7 +885,10 @@ CREATE TABLE public.location_releases (
filming_ended_on date, filming_ended_on date,
person_first_name character varying, person_first_name character varying,
person_last_name character varying, person_last_name character varying,
filming_hours text filming_hours text,
approved_by_user_name text,
approved_by_user_email text,
approved_at timestamp without time zone
); );
@@ -980,7 +977,10 @@ CREATE TABLE public.material_releases (
signed_at timestamp without time zone, signed_at timestamp without time zone,
description text, description text,
person_first_name character varying, person_first_name character varying,
person_last_name character varying person_last_name character varying,
approved_by_user_name text,
approved_by_user_email text,
approved_at timestamp without time zone
); );
@@ -1135,7 +1135,10 @@ CREATE TABLE public.misc_releases (
question_12_answer text, question_12_answer text,
question_13_answer text, question_13_answer text,
question_14_answer text, question_14_answer text,
question_15_answer text question_15_answer text,
approved_by_user_name text,
approved_by_user_email text,
approved_at timestamp without time zone
); );
@@ -1191,7 +1194,10 @@ CREATE TABLE public.music_releases (
restriction_id bigint, restriction_id bigint,
restriction_text character varying, restriction_text character varying,
person_first_name character varying, person_first_name character varying,
person_last_name character varying person_last_name character varying,
approved_by_user_name text,
approved_by_user_email text,
approved_at timestamp without time zone
); );
@@ -1547,7 +1553,10 @@ CREATE TABLE public.talent_releases (
guardian_2_address_city character varying, guardian_2_address_city character varying,
guardian_2_address_state character varying, guardian_2_address_state character varying,
guardian_2_address_zip character varying, guardian_2_address_zip character varying,
guardian_2_address_country character varying guardian_2_address_country character varying,
approved_by_user_name text,
approved_by_user_email text,
approved_at timestamp without time zone
); );
@@ -3924,6 +3933,15 @@ INSERT INTO "schema_migrations" (version) VALUES
('20200702152130'), ('20200702152130'),
('20200707155717'), ('20200707155717'),
('20200709120630'), ('20200709120630'),
('20200712181139'); ('20200712181139'),
('20200715084927'),
('20200716055453'),
('20200716075851'),
('20200716083706'),
('20200716094927'),
('20200716103525'),
('20200716105723'),
('20200720051634'),
('20200720131309');

View File

@@ -24,6 +24,7 @@ RSpec.describe BroadcastsChannel, type: :channel do
event: "broadcast_stream_update", event: "broadcast_stream_update",
status: broadcast.status, status: broadcast.status,
playback_url: broadcast.stream_playback_url, playback_url: broadcast.stream_playback_url,
full_live_stream_playback_url: broadcast.full_live_stream_playback_url,
status_content: status_content, status_content: status_content,
video_content: video_content, video_content: video_content,
streamer_status: broadcast.streamer_status streamer_status: broadcast.streamer_status

View File

@@ -203,6 +203,15 @@ RSpec.describe BroadcastsController, type: :controller do
expect(BroadcastsChannel).to have_received(:broadcast_file_upload_updates) expect(BroadcastsChannel).to have_received(:broadcast_file_upload_updates)
end end
it "regenerates token if #update is called without broadcast param" do
old_token = broadcast.token
patch :update, params: { project_id: project.id, id: broadcast.id }
expect(response).to redirect_to [project, broadcast]
expect(flash.notice).to eq token_reset_notice
expect(Broadcast.last.token).not_to eq old_token
end
end end
describe "#destroy" do describe "#destroy" do
@@ -252,4 +261,8 @@ RSpec.describe BroadcastsController, type: :controller do
def create_stream def create_stream
t 'broadcasts.splash.actions.create_stream' t 'broadcasts.splash.actions.create_stream'
end end
def token_reset_notice
t 'broadcasts.update.reset_notice'
end
end end

View File

@@ -0,0 +1,30 @@
# frozen_string_literal: true
require 'rails_helper'
describe ContractTemplates::DuplicatesController do
let(:account) { build(:account) }
let(:current_user) { create(:user, :manager, primary_account: account) }
let(:project) { create(:project, members: [current_user], account: account) }
before do
sign_in(current_user)
end
describe '#create' do
it "responds with redirect to the edit page for newly created duplicate" do
contract_template = create(:contract_template, project: project)
expect do
post :create, params: { contract_template_id: contract_template }
end.to change(ContractTemplate, :count).by(1)
new_ct = ContractTemplate.last
expect(new_ct.name).to eq t('contract_templates.duplicate.name_prefix', template_name: contract_template.name)
expect(new_ct.release_type).to eq contract_template.release_type
expect(response).to redirect_to [:edit, new_ct]
end
end
end

View File

@@ -5,6 +5,7 @@ describe ContractTemplates::QrCodesController do
let(:current_user) { create(:user, :manager, primary_account: account) } let(:current_user) { create(:user, :manager, primary_account: account) }
let(:project) { create(:project, members: [current_user], account: account) } let(:project) { create(:project, members: [current_user], account: account) }
let(:contract_template) { create(:contract_template, project: project) } let(:contract_template) { create(:contract_template, project: project) }
let(:contract_templates) { create_list(:contract_template, 5, project: project)}
before do before do
sign_in(current_user) sign_in(current_user)
@@ -16,5 +17,13 @@ describe ContractTemplates::QrCodesController do
expect(response).to be_successful expect(response).to be_successful
end end
context "for group qr code" do
it "responds with success" do
get :show, params: { contract_template_id: contract_templates.first, multi_sign_ids: contract_templates }
expect(response).to be_successful
end
end
end end
end end

View File

@@ -118,6 +118,57 @@ describe ContractTemplatesController do
end end
end end
describe '#edit' do
let(:contract_template) do
create(:contract_template,
name: 'My Contract Template', fee: 50, release_type: 'appearance',
project: project)
end
it 'responds ok' do
get :edit, params: { project_id: project, id: contract_template }
expect(response).to be_successful
end
context 'when current user is an associate' do
let(:current_user) { create(:user, :associate) }
it 'raises exception' do
expect do
get :edit, params: { project_id: project, id: contract_template }
end.to raise_error(Pundit::NotAuthorizedError)
end
end
end
describe '#update' do
let(:contract_template) do
create(:contract_template,
name: 'My Contract Template', fee: 50, release_type: 'appearance',
project: project)
end
it 'redirects' do
patch :update, params: { project_id: project, id: contract_template, contract_template: contract_template_params }
expect(response).to redirect_to(project_contract_templates_path(project))
end
context 'when current user is an associate' do
let(:current_user) { create(:user, :associate) }
it 'raises exception' do
expect do
patch :update, params: { project_id: project, id: contract_template, contract_template: contract_template_params }
end.to raise_error(Pundit::NotAuthorizedError)
end
end
end
describe '#destroy' do describe '#destroy' do
let!(:contract_template) { create(:contract_template, project: project) } let!(:contract_template) { create(:contract_template, project: project) }

View File

@@ -0,0 +1,39 @@
require 'rails_helper'
RSpec.describe Public::ContractTemplatesController, type: :controller do
render_views
let(:account) { create(:account, name: "Dev Account") }
let(:project) { create(:project, account: account) }
let(:contract_templates) { create_list(:contract_template, 20, project: project) }
describe '#index' do
it 'responds successfully' do
get :index, params: { project_id: project, account_id: project.account, contract_template_ids: contract_templates.map(&:id) }
expect(response).to be_successful
end
it 'renders content if there are contract templates' do
contract_template = create(:contract_template,
name: 'My Contract Template', fee: 50, release_type: 'appearance',
project: project)
sign_path = new_account_project_contract_template_appearance_release_path(project.account, project, contract_template)
sign_url = new_account_project_contract_template_appearance_release_url(project.account, project, contract_template)
get :index, params: { project_id: project, account_id: project.account, contract_template_ids: [contract_template.id] }
expect(response.body).to have_content('My Contract Template')
expect(response.body).to have_link('Sign', href: sign_path)
end
context 'when there are many records' do
it 'paginates the table' do
get :index, params: { project_id: project, account_id: project.account, contract_template_ids: contract_templates.map(&:id) }
expect(response.body).to have_link('2', href: account_project_contract_templates_path(project.account, project, contract_template_ids: contract_templates.map(&:id), page: 2))
end
end
end
end

View File

@@ -4,27 +4,45 @@ RSpec.describe StreamNotificationsController, type: :controller do
render_views render_views
let!(:broadcast) { create(:broadcast, :with_stream, skip_create_callback: true, name: "Live Stream") } let!(:broadcast) { create(:broadcast, :with_stream, skip_create_callback: true, name: "Live Stream") }
let(:active_status) { {type: "video.live_stream.active", object: { id: "mux_stream" }} } 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(: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) { { 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(:idle_status_for_unknown_broadcast) { { type: "video.live_stream.idle", object: { id: "unknown-id" } } }
let(:asset_ready) { { let(:asset_ready) do
type: "video.asset.static_renditions.ready", {
object: { id: "asset_uid" }, type: "video.asset.static_renditions.ready",
data: { object: { id: "asset_uid" },
playback_ids: [
{id: "playback_uid"}
],
static_renditions: {
files: [{name: "high.mp4"}]
}
},
stream_notification: {
data: { data: {
live_stream_id: "mux_stream" playback_ids: [
{ id: "playback_uid" }
],
static_renditions: {
files: [{ name: "high.mp4" }]
}
},
stream_notification: {
data: {
live_stream_id: "mux_stream"
}
} }
} }
} } end
let(:full_live_stream_ready) do
{
type: "video.asset.ready",
object: { id: "active_asset_uid" },
data: {
playback_ids: [
{ id: "full_live_stream_playback_uid" }
]
},
stream_notification: {
data: {
live_stream_id: "mux_stream"
}
}
}
end
describe "#create" do describe "#create" do
before do before do
@@ -54,13 +72,20 @@ RSpec.describe StreamNotificationsController, type: :controller do
end end
it "creates a broadcast recording when static_renditions.ready is received in notification" do it "creates a broadcast recording when static_renditions.ready is received in notification" do
expect { expect do
post :create, params: asset_ready post :create, params: asset_ready
}.to change(BroadcastRecording, :count).by(1) end.to change(BroadcastRecording, :count).by(1)
expect(BroadcastsChannel).to have_received(:stream_recording_ready) expect(BroadcastsChannel).to have_received(:stream_recording_ready)
end end
it "stores full livestream playback uid and updates the broadcast" do
post :create, params: full_live_stream_ready
expect(Broadcast.last.full_live_stream_playback_uid).to eq "full_live_stream_playback_uid"
expect(BroadcastsChannel).to have_received(:broadcast_stream_updates).with(be_kind_of(Broadcast))
end
it "returns OK response even for non-existing broadcast" do it "returns OK response even for non-existing broadcast" do
post :create, params: idle_status_for_unknown_broadcast post :create, params: idle_status_for_unknown_broadcast

View File

@@ -11,6 +11,7 @@ FactoryBot.define do
stream_uid "mux_stream" stream_uid "mux_stream"
stream_key "mux_key" stream_key "mux_key"
stream_playback_uid "mux_playback_id" stream_playback_uid "mux_playback_id"
full_live_stream_playback_uid "full_live_stream_playback_uid"
status "created" status "created"
streamer_status "idle" streamer_status "idle"
end end

View File

@@ -262,6 +262,93 @@ RSpec.feature 'User manages contract templates', type: :feature do
expect(page).to have_content('Active template') expect(page).to have_content('Active template')
end end
scenario 'edit button is visible for not-signed contract template' do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
expect(page).to have_link(edit_button_label, exact: true, count: 1)
end
scenario 'edit button is not visible for signed contract template' do
ct = create(:contract_template, project: project)
create(:appearance_release, contract_template: ct)
visit project_contract_templates_path(project)
expect(page).to have_link(edit_button_label, exact: true, count: 0)
end
scenario 'duplicate button is visible for not signed contract template' do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
expect(page).to have_link(duplicate_button_label, exact: true, count: 1)
end
scenario 'duplicate button is visible for signed contract template' do
ct = create(:contract_template, project: project)
create(:appearance_release, contract_template: ct)
visit project_contract_templates_path(project)
expect(page).to have_link(duplicate_button_label, exact: true, count: 1)
end
scenario 'clicking edit button opens edit page for contract template' do
ct = create(:contract_template, project: project)
visit project_contract_templates_path(project)
expect(page).to have_content ct.name
expect(page).not_to have_content 'Updated CT'
expect(page).not_to have_content 'Medical'
click_link edit_button_label
expect(page).to have_content edit_page_heading
fill_in name_field, with: 'Updated CT'
select 'Medical Release', from: 'Release type'
fill_in_trix body_field, with: 'Updated legal text'
click_on update_contract_template_button_label
expect(page).to have_content 'Updated CT'
expect(page).to have_content 'Medical'
end
scenario 'clicking duplicate button opens edit page for newly created contract template' do
ct = create(:contract_template, project: project)
visit project_contract_templates_path(project)
expect(page).to have_content ct.name
expect(page).not_to have_content 'Modified duplicate'
expect(page).not_to have_content 'Misc'
expect do
click_link duplicate_button_label
end.to change(ContractTemplate, :count).by(1)
expect(page).to have_content edit_page_heading
name_input = find("##{name_field}")
expect(name_input.value).to eq duplicate_release_name(ct.name)
fill_in name_field, with: 'Modified duplicate'
select 'Misc Release', from: 'Release type'
fill_in_trix body_field, with: 'Legal text for duplicate'
click_on update_contract_template_button_label
expect(page).to have_content 'Modified duplicate'
expect(page).to have_content 'Misc'
expect(ct.body.id).not_to eq ContractTemplate.last.body.id
expect(ct.guardian_clause.id).not_to eq ContractTemplate.last.guardian_clause.id
expect(ct.signature_legal_text.id).not_to eq ContractTemplate.last.signature_legal_text.id
end
context 'When the user is associate' do context 'When the user is associate' do
let(:current_user) { create(:user, :associate) } let(:current_user) { create(:user, :associate) }
@@ -280,6 +367,22 @@ RSpec.feature 'User manages contract templates', type: :feature do
expect(page).to have_content schedule_demo expect(page).to have_content schedule_demo
expect(page).not_to have_content create_release_template expect(page).not_to have_content create_release_template
end end
it 'does not show edit button' do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
expect(page).to have_link(edit_button_label, exact: true, count: 0)
end
it 'does not show duplicate button' do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
expect(page).to have_link(duplicate_button_label, exact: true, count: 0)
end
end end
context 'When the user is account manager' do context 'When the user is account manager' do
@@ -300,6 +403,40 @@ RSpec.feature 'User manages contract templates', type: :feature do
expect(page).to have_content schedule_demo expect(page).to have_content schedule_demo
expect(page).to have_content create_release_template expect(page).to have_content create_release_template
end end
it 'shows edit button when contract template is not signed' do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
expect(page).to have_link(edit_button_label, exact: true, count: 1)
end
it 'does not show edit button when contract template is signed' do
ct = create(:contract_template, project: project)
create(:appearance_release, contract_template: ct)
visit project_contract_templates_path(project)
expect(page).to have_link(edit_button_label, exact: true, count: 0)
end
it 'shows duplicate button when contract template is not signed' do
create(:contract_template, project: project)
visit project_contract_templates_path(project)
expect(page).to have_link(duplicate_button_label, exact: true, count: 1)
end
it 'shows duplicate button when contract template is signed' do
ct = create(:contract_template, project: project)
create(:appearance_release, contract_template: ct)
visit project_contract_templates_path(project)
expect(page).to have_link(duplicate_button_label, exact: true, count: 1)
end
end end
private private
@@ -355,4 +492,28 @@ RSpec.feature 'User manages contract templates', type: :feature do
def signature_legal_text_trix_field def signature_legal_text_trix_field
'Signature legal text' 'Signature legal text'
end end
def edit_button_label
t 'contract_templates.contract_template.actions.edit'
end
def duplicate_button_label
t 'contract_templates.contract_template.actions.duplicate'
end
def edit_page_heading
t 'contract_templates.edit.heading'
end
def name_field
'contract_template_name'
end
def update_contract_template_button_label
t 'helpers.submit.contract_template.update'
end
def duplicate_release_name(template_name = '')
t 'contract_templates.duplicate.name_prefix', template_name: template_name
end
end end

View File

@@ -213,13 +213,117 @@ feature "User managing acquired_media releases" do
expect(page).not_to have_link("Edit", exact: true) expect(page).not_to have_link("Edit", exact: true)
end end
context "when the user is account manager" do
let(:current_user) { create(:user, :account_manager) }
before do
sign_in current_user
end
scenario "Review action in Manage menu is visible" do
create(:acquired_media_release_with_contract_template, :native, project: project)
visit project_acquired_media_releases_path(project)
expect(page).to have_link(review_action, exact: true)
end
scenario "Reviewing release" do
create(:acquired_media_release_with_contract_template, :native, project: project)
visit project_acquired_media_releases_path(project)
click_link review_action
expect(page).to have_content review_page_heading
expect(page).to have_content approve_button
end
scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do
create(:acquired_media_release_with_contract_template, :native, project: project)
visit project_acquired_media_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0)
create(:acquired_media_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now)
visit project_acquired_media_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1)
end
scenario 'When viewing the contract PDF of approved release there is page for office use only' do
acquired_media_release = create(:acquired_media_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe',
approved_by_user_name: "Big Joe",
approved_by_user_email: "some@email.com",
approved_at: DateTime.now)
sign_in(current_user)
visit project_acquired_media_releases_path(project)
click_link *view_release_pdf_link_for(acquired_media_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).to have_content for_office_use_only.upcase
expect(pdf_body).to have_content producer_label
expect(pdf_body).to have_content production_label
expect(pdf_body).to have_content issued_to_label
expect(pdf_body).to have_content issued_by_label
expect(pdf_body).to have_content date_issued
expect(pdf_body).to have_content 'Big Joe'
end
scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do
acquired_media_release = create(:acquired_media_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe')
sign_in(current_user)
visit project_acquired_media_releases_path(project)
click_link *view_release_pdf_link_for(acquired_media_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).not_to have_content for_office_use_only.upcase
expect(pdf_body).not_to have_content producer_label
expect(pdf_body).not_to have_content production_label
expect(pdf_body).not_to have_content issued_to_label
expect(pdf_body).not_to have_content issued_by_label
expect(pdf_body).not_to have_content date_issued
expect(pdf_body).not_to have_content 'Big Joe'
end
end
context "when the user is project manager" do
before do
sign_in current_user
end
scenario "Review action in Manage menu is not visible" do
create(:acquired_media_release_with_contract_template, project: project)
visit project_acquired_media_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end
context "when the user is associate" do context "when the user is associate" do
let(:current_user) { create(:user, :associate) } let(:current_user) { create(:user, :associate) }
before do
sign_in current_user
end
scenario "should not show download" do scenario "should not show download" do
collection1 = create(:acquired_media_release_with_contract_template, name: "EDM Music", project: project) collection1 = create(:acquired_media_release_with_contract_template, name: "EDM Music", project: project)
sign_in current_user
visit project_acquired_media_releases_path(project) visit project_acquired_media_releases_path(project)
click_on "Manage" click_on "Manage"
@@ -368,4 +472,40 @@ feature "User managing acquired_media releases" do
def dummy_signature_legal_text def dummy_signature_legal_text
'Some signature legal language' 'Some signature legal language'
end end
def review_action
t 'acquired_media_releases.acquired_media_release.actions.review'
end
def review_page_heading
t 'approvals.new.heading', release_type: "Acquired Media Release"
end
def approve_button
t 'approvals.new.actions.approve'
end
def for_office_use_only
t 'contracts.for_office_use_only.heading'
end
def producer_label
t 'contracts.for_office_use_only.description_labels.producer'
end
def production_label
t 'contracts.for_office_use_only.description_labels.production'
end
def issued_to_label
t 'contracts.for_office_use_only.description_labels.issued_to'
end
def issued_by_label
t 'contracts.for_office_use_only.description_labels.issued_by'
end
def date_issued
t 'contracts.for_office_use_only.description_labels.date_issued'
end
end end

View File

@@ -481,18 +481,131 @@ feature 'User managing appearance releases' do
end end
end end
context "when the user is account manager" do
let(:current_user) { create(:user, :account_manager) }
before do
sign_in current_user
end
scenario "Review action in Manage menu is visible" do
create(:appearance_release_with_contract_template, :native, project: project)
visit project_appearance_releases_path(project)
expect(page).to have_link(review_action, exact: true)
end
scenario "Reviewing release" do
create(:appearance_release_with_contract_template, :native, project: project)
visit project_appearance_releases_path(project)
click_link review_action
expect(page).to have_content review_page_heading
expect(page).to have_content approve_button
end
scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do
create(:appearance_release_with_contract_template, :native, project: project)
visit project_appearance_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0)
create(:appearance_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now)
visit project_appearance_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1)
end
scenario 'When viewing the contract PDF of approved release there is page for office use only' do
appearance_release = create(:appearance_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe',
approved_by_user_name: "Big Joe",
approved_by_user_email: "some@email.com",
approved_at: DateTime.now)
sign_in(current_user)
visit project_appearance_releases_path(project)
click_link *view_release_pdf_link_for(appearance_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).to have_content for_office_use_only.upcase
expect(pdf_body).to have_content producer_label
expect(pdf_body).to have_content production_label
expect(pdf_body).to have_content issued_to_label
expect(pdf_body).to have_content issued_by_label
expect(pdf_body).to have_content date_issued
expect(pdf_body).to have_content 'Big Joe'
end
scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do
appearance_release = create(:appearance_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe')
sign_in(current_user)
visit project_appearance_releases_path(project)
click_link *view_release_pdf_link_for(appearance_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).not_to have_content for_office_use_only.upcase
expect(pdf_body).not_to have_content producer_label
expect(pdf_body).not_to have_content production_label
expect(pdf_body).not_to have_content issued_to_label
expect(pdf_body).not_to have_content issued_by_label
expect(pdf_body).not_to have_content date_issued
expect(pdf_body).not_to have_content 'Big Joe'
end
end
context "when the user is project manager" do
before do
sign_in current_user
end
scenario "Review action in Manage menu is not visible" do
create(:appearance_release_with_contract_template, :native, project: project)
visit project_appearance_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end
context 'when the user is associate' do context 'when the user is associate' do
let(:current_user) { create(:user, :associate) } let(:current_user) { create(:user, :associate) }
before do
sign_in current_user
end
scenario 'should not show download' do scenario 'should not show download' do
chris = create(:appearance_release_with_contract_template, person_first_name: 'Chris', person_last_name: 'Evans', project: project) chris = create(:appearance_release_with_contract_template, person_first_name: 'Chris', person_last_name: 'Evans', project: project)
sign_in current_user
visit project_appearance_releases_path(project) visit project_appearance_releases_path(project)
click_on 'Manage' click_on 'Manage'
expect(page).not_to have_link('Download', exact: true) expect(page).not_to have_link('Download', exact: true)
end end
scenario "Review action in Manage menu is not visible" do
create(:appearance_release_with_contract_template, :native, project: project)
visit project_appearance_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end end
private private
@@ -717,4 +830,40 @@ feature 'User managing appearance releases' do
def dummy_signature_legal_text def dummy_signature_legal_text
'Some signature legal language' 'Some signature legal language'
end end
def review_action
t 'appearance_releases.appearance_release.actions.review'
end
def review_page_heading
t 'approvals.new.heading', release_type: "Appearance Release"
end
def approve_button
t 'approvals.new.actions.approve'
end
def for_office_use_only
t 'contracts.for_office_use_only.heading'
end
def producer_label
t 'contracts.for_office_use_only.description_labels.producer'
end
def production_label
t 'contracts.for_office_use_only.description_labels.production'
end
def issued_to_label
t 'contracts.for_office_use_only.description_labels.issued_to'
end
def issued_by_label
t 'contracts.for_office_use_only.description_labels.issued_by'
end
def date_issued
t 'contracts.for_office_use_only.description_labels.date_issued'
end
end end

View File

@@ -24,10 +24,12 @@ feature 'User managing broadcasts' do
by 'filling out the form' do by 'filling out the form' do
fill_in broadcast_name_field, with: 'My Broadcast' fill_in broadcast_name_field, with: 'My Broadcast'
select_time_zone("New Delhi")
end end
click_button 'Create Live Stream' click_button 'Create Live Stream'
expect(page).to have_content('A live stream has been created') expect(page).to have_content('A live stream has been created')
expect(page).to have_content('New Delhi')
click_on 'Manage' click_on 'Manage'
expect(page).to have_link('Copy Stream URL', exact: true) expect(page).to have_link('Copy Stream URL', exact: true)
expect(page).to have_link('Copy Stream Key', exact: true) expect(page).to have_link('Copy Stream Key', exact: true)
@@ -63,6 +65,54 @@ feature 'User managing broadcasts' do
expect(page).to have_content(recording.download_file_name) expect(page).to have_content(recording.download_file_name)
end end
scenario 'Clicking Reset URL regenerates broadcast token' do
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
old_token = broadcast.token
visit project_broadcast_path(project, broadcast)
expect(page).to have_content reset_url
expect(page).to have_xpath "//input[@readonly][@value='#{broadcast_url(old_token)}']"
click_link reset_url
expect(Broadcast.last.token).not_to eq old_token
expect(page).to have_xpath "//input[@readonly][@value='#{broadcast_url(Broadcast.last.token)}']"
expect(page).to have_content token_reset_notice
end
scenario 'Player will not reload if stream is reactivated while user is watching previous recording', js: true do
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
recording = create(:broadcast_recording, broadcast: broadcast)
visit project_broadcast_path(project, broadcast)
expect(page).to have_content stream_idle_message
broadcast.streamer_status = :recording
broadcast.status = :active
BroadcastsChannel.broadcast_stream_updates(broadcast)
expect(page).to have_content stream_begun_message
expect(page).to have_selector('div#broadcast_video', count: 2)
broadcast.streamer_status = :idle
broadcast.status = :idle
BroadcastsChannel.broadcast_stream_updates(broadcast)
click_on switch_view_dropdown
click_on recording.download_file_name
expect(page).to have_content stream_idle_message
expect(page).to have_selector('div#broadcast_video', count: 1)
broadcast.streamer_status = :recording
broadcast.status = :active
BroadcastsChannel.broadcast_stream_updates(broadcast)
expect(page).to have_content stream_begun_message
expect(page).to have_selector('div#broadcast_video', count: 1)
end
scenario 'user can go back and forth between live session and previous sessions', js: true do scenario 'user can go back and forth between live session and previous sessions', js: true do
broadcast = create(:broadcast, :with_stream, :with_files, project: project) broadcast = create(:broadcast, :with_stream, :with_files, project: project)
recording = create(:broadcast_recording, broadcast: broadcast) recording = create(:broadcast_recording, broadcast: broadcast)
@@ -172,6 +222,12 @@ feature 'User managing broadcasts' do
def broadcast_name_field def broadcast_name_field
'broadcast[name]' 'broadcast[name]'
end end
def select_time_zone(value)
if value.present?
select value, from: "broadcast[shoot_location_time_zone]"
end
end
def click_checkboxes def click_checkboxes
all('input[type="checkbox"]')[0].click all('input[type="checkbox"]')[0].click
@@ -189,4 +245,22 @@ feature 'User managing broadcasts' do
def create_stream def create_stream
t 'broadcasts.splash.actions.create_stream' t 'broadcasts.splash.actions.create_stream'
end end
def reset_url
t 'broadcasts.show.actions.reset_url'
end
def token_reset_notice
t 'broadcasts.update.reset_notice'
end
def stream_begun_message
'Live stream has begun, click play to watch it'
end
def stream_idle_message
'Live stream is waiting to begin'
end
end end

View File

@@ -232,18 +232,131 @@ feature "User managing location releases" do
expect(pdf_body).to have_content("06:00 - 20:00") expect(pdf_body).to have_content("06:00 - 20:00")
end end
context "when the user is account manager" do
let(:current_user) { create(:user, :account_manager) }
before do
sign_in current_user
end
scenario "Review action in Manage menu is visible" do
create(:location_release_with_contract_template, :native, project: project)
visit project_location_releases_path(project)
expect(page).to have_link(review_action, exact: true)
end
scenario "Reviewing release" do
create(:location_release_with_contract_template, :native, project: project)
visit project_location_releases_path(project)
click_link review_action
expect(page).to have_content review_page_heading
expect(page).to have_content approve_button
end
scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do
create(:location_release_with_contract_template, :native, project: project)
visit project_location_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0)
create(:location_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now)
visit project_location_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1)
end
scenario 'When viewing the contract PDF of approved release there is page for office use only' do
location_release = create(:location_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe',
approved_by_user_name: "Big Joe",
approved_by_user_email: "some@email.com",
approved_at: DateTime.now)
sign_in(current_user)
visit project_location_releases_path(project)
click_link *view_release_pdf_link_for(location_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).to have_content for_office_use_only.upcase
expect(pdf_body).to have_content producer_label
expect(pdf_body).to have_content production_label
expect(pdf_body).to have_content issued_to_label
expect(pdf_body).to have_content issued_by_label
expect(pdf_body).to have_content date_issued
expect(pdf_body).to have_content 'Big Joe'
end
scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do
location_release = create(:location_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe')
sign_in(current_user)
visit project_location_releases_path(project)
click_link *view_release_pdf_link_for(location_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).not_to have_content for_office_use_only.upcase
expect(pdf_body).not_to have_content producer_label
expect(pdf_body).not_to have_content production_label
expect(pdf_body).not_to have_content issued_to_label
expect(pdf_body).not_to have_content issued_by_label
expect(pdf_body).not_to have_content date_issued
expect(pdf_body).not_to have_content 'Big Joe'
end
end
context "when the user is project manager" do
before do
sign_in current_user
end
scenario "Review action in Manage menu is not visible" do
create(:location_release_with_contract_template, :native, project: project)
visit project_location_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end
context "when the user is associate" do context "when the user is associate" do
let(:current_user) { create(:user, :associate) } let(:current_user) { create(:user, :associate) }
before do
sign_in current_user
end
scenario "should not show download" do scenario "should not show download" do
create(:location_release_with_contract_template, name: "Cheers", project: project) create(:location_release_with_contract_template, name: "Cheers", project: project)
sign_in current_user
visit project_location_releases_path(project) visit project_location_releases_path(project)
click_on "Manage" click_on "Manage"
expect(page).not_to have_link("Download", exact: true) expect(page).not_to have_link("Download", exact: true)
end end
scenario "Review action in Manage menu is not visible" do
create(:location_release_with_contract_template, :native, project: project)
visit project_location_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end end
private private
@@ -386,4 +499,40 @@ feature "User managing location releases" do
def dummy_signature_legal_text def dummy_signature_legal_text
'Some signature legal language' 'Some signature legal language'
end end
def review_action
t 'location_releases.location_release.actions.review'
end
def review_page_heading
t 'approvals.new.heading', release_type: "Location Release"
end
def approve_button
t 'approvals.new.actions.approve'
end
def for_office_use_only
t 'contracts.for_office_use_only.heading'
end
def producer_label
t 'contracts.for_office_use_only.description_labels.producer'
end
def production_label
t 'contracts.for_office_use_only.description_labels.production'
end
def issued_to_label
t 'contracts.for_office_use_only.description_labels.issued_to'
end
def issued_by_label
t 'contracts.for_office_use_only.description_labels.issued_by'
end
def date_issued
t 'contracts.for_office_use_only.description_labels.date_issued'
end
end end

View File

@@ -234,18 +234,131 @@ feature "User managing material releases" do
end end
end end
context "when the user is account manager" do
let(:current_user) { create(:user, :account_manager) }
before do
sign_in current_user
end
scenario "Review action in Manage menu is visible" do
create(:material_release_with_contract_template, :native, project: project)
visit project_material_releases_path(project)
expect(page).to have_link(review_action, exact: true)
end
scenario "Reviewing release" do
create(:material_release_with_contract_template, :native, project: project)
visit project_material_releases_path(project)
click_link review_action
expect(page).to have_content review_page_heading
expect(page).to have_content approve_button
end
scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do
create(:material_release_with_contract_template, :native, project: project)
visit project_material_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0)
create(:material_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now)
visit project_material_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1)
end
scenario 'When viewing the contract PDF of approved release there is page for office use only' do
material_release = create(:material_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe',
approved_by_user_name: "Big Joe",
approved_by_user_email: "some@email.com",
approved_at: DateTime.now)
sign_in(current_user)
visit project_material_releases_path(project)
click_link *view_release_pdf_link_for(material_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).to have_content for_office_use_only.upcase
expect(pdf_body).to have_content producer_label
expect(pdf_body).to have_content production_label
expect(pdf_body).to have_content issued_to_label
expect(pdf_body).to have_content issued_by_label
expect(pdf_body).to have_content date_issued
expect(pdf_body).to have_content 'Big Joe'
end
scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do
material_release = create(:material_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe')
sign_in(current_user)
visit project_material_releases_path(project)
click_link *view_release_pdf_link_for(material_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).not_to have_content for_office_use_only.upcase
expect(pdf_body).not_to have_content producer_label
expect(pdf_body).not_to have_content production_label
expect(pdf_body).not_to have_content issued_to_label
expect(pdf_body).not_to have_content issued_by_label
expect(pdf_body).not_to have_content date_issued
expect(pdf_body).not_to have_content 'Big Joe'
end
end
context "when the user is project manager" do
before do
sign_in current_user
end
scenario "Review action in Manage menu is not visible" do
create(:material_release_with_contract_template, :native, project: project)
visit project_material_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end
context "when the user is associate" do context "when the user is associate" do
let(:current_user) { create(:user, :associate) } let(:current_user) { create(:user, :associate) }
before do
sign_in current_user
end
scenario "should not show download" do scenario "should not show download" do
create(:material_release_with_contract_template, name: "Apple MacBook Air", project: project) create(:material_release_with_contract_template, name: "Apple MacBook Air", project: project)
sign_in current_user
visit project_material_releases_path(project) visit project_material_releases_path(project)
click_on "Manage" click_on "Manage"
expect(page).not_to have_link("Download", exact: true) expect(page).not_to have_link("Download", exact: true)
end end
scenario "Review action in Manage menu is not visible" do
create(:material_release_with_contract_template, :native, project: project)
visit project_material_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end end
private private
@@ -393,4 +506,40 @@ feature "User managing material releases" do
def dummy_signature_legal_text def dummy_signature_legal_text
'Some signature legal language' 'Some signature legal language'
end end
def review_action
t 'material_releases.material_release.actions.review'
end
def review_page_heading
t 'approvals.new.heading', release_type: "Material Release"
end
def approve_button
t 'approvals.new.actions.approve'
end
def for_office_use_only
t 'contracts.for_office_use_only.heading'
end
def producer_label
t 'contracts.for_office_use_only.description_labels.producer'
end
def production_label
t 'contracts.for_office_use_only.description_labels.production'
end
def issued_to_label
t 'contracts.for_office_use_only.description_labels.issued_to'
end
def issued_by_label
t 'contracts.for_office_use_only.description_labels.issued_by'
end
def date_issued
t 'contracts.for_office_use_only.description_labels.date_issued'
end
end end

View File

@@ -260,7 +260,7 @@ feature "User managing medical releases" do
expect(pdf_body).to have_content for_office_use_only.upcase expect(pdf_body).to have_content for_office_use_only.upcase
expect(pdf_body).to have_content producer_label expect(pdf_body).to have_content producer_label
expect(pdf_body).to have_content production_label expect(pdf_body).to have_content production_label
expect(pdf_body).to have_content employee_issued_to_label expect(pdf_body).to have_content issued_to_label
expect(pdf_body).to have_content issued_by_label expect(pdf_body).to have_content issued_by_label
expect(pdf_body).to have_content date_issued expect(pdf_body).to have_content date_issued
expect(pdf_body).to have_content 'Big Joe' expect(pdf_body).to have_content 'Big Joe'
@@ -282,7 +282,7 @@ feature "User managing medical releases" do
expect(pdf_body).not_to have_content for_office_use_only.upcase expect(pdf_body).not_to have_content for_office_use_only.upcase
expect(pdf_body).not_to have_content producer_label expect(pdf_body).not_to have_content producer_label
expect(pdf_body).not_to have_content production_label expect(pdf_body).not_to have_content production_label
expect(pdf_body).not_to have_content employee_issued_to_label expect(pdf_body).not_to have_content issued_to_label
expect(pdf_body).not_to have_content issued_by_label expect(pdf_body).not_to have_content issued_by_label
expect(pdf_body).not_to have_content date_issued expect(pdf_body).not_to have_content date_issued
expect(pdf_body).not_to have_content 'Big Joe' expect(pdf_body).not_to have_content 'Big Joe'
@@ -561,7 +561,7 @@ feature "User managing medical releases" do
end end
def review_page_heading def review_page_heading
t 'approvals.new.heading' t 'approvals.new.heading', release_type: "Medical Release"
end end
def approve_button def approve_button
@@ -580,8 +580,8 @@ feature "User managing medical releases" do
t 'contracts.for_office_use_only.description_labels.production' t 'contracts.for_office_use_only.description_labels.production'
end end
def employee_issued_to_label def issued_to_label
t 'contracts.for_office_use_only.description_labels.employee_issued_to' t 'contracts.for_office_use_only.description_labels.issued_to'
end end
def issued_by_label def issued_by_label

View File

@@ -79,6 +79,84 @@ feature "User managing misc releases" do
expect(content_type).to eq('application/pdf') expect(content_type).to eq('application/pdf')
end end
scenario "Review action in Manage menu is visible" do
create(:misc_release_with_contract_template, :native, project: project)
visit project_misc_releases_path(project)
expect(page).to have_link(review_action, exact: true)
end
scenario "Reviewing release" do
create(:misc_release_with_contract_template, :native, project: project)
visit project_misc_releases_path(project)
click_link review_action
expect(page).to have_content review_page_heading
expect(page).to have_content approve_button
end
scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do
create(:misc_release_with_contract_template, :native, project: project)
visit project_misc_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0)
create(:misc_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now)
visit project_misc_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1)
end
scenario 'When viewing the contract PDF of approved release there is page for office use only' do
misc_release = create(:misc_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe',
approved_by_user_name: "Big Joe",
approved_by_user_email: "some@email.com",
approved_at: DateTime.now)
sign_in(current_user)
visit project_misc_releases_path(project)
click_link *view_release_pdf_link_for(misc_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).to have_content for_office_use_only.upcase
expect(pdf_body).to have_content producer_label
expect(pdf_body).to have_content production_label
expect(pdf_body).to have_content issued_to_label
expect(pdf_body).to have_content issued_by_label
expect(pdf_body).to have_content date_issued
expect(pdf_body).to have_content 'Big Joe'
end
scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do
misc_release = create(:misc_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe')
sign_in(current_user)
visit project_misc_releases_path(project)
click_link *view_release_pdf_link_for(misc_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).not_to have_content for_office_use_only.upcase
expect(pdf_body).not_to have_content producer_label
expect(pdf_body).not_to have_content production_label
expect(pdf_body).not_to have_content issued_to_label
expect(pdf_body).not_to have_content issued_by_label
expect(pdf_body).not_to have_content date_issued
expect(pdf_body).not_to have_content 'Big Joe'
end
scenario 'viewing the contract PDF' do scenario 'viewing the contract PDF' do
misc_release = create(:misc_release, misc_release = create(:misc_release,
:native, :native,
@@ -140,6 +218,14 @@ feature "User managing misc releases" do
expect(page).to have_link("Download", exact: true, count: 0) expect(page).to have_link("Download", exact: true, count: 0)
end end
scenario "Review action in Manage menu is not visible" do
create(:misc_release_with_contract_template, :native, project: project)
visit project_misc_releases_path(project)
expect(page).not_to have_link(review_action, exact: true)
end
end end
private private
@@ -210,4 +296,44 @@ feature "User managing misc releases" do
def dummy_signature_legal_text def dummy_signature_legal_text
'Some signature legal language' 'Some signature legal language'
end end
def view_release_pdf_link_for(release)
['Download', href: misc_release_contracts_path(release, format: 'pdf')]
end
def review_action
t 'misc_releases.misc_release.actions.review'
end
def review_page_heading
t 'approvals.new.heading', release_type: "Misc Release"
end
def approve_button
t 'approvals.new.actions.approve'
end
def for_office_use_only
t 'contracts.for_office_use_only.heading'
end
def producer_label
t 'contracts.for_office_use_only.description_labels.producer'
end
def production_label
t 'contracts.for_office_use_only.description_labels.production'
end
def issued_to_label
t 'contracts.for_office_use_only.description_labels.issued_to'
end
def issued_by_label
t 'contracts.for_office_use_only.description_labels.issued_by'
end
def date_issued
t 'contracts.for_office_use_only.description_labels.date_issued'
end
end end

View File

@@ -86,18 +86,71 @@ feature "User managing music releases" do
expect(page).to have_field("Search", with: "EDM") expect(page).to have_field("Search", with: "EDM")
end end
context "when the user is account manager" do
let(:current_user) { create(:user, :account_manager) }
before do
sign_in current_user
end
scenario "Review action in Manage menu is visible" do
create(:music_release_with_contract_template, project: project)
visit project_music_releases_path(project)
click_on "Manage"
expect(page).to have_link(review_action, exact: true)
end
scenario "Reviewing release" do
create(:music_release_with_contract_template, project: project)
visit project_music_releases_path(project)
click_on "Manage"
click_link review_action
expect(page).to have_content review_page_heading
expect(page).to have_content approve_button
end
end
context "when the user is project manager" do
scenario "Review action in Manage menu is not visible" do
create(:music_release_with_contract_template, project: project)
sign_in current_user
visit project_music_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end
context "when the user is associate" do context "when the user is associate" do
let(:current_user) { create(:user, :associate) } let(:current_user) { create(:user, :associate) }
before do
sign_in current_user
end
scenario "should not show download" do scenario "should not show download" do
collection1 = create(:music_release, name: "EDM Music", project: project) collection1 = create(:music_release, name: "EDM Music", project: project)
sign_in current_user
visit project_music_releases_path(project) visit project_music_releases_path(project)
click_on "Manage" click_on "Manage"
expect(page).not_to have_link("Download", exact: true) expect(page).not_to have_link("Download", exact: true)
end end
scenario "Review action in Manage menu is not visible" do
create(:music_release_with_contract_template, project: project)
visit project_music_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end end
private private
@@ -163,4 +216,16 @@ feature "User managing music releases" do
select "Other", from: "Restriction" select "Other", from: "Restriction"
fill_in "Describe other restrictions", with: "Test" fill_in "Describe other restrictions", with: "Test"
end end
def review_action
t 'music_releases.music_release.actions.review'
end
def review_page_heading
t 'approvals.new.heading', release_type: "Music Release"
end
def approve_button
t 'approvals.new.actions.approve'
end
end end

View File

@@ -373,18 +373,131 @@ feature "User managing talent releases" do
end end
end end
context "when the user is account manager" do
let(:current_user) { create(:user, :account_manager) }
before do
sign_in current_user
end
scenario "Review action in Manage menu is visible" do
create(:talent_release_with_contract_template, :native, project: project)
visit project_talent_releases_path(project)
expect(page).to have_link(review_action, exact: true)
end
scenario "Reviewing release" do
create(:talent_release_with_contract_template, :native, project: project)
visit project_talent_releases_path(project)
click_link review_action
expect(page).to have_content review_page_heading
expect(page).to have_content approve_button
end
scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do
create(:talent_release_with_contract_template, :native, project: project)
visit project_talent_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0)
create(:talent_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now)
visit project_talent_releases_path(project)
expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1)
end
scenario 'When viewing the contract PDF of approved release there is page for office use only' do
talent_release = create(:talent_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe',
approved_by_user_name: "Big Joe",
approved_by_user_email: "some@email.com",
approved_at: DateTime.now)
sign_in(current_user)
visit project_talent_releases_path(project)
click_link *view_release_pdf_link_for(talent_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).to have_content for_office_use_only.upcase
expect(pdf_body).to have_content producer_label
expect(pdf_body).to have_content production_label
expect(pdf_body).to have_content issued_to_label
expect(pdf_body).to have_content issued_by_label
expect(pdf_body).to have_content date_issued
expect(pdf_body).to have_content 'Big Joe'
end
scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do
talent_release = create(:talent_release_with_contract_template,
:native,
project: project,
person_first_name: 'Jane',
person_last_name: 'Doe')
sign_in(current_user)
visit project_talent_releases_path(project)
click_link *view_release_pdf_link_for(talent_release)
expect(content_type).to eq('application/pdf')
expect(content_disposition).to include('inline')
expect(pdf_body).not_to have_content for_office_use_only.upcase
expect(pdf_body).not_to have_content producer_label
expect(pdf_body).not_to have_content production_label
expect(pdf_body).not_to have_content issued_to_label
expect(pdf_body).not_to have_content issued_by_label
expect(pdf_body).not_to have_content date_issued
expect(pdf_body).not_to have_content 'Big Joe'
end
end
context "when the user is project manager" do
before do
sign_in current_user
end
scenario "Review action in Manage menu is not visible" do
create(:talent_release_with_contract_template, :native, project: project)
visit project_talent_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end
context "when the user is associate" do context "when the user is associate" do
let(:current_user) { create(:user, :associate) } let(:current_user) { create(:user, :associate) }
before do
sign_in current_user
end
scenario "should not show download" do scenario "should not show download" do
create(:talent_release_with_contract_template, person_first_name: "Robert", person_last_name: "Downey Jr.", project: project) create(:talent_release_with_contract_template, person_first_name: "Robert", person_last_name: "Downey Jr.", project: project)
sign_in current_user
visit project_talent_releases_path(project) visit project_talent_releases_path(project)
click_on "Manage" click_on "Manage"
expect(page).not_to have_link("Download", exact: true) expect(page).not_to have_link("Download", exact: true)
end end
scenario "Review action in Manage menu is not visible" do
create(:talent_release_with_contract_template, :native, project: project)
visit project_talent_releases_path(project)
click_on "Manage"
expect(page).not_to have_link(review_action, exact: true)
end
end end
private private
@@ -566,4 +679,40 @@ feature "User managing talent releases" do
def dummy_signature_legal_text def dummy_signature_legal_text
'Some signature legal language' 'Some signature legal language'
end end
def review_action
t 'talent_releases.talent_release.actions.review'
end
def review_page_heading
t 'approvals.new.heading', release_type: "Talent Release"
end
def approve_button
t 'approvals.new.actions.approve'
end
def for_office_use_only
t 'contracts.for_office_use_only.heading'
end
def producer_label
t 'contracts.for_office_use_only.description_labels.producer'
end
def production_label
t 'contracts.for_office_use_only.description_labels.production'
end
def issued_to_label
t 'contracts.for_office_use_only.description_labels.issued_to'
end
def issued_by_label
t 'contracts.for_office_use_only.description_labels.issued_by'
end
def date_issued
t 'contracts.for_office_use_only.description_labels.date_issued'
end
end end

View File

@@ -91,6 +91,21 @@ feature "User managing task requests" do
expect(page).to have_content add_new_project_label expect(page).to have_content add_new_project_label
end end
scenario "user can click Chat Now and start chat event with a blank form" do
visit project_task_requests_path(project)
click_on create_task_request
expect(page).to have_content chat_now_button
expect(page).to have_content form_notice
expect do
click_on chat_now_button
end.to change(TaskRequest, :count).by(1)
expect(page).to have_content task_request_created_notice
end
private private
def no_task_requests_label def no_task_requests_label
@@ -120,4 +135,20 @@ feature "User managing task requests" do
def schedule_demo def schedule_demo
t 'task_requests.splash.actions.book_demo' t 'task_requests.splash.actions.book_demo'
end end
def create_task_request
t 'task_requests.index.actions.new'
end
def chat_now_button
t 'task_requests.form.actions.chat_now'
end
def form_notice
t 'task_requests.form.info_message'
end
def task_request_created_notice
t 'task_requests.create.success_message'
end
end end

View File

@@ -292,7 +292,7 @@ feature "User performs video analysis" do
expect(page).to have_unreleased_appearance(notes: unreleased_appearance.notes) expect(page).to have_unreleased_appearance(notes: unreleased_appearance.notes)
end end
scenario "confirming a talent release" do scenario "confirming a talent release", js: true do
talent_release = create(:talent_release, project: project) talent_release = create(:talent_release, project: project)
sign_in current_user sign_in current_user
@@ -300,7 +300,7 @@ feature "User performs video analysis" do
expect(page).to have_unconfirmed_release(talent_release) expect(page).to have_unconfirmed_release(talent_release)
confirm_release(video, talent_release) confirm_first_release_using_edl_modal(video, talent_release)
expect(page).to have_confirmed_release(talent_release) expect(page).to have_confirmed_release(talent_release)
expect(page).not_to have_unconfirmed_release(talent_release) expect(page).not_to have_unconfirmed_release(talent_release)
@@ -442,7 +442,7 @@ feature "User performs video analysis" do
scenario "confirming a talent release match", js: true do scenario "confirming a talent release match", js: true do
video.analysis_success! video.analysis_success!
talent_release = create(:talent_release, project: project) talent_release = create(:talent_release, project: project, person_name: "Jane Doe")
allow(BrayniacAI::FacialRecognition).to receive(:find).and_return( allow(BrayniacAI::FacialRecognition).to receive(:find).and_return(
BrayniacAI::FacialRecognition.new({ BrayniacAI::FacialRecognition.new({
bucket_name: "", bucket_name: "",
@@ -469,7 +469,7 @@ feature "User performs video analysis" do
expect(page).not_to have_css(".fa-check-circle") expect(page).not_to have_css(".fa-check-circle")
end end
confirm_suggested_talent_match(video, talent_release) confirm_suggested_match(video, talent_release)
within "#suggested_matches" do within "#suggested_matches" do
expect(page).to have_css(".fa-check-circle") expect(page).to have_css(".fa-check-circle")

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