Compare commits

...

16 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
Senad Uka
4c49a5db03 Upstream sync 2020-07-14 14:10:30 +02:00
Senad Uka
35303cb570 Upstream sync 2020-07-09 11:06:17 +02:00
Senad Uka
1127f09263 Upstream sync 2020-07-08 18:27:49 +02:00
Senad Uka
19b1e75384 Upstream sync 2020-07-07 23:14:42 +02:00
Senad Uka
93a4ce462d Upstream sync 2020-07-07 21:45:30 +02:00
Senad Uka
0e16791d8b Upstream sync 2020-07-07 05:08:32 +02:00
139 changed files with 3031 additions and 157 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

@@ -17,7 +17,9 @@ class Api::ApiController < ActionController::Base
def return_error(exception) def return_error(exception)
raise exception if Rails.env.test? raise exception if Rails.env.test?
logger.error "==Handled=======" Raven.capture_exception(exception)
logger.error "==Handled======"
logger.error exception.message logger.error exception.message
logger.error exception.backtrace.join("\n") logger.error exception.backtrace.join("\n")
logger.error "==Handled=======" logger.error "==Handled======="

View File

@@ -0,0 +1,11 @@
class Api::MedicalReleasesController < Api::ReleasesController
deserializable_resource :medical_release, only: [:create, :update]
def model_name
"medical_release"
end
def attributes_for_index
[:name]
end
end

View File

@@ -0,0 +1,11 @@
class Api::MiscReleasesController < Api::ReleasesController
deserializable_resource :misc_release, only: [:create, :update]
def model_name
"misc_release"
end
def attributes_for_index
[:name]
end
end

View File

@@ -10,8 +10,10 @@ class Api::SyncController < Api::ApiController
@appearance_releases = (AppearanceRelease.where(project: accessible_projects)) @appearance_releases = (AppearanceRelease.where(project: accessible_projects))
@location_releases = (LocationRelease.where(project: accessible_projects)) @location_releases = (LocationRelease.where(project: accessible_projects))
@material_releases = (MaterialRelease.where(project: accessible_projects)) @material_releases = (MaterialRelease.where(project: accessible_projects))
@medical_releases = MedicalRelease.where(project: accessible_projects)
@misc_releases = MiscRelease.where(project: accessible_projects)
@talent_releases = (TalentRelease.where(project: accessible_projects)) @talent_releases = (TalentRelease.where(project: accessible_projects))
@notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @talent_releases + @acquired_media_releases )) @notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @medical_releases + @misc_releases + @talent_releases + @acquired_media_releases ))
render json: { render json: {
data: { data: {
@@ -22,6 +24,8 @@ class Api::SyncController < Api::ApiController
appearance_releases: releases_query(@appearance_releases), appearance_releases: releases_query(@appearance_releases),
location_releases: releases_query(@location_releases), location_releases: releases_query(@location_releases),
material_releases: releases_query(@material_releases), material_releases: releases_query(@material_releases),
medical_releases: releases_query(@medical_releases),
misc_releases: releases_query(@misc_releases),
talent_releases: releases_query(@talent_releases), talent_releases: releases_query(@talent_releases),
notes: @notes notes: @notes
} }

View File

@@ -5,6 +5,8 @@ class Api::UserTokenController < Knock::AuthTokenController
# Catch exception and return JSON-formatted error # Catch exception and return JSON-formatted error
def return_error(exception) def return_error(exception)
Raven.capture_exception(exception)
logger.error "==Handled=======" logger.error "==Handled======="
logger.error exception.message logger.error exception.message
logger.error exception.backtrace.join("\n") logger.error exception.backtrace.join("\n")

View File

@@ -0,0 +1,28 @@
class ApprovalsController < ApplicationController
before_action :set_releasable
before_action :set_project
layout "project"
def create
@releasable.approve_by(current_user)
if @releasable.save
redirect_to [@project, "#{@releasable_param.name.pluralize}"], notice: t('.release_approved', release_type: @releasable.model_name.human)
end
end
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
@project = @releasable.project
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
@@ -62,18 +81,19 @@ class ContractTemplatesController < ApplicationController
def contract_template_params def contract_template_params
params params
.require(:contract_template) .require(:contract_template)
.permit(:name, :release_type, :body, :guardian_clause, :fee, .permit(:name, :release_type, :body, :guardian_clause,
:signature_legal_text, :fee,
:applicable_medium_id, :applicable_medium_text, :applicable_medium_id, :applicable_medium_text,
:territory_id, :territory_text, :territory_id, :territory_text,
:term_id, :term_text, :term_id, :term_text, :accessibility,
:restriction_id, :restriction_text, :restriction_id, :restriction_text,
:question_1_text, :question_2_text, :question_1_text, :question_2_text,
:question_3_text, :question_4_text, :question_3_text, :question_4_text,
:question_5_text, :question_6_text, :question_5_text, :question_6_text,
:question_7_text, :question_8_text, :question_7_text, :question_8_text,
:question_9_text, :question_10_text, :question_9_text, :question_10_text,
:question_11_text, :question_12_text, :question_11_text, :question_12_text,
:question_13_text, :question_14_text, :question_13_text, :question_14_text,
:question_15_text) :question_15_text)
end end

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
@@ -28,8 +32,9 @@ class StreamNotificationsController < ApplicationController
asset_uid = notification.dig(:object, :id) asset_uid = notification.dig(:object, :id)
playback_uid = notification.dig(:data, :playback_ids, 0, :id) playback_uid = notification.dig(:data, :playback_ids, 0, :id)
file_name = notification.dig(:data, :static_renditions, :files, -1, :name) file_name = notification.dig(:data, :static_renditions, :files, -1, :name)
duration = notification.dig(:data, :duration)
recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name) recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name, duration: duration)
recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page]) recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank") link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank")
@@ -58,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

@@ -5,4 +5,12 @@ module TooltipHelper
concat tag.div(class: "tooltip-inner") concat tag.div(class: "tooltip-inner")
end end
end end
def get_approval_data_for_releasable(release)
if release.approved_by_user_name.present?
"#{release.approved_by_user_name} [#{release.approved_by_user_email}]"
else
release.approved_by_user_email
end
end
end end

View File

@@ -6,8 +6,8 @@ class GenerateContractsZipJob < ApplicationJob
before_perform do |job| before_perform do |job|
@project = job.arguments.first @project = job.arguments.first
@download = job.arguments.second @download = job.arguments.second
release_type = job.arguments.third @release_type = job.arguments.third
@folder_name = "#{@project.name.parameterize}_#{get_release_name(release_type).gsub('_', '-')}" @folder_name = "#{@project.name.parameterize}_#{get_release_name(@release_type).gsub('_', '-')}"
@download.update!(name: @folder_name, status: :pending) @download.update!(name: @folder_name, status: :pending)
end end
@@ -20,9 +20,14 @@ class GenerateContractsZipJob < ApplicationJob
files.each do |attachment| files.each do |attachment|
zipfile.add(attachment, File.join("#{dir}/", attachment)) zipfile.add(attachment, File.join("#{dir}/", attachment))
end end
if @release_type.constantize.include?(CsvExportable)
csv_file = generate_csv releases
zipfile.get_output_stream("#{@folder_name}.csv") { |f| f.puts(csv_file) }
end
end end
@download.file.attach(io: File.open(zipfile_name), filename: @folder_name) @download.file.attach(io: File.open(zipfile_name), filename: "#{@folder_name}.zip")
end end
rescue StandardError => e rescue StandardError => e
Rails.logger.error("Failed to generate download for project (##{project.id}) with release type #{release_type}\n" + e.message) Rails.logger.error("Failed to generate download for project (##{project.id}) with release type #{release_type}\n" + e.message)
@@ -43,6 +48,19 @@ class GenerateContractsZipJob < ApplicationJob
private private
def generate_csv(releases)
release_class = @release_type.constantize
headers = release_class.csv_headers
CSV.generate(headers: true) do |csv|
csv << headers
releases.each do |release|
csv_row_data = release.to_csv_row
csv << csv_row_data
end
end
end
def get_release_name(release_type) def get_release_name(release_type)
release_type.constantize.model_name.plural release_type.constantize.model_name.plural
end end

View File

@@ -9,6 +9,14 @@ class AcquiredMediaRelease < ApplicationRecord
include Signable include Signable
include Syncable include Syncable
include PersonName include PersonName
include CsvExportable
include Approvable
class << self
def custom_csv_exportable_headers
%i[name file_infos_count]
end
end
has_many :file_infos, as: :releasable, dependent: :destroy has_many :file_infos, as: :releasable, dependent: :destroy
@@ -57,4 +65,8 @@ class AcquiredMediaRelease < ApplicationRecord
def uses_edl? def uses_edl?
true true
end end
def file_infos_count
file_infos.any? ? file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
end
end end

View File

@@ -15,6 +15,14 @@ class AppearanceRelease < ApplicationRecord
include SecondGuardianPhotoable include SecondGuardianPhotoable
include GuardianName include GuardianName
include SecondGuardianName include SecondGuardianName
include CsvExportable
include Approvable
class << self
def custom_csv_exportable_headers
%i[name contact_info]
end
end
has_one_attached :person_photo has_one_attached :person_photo

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

@@ -0,0 +1,56 @@
# frozen_string_literal: true
module CsvExportable
extend ActiveSupport::Concern
COMMON_HEADERS = %i[approved? notes tags signed_at].freeze
COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze
included do
class << self
def custom_csv_exportable_headers
[]
end
def csv_headers
headers = custom_csv_exportable_headers + COMMON_HEADERS
headers.map do |header|
I18n.t("#{model_name.plural}.index.table_headers.#{header}")
end
end
end
def to_csv_row
(self.class.custom_csv_exportable_headers + COMMON_VALUES).map do |function|
send(function)
end
end
private
def contact_info
contact_info = ''
contact_info += "#{person_address}; " if person_address.present?
contact_info += "P: #{person_phone}; " if person_phone.present?
contact_info += "E: #{person_email}" if person_email.present?
contact_info.delete_suffix '; '
end
def clean_notes
notes = ''
self.notes.order_by_recent.each do |note|
notes += "#{note.content}(#{note.email}), "
end
notes.delete_suffix ', '
end
def clean_tags
tags = ''
self.tags.each do |tag|
tags += "#{tag.name}, "
end
tags.delete_suffix ', '
end
end
end

View File

@@ -21,6 +21,7 @@ class ContractTemplate < ApplicationRecord
monetize :fee_cents monetize :fee_cents
has_rich_text :body has_rich_text :body
has_rich_text :guardian_clause has_rich_text :guardian_clause
has_rich_text :signature_legal_text
validates :name, presence: true validates :name, presence: true
validates :release_type, presence: true validates :release_type, presence: true
@@ -42,6 +43,8 @@ class ContractTemplate < ApplicationRecord
scope :non_archived, -> { where(archived_at: nil) } scope :non_archived, -> { where(archived_at: nil) }
scope :order_by_name, -> { order(:name) } scope :order_by_name, -> { order(:name) }
enum accessibility: [:public_template, :private_template]
def fee? def fee?
!fee.zero? !fee.zero?
end end
@@ -65,4 +68,14 @@ class ContractTemplate < ApplicationRecord
def has_questionnaire? def has_questionnaire?
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence } (1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
end end
def editable?
releases.size.zero?
end
def attributes
result = super()
result[:signature_legal_text] = signature_legal_text.as_json
result
end
end end

View File

@@ -10,6 +10,14 @@ class LocationRelease < ApplicationRecord
include Syncable include Syncable
include Taggable include Taggable
include PersonName include PersonName
include CsvExportable
include Approvable
class << self
def custom_csv_exportable_headers
%i[name address]
end
end
composed_of :address, composed_of :address,
mapping: [ mapping: [

View File

@@ -10,8 +10,16 @@ class MaterialRelease < ApplicationRecord
include Syncable include Syncable
include Taggable include Taggable
include PersonName include PersonName
include CsvExportable
composed_of :person_address, include Approvable
class << self
def custom_csv_exportable_headers
%i[name]
end
end
composed_of :person_address,
class_name: "Address", class_name: "Address",
mapping: [ mapping: [
%w(person_address_street1 street1), %w(person_address_street1 street1),
@@ -30,15 +38,15 @@ class MaterialRelease < ApplicationRecord
validates :signature, attached: true validates :signature, attached: true
end end
searchable_on %i[ searchable_on %i[
name name
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
] ]
def contact_person def contact_person
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone) @contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
end end
def minor? def minor?
false false
end end

View File

@@ -11,6 +11,14 @@ class MedicalRelease < ApplicationRecord
include SecondGuardianPhotoable include SecondGuardianPhotoable
include GuardianName include GuardianName
include SecondGuardianName include SecondGuardianName
include CsvExportable
include Approvable
class << self
def custom_csv_exportable_headers
%i[name contact_info]
end
end
NUMBER_OF_CUSTOM_FIELDS = 15 NUMBER_OF_CUSTOM_FIELDS = 15

View File

@@ -9,6 +9,14 @@ class MiscRelease < ApplicationRecord
include PersonName include PersonName
include GuardianName include GuardianName
include GuardianPhotoable include GuardianPhotoable
include CsvExportable
include Approvable
class << self
def custom_csv_exportable_headers
%i[name contact_info]
end
end
NUMBER_OF_CUSTOM_FIELDS = 15 NUMBER_OF_CUSTOM_FIELDS = 15

View File

@@ -7,7 +7,15 @@ class MusicRelease < ApplicationRecord
include Searchable include Searchable
include Taggable include Taggable
include PersonName include PersonName
include CsvExportable
include Approvable
class << self
def custom_csv_exportable_headers
%i[name file_infos_count composers_count publishers_count]
end
end
has_many :file_infos, as: :releasable, dependent: :destroy has_many :file_infos, as: :releasable, dependent: :destroy
has_many :composers, dependent: :destroy has_many :composers, dependent: :destroy
has_many :publishers, dependent: :destroy has_many :publishers, dependent: :destroy
@@ -72,6 +80,18 @@ class MusicRelease < ApplicationRecord
false false
end end
def file_infos_count
file_infos.size
end
def composers_count
composers.size
end
def publishers_count
publishers.size
end
private private
def publisher_percentages_add_up_to_100 def publisher_percentages_add_up_to_100

View File

@@ -10,7 +10,19 @@ class QrCode
url = Rails.application.routes.url_helpers.url_for(route) url = Rails.application.routes.url_helpers.url_for(route)
filename = [contract_template.project.name, contract_template.name].map(&:parameterize).join("_") filename = [contract_template.project.name, contract_template.name].map(&:parameterize).join("_")
new(url, filename) new(url, "#{filename}.png")
end
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 end
def initialize(url, filename = "qrcode.png") def initialize(url, filename = "qrcode.png")

View File

@@ -14,6 +14,14 @@ class TalentRelease < ApplicationRecord
include SecondGuardianPhotoable include SecondGuardianPhotoable
include GuardianName include GuardianName
include SecondGuardianName include SecondGuardianName
include CsvExportable
include Approvable
class << self
def custom_csv_exportable_headers
%i[name phone email]
end
end
composed_of :person_address, composed_of :person_address,
class_name: "Address", class_name: "Address",
@@ -86,6 +94,14 @@ class TalentRelease < ApplicationRecord
person_name person_name
end end
def phone
person_phone
end
def email
person_email
end
def filename_suffix def filename_suffix
"#{person_last_name} #{person_first_name}" "#{person_last_name} #{person_first_name}"
end end
@@ -95,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

@@ -3,8 +3,10 @@ class ContractTemplatePolicy < ApplicationPolicy
def resolve def resolve
if user.account_manager? if user.account_manager?
scope.left_outer_joins(:project).where(projects: {account: user.account}) scope.left_outer_joins(:project).where(projects: {account: user.account})
else elsif user.manager?
scope.left_outer_joins(project: :project_memberships).where(project_memberships: { user_id: user.id }) scope.left_outer_joins(project: :project_memberships).where(project_memberships: { user_id: user.id })
else
scope.public_template.left_outer_joins(project: :project_memberships).where(project_memberships: { user_id: user.id })
end end
end end
end end
@@ -21,6 +23,18 @@ class ContractTemplatePolicy < ApplicationPolicy
create? create?
end end
def edit?
record.editable? && create?
end
def update?
edit?
end
def duplicate?
create?
end
def import? def import?
if user.account_manager? if user.account_manager?
record.project.account = user.account record.project.account = user.account

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

@@ -15,6 +15,14 @@ class MedicalReleasePolicy < ReleasePolicy
user.manager? || user.account_manager? user.manager? || user.account_manager?
end end
def review?
user.account_manager?
end
def approve?
review?
end
def edit_photos? def edit_photos?
true true
end end

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

@@ -0,0 +1,15 @@
<div class="card shadow-sm">
<%= card_header text: t(".heading", release_type: @releasable_param.name.titleize), close_action_path: [@project, "#{@releasable_param.name.pluralize}"] %>
<div class="card-body">
<embed class="embeded-contract-preview" type="application/pdf" src="<%= url_for [@releasable, :contracts, format: "pdf"] %>" width="90%" height="1200" />
<%= 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">
<%= link_to t("shared.cancel"), [@releasable.project, "#{@releasable_param.name.pluralize}"], class: "col-3 text-reset" %>
<div class="col-9">
<%= form.button t('.actions.approve'), id: "approve_release", class: class_string("btn btn-block btn-success btn-primary"), data: { disable_with: t("shared.disable_with") } %>
</div>
</div>
<% end %>
</div>
</div>

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

@@ -18,15 +18,7 @@
<div class="card-body p-0"> <div class="card-body p-0">
<div class="embed-responsive embed-responsive-16by9"> <div class="embed-responsive embed-responsive-16by9">
<div class="embed-responsive-item"> <div class="embed-responsive-item">
<table class="w-100 h-100 bg-secondary"> <div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/435943632" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
<tbody>
<tr>
<td class="text-center align-middle text-white">
Video tutorial will be available soon
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
</div> </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>
@@ -15,10 +16,16 @@
<td> <td>
<%= contract_template.releases.size %> <%= contract_template.releases.size %>
</td> </td>
<td class="text-right"> <td class="text-right" nowrap>
<div class="btn-group"> <div class="btn-group">
<%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %> <%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
<div class="dropdown-menu dropdown-menu-right"> <div class="dropdown-menu dropdown-menu-right">
<% if policy(contract_template).edit? %>
<%= link_to fa_icon("pencil fw", text: t(".actions.edit")), [:edit, contract_template], class: "dropdown-item" %>
<% end %>
<% if policy(ContractTemplate).duplicate? %>
<%= link_to fa_icon("clone fw", text: t(".actions.duplicate")), contract_template_duplicates_path(contract_template), method: :post, class: "dropdown-item" %>
<% end %>
<% if policy(QrCode).show? %> <% if policy(QrCode).show? %>
<%= link_to fa_icon("qrcode", text: t(".actions.qr_code")), [contract_template, :qr_codes], class: "dropdown-item", target: :_blank %> <%= link_to fa_icon("qrcode", text: t(".actions.qr_code")), [contract_template, :qr_codes], class: "dropdown-item", target: :_blank %>
<% end %> <% end %>
@@ -27,7 +34,7 @@
<%= link_to fa_icon("print", text: "Print"), [:new, contract_template, :blank_contracts], class: "dropdown-item", target: :_blank %> <%= link_to fa_icon("print", text: "Print"), [:new, contract_template, :blank_contracts], class: "dropdown-item", target: :_blank %>
<% end %> <% end %>
<% if policy(contract_template).destroy? %> <% if policy(contract_template).destroy? %>
<%= link_to fa_icon("archive", text: "Archive"), contract_template, class: "dropdown-item", method: :delete, data: { confirm: "Are you sure?" } %> <%= link_to fa_icon("trash", text: "Delete"), contract_template, class: "dropdown-item", method: :delete, data: { confirm: "Are you sure?" } %>
<% end %> <% end %>
</div> </div>
</div> </div>

View File

@@ -1,9 +1,13 @@
<%= bootstrap_form_with model: [project, contract_template], local: true do |form| %> <%= bootstrap_form_with model: model, local: true do |form| %>
<%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %> <%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
<div class="form-row"> <div class="form-row">
<%= form.text_field :name, wrapper_class: "col-sm-6" %> <%= form.text_field :name, wrapper_class: "col-sm-6" %>
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc) } }, class: "form-control custom-select" %> <%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc) } }, class: "form-control custom-select" %>
</div> </div>
<div class="form-row mb-3">
<%= form.radio_button :accessibility, :public_template, label: "Public", wrapper_class: "mr-3" %>
<%= form.radio_button :accessibility, :private_template, label: "Private" %>
</div>
<div class="form-row" id="fee_field"> <div class="form-row" id="fee_field">
<%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", wrapper_class: "col-sm-6" %> <%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", wrapper_class: "col-sm-6" %>
</div> </div>
@@ -25,6 +29,11 @@
<%= form.rich_text_area :guardian_clause %> <%= form.rich_text_area :guardian_clause %>
<% end %> <% end %>
</div> </div>
<div id="signature_legal_text">
<%= form.form_group do %>
<%= form.rich_text_area :signature_legal_text %>
<% end %>
</div>
<% end %> <% end %>
<%= field_set_tag content_tag(:span, t(".custom_fields.heading"), class: "h6 text-muted text-uppercase"), id: "custom_fields", style: "display: none;" do %> <%= field_set_tag content_tag(:span, t(".custom_fields.heading"), class: "h6 text-muted text-uppercase"), id: "custom_fields", style: "display: none;" do %>

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

@@ -18,15 +18,7 @@
<div class="card-body p-0"> <div class="card-body p-0">
<div class="embed-responsive embed-responsive-16by9"> <div class="embed-responsive embed-responsive-16by9">
<div class="embed-responsive-item"> <div class="embed-responsive-item">
<table class="w-100 h-100 bg-secondary"> <div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/435942851" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
<tbody>
<tr>
<td class="text-center align-middle text-white">
Video tutorial will be available soon
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -0,0 +1,13 @@
<% if preview %>
<h1>PREVIEW ONLY</h1>
<% end %>
<p class="heading"><strong><u><%= t '.heading' %></u></strong></p>
<dl>
<%= description_list_pair t('.description_labels.producer'), releasable.project.account.name %>
<%= description_list_pair t('.description_labels.production'), releasable.project.name %>
<%= description_list_pair t('.description_labels.issued_to'), releasable.name %>
<%= description_list_pair t('.description_labels.issued_by'), releasable.approved_by_user_name %>
<%= description_list_pair t('.description_labels.date_issued'), releasable.approved_at %>
</dl>

View File

@@ -25,6 +25,13 @@
<div class="page"> <div class="page">
<%= render "contracts/signature_page", releasable: releasable, contract_template: contract_template, preview: preview %> <%= render "contracts/signature_page", releasable: releasable, contract_template: contract_template, preview: preview %>
</div> </div>
<% if releasable.respond_to?(:approved?) && releasable.approved? %>
<div class="page">
<%= render "contracts/for_office_use_only", releasable: releasable, preview: preview %>
</div>
<% end %>
<% if releasable.class == AcquiredMediaRelease %> <% if releasable.class == AcquiredMediaRelease %>
<div class="page"> <div class="page">
<%= render "contracts/files", release: releasable, preview: preview %> <%= render "contracts/files", release: releasable, preview: preview %>

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

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

View File

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

View File

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

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

@@ -50,7 +50,7 @@
<hr> <hr>
<%= card_field_set_tag t(".signature.heading") do %> <%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form %> <%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
<% end %> <% end %>
<div class="mt-5"> <div class="mt-5">

View File

@@ -156,7 +156,7 @@
<% end %> <% end %>
<%= card_field_set_tag t(".signature.heading") do %> <%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form %> <%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
<% end %> <% end %>
<div class="mt-5"> <div class="mt-5">

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

@@ -50,7 +50,7 @@
<% end %> <% end %>
<%= card_field_set_tag t(".signature.heading") do %> <%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form, instruction: 'An Authorized Signatory' %> <%= render "shared/signature_fields", form: form, instruction: 'An Authorized Signatory', signature_legal_text: @contract_template.signature_legal_text %>
<% end %> <% end %>
<div class="mt-5"> <div class="mt-5">

View File

@@ -41,7 +41,7 @@
<hr> <hr>
<%= card_field_set_tag t(".signature.heading") do %> <%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form, instruction: 'For Owner or Authorized Signatory' %> <%= render "shared/signature_fields", form: form, instruction: 'For Owner or Authorized Signatory', signature_legal_text: @contract_template.signature_legal_text %>
<% end %> <% end %>
<div class="mt-5"> <div class="mt-5">

View File

@@ -145,7 +145,7 @@
<% end %> <% end %>
<%= card_field_set_tag t(".signature.heading") do %> <%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form %> <%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
<% end %> <% end %>
<div class="mt-5"> <div class="mt-5">

View File

@@ -39,9 +39,7 @@
<%= form.text_field :person_first_name, required: true, wrapper_class: "col-sm-6" %> <%= form.text_field :person_first_name, required: true, wrapper_class: "col-sm-6" %>
<%= form.text_field :person_last_name, required: true, wrapper_class: "col-sm-6" %> <%= form.text_field :person_last_name, required: true, wrapper_class: "col-sm-6" %>
<%= form.phone_field :person_phone, wrapper_class: "col-sm-6" %> <%= form.phone_field :person_phone, wrapper_class: "col-sm-6" %>
</div> <%= form.email_field :person_email, required: true, wrapper_class: "col-sm-6" %>
<div class="form-row">
<%= form.email_field :person_email, wrapper_class: "col-sm-6" %>
</div> </div>
<%= render "shared/address_fields", form: form, subject: "person" %> <%= render "shared/address_fields", form: form, subject: "person" %>
<% end %> <% end %>
@@ -97,7 +95,7 @@
<% end %> <% end %>
<%= card_field_set_tag t(".signature.heading") do %> <%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form %> <%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
<% end %> <% end %>
<div class="mt-5"> <div class="mt-5">

View File

@@ -131,7 +131,7 @@
<% end %> <% end %>
<%= card_field_set_tag t(".signature.heading") do %> <%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form %> <%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
<% end %> <% end %>
<div class="mt-5"> <div class="mt-5">

View File

@@ -12,4 +12,8 @@
<%= fa_icon "refresh" %> <%= t "shared.clear" %> <%= fa_icon "refresh" %> <%= t "shared.clear" %>
<% end %> <% end %>
</div> </div>
<br>
<% if local_assigns[:signature_legal_text] && signature_legal_text.present? %>
<div class="alert alert-warning font-weight-bold"><%= signature_legal_text %></div>
<% end %>

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

@@ -13,3 +13,4 @@
<% end %> <% end %>
<% end %> <% end %>
<p class="alert alert-success p-3 lead text-center"><%= t '.success_message' %></p> <p class="alert alert-success p-3 lead text-center"><%= t '.success_message' %></p>
<%= link_to fa_icon("arrow-left", text: "Back"), [@project, :task_requests], class: "btn btn-primary" %>

View File

@@ -6,7 +6,7 @@
<%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %> <%= link_to t(".actions.book_demo"), 'https://meetings.hubspot.com/bray2', class: "btn btn-primary border align-self-center h-50 ml-auto mr-2 pb-2", target: '_blank' %>
<% if policy(Video).new? %> <% if policy(Video).new? %>
<%= link_to t(".actions.upload_video"), [:new, @project, :video], class: "btn btn-success border align-self-center h-50 pb-2" %> <%= link_to t(".actions.upload_video"), [:landing, @project, :videos], class: "btn btn-success border align-self-center h-50 pb-2" %>
<% end %> <% end %>
</div> </div>
@@ -18,15 +18,7 @@
<div class="card-body p-0"> <div class="card-body p-0">
<div class="embed-responsive embed-responsive-16by9"> <div class="embed-responsive embed-responsive-16by9">
<div class="embed-responsive-item"> <div class="embed-responsive-item">
<table class="w-100 h-100 bg-secondary"> <div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/435943995" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
<tbody>
<tr>
<td class="text-center align-middle text-white">
Video tutorial will be available soon
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
</div> </div>

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,7 +52,9 @@ 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
notes: Notes notes: Notes
signed_at: Date Signed signed_at: Date Signed
tags: Tags tags: Tags
@@ -120,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
@@ -151,6 +159,9 @@ 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
name: Name
notes: Notes notes: Notes
signed_at: Date Signed signed_at: Date Signed
tags: Tags tags: Tags
@@ -171,6 +182,13 @@ en:
sidebar: sidebar:
files: Files files: Files
team_member: Team Member team_member: Team Member
approvals:
create:
release_approved: "%{release_type} has been approved"
new:
actions:
approve: Approve
heading: "Review %{release_type}"
blank_contracts: blank_contracts:
new: new:
number_of_copies_label: Number of copies number_of_copies_label: Number of copies
@@ -204,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
@@ -225,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
@@ -240,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
@@ -249,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
@@ -287,7 +320,17 @@ 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:
description_labels:
date_issued: Date Issued
issued_by: Issued By
issued_to: Issued To
producer: Producer
production: Production
heading: For Office Use Only
photos: photos:
guardian_2_photo_heading: Second guardian photo guardian_2_photo_heading: Second guardian photo
guardian_photo_heading: Guardian photo guardian_photo_heading: Guardian photo
@@ -364,6 +407,7 @@ en:
contract_template: contract_template:
fee: Leave at $0.00 for no-fee fee: Leave at $0.00 for no-fee
guardian_clause: Leave blank if not required for this contract guardian_clause: Leave blank if not required for this contract
signature_legal_text: Leave blank if not required for this contract
task_request: task_request:
time_allowed: Minimum of 2 hours, no partial hours allowed time_allowed: Minimum of 2 hours, no partial hours allowed
video: video:
@@ -670,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
@@ -726,12 +771,17 @@ 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
notes: Notes notes: Notes
signed_at: Date Signed signed_at: Date Signed
tags: Tags tags: Tags
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
@@ -760,12 +810,17 @@ 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
notes: Notes notes: Notes
signed_at: Date Signed signed_at: Date Signed
tags: Tags tags: Tags
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)
@@ -781,12 +836,19 @@ en:
search: Search search: Search
empty: Medical releases will appear here empty: Medical releases will appear here
table_headers: table_headers:
approved: Approved
approved?: Approved
contact_info: Contact info
name: Person name
notes: Notes notes: Notes
signed_at: Date Signed signed_at: Date Signed
tags: Tags tags: Tags
medical_release: medical_release:
actions: actions:
manage: Manage manage: Manage
review: Review
messages:
approved_tooltip: Approved by %{user} on %{timestamp}
misc_releases: misc_releases:
destroy: destroy:
alert: The misc release has been deleted alert: The misc release has been deleted
@@ -795,12 +857,18 @@ 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
name: Person name
notes: Notes notes: Notes
signed_at: Date Signed signed_at: Date Signed
tags: Tags tags: Tags
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
@@ -827,8 +895,10 @@ 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
notes: Notes notes: Notes
publishers_count: No. Publishers publishers_count: No. Publishers
signed_at: Date Signed signed_at: Date Signed
@@ -836,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:
@@ -993,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!
@@ -1225,7 +1308,11 @@ 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
name: Name
notes: Notes notes: Notes
phone: Phone
signed_at: Date Signed signed_at: Date Signed
tags: Tags tags: Tags
new: new:
@@ -1233,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:
@@ -1245,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

@@ -1,4 +1,14 @@
es: es:
acquired_media_releases:
acquired_media_release:
no_media: No Media (ES)
index:
table_headers:
file_infos_count: No. Files (ES)
name: Name (ES)
notes: Notes (ES)
signed_at: Date Signed (ES)
tags: Tags (ES)
activerecord: activerecord:
attributes: attributes:
appearance_release: appearance_release:
@@ -41,6 +51,12 @@ es:
heading: Person Photo (ES) heading: Person Photo (ES)
index: index:
imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release (ES) imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release (ES)
table_headers:
contact_info: ""
name: ""
notes: ""
signed_at: ""
tags: ""
shared: shared:
imported_appearance_release_contract_name: Contrato Importado imported_appearance_release_contract_name: Contrato Importado
imported_appearance_release_headshot_name: Retrato Importado imported_appearance_release_headshot_name: Retrato Importado
@@ -50,6 +66,13 @@ es:
all_releases: All Releases (ES) all_releases: All Releases (ES)
complete_releases: Complete Releases (ES) complete_releases: Complete Releases (ES)
incomplete_releases: Incomplete Releases (ES) incomplete_releases: Incomplete Releases (ES)
approvals:
create:
release_approved: Medical release has been approved (ES)
new:
actions:
approve: Approve (ES)
heading: Review Medical Release (ES)
blank_contracts: blank_contracts:
new: new:
number_of_copies_label: Number of copies (ES) number_of_copies_label: Number of copies (ES)
@@ -58,6 +81,9 @@ es:
do_not_copy_warning: "Do not copy (ES)" do_not_copy_warning: "Do not copy (ES)"
serial_number_label: "Serial Number (ES)" serial_number_label: "Serial Number (ES)"
broadcasts: broadcasts:
show:
actions:
reset_url: Reset URL (ES)
splash: splash:
actions: actions:
book_demo: Schedule a Demo book_demo: Schedule a Demo
@@ -76,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)
@@ -106,7 +145,17 @@ 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:
description_labels:
date_issued: Date Issued (ES)
issued_by: Issued By (ES)
issued_to: Issued To (ES)
producer: Producer (ES)
production: Production (ES)
heading: For Office Use Only (ES)
photos: photos:
guardian_2_photo_heading: Second guardian photo (ES) guardian_2_photo_heading: Second guardian photo (ES)
guardian_photo_heading: Guardian photo (ES) guardian_photo_heading: Guardian photo (ES)
@@ -160,6 +209,7 @@ es:
contract_template: contract_template:
fee: Leave at $0.00 for no-fee (ES) fee: Leave at $0.00 for no-fee (ES)
guardian_clause: Leave blank if not required for this contract (ES) guardian_clause: Leave blank if not required for this contract (ES)
signature_legal_text: Leave blank if not required for this contract (ES)
label: label:
appearance_release: appearance_release:
guardian_2_address_city: Guardian 2 city (ES) guardian_2_address_city: Guardian 2 city (ES)
@@ -272,19 +322,67 @@ es:
broadcast: broadcast:
create: Create Live Stream (ES) create: Create Live Stream (ES)
update: Save Changes (ES) update: Save Changes (ES)
contract_template:
update: Save changes (ES)
create: 'Crear %{model}' create: 'Crear %{model}'
medical_release:
update: Approve (ES)
update: 'Actualizar %{model}' update: 'Actualizar %{model}'
location_releases: location_releases:
form: form:
photos: photos:
dropzone_label: Tap to take a photo of the Property (optional) (ES) dropzone_label: Tap to take a photo of the Property (optional) (ES)
index:
table_headers:
address: Address (ES)
notes: Notes (ES)
signed_at: Date Signed (ES)
tags: Tags (ES)
material_releases: material_releases:
form: form:
photos: photos:
dropzone_label: Tap to take a photo of Licensed Material (optional) (ES) dropzone_label: Tap to take a photo of Licensed Material (optional) (ES)
index:
table_headers:
name: Name (ES)
notes: Notes (ES)
signed_at: Date Signed (ES)
tags: Tags (ES)
medical_releases: medical_releases:
custom_validation_errors: custom_validation_errors:
question_answer_is_required: answer is required (ES) question_answer_is_required: answer is required (ES)
index:
table_headers:
approved: Approved (ES)
approved?: Approved (ES)
contact_info: Contact info (ES)
name: Person name (ES)
notes: Notes (ES)
signed_at: Date Signed (ES)
tags: Tags (ES)
medical_release:
actions:
review: Review (ES)
messages:
approved_tooltip: ""
misc_releases:
index:
table_headers:
contact_info: Contact info (ES)
name: Person name (ES)
notes: Notes (ES)
signed_at: Date Signed (ES)
tags: Tags (ES)
music_releases:
index:
table_headers:
composers_count: No. Composers (ES)
file_infos_count: No. Files (ES)
name: Name (ES)
notes: Notes (ES)
publishers_count: No. Publishers (ES)
signed_at: Date Signed (ES)
tags: Tags (ES)
public: public:
appearance_releases: appearance_releases:
create: create:
@@ -389,11 +487,21 @@ es:
heading: Second Guardian Photo (ES) heading: Second Guardian Photo (ES)
guardian_photo: guardian_photo:
heading: Guardian Photo (ES) heading: Guardian Photo (ES)
index:
table_headers:
email: Email (ES)
name: Name (ES)
notes: Notes (ES)
phone: Phone (ES)
signed_at: Date Signed (ES)
tags: Tags (ES)
task_requests: task_requests:
create: create:
success_message: Your task request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds. (ES) success_message: Your task request was successfully submitted. Thank you. A chat window will pop up on the lower right in a few seconds. (ES)
form: form:
info_message: After submitting this task request, you'll be connected via chat with a ME Suite representative. (ES) actions:
chat_now: Chat Now (ES)
info_message: For best results, please fill out this form prior to being connected with a TaskME assistant. However, if urgent, you can start speaking with a TaskME assistant by pressing the Chat Now button to the right (ES)
index: index:
table_headers: table_headers:
task_request_description: Description (ES) task_request_description: Description (ES)

View File

@@ -2,7 +2,7 @@ require 'oath/constraints/signed_in'
require 'sidekiq/web' require 'sidekiq/web'
Rails.application.routes.draw do Rails.application.routes.draw do
AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/ AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/.freeze
concern :confirmable do concern :confirmable do
resources :video_release_confirmations, only: [:new, :create, :destroy] resources :video_release_confirmations, only: [:new, :create, :destroy]
@@ -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]
@@ -136,11 +140,11 @@ Rails.application.routes.draw do
end end
end end
RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :location_releases] RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :medical_releases, :misc_releases, :location_releases].freeze
ALL_RELEASES = RELEASES + [:music_releases, :medical_releases, :misc_releases] ALL_RELEASES = RELEASES + [:music_releases]
ALL_RELEASES.each do |release| ALL_RELEASES.each do |release|
resources release, only: [], concerns: :taggable resources release, only: [], concerns: [:taggable, :approvable]
end end
resources :bulk_taggings, only: [:new, :create] resources :bulk_taggings, only: [:new, :create]
@@ -158,7 +162,7 @@ Rails.application.routes.draw do
resources :contract_templates, only: [:index] resources :contract_templates, only: [:index]
end end
resources :contract_templates, only: [:show] do resources :contract_templates, only: [:show] do
RELEASES.each do |release| (RELEASES - [:misc_releases, :medical_releases]).each do |release|
resources release, controller: release, only: [:create] resources release, controller: release, only: [:create]
end end
end end

View File

@@ -0,0 +1,18 @@
class AddDurationToBroadcastRecordings < ActiveRecord::DataMigration
def up
recordings = BroadcastRecording.where(duration: nil)
client = MuxRuby::AssetsApi.new
recordings.each do |recording|
begin
response = client.get_asset(recording.asset_uid)
duration = response.data.duration
recording.update(duration: duration)
rescue MuxRuby::ApiError => e
Rails.logger.error("Failed to update duration for broadcast recording with id #{recording.id}\n" + e.message)
end
sleep(1)
end
end
end

View File

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

View File

@@ -0,0 +1,5 @@
class AddAccessibilityToContractTemplates < ActiveRecord::Migration[6.0]
def change
add_column :contract_templates, :accessibility, :integer, default: 0
end
end

View File

@@ -0,0 +1,5 @@
class AddDurationToBroadcastRecordings < ActiveRecord::Migration[6.0]
def change
add_column :broadcast_recordings, :duration, :float
end
end

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

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