Compare commits
9 Commits
import-arc
...
update-def
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60fc1d467d | ||
|
|
219bc5abd1 | ||
|
|
f5068a3a7e | ||
|
|
6b0ea5b7df | ||
|
|
afee9d9bc9 | ||
|
|
072142811f | ||
|
|
b924b99762 | ||
|
|
988ef2beab | ||
|
|
1168bcdfdd |
@@ -24,8 +24,12 @@ class Api::BroadcastsController < Api::ApiController
|
||||
|
||||
def update
|
||||
file_params.each do |file|
|
||||
file[:io] = StringIO.new(Base64.decode64(file[:io]))
|
||||
@broadcast.files.attach(io: file[:io], filename: file[:filename])
|
||||
if file.is_a?(String)
|
||||
@broadcast.files.attach(file)
|
||||
else
|
||||
file[:io] = StringIO.new(Base64.decode64(file[:io]))
|
||||
@broadcast.files.attach(file.to_h.symbolize_keys)
|
||||
end
|
||||
end
|
||||
@broadcast.save!
|
||||
|
||||
|
||||
@@ -78,8 +78,8 @@ class AppearanceReleasesController < ApplicationController
|
||||
end
|
||||
|
||||
def appearance_release_params
|
||||
params.require(:appearance_release).permit(:contract, :guardian_address, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_photo, :guardian_email, :minor,
|
||||
:person_address, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
|
||||
params.require(:appearance_release).permit(:contract, :guardian_address_street1, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_photo, :guardian_email, :minor,
|
||||
:person_address_street1, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
|
||||
:applicable_medium_id, :applicable_medium_text,
|
||||
:territory_id, :territory_text,
|
||||
:term_id, :term_text, :person_date_of_birth,
|
||||
|
||||
@@ -66,7 +66,10 @@ class ContractTemplatesController < ApplicationController
|
||||
:question_3_text, :question_4_text,
|
||||
:question_5_text, :question_6_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_13_text, :question_14_text,
|
||||
:question_15_text)
|
||||
end
|
||||
|
||||
def download_attributes
|
||||
|
||||
@@ -48,8 +48,10 @@ class ContractsController < ApplicationController
|
||||
# Native release contracts must be generated on-the-fly; non-native releases have a contract attachment
|
||||
if releasable.native?
|
||||
send_file contract.to_pdf, download_attributes
|
||||
else
|
||||
elsif policy(contract).show?
|
||||
redirect_to releasable.contract.service_url
|
||||
else
|
||||
raise Pundit::NotAuthorizedError
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -60,7 +60,7 @@ class ProjectsController < ApplicationController
|
||||
end
|
||||
|
||||
def features_settings_params
|
||||
%i(appearance_release location_release material_release acquired_media_release music_release talent_release medical_release video_analysis)
|
||||
%i(appearance_release location_release material_release acquired_media_release music_release talent_release medical_release misc_release video_analysis)
|
||||
end
|
||||
|
||||
def project_params_with_current_account
|
||||
|
||||
@@ -39,11 +39,43 @@ class Public::AppearanceReleasesController < Public::BaseController
|
||||
authorize appearance_releases.build(params)
|
||||
end
|
||||
|
||||
def person_params
|
||||
%i[
|
||||
person_first_name
|
||||
person_last_name
|
||||
person_phone
|
||||
person_email
|
||||
person_photo
|
||||
person_address_street1
|
||||
person_address_street2
|
||||
person_address_city
|
||||
person_address_state
|
||||
person_address_zip
|
||||
person_address_country
|
||||
]
|
||||
end
|
||||
|
||||
def guardian_params
|
||||
%i[
|
||||
guardian_first_name
|
||||
guardian_last_name
|
||||
guardian_phone
|
||||
guardian_email
|
||||
guardian_photo
|
||||
guardian_address_street1
|
||||
guardian_address_street2
|
||||
guardian_address_city
|
||||
guardian_address_state
|
||||
guardian_address_zip
|
||||
guardian_address_country
|
||||
]
|
||||
end
|
||||
|
||||
def appearance_release_params
|
||||
params.require(:appearance_release).permit(:person_address, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
|
||||
:guardian_address, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_email, :guardian_photo, :minor,
|
||||
:signature_base64, :person_date_of_birth,
|
||||
:locale, :contract_template,)
|
||||
params.require(:appearance_release).permit(person_params, guardian_params,
|
||||
:minor, :signature_base64,
|
||||
:person_date_of_birth,
|
||||
:locale, :contract_template)
|
||||
end
|
||||
|
||||
def appearance_release_params_with_locale
|
||||
|
||||
@@ -37,6 +37,10 @@ class Public::BroadcastsController < Public::BaseController
|
||||
|
||||
def set_broadcast
|
||||
@broadcast = Broadcast.find_by_token(params[:token])
|
||||
|
||||
unless @broadcast.present?
|
||||
redirect_to [:new, :session], alert: t(".alert")
|
||||
end
|
||||
end
|
||||
|
||||
class MultiViewBroadcast
|
||||
|
||||
@@ -53,7 +53,9 @@ class Public::MedicalReleasesController < Public::BaseController
|
||||
:question_5_answer, :question_6_answer,
|
||||
:question_7_answer, :question_8_answer,
|
||||
:question_9_answer, :question_10_answer,
|
||||
photos: [],
|
||||
:question_11_answer, :question_12_answer,
|
||||
:question_13_answer, :question_14_answer,
|
||||
:question_15_answer, photos: [],
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
@@ -11,7 +11,9 @@ class ReleaseTemplateImportsController < ApplicationController
|
||||
|
||||
templates = []
|
||||
filtered_contract_templates.each do |contract_template|
|
||||
next if contract_template.duplicated? || contract_template.project == @project
|
||||
next if contract_template.duplicated? ||
|
||||
contract_template.archived? ||
|
||||
contract_template.project == @project
|
||||
|
||||
already_imported = contract_template.duplicates.non_archived.pluck(:project_id).include?(@project.id)
|
||||
templates << OpenStruct.new(template: contract_template, already_imported?: already_imported)
|
||||
|
||||
@@ -2,7 +2,7 @@ module DropzoneHelper
|
||||
def dropzone_placeholder_message_for(releasable)
|
||||
case releasable.model_name.param_key
|
||||
when "acquired_media_release"
|
||||
"To Add Photos & Videos to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera"
|
||||
'(Optional) To add the licensed photos or videos ("Property") to this release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera'
|
||||
when "material_release"
|
||||
t 'material_releases.form.photos.dropzone_label'
|
||||
when "music_release"
|
||||
|
||||
@@ -56,6 +56,7 @@ class Account < ApplicationRecord
|
||||
Broadcast.where(project: projects),
|
||||
ZoomMeeting.where(project: projects),
|
||||
MedicalRelease.where(project: projects),
|
||||
MiscRelease.where(project: projects),
|
||||
MatchingRequest.where(project: projects),
|
||||
self
|
||||
])).sum(:byte_size).to_f
|
||||
|
||||
@@ -16,6 +16,29 @@ class AppearanceRelease < ApplicationRecord
|
||||
|
||||
has_one_attached :person_photo
|
||||
|
||||
composed_of :person_address,
|
||||
class_name: 'Address',
|
||||
mapping: [
|
||||
%w[person_address_street1 street1],
|
||||
%w[person_address_street2 street2],
|
||||
%w[person_address_city city],
|
||||
%w[person_address_state state],
|
||||
%w[person_address_zip zip],
|
||||
%w[person_address_country country]
|
||||
]
|
||||
|
||||
composed_of :guardian_address,
|
||||
class_name: 'Address',
|
||||
mapping: [
|
||||
%w[guardian_address_street1 street1],
|
||||
%w[guardian_address_street2 street2],
|
||||
%w[guardian_address_city city],
|
||||
%w[guardian_address_state state],
|
||||
%w[guardian_address_zip zip],
|
||||
%w[guardian_address_country country]
|
||||
]
|
||||
|
||||
|
||||
# These validations apply to all releases
|
||||
validates :person_email, email: true, allow_blank: true
|
||||
validates :person_first_name, :person_last_name, presence: true
|
||||
@@ -71,7 +94,18 @@ class AppearanceRelease < ApplicationRecord
|
||||
scope :having_no_person_photo, -> { left_joins(:person_photo_attachment).group(:id).having('COUNT(active_storage_attachments) = 0') }
|
||||
scope :with_person_name, ->(name) { where('person_first_name ILIKE ? OR person_last_name ILIKE ?', "%#{name}%") }
|
||||
|
||||
searchable_on %i[person_first_name person_last_name person_address person_email person_phone]
|
||||
searchable_on %i[
|
||||
person_first_name
|
||||
person_last_name
|
||||
person_address_street1
|
||||
person_address_street2
|
||||
person_address_city
|
||||
person_address_state
|
||||
person_address_zip
|
||||
person_address_country
|
||||
person_email
|
||||
person_phone
|
||||
]
|
||||
|
||||
# All releases must respond to the following messages
|
||||
def name
|
||||
|
||||
@@ -29,6 +29,10 @@ class Contract
|
||||
}
|
||||
end
|
||||
|
||||
def medical_release?
|
||||
@releasable.instance_of?(MedicalRelease)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def contract_template
|
||||
|
||||
@@ -14,6 +14,7 @@ class ContractTemplate < ApplicationRecord
|
||||
has_many :location_releases, dependent: :restrict_with_error
|
||||
has_many :material_releases, dependent: :restrict_with_error
|
||||
has_many :medical_releases, dependent: :restrict_with_error
|
||||
has_many :misc_releases, dependent: :restrict_with_error
|
||||
|
||||
monetize :fee_cents
|
||||
has_rich_text :body
|
||||
@@ -51,6 +52,10 @@ class ContractTemplate < ApplicationRecord
|
||||
parent.present?
|
||||
end
|
||||
|
||||
def archived?
|
||||
archived_at.present?
|
||||
end
|
||||
|
||||
def archive
|
||||
update(archived_at: Time.zone.now)
|
||||
end
|
||||
|
||||
@@ -8,6 +8,8 @@ class MedicalRelease < ApplicationRecord
|
||||
include Syncable
|
||||
include PersonName
|
||||
|
||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||
|
||||
composed_of :person_address,
|
||||
class_name: "Address",
|
||||
mapping: [
|
||||
|
||||
85
app/models/misc_release.rb
Normal file
85
app/models/misc_release.rb
Normal file
@@ -0,0 +1,85 @@
|
||||
class MiscRelease < ApplicationRecord
|
||||
include Contractable
|
||||
include Notable
|
||||
include Photoable
|
||||
include Releasable
|
||||
include Searchable
|
||||
include Signable
|
||||
include Syncable
|
||||
include PersonName
|
||||
include GuardianName
|
||||
|
||||
composed_of :person_address,
|
||||
class_name: "Address",
|
||||
mapping: [
|
||||
%w(person_address_street1 street1),
|
||||
%w(person_address_street2 street2),
|
||||
%w(person_address_city city),
|
||||
%w(person_address_state state),
|
||||
%w(person_address_zip zip),
|
||||
%w(person_address_country country)
|
||||
]
|
||||
|
||||
composed_of :guardian_address,
|
||||
class_name: "Address",
|
||||
mapping: [
|
||||
%w(guardian_address_street1 street1),
|
||||
%w(guardian_address_street2 street2),
|
||||
%w(guardian_address_city city),
|
||||
%w(guardian_address_state state),
|
||||
%w(guardian_address_zip zip),
|
||||
%w(guardian_address_country country)
|
||||
]
|
||||
|
||||
def self.face_photo_acceptable_content_types
|
||||
["image/png", "image/jpeg"]
|
||||
end
|
||||
|
||||
# These validations apply to all releases
|
||||
validates :person_first_name, :person_last_name, presence: true
|
||||
validates :person_email, email: true, allow_blank: true
|
||||
|
||||
acts_as_taggable_on :internal_tags, :tags
|
||||
|
||||
# These validations apply to releases created natively by the system (i.e. not imported from elsewhere)
|
||||
with_options on: :native do
|
||||
validates :signature, attached: true
|
||||
end
|
||||
|
||||
# These validations apply to releases imported to the system from an outside source
|
||||
with_options on: :non_native do
|
||||
validates :contract, attached: true
|
||||
end
|
||||
|
||||
with_options if: :minor? do
|
||||
validates :guardian_first_name, :guardian_last_name, presence: true
|
||||
validates :guardian_phone, presence: true
|
||||
end
|
||||
|
||||
searchable_on %i[
|
||||
person_first_name person_last_name person_email person_phone
|
||||
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
||||
guardian_address_street1 guardian_address_street2 guardian_address_city guardian_address_state guardian_address_zip guardian_address_country
|
||||
]
|
||||
|
||||
# All releases must respond to the following messages
|
||||
def name
|
||||
person_name
|
||||
end
|
||||
|
||||
def filename_suffix
|
||||
"#{person_last_name} #{person_first_name}"
|
||||
end
|
||||
|
||||
def contact_person
|
||||
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
||||
end
|
||||
|
||||
def uses_edl?
|
||||
false
|
||||
end
|
||||
|
||||
def contract_file_name
|
||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
||||
end
|
||||
end
|
||||
@@ -3,8 +3,8 @@ class Project < ApplicationRecord
|
||||
include Filterable
|
||||
include Syncable
|
||||
|
||||
SIGNABLE_RELEASE_TYPES = %w(talent appearance acquired_media location material medical)
|
||||
AVAILABLE_RELEASE_TYPES = %w(appearance location material acquired_media talent music medical)
|
||||
SIGNABLE_RELEASE_TYPES = %w(talent appearance acquired_media location material medical misc)
|
||||
AVAILABLE_RELEASE_TYPES = %w(appearance location material acquired_media talent music medical misc)
|
||||
|
||||
belongs_to :account
|
||||
has_many :acquired_media_releases, dependent: :destroy
|
||||
@@ -14,6 +14,7 @@ class Project < ApplicationRecord
|
||||
has_many :music_releases, dependent: :destroy
|
||||
has_many :talent_releases, dependent: :destroy
|
||||
has_many :medical_releases, dependent: :destroy
|
||||
has_many :misc_releases, dependent: :destroy
|
||||
has_many :videos, dependent: :destroy
|
||||
has_many :imports, dependent: :destroy
|
||||
has_many :contract_templates, dependent: :destroy
|
||||
@@ -35,6 +36,7 @@ class Project < ApplicationRecord
|
||||
music_release: false,
|
||||
talent_release: false,
|
||||
medical_release: false,
|
||||
misc_release: false,
|
||||
video_analysis: false,
|
||||
}
|
||||
end
|
||||
@@ -68,6 +70,7 @@ class Project < ApplicationRecord
|
||||
music_release: true,
|
||||
talent_release: true,
|
||||
medical_release: true,
|
||||
misc_release: true,
|
||||
video_analysis: true,
|
||||
}
|
||||
when "nat_geo"
|
||||
@@ -80,6 +83,7 @@ class Project < ApplicationRecord
|
||||
music_release: true,
|
||||
talent_release: true,
|
||||
medical_release: true,
|
||||
misc_release: true,
|
||||
video_analysis: true,
|
||||
}
|
||||
else
|
||||
|
||||
@@ -8,7 +8,12 @@ class SampleAppearanceRelease < AppearanceRelease
|
||||
|
||||
def default_attrs
|
||||
{
|
||||
person_address: "Street Address, City, State Zipcode",
|
||||
person_address_street1: "Street Address",
|
||||
person_address_street2: "St2",
|
||||
person_address_city: "City",
|
||||
person_address_state: "State",
|
||||
person_address_zip: "ZIP",
|
||||
person_address_country: "Country",
|
||||
person_first_name: "Some",
|
||||
person_last_name: "Person",
|
||||
person_phone: "555-555-5555",
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
class ContractPolicy < ApplicationPolicy
|
||||
def show?
|
||||
user.manager? || user.account_manager?
|
||||
if record.respond_to?(:medical_release?) && record.medical_release?
|
||||
user.account_manager?
|
||||
else
|
||||
user.manager? || user.account_manager?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -31,7 +31,11 @@ class MedicalReleasePolicy < ReleasePolicy
|
||||
true
|
||||
end
|
||||
|
||||
def download_single?
|
||||
user.account_manager?
|
||||
end
|
||||
|
||||
def download_multiple?
|
||||
true
|
||||
download_single?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div class="form-row">
|
||||
<%= form.email_field :person_email, wrapper_class: "col-sm-6" %>
|
||||
<%= form.date_field :person_date_of_birth, wrapper_class: "col-sm-6", placeholder: Date.current %>
|
||||
<%= form.text_field :person_address, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field :person_address_street1, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
|
||||
<div class="<%= class_string("collapse" => !appearance_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||
@@ -23,7 +23,10 @@
|
||||
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_address, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_address_street1, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<%= bootstrap_form_for model, layout: :inline, remote: true do |form| %>
|
||||
<%= form.file_field :files, direct_upload: true, multiple: true, accept: "*", hide_label: true, wrapper_class: "w-65 mr-2", id: "broadcast_files_#{token}" %>
|
||||
<%= form.file_field :files, direct_upload: true, multiple: true, accept: "*", hide_label: true, required: true, wrapper_class: "w-65 mr-2", id: "broadcast_files_#{token}" %>
|
||||
<%= form.button fa_icon("upload", text: "Add File"), class: "btn btn-primary", type: :submit, data: { disable_with: fa_icon("spinner", text: "Adding File") } %>
|
||||
<% end %>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :name, wrapper_class: "col-sm-6" %>
|
||||
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical) } }, class: "form-control custom-select" %>
|
||||
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(appearance talent misc), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical) } }, class: "form-control custom-select" %>
|
||||
</div>
|
||||
<div class="form-row" id="fee_field">
|
||||
<%= form.number_field :fee, min:"0", max:"99999999", step: "0.01", prepend: "$", help: "Leave at $0.00 for no-fee", wrapper_class: "col-sm-6" %>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</dl>
|
||||
|
||||
<% if releasable.model_name == "MedicalRelease" %>
|
||||
<% (1..10).each do |n| %>
|
||||
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<% if contract_template.public_send("question_#{n}_text").present? %>
|
||||
<p><strong><%= contract_template.public_send("question_#{n}_text") %></strong></p>
|
||||
<p><%= releasable.public_send("question_#{n}_answer") %></p>
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<% 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 %>
|
||||
<% end %>
|
||||
<% if 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" %>
|
||||
<% end %>
|
||||
<% if policy(medical_release).destroy? %>
|
||||
|
||||
@@ -44,10 +44,6 @@
|
||||
<hr>
|
||||
|
||||
<%= card_field_set_tag t(".files.heading") do %>
|
||||
<div class="alert alert-warning text-center text-md-left">
|
||||
<%= fa_icon "warning" %>
|
||||
<strong>For optimal accuracy, please ensure video file names and photo file names match the source file name in the editing sequence.</strong>
|
||||
</div>
|
||||
<%= render "shared/file_infos_dropzone", form: form, releasable: @acquired_media_release %>
|
||||
<% end %>
|
||||
|
||||
|
||||
@@ -30,13 +30,13 @@
|
||||
<div class="form-row">
|
||||
<%= 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.phone_field :person_phone, wrapper_class: "col-sm-6" %>
|
||||
<%= form.phone_field :person_phone, required: true, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<%= form.email_field :person_email, wrapper_class: "col-sm-6" %>
|
||||
<%= form.date_field :person_date_of_birth, wrapper_class: "col-sm-6", placeholder: Date.current %>
|
||||
<%= form.text_field :person_address, wrapper_class: "col-sm-6" %>
|
||||
<%= form.email_field :person_email, required: true, wrapper_class: "col-sm-6" %>
|
||||
<%= form.date_field :person_date_of_birth, required: true, wrapper_class: "col-sm-6", placeholder: Date.current %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "person", required: true %>
|
||||
<% end %>
|
||||
|
||||
<%= card_field_set_tag t(".photo.heading") do %>
|
||||
@@ -74,14 +74,12 @@
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %>
|
||||
<%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %>
|
||||
<%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :guardian_address, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor? %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
@@ -102,7 +100,7 @@
|
||||
<% end %>
|
||||
<div class="hidden-file-input">
|
||||
<%= form.hidden_field :guardian_photo, value: form.object.guardian_photo.signed_id if @appearance_release.guardian_photo.attached? %>
|
||||
<%= form.file_field :guardian_photo, hide_label: true, data: { ujs_target: "guardian-photo-input" }, accept: @appearance_release.class.face_photo_acceptable_content_types.join(","), direct_upload: true %>
|
||||
<%= form.file_field :guardian_photo, required: @appearance_release.minor?, hide_label: true, data: { ujs_target: "guardian-photo-input" }, accept: @appearance_release.class.face_photo_acceptable_content_types.join(","), direct_upload: true %>
|
||||
</div>
|
||||
<%= button_tag t(".photo.take_photo"), type: "button", class: "btn btn-lg btn-primary take-photo-button", data: { behavior: "take-guardian-photo" } %>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<%= bootstrap_form_for model, url: broadcast_url(token: token), layout: :inline, remote: true do |form| %>
|
||||
<%= form.file_field :files, direct_upload: true, multiple: true, accept: "*", hide_label: true, wrapper_class: "w-65 mr-2", id: "broadcast_files_#{token}" %>
|
||||
<%= form.file_field :files, direct_upload: true, multiple: true, accept: "*", hide_label: true, required: true, wrapper_class: "w-65 mr-2", id: "broadcast_files_#{token}" %>
|
||||
<%= form.button fa_icon("upload", text: "Add File"), class: "btn btn-primary", type: :submit, data: { disable_with: fa_icon("spinner", text: "Adding File") } %>
|
||||
<% end %>
|
||||
@@ -14,9 +14,9 @@
|
||||
|
||||
<hr>
|
||||
|
||||
<% if (1..10).map {|n| @contract_template.public_send("question_#{n}_text").presence }.compact.any? %>
|
||||
<% if (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).map {|n| @contract_template.public_send("question_#{n}_text").presence }.compact.any? %>
|
||||
<%= card_field_set_tag t(".questionnaire.heading") do %>
|
||||
<% (1..10).each do |n| %>
|
||||
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<% if @contract_template.public_send("question_#{n}_text").present? %>
|
||||
<div class="form-row">
|
||||
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
<% field_name_prefix = subject.present? ? "#{subject}_" : "" %>
|
||||
<% required = required || false %>
|
||||
|
||||
<div class="form-row">
|
||||
<%= form.text_field "#{field_name_prefix}address_street1", wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_street2", wrapper_class: "col-sm-6" %>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<%= form.text_field "#{field_name_prefix}address_city", wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_state", wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_zip", wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3" %>
|
||||
<%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3" %>
|
||||
</div>
|
||||
<%= form.form_group "#{field_name_prefix}address_country" do %>
|
||||
<%= form.label "#{field_name_prefix}address_country" %>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<% (1..10).each do |n| %>
|
||||
<% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<div class="form-row">
|
||||
<%= form.text_area "question_#{n}_text", wrapper_class: "col-sm-12" %>
|
||||
</div>
|
||||
|
||||
@@ -311,8 +311,8 @@ en:
|
||||
graphics_only_edl_file: If you do not upload a Graphics Only EDL, the software will not generate a Graphics Cue List.
|
||||
label:
|
||||
acquired_media_release:
|
||||
description: Description of licensed property
|
||||
name: Name of licensed property
|
||||
description: Description of property
|
||||
name: Name of property
|
||||
person_address: Address
|
||||
person_address_city: City
|
||||
person_address_country: Country
|
||||
@@ -328,8 +328,19 @@ en:
|
||||
person_phone: Phone number
|
||||
person_title: Title
|
||||
appearance_release:
|
||||
guardian_address_city: Guardian city
|
||||
guardian_address_country: Guardian country
|
||||
guardian_address_state: Guardian state
|
||||
guardian_address_street1: Guardian address
|
||||
guardian_address_street2: Guardian address (Line 2)
|
||||
guardian_address_zip: Guardian zip code
|
||||
minor: Is the person a minor?
|
||||
person_address: Address
|
||||
person_address_city: City
|
||||
person_address_country: Country
|
||||
person_address_state: State
|
||||
person_address_street1: Address
|
||||
person_address_street2: Address (Line 2)
|
||||
person_address_zip: Zip code
|
||||
person_date_of_birth: Date of birth
|
||||
person_email: Email address
|
||||
person_first_name: First name
|
||||
@@ -740,6 +751,7 @@ en:
|
||||
location_release: Location Releases
|
||||
material_release: Material Releases (Products / Logos)
|
||||
medical_release: Medical Releases
|
||||
misc_release: Misc Releases
|
||||
music_release: Music Releases (Original Music)
|
||||
talent_release: Talent Releases
|
||||
index:
|
||||
@@ -767,6 +779,7 @@ en:
|
||||
location_release: Location Releases (%{count})
|
||||
material_release: Material Releases (%{count})
|
||||
medical_release: Medical Releases (%{count})
|
||||
misc_release: Misc Releases (%{count})
|
||||
music_release: Music Releases (%{count})
|
||||
report: Reports
|
||||
talent_release: Talent Releases (%{count})
|
||||
@@ -814,6 +827,9 @@ en:
|
||||
warning: If your photo appears sideways, it will be autocorrected when you submit your release.
|
||||
signature:
|
||||
heading: Sign Below
|
||||
broadcasts:
|
||||
show:
|
||||
alert: That broadcast is no longer available
|
||||
location_releases:
|
||||
create:
|
||||
notice: Your release has been signed. Thank you!
|
||||
|
||||
@@ -115,11 +115,20 @@ es:
|
||||
helpers:
|
||||
label:
|
||||
appearance_release:
|
||||
guardian_address: Dirección del tutor legal
|
||||
guardian_address_city: Guardian city (ES)
|
||||
guardian_address_country: Guardian country (ES)
|
||||
guardian_address_state: Guardian state (ES)
|
||||
guardian_address_street1: Dirección del tutor legal
|
||||
guardian_address_street2: Dirección del tutor legal (Línea 2)
|
||||
guardian_address_zip: Guardian zip code (ES)
|
||||
guardian_name: Nómbre del tutor legal
|
||||
guardian_phone: Número de teléfono del tutor legal
|
||||
minor: El firmante es un menor
|
||||
person_address: Dirección
|
||||
person_address_city: City (ES)
|
||||
person_address_country: Country (ES)
|
||||
person_address_state: State (ES)
|
||||
person_address_street1: Address (ES)
|
||||
person_address_street2: Address (Line 2) (ES)
|
||||
person_email: Dirección de correo electrónico
|
||||
person_name: Nómbre
|
||||
person_phone: Número de teléfono
|
||||
|
||||
@@ -54,6 +54,7 @@ Rails.application.routes.draw do
|
||||
resources :music_releases, except: [:show], concerns: [:contractable, :notable]
|
||||
resources :talent_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 :contract_templates, only: [:index, :new, :create, :destroy] do
|
||||
resource :qr_codes, only: [:show], controller: "contract_templates/qr_codes"
|
||||
resource :blank_contracts, only: [:show, :new, :create], controller: "contract_templates/blank_contracts"
|
||||
@@ -119,6 +120,7 @@ Rails.application.routes.draw do
|
||||
resources :location_releases, only: [:new, :create]
|
||||
resources :material_releases, only: [:new, :create]
|
||||
resources :medical_releases, only: [:new, :create]
|
||||
resources :misc_releases, only: [:new, :create]
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -128,7 +130,7 @@ Rails.application.routes.draw do
|
||||
end
|
||||
|
||||
RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :location_releases]
|
||||
ALL_RELEASES = RELEASES + [:music_releases, :medical_releases]
|
||||
ALL_RELEASES = RELEASES + [:music_releases, :medical_releases, :misc_releases]
|
||||
|
||||
ALL_RELEASES.each do |release|
|
||||
resources release, only: [], concerns: :taggable
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class ChangeExistingZoomUsersSettings < ActiveRecord::DataMigration
|
||||
def up
|
||||
gateway = ZoomGateway.new
|
||||
|
||||
ZoomUser.find_each do |zu|
|
||||
gateway.update_user_settings zu.api_id
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,10 @@
|
||||
class DestructurePersonAddressColumnInAppearanceReleases < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
rename_column :appearance_releases, :person_address, :person_address_street1
|
||||
add_column :appearance_releases, :person_address_street2, :string
|
||||
add_column :appearance_releases, :person_address_city, :string
|
||||
add_column :appearance_releases, :person_address_state, :string
|
||||
add_column :appearance_releases, :person_address_zip, :string
|
||||
add_column :appearance_releases, :person_address_country, :string
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,10 @@
|
||||
class DestructureGuardianAddressColumnInAppearanceReleases < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
rename_column :appearance_releases, :guardian_address, :guardian_address_street1
|
||||
add_column :appearance_releases, :guardian_address_street2, :string
|
||||
add_column :appearance_releases, :guardian_address_city, :string
|
||||
add_column :appearance_releases, :guardian_address_state, :string
|
||||
add_column :appearance_releases, :guardian_address_zip, :string
|
||||
add_column :appearance_releases, :guardian_address_country, :string
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,15 @@
|
||||
class AddMoreQuestionsAndAnswersToMedicalReleases < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :contract_templates, :question_11_text, :text
|
||||
add_column :contract_templates, :question_12_text, :text
|
||||
add_column :contract_templates, :question_13_text, :text
|
||||
add_column :contract_templates, :question_14_text, :text
|
||||
add_column :contract_templates, :question_15_text, :text
|
||||
|
||||
add_column :medical_releases, :question_11_answer, :text
|
||||
add_column :medical_releases, :question_12_answer, :text
|
||||
add_column :medical_releases, :question_13_answer, :text
|
||||
add_column :medical_releases, :question_14_answer, :text
|
||||
add_column :medical_releases, :question_15_answer, :text
|
||||
end
|
||||
end
|
||||
34
db/migrate/20200619085823_create_misc_releases.rb
Normal file
34
db/migrate/20200619085823_create_misc_releases.rb
Normal file
@@ -0,0 +1,34 @@
|
||||
class CreateMiscReleases < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
create_table :misc_releases do |t|
|
||||
t.belongs_to :project, foreign_key: true
|
||||
t.belongs_to :contract_template, foreign_key: true
|
||||
t.string :person_first_name
|
||||
t.string :person_last_name
|
||||
t.string :person_address_street1
|
||||
t.string :person_address_street2
|
||||
t.string :person_address_city
|
||||
t.string :person_address_state
|
||||
t.string :person_address_zip
|
||||
t.string :person_address_country
|
||||
t.string :person_phone
|
||||
t.string :person_email
|
||||
t.string :guardian_first_name
|
||||
t.string :guardian_last_name
|
||||
t.string :guardian_address_street1
|
||||
t.string :guardian_address_street2
|
||||
t.string :guardian_address_city
|
||||
t.string :guardian_address_state
|
||||
t.string :guardian_address_zip
|
||||
t.string :guardian_address_country
|
||||
t.string :guardian_phone
|
||||
t.string :guardian_email
|
||||
t.string :locale
|
||||
t.text :notes
|
||||
t.datetime :signed_at
|
||||
t.boolean :minor, default: false
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
||||
137
db/structure.sql
137
db/structure.sql
@@ -290,13 +290,13 @@ ALTER SEQUENCE public.active_storage_blobs_id_seq OWNED BY public.active_storage
|
||||
CREATE TABLE public.appearance_releases (
|
||||
id bigint NOT NULL,
|
||||
person_name_old character varying,
|
||||
person_address character varying,
|
||||
person_address_street1 character varying,
|
||||
person_phone character varying,
|
||||
project_id bigint,
|
||||
created_at timestamp without time zone NOT NULL,
|
||||
updated_at timestamp without time zone NOT NULL,
|
||||
minor boolean DEFAULT false,
|
||||
guardian_address character varying,
|
||||
guardian_address_street1 character varying,
|
||||
guardian_name_old character varying,
|
||||
guardian_phone character varying,
|
||||
person_email character varying,
|
||||
@@ -318,7 +318,17 @@ CREATE TABLE public.appearance_releases (
|
||||
guardian_first_name character varying,
|
||||
guardian_last_name character varying,
|
||||
identifier character varying,
|
||||
guardian_email character varying
|
||||
guardian_email character varying,
|
||||
person_address_street2 character varying,
|
||||
person_address_city character varying,
|
||||
person_address_state character varying,
|
||||
person_address_zip character varying,
|
||||
person_address_country character varying,
|
||||
guardian_address_street2 character varying,
|
||||
guardian_address_city character varying,
|
||||
guardian_address_state character varying,
|
||||
guardian_address_zip character varying,
|
||||
guardian_address_country character varying
|
||||
);
|
||||
|
||||
|
||||
@@ -604,7 +614,12 @@ CREATE TABLE public.contract_templates (
|
||||
question_7_text text,
|
||||
question_8_text text,
|
||||
question_9_text text,
|
||||
question_10_text text
|
||||
question_10_text text,
|
||||
question_11_text text,
|
||||
question_12_text text,
|
||||
question_13_text text,
|
||||
question_14_text text,
|
||||
question_15_text text
|
||||
);
|
||||
|
||||
|
||||
@@ -994,7 +1009,12 @@ CREATE TABLE public.medical_releases (
|
||||
question_7_answer text,
|
||||
question_8_answer text,
|
||||
question_9_answer text,
|
||||
question_10_answer text
|
||||
question_10_answer text,
|
||||
question_11_answer text,
|
||||
question_12_answer text,
|
||||
question_13_answer text,
|
||||
question_14_answer text,
|
||||
question_15_answer text
|
||||
);
|
||||
|
||||
|
||||
@@ -1017,6 +1037,62 @@ CREATE SEQUENCE public.medical_releases_id_seq
|
||||
ALTER SEQUENCE public.medical_releases_id_seq OWNED BY public.medical_releases.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: misc_releases; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public.misc_releases (
|
||||
id bigint NOT NULL,
|
||||
project_id bigint,
|
||||
contract_template_id bigint,
|
||||
person_first_name character varying,
|
||||
person_last_name character varying,
|
||||
person_address_street1 character varying,
|
||||
person_address_street2 character varying,
|
||||
person_address_city character varying,
|
||||
person_address_state character varying,
|
||||
person_address_zip character varying,
|
||||
person_address_country character varying,
|
||||
person_phone character varying,
|
||||
person_email character varying,
|
||||
guardian_first_name character varying,
|
||||
guardian_last_name character varying,
|
||||
guardian_address_street1 character varying,
|
||||
guardian_address_street2 character varying,
|
||||
guardian_address_city character varying,
|
||||
guardian_address_state character varying,
|
||||
guardian_address_zip character varying,
|
||||
guardian_address_country character varying,
|
||||
guardian_phone character varying,
|
||||
guardian_email character varying,
|
||||
locale character varying,
|
||||
notes text,
|
||||
signed_at timestamp without time zone,
|
||||
minor boolean DEFAULT false,
|
||||
created_at timestamp(6) without time zone NOT NULL,
|
||||
updated_at timestamp(6) without time zone NOT NULL
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: misc_releases_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.misc_releases_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
--
|
||||
-- Name: misc_releases_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.misc_releases_id_seq OWNED BY public.misc_releases.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: music_releases; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
@@ -1870,6 +1946,13 @@ ALTER TABLE ONLY public.material_releases ALTER COLUMN id SET DEFAULT nextval('p
|
||||
ALTER TABLE ONLY public.medical_releases ALTER COLUMN id SET DEFAULT nextval('public.medical_releases_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: misc_releases id; Type: DEFAULT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.misc_releases ALTER COLUMN id SET DEFAULT nextval('public.misc_releases_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: music_releases id; Type: DEFAULT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -2188,6 +2271,14 @@ ALTER TABLE ONLY public.medical_releases
|
||||
ADD CONSTRAINT medical_releases_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: misc_releases misc_releases_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.misc_releases
|
||||
ADD CONSTRAINT misc_releases_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: music_releases music_releases_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -2704,6 +2795,20 @@ CREATE INDEX index_medical_releases_on_contract_template_id ON public.medical_re
|
||||
CREATE INDEX index_medical_releases_on_project_id ON public.medical_releases USING btree (project_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_misc_releases_on_contract_template_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX index_misc_releases_on_contract_template_id ON public.misc_releases USING btree (contract_template_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_misc_releases_on_project_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX index_misc_releases_on_project_id ON public.misc_releases USING btree (project_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: index_music_releases_on_applicable_medium_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
@@ -3005,6 +3110,14 @@ CREATE UNIQUE INDEX taggings_idx ON public.taggings USING btree (tag_id, taggabl
|
||||
CREATE INDEX taggings_idy ON public.taggings USING btree (taggable_id, taggable_type, tagger_id, context);
|
||||
|
||||
|
||||
--
|
||||
-- Name: misc_releases fk_rails_0222652fcd; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.misc_releases
|
||||
ADD CONSTRAINT fk_rails_0222652fcd FOREIGN KEY (project_id) REFERENCES public.projects(id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: unreleased_appearances fk_rails_0393a349dd; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -3413,6 +3526,14 @@ ALTER TABLE ONLY public.active_storage_attachments
|
||||
ADD CONSTRAINT fk_rails_c3b3935057 FOREIGN KEY (blob_id) REFERENCES public.active_storage_blobs(id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: misc_releases fk_rails_c664291b9b; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.misc_releases
|
||||
ADD CONSTRAINT fk_rails_c664291b9b FOREIGN KEY (contract_template_id) REFERENCES public.contract_templates(id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: location_releases fk_rails_c7458d662e; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -3654,6 +3775,10 @@ INSERT INTO "schema_migrations" (version) VALUES
|
||||
('20200610085411'),
|
||||
('20200610140459'),
|
||||
('20200612121539'),
|
||||
('20200615131722');
|
||||
('20200615131722'),
|
||||
('20200615133602'),
|
||||
('20200616124214'),
|
||||
('20200619081446'),
|
||||
('20200619085823');
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,8 @@ if Rails.env.development? || Rails.env.test? || Rails.env.review?
|
||||
material_release: true,
|
||||
music_release: true,
|
||||
talent_release: true,
|
||||
medical_release: true,
|
||||
misc_release: true,
|
||||
video_analysis: true,
|
||||
})
|
||||
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require './lib/zoom_wrapper_monkeypatch'
|
||||
|
||||
class ZoomGateway
|
||||
class AuthenticationError < StandardError; end
|
||||
class MeetingExpired < StandardError; end
|
||||
@@ -65,6 +69,23 @@ class ZoomGateway
|
||||
parse_zoom_error(e)
|
||||
end
|
||||
|
||||
# Update user with custom settings
|
||||
def update_user_settings(user_id)
|
||||
custom_defaults = {
|
||||
id: user_id,
|
||||
in_meeting: {
|
||||
auto_saving_chat: true,
|
||||
co_host: true,
|
||||
non_verbal_feedback: true,
|
||||
breakout_room: true,
|
||||
group_hd: true,
|
||||
far_end_camera_control: true,
|
||||
allow_live_streaming: true
|
||||
}
|
||||
}
|
||||
@client.user_settings_update custom_defaults
|
||||
end
|
||||
|
||||
def create_host(host_email)
|
||||
# Find role
|
||||
host_role = @client.roles_list["roles"].try(:select) { |r| r["name"] == self.class.HOST_ROLE }.try(:first)
|
||||
@@ -82,6 +103,8 @@ class ZoomGateway
|
||||
type: self.class.USER_TYPE
|
||||
})
|
||||
|
||||
update_user_settings(host_user["id"])
|
||||
|
||||
# Assign role to user
|
||||
@client.roles_assign role_id: host_role["id"], members: [{id: host_user["id"]}]
|
||||
|
||||
|
||||
25
lib/zoom_wrapper_monkeypatch.rb
Normal file
25
lib/zoom_wrapper_monkeypatch.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Zoom
|
||||
module Actions
|
||||
module User
|
||||
def user_settings_update(*args)
|
||||
params = Zoom::Params.new(Utils.extract_options!(args))
|
||||
permitted_in_meeting_params = %i[
|
||||
auto_saving_chat
|
||||
co_host
|
||||
non_verbal_feedback
|
||||
breakout_room
|
||||
group_hd
|
||||
far_end_camera_control
|
||||
allow_live_streaming
|
||||
]
|
||||
permitted_params = { in_meeting: permitted_in_meeting_params }
|
||||
params.require(:id).permit permitted_params
|
||||
request_body = params.except(:id).to_json
|
||||
resp = self.class.patch("/users/#{params[:id]}/settings", body: request_body, headers: request_headers)
|
||||
Utils.parse_response resp
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -128,6 +128,26 @@ RSpec.describe Api::BroadcastsController, type: :controller do
|
||||
expect(included.first.dig("id")).to eq broadcast.files.first.id.to_s
|
||||
expect(included.first.dig("type")).to eq 'active_storage_attachment'
|
||||
end
|
||||
|
||||
context "when files param contains a signed_id string" do
|
||||
it "adds that file to the broadcast" do
|
||||
project = create(:project, name: 'first', account_id: current_user.primary_account.id)
|
||||
broadcast = create(:broadcast, :with_stream, skip_create_callback: true, project: project, status: 'created')
|
||||
blob = ActiveStorage::Blob.create_after_upload!(io: StringIO.new("Hello"), filename: "hello.txt", content_type: "text/plain")
|
||||
|
||||
sign_in_to_api(current_user)
|
||||
patch :update, params: { project_id: project, id: broadcast, broadcast: { files: [blob.signed_id] } }
|
||||
|
||||
relationships = JSON.parse(response.body).dig('data', 'relationships')
|
||||
included = JSON.parse(response.body).dig('included')
|
||||
|
||||
expect(relationships.keys).to include('files')
|
||||
expect(included.size).to eq 1
|
||||
expect(included.first.dig("id")).to eq broadcast.files.first.id.to_s
|
||||
expect(included.first.dig("type")).to eq 'active_storage_attachment'
|
||||
expect(included.first.dig("attributes", "filename")).to eq 'hello.txt'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
after do
|
||||
|
||||
@@ -265,6 +265,9 @@ RSpec.describe AppearanceReleasesController, tye: :controller do
|
||||
def minor_appearance_release_params
|
||||
attributes_for(:appearance_release, :non_native, :minor_with_guardian_photo)
|
||||
.except(:contract)
|
||||
.except(:guardian_address_street2).except(:guardian_address_city)
|
||||
.except(:guardian_address_state).except(:guardian_address_zip)
|
||||
.except(:guardian_address_country)
|
||||
.merge(contract_param, exploitable_rights_params)
|
||||
end
|
||||
|
||||
|
||||
@@ -63,4 +63,55 @@ RSpec.describe ContractsController, type: :controller do
|
||||
|
||||
it_behaves_like "a contracts controller"
|
||||
end
|
||||
|
||||
context "for medical releases" do
|
||||
let(:native_releasable) { create(:medical_release_with_contract_template, :native) }
|
||||
let(:non_native_releasable) { create(:medical_release_with_contract_template, :non_native) }
|
||||
|
||||
describe "#show when user is account manager" do
|
||||
it_behaves_like "a contracts controller"
|
||||
end
|
||||
|
||||
shared_examples "a medical contracts controller for non-authorized users" do
|
||||
describe "#show" do
|
||||
context "for a native release" do
|
||||
it "responds with not authorized error" do
|
||||
pdf_body = Tempfile.new
|
||||
allow_any_instance_of(Contract).to receive(:to_pdf).and_return(pdf_body)
|
||||
|
||||
expect {
|
||||
get :show, params: { format: :pdf, "#{native_releasable.model_name.singular}_id" => native_releasable }
|
||||
}.to raise_exception(Pundit::NotAuthorizedError)
|
||||
end
|
||||
end
|
||||
|
||||
context "for a non-native release" do
|
||||
it "responds with the attached contract" do
|
||||
contract = double(:contract, service_url: "http://example.org/contract.pdf")
|
||||
allow_any_instance_of(non_native_releasable.class).to receive(:contract).and_return(contract)
|
||||
|
||||
expect {
|
||||
get :show, params: { format: :pdf, "#{non_native_releasable.model_name.singular}_id" => non_native_releasable }
|
||||
}.to raise_exception(Pundit::NotAuthorizedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#show when user is project manager" do
|
||||
let(:manager_user) { create(:user, :manager) }
|
||||
before do
|
||||
sign_in manager_user
|
||||
end
|
||||
it_behaves_like "a medical contracts controller for non-authorized users"
|
||||
end
|
||||
|
||||
describe "#show when user is associate" do
|
||||
let(:associate_user) { create(:user, :associate) }
|
||||
before do
|
||||
sign_in associate_user
|
||||
end
|
||||
it_behaves_like "a medical contracts controller for non-authorized users"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -31,7 +31,7 @@ describe Public::AppearanceReleasesController do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, appearance_release: { person_address: "Albuquerque" } }
|
||||
post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, appearance_release: { person_email: "email@email.com" } }
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match /Person first name can't be blank/
|
||||
expect(body).to match /Person last name can't be blank/
|
||||
@@ -120,7 +120,19 @@ describe Public::AppearanceReleasesController do
|
||||
|
||||
def minor_appearance_release_params(with_guardian_photo = true)
|
||||
minor_type = with_guardian_photo ? :minor_with_guardian_photo : :minor
|
||||
attributes_for(:appearance_release, minor_type).merge(signature_param)
|
||||
attributes_for(:appearance_release, minor_type)
|
||||
.merge(signature_param, guardian_address_params)
|
||||
end
|
||||
|
||||
def guardian_address_params
|
||||
{
|
||||
guardian_address_street1: "St1",
|
||||
guardian_address_street2: "St2",
|
||||
guardian_address_city: "City",
|
||||
guardian_address_state: "State",
|
||||
guardian_address_zip: "ZIP",
|
||||
guardian_address_country: "Country"
|
||||
}
|
||||
end
|
||||
|
||||
def signature_param
|
||||
|
||||
@@ -11,7 +11,12 @@ FactoryBot.define do
|
||||
end
|
||||
|
||||
trait :native do
|
||||
person_address "100 Test Lane, New York, NY 10001"
|
||||
person_address_street1 "St1"
|
||||
person_address_street2 "St2"
|
||||
person_address_city "City"
|
||||
person_address_state "State"
|
||||
person_address_zip "ZIP"
|
||||
person_address_country "Country"
|
||||
person_phone "123-555-6789"
|
||||
|
||||
signature do
|
||||
@@ -31,7 +36,12 @@ FactoryBot.define do
|
||||
minor true
|
||||
guardian_first_name "Jamie"
|
||||
guardian_last_name "Doe"
|
||||
guardian_address "100 Test Lane, New York, 10001"
|
||||
guardian_address_street1 "St1"
|
||||
guardian_address_street2 "St2"
|
||||
guardian_address_city "City"
|
||||
guardian_address_state "State"
|
||||
guardian_address_zip "ZIP"
|
||||
guardian_address_country "Country"
|
||||
guardian_phone "123-555-1234"
|
||||
guardian_email "guardian@galaxy.all"
|
||||
end
|
||||
@@ -40,9 +50,14 @@ FactoryBot.define do
|
||||
minor true
|
||||
guardian_first_name "Jamie"
|
||||
guardian_last_name "Doe"
|
||||
guardian_address "100 Test Lane, New York, 10001"
|
||||
guardian_phone "123-555-1234"
|
||||
guardian_email "guardian@galaxy.all"
|
||||
guardian_address_street1 "St1"
|
||||
guardian_address_street2 "St2"
|
||||
guardian_address_city "City"
|
||||
guardian_address_state "State"
|
||||
guardian_address_zip "ZIP"
|
||||
guardian_address_country "Country"
|
||||
guardian_photo do
|
||||
path = Rails.root.join("spec", "fixtures", "files", "pratt.jpg")
|
||||
Rack::Test::UploadedFile.new(path, "image/jpeg")
|
||||
|
||||
@@ -8,6 +8,10 @@ FactoryBot.define do
|
||||
guardian_clause "Is the signer a minor?"
|
||||
fee "$0.00"
|
||||
|
||||
trait :archived do
|
||||
archived_at Time.zone.now
|
||||
end
|
||||
|
||||
factory :appearance_release_contract_template do
|
||||
release_type "appearance"
|
||||
end
|
||||
@@ -24,6 +28,10 @@ FactoryBot.define do
|
||||
release_type "material"
|
||||
end
|
||||
|
||||
factory :misc_release_contract_template do
|
||||
release_type "misc"
|
||||
end
|
||||
|
||||
factory :location_release_contract_template do
|
||||
release_type "location"
|
||||
end
|
||||
|
||||
47
spec/factories/misc_releases.rb
Normal file
47
spec/factories/misc_releases.rb
Normal file
@@ -0,0 +1,47 @@
|
||||
FactoryBot.define do
|
||||
factory :misc_release do
|
||||
association :project
|
||||
|
||||
person_first_name "Jane"
|
||||
person_last_name "Doe"
|
||||
|
||||
photos [Rack::Test::UploadedFile.new(Rails.root.join("spec", "fixtures", "files", "person_photo.png"), "image/png")]
|
||||
|
||||
trait :native do
|
||||
person_phone "123-555-6789"
|
||||
|
||||
signature do
|
||||
path = Rails.root.join("spec", "fixtures", "files", "signature.png")
|
||||
Rack::Test::UploadedFile.new(path, "image/png")
|
||||
end
|
||||
end
|
||||
|
||||
trait :minor do
|
||||
minor true
|
||||
guardian_first_name "Jamie"
|
||||
guardian_last_name "Doe"
|
||||
guardian_phone "123-555-1234"
|
||||
end
|
||||
|
||||
factory :misc_release_with_contract_template do
|
||||
after(:build) do |misc_release, _|
|
||||
misc_release.contract_template = build(:misc_release_contract_template)
|
||||
end
|
||||
end
|
||||
|
||||
factory :misc_release_with_contract_template_and_photos do
|
||||
after(:build) do |misc_release, _|
|
||||
misc_release.contract_template = build(:misc_release_contract_template)
|
||||
path = Rails.root.join("spec", "fixtures", "files", "person_photo.png")
|
||||
misc_release.photos.attach Rack::Test::UploadedFile.new(path, "image/png")
|
||||
end
|
||||
end
|
||||
|
||||
factory :misc_release_with_photo do
|
||||
after(:build) do |misc_release, _|
|
||||
path = Rails.root.join("spec", "fixtures", "files", "person_photo.png")
|
||||
misc_release.photos.attach Rack::Test::UploadedFile.new(path, "image/png")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -5,6 +5,7 @@ require 'rails_helper'
|
||||
RSpec.feature 'User manages contract templates', type: :feature do
|
||||
let(:current_user) { create(:user, :manager) }
|
||||
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
||||
let(:project2) { create(:project, members: current_user, account: current_user.primary_account, name: 'New project') }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
@@ -191,6 +192,21 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
expect(page).not_to have_content('Test template')
|
||||
end
|
||||
|
||||
scenario 'archived contract templates from other projects are not shown when importing contract templates' do
|
||||
create(:contract_template, :archived, project: project2, name: 'Archived template')
|
||||
create(:contract_template, project: project2, name: 'Active template')
|
||||
create(:contract_template, project: project)
|
||||
|
||||
visit project_contract_templates_path(project)
|
||||
expect(page).to have_content('Test template')
|
||||
|
||||
click_on import_template_button
|
||||
|
||||
expect(page).not_to have_content('Test template')
|
||||
expect(page).not_to have_content('Archived template')
|
||||
expect(page).to have_content('Active template')
|
||||
end
|
||||
|
||||
context 'When the user is associate' do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
@@ -198,7 +214,7 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
visit project_contract_templates_path(project)
|
||||
|
||||
expect(page).not_to have_content('Create New Release Template')
|
||||
expect(page).not_to have_content('Import Release Template')
|
||||
expect(page).not_to have_content(import_template_button)
|
||||
expect(page).not_to have_content('Delete')
|
||||
end
|
||||
end
|
||||
@@ -218,6 +234,14 @@ RSpec.feature 'User manages contract templates', type: :feature do
|
||||
|
||||
private
|
||||
|
||||
def import_template_button
|
||||
t 'contract_templates.index.actions.import'
|
||||
end
|
||||
|
||||
def import_selected_templates_button
|
||||
t 'release_template_imports.new.actions.import'
|
||||
end
|
||||
|
||||
def preview_heading
|
||||
t 'blank_contracts.new.preview_heading'
|
||||
end
|
||||
|
||||
@@ -19,7 +19,7 @@ feature 'User managing appearance releases' do
|
||||
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
fill_in person_address_field, with: '123 Test Lane, New York, NY 10000'
|
||||
fill_in_person_address_fields
|
||||
fill_in person_phone_field, with: '555-555-5555'
|
||||
fill_in person_email_field, with: 'jane.doe@test.com'
|
||||
fill_in person_date_of_birth, with: '01/01/1999'
|
||||
@@ -52,7 +52,7 @@ feature 'User managing appearance releases' do
|
||||
fill_in guardian_phone_field, with: '001101'
|
||||
fill_in person_first_name_field, with: 'Jane'
|
||||
fill_in person_last_name_field, with: 'Doe'
|
||||
fill_in person_address_field, with: '123 Test Lane, New York, NY 10000'
|
||||
fill_in_person_address_fields
|
||||
fill_in person_phone_field, with: '555-555-5555'
|
||||
fill_in person_email_field, with: 'jane.doe@test.com'
|
||||
fill_in person_date_of_birth, with: '01/01/1999'
|
||||
@@ -65,6 +65,8 @@ feature 'User managing appearance releases' do
|
||||
expect(page).to have_content('Guardian email is not an email')
|
||||
|
||||
fill_in guardian_email_field, with: 'valid@email.com'
|
||||
fill_in_guardian_address_fields
|
||||
attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
|
||||
draw_signature file_fixture('signature.png'), 'appearance_release_signature_base64'
|
||||
click_button submit_release_button
|
||||
|
||||
@@ -468,6 +470,22 @@ feature 'User managing appearance releases' do
|
||||
'Guardian email'
|
||||
end
|
||||
|
||||
def guardian_address_street1_field
|
||||
t('helpers.label.appearance_release.guardian_address_street1')
|
||||
end
|
||||
|
||||
def guardian_address_city_field
|
||||
t('helpers.label.appearance_release.guardian_address_city')
|
||||
end
|
||||
|
||||
def guardian_address_state_field
|
||||
t('helpers.label.appearance_release.guardian_address_state')
|
||||
end
|
||||
|
||||
def guardian_address_zip_field
|
||||
t('helpers.label.appearance_release.guardian_address_zip')
|
||||
end
|
||||
|
||||
def guardian_photo_field
|
||||
'appearance_release[guardian_photo]'
|
||||
end
|
||||
@@ -484,8 +502,34 @@ feature 'User managing appearance releases' do
|
||||
t('helpers.label.appearance_release.person_last_name')
|
||||
end
|
||||
|
||||
def person_address_field
|
||||
t('helpers.label.appearance_release.person_address')
|
||||
def fill_in_person_address_fields
|
||||
fill_in person_address_street1_field, with: "123 Test Lane"
|
||||
fill_in person_address_city_field, with: "New York"
|
||||
fill_in person_address_state_field, with: "NY"
|
||||
fill_in person_address_zip_field, with: '1000'
|
||||
end
|
||||
|
||||
def fill_in_guardian_address_fields
|
||||
fill_in guardian_address_street1_field, with: "124 Test Lane"
|
||||
fill_in guardian_address_city_field, with: "New York"
|
||||
fill_in guardian_address_state_field, with: "NY"
|
||||
fill_in guardian_address_zip_field, with: '1000'
|
||||
end
|
||||
|
||||
def person_address_street1_field
|
||||
t('helpers.label.appearance_release.person_address_street1')
|
||||
end
|
||||
|
||||
def person_address_city_field
|
||||
t('helpers.label.appearance_release.person_address_city')
|
||||
end
|
||||
|
||||
def person_address_state_field
|
||||
t('helpers.label.appearance_release.person_address_state')
|
||||
end
|
||||
|
||||
def person_address_zip_field
|
||||
t('helpers.label.appearance_release.person_address_zip')
|
||||
end
|
||||
|
||||
def person_email_field
|
||||
|
||||
@@ -40,12 +40,12 @@ feature "User managing broadcasts" do
|
||||
scenario "visit show page of broadcast", js: true do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
recording = create(:broadcast_recording, broadcast: broadcast)
|
||||
|
||||
|
||||
visit project_broadcast_path(project, broadcast)
|
||||
|
||||
expect(page).to have_content("Live stream is waiting to begin.")
|
||||
expect(page).to have_content("Copy URL")
|
||||
|
||||
|
||||
within "#files" do
|
||||
expect(page).to have_content("contract.pdf")
|
||||
end
|
||||
@@ -54,6 +54,17 @@ feature "User managing broadcasts" do
|
||||
expect(page).to have_content(recording.download_file_name)
|
||||
end
|
||||
|
||||
scenario "form will not submit if user clicks Add files without selected files", js: true do
|
||||
broadcast = create(:broadcast, :with_stream, :with_files, project: project)
|
||||
|
||||
visit project_broadcast_path(project, broadcast)
|
||||
|
||||
expect(page).to have_content("Live stream is waiting to begin.")
|
||||
expect(page).to have_content add_file_button
|
||||
|
||||
click_on add_file_button
|
||||
end
|
||||
|
||||
scenario "visit multi-view broadcast page", js: true do
|
||||
broadcast_one = create(:broadcast, :with_stream, :with_files, name: "Broadcast 1", project: project)
|
||||
broadcast_two = create(:broadcast, :with_stream, :with_files, name: "Broadcast 2", project: project)
|
||||
@@ -80,8 +91,13 @@ feature "User managing broadcasts" do
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def add_file_button
|
||||
'Add File'
|
||||
end
|
||||
|
||||
def broadcast_name_field
|
||||
"broadcast[name]"
|
||||
end
|
||||
|
||||
145
spec/features/user_managing_medical_releases_spec.rb
Normal file
145
spec/features/user_managing_medical_releases_spec.rb
Normal file
@@ -0,0 +1,145 @@
|
||||
require "rails_helper"
|
||||
|
||||
feature "User managing medical releases" do
|
||||
let(:current_user) { create(:user) }
|
||||
let(:project) { create(:project, members: current_user, account: current_user.primary_account) }
|
||||
|
||||
context "when signed in as account manager" do
|
||||
before do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
scenario "Download All is visible" do
|
||||
create(:medical_release_with_contract_template, :native, project: project)
|
||||
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
expect(page).to have_content download_all_button
|
||||
end
|
||||
|
||||
scenario "Download action in Manage menu is visible" do
|
||||
create(:medical_release_with_contract_template, :native, project: project)
|
||||
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
expect(page).to have_link("Download", exact: true, count: 2)
|
||||
end
|
||||
|
||||
scenario "Downloading PDF of native medical release is possible" do
|
||||
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
click_link *view_release_pdf_link_for(native_release)
|
||||
expect(content_type).to eq('application/pdf')
|
||||
end
|
||||
end
|
||||
|
||||
context "when the user is manager(project manager)" do
|
||||
let(:current_user) { create(:user, :manager) }
|
||||
|
||||
before do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
scenario "Download All is not visible" do
|
||||
create(:medical_release_with_contract_template, :native, project: project)
|
||||
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
expect(page).not_to have_content download_all_button
|
||||
end
|
||||
|
||||
scenario "Download action in Manage menu is not visible" do
|
||||
create(:medical_release_with_contract_template, :native, project: project)
|
||||
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
expect(page).to have_link("Download", exact: true, count: 0)
|
||||
end
|
||||
|
||||
scenario "Downloading PDF of native medical release is not possible" do
|
||||
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
link = medical_release_contracts_path(native_release, format: 'pdf')
|
||||
expect { visit link }.to raise_exception Pundit::NotAuthorizedError
|
||||
end
|
||||
|
||||
scenario "Downloading PDF of non native medical release is not possible" do
|
||||
non_native_release = create(:medical_release_with_contract_template, :non_native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
link = medical_release_contracts_path(non_native_release, format: 'pdf')
|
||||
expect { visit link }.to raise_exception Pundit::NotAuthorizedError
|
||||
end
|
||||
end
|
||||
|
||||
context "when the user is associate" do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
before do
|
||||
sign_in current_user
|
||||
end
|
||||
|
||||
scenario "Download All is not visible" do
|
||||
create(:medical_release_with_contract_template, :native, project: project)
|
||||
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
expect(page).not_to have_content download_all_button
|
||||
end
|
||||
|
||||
scenario "Download action in Manage menu is not visible" do
|
||||
create(:medical_release_with_contract_template, :native, project: project)
|
||||
create(:medical_release_with_contract_template, :non_native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
expect(page).to have_link("Download", exact: true, count: 0)
|
||||
end
|
||||
|
||||
scenario "Downloading PDF of native medical release is not possible" do
|
||||
native_release = create(:medical_release_with_contract_template, :native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
link = medical_release_contracts_path(native_release, format: 'pdf')
|
||||
expect { visit link }.to raise_exception Pundit::NotAuthorizedError
|
||||
end
|
||||
|
||||
scenario "Downloading PDF of non native medical release is not possible" do
|
||||
non_native_release = create(:medical_release_with_contract_template, :non_native, project: project)
|
||||
|
||||
visit project_medical_releases_path(project)
|
||||
|
||||
link = medical_release_contracts_path(non_native_release, format: 'pdf')
|
||||
expect { visit link }.to raise_exception Pundit::NotAuthorizedError
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def download_all_button
|
||||
'Download All'
|
||||
end
|
||||
|
||||
def download_action
|
||||
'Download'
|
||||
end
|
||||
|
||||
def manage_button
|
||||
t 'medical_releases.medical_release.actions.manage'
|
||||
end
|
||||
|
||||
def view_release_pdf_link_for(release)
|
||||
['Download', href: medical_release_contracts_path(release, format: 'pdf')]
|
||||
end
|
||||
end
|
||||
@@ -5,6 +5,7 @@ RSpec.describe ZoomGateway do
|
||||
let(:host_user_hash) { {"email" => "user1@directme", "id" => "host_user_id"} }
|
||||
let(:roles_members_response) { {"members" => [host_user_hash]} }
|
||||
let(:user_create_response) { {"id" => "new_host_id"} }
|
||||
let(:user_settings_update_response) { "User settings updated" }
|
||||
let(:roles_assign_response) { {"ids" => ["new_host_id"]} }
|
||||
let(:meeting_hash) { {"id" => "meeting_id", "start_url" => "https://start_url", "join_url" => "https://join_url"} }
|
||||
let(:gateway) { ZoomGateway.new }
|
||||
@@ -121,7 +122,9 @@ RSpec.describe ZoomGateway do
|
||||
it "returns new host id" do
|
||||
allow_any_instance_of(Zoom.new.class).to receive(:user_create).and_return(user_create_response)
|
||||
allow_any_instance_of(Zoom.new.class).to receive(:roles_assign).and_return(roles_assign_response)
|
||||
allow_any_instance_of(Zoom.new.class).to receive(:user_settings_update).and_return(user_settings_update_response)
|
||||
|
||||
expect_any_instance_of(Zoom.new.class).to receive(:user_settings_update)
|
||||
expect(gateway.create_host("host-email@address")).to eq("new_host_id")
|
||||
end
|
||||
|
||||
|
||||
60
spec/lib/zoom_wrapper_monkeypatch_spec.rb
Normal file
60
spec/lib/zoom_wrapper_monkeypatch_spec.rb
Normal file
@@ -0,0 +1,60 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Zoom::Actions::User do
|
||||
let(:wrapper) { Zoom.new }
|
||||
|
||||
describe '.update_user_settings' do
|
||||
it 'raises exception if id param is missing' do
|
||||
params = {
|
||||
in_meeting: {
|
||||
not_allowed_param: 1
|
||||
}
|
||||
}
|
||||
|
||||
expect do
|
||||
wrapper.user_settings_update(params)
|
||||
end.to raise_exception(Zoom::ParameterMissing)
|
||||
end
|
||||
|
||||
it 'raises exception if not allowed param is present' do
|
||||
params = {
|
||||
id: 'dw3-3sd33',
|
||||
in_meeting: {
|
||||
not_allowed_param: 1
|
||||
}
|
||||
}
|
||||
|
||||
expect do
|
||||
wrapper.user_settings_update(params)
|
||||
end.to raise_exception(Zoom::ParameterNotPermitted)
|
||||
end
|
||||
|
||||
it 'sends PATCH request to the Zoom API endpoint' do
|
||||
params = {
|
||||
id: 'zoom-120-id',
|
||||
in_meeting: {
|
||||
auto_saving_chat: true,
|
||||
co_host: true,
|
||||
non_verbal_feedback: true,
|
||||
breakout_room: true,
|
||||
group_hd: true,
|
||||
far_end_camera_control: true,
|
||||
allow_live_streaming: true
|
||||
}
|
||||
}
|
||||
|
||||
allow(Zoom::Utils).to receive(:parse_response).and_return 'Success!'
|
||||
|
||||
path = "/users/#{params[:id]}/settings"
|
||||
body_params = { body: params.except(:id).to_json }
|
||||
allow(wrapper.class)
|
||||
.to receive(:patch)
|
||||
.with(path, hash_including(body_params))
|
||||
.and_return({})
|
||||
|
||||
mock_response = wrapper.user_settings_update params
|
||||
expect(mock_response).to eq 'Success!'
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -132,6 +132,7 @@ RSpec.describe Account do
|
||||
Account,
|
||||
ZoomMeeting,
|
||||
MedicalRelease,
|
||||
MiscRelease,
|
||||
MatchingRequest
|
||||
]
|
||||
Rails.application.eager_load!
|
||||
|
||||
@@ -50,11 +50,19 @@ describe ContractTemplatePreview do
|
||||
'id' => nil,
|
||||
'person_first_name' => 'Dummy',
|
||||
'person_last_name' => 'Person',
|
||||
'person_address' => 'Street 1, Street 2, City, State 12345, Country',
|
||||
'person_address_street1' => 'Street 1',
|
||||
'person_address_street2' => 'Street 2',
|
||||
'person_address_city' => 'City',
|
||||
'person_address_state' => 'State',
|
||||
'person_address_zip' => '12345',
|
||||
'person_phone' => '00 111 222 333 4444',
|
||||
'updated_at' => nil,
|
||||
'minor' => true,
|
||||
'guardian_address' => 'Street 3, Street 4, City-2, State-2 112233, Country-2',
|
||||
'guardian_address_street1' => 'Street 3',
|
||||
'guardian_address_street2' => 'Street 4',
|
||||
'guardian_address_city' => 'City-2',
|
||||
'guardian_address_state' => 'State-2',
|
||||
'guardian_address_zip' => '112233',
|
||||
"guardian_first_name" => nil,
|
||||
"guardian_last_name" => nil,
|
||||
"guardian_name_old" => nil,
|
||||
|
||||
@@ -14,6 +14,7 @@ describe ContractTemplate do
|
||||
it { is_expected.to have_many(:location_releases).dependent(:restrict_with_error) }
|
||||
it { is_expected.to have_many(:material_releases).dependent(:restrict_with_error) }
|
||||
it { is_expected.to have_many(:medical_releases).dependent(:restrict_with_error) }
|
||||
it { is_expected.to have_many(:misc_releases).dependent(:restrict_with_error) }
|
||||
end
|
||||
|
||||
describe 'validations' do
|
||||
|
||||
@@ -29,7 +29,7 @@ module ExcelReports
|
||||
restriction: Restriction.last,
|
||||
person_first_name: "John",
|
||||
person_last_name: "Doe",
|
||||
person_address: "123 Main Street, New York, NY 10000")
|
||||
person_address_street1: "123 Main Street, New York, NY 10000")
|
||||
)
|
||||
)
|
||||
allow(sheet).to receive(:add_row)
|
||||
|
||||
53
spec/models/misc_release_spec.rb
Normal file
53
spec/models/misc_release_spec.rb
Normal file
@@ -0,0 +1,53 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe MiscRelease, type: :model do
|
||||
it_behaves_like "a contractable"
|
||||
it_behaves_like "a notable"
|
||||
it_behaves_like "a photoable"
|
||||
it_behaves_like "a releasable"
|
||||
|
||||
describe "validations" do
|
||||
it { is_expected.to validate_presence_of(:person_first_name) }
|
||||
it { is_expected.to validate_presence_of(:person_last_name) }
|
||||
|
||||
context "for #person_email" do
|
||||
it { is_expected.to allow_value("test@test.com", nil).for(:person_email) }
|
||||
it { is_expected.not_to allow_values("foo", "test@foo", "N/A").for(:person_email) }
|
||||
end
|
||||
|
||||
context "for native releases" do
|
||||
it { is_expected.to validate_attachment_of(:signature).on(:native) }
|
||||
end
|
||||
|
||||
context "for non-native releases" do
|
||||
it { is_expected.to validate_attachment_of(:contract).on(:non_native) }
|
||||
end
|
||||
end
|
||||
|
||||
describe "attachments" do
|
||||
it { is_expected.to respond_to(:signature) }
|
||||
end
|
||||
|
||||
describe "#uses_edl?" do
|
||||
it { is_expected.not_to be_uses_edl }
|
||||
end
|
||||
|
||||
describe "#contract_file_name" do
|
||||
it "includes project name, signed at date, release type, release number and person name" do
|
||||
release = create(:misc_release_with_contract_template, id: 100, signed_at: Date.new(2020, 2, 10), person_first_name: "John", person_last_name: "Doe")
|
||||
|
||||
expect(release.contract_file_name).to eq("my-video-project_misc_2020.02.10_1_doe-john")
|
||||
end
|
||||
|
||||
context "when signed at is nil" do
|
||||
it "uses the created at date" do
|
||||
release = create(:misc_release_with_contract_template,
|
||||
signed_at: nil,
|
||||
created_at: DateTime.new(2020, 2, 10, 12, 0, 0),
|
||||
person_first_name: "John", person_last_name: "Doe")
|
||||
|
||||
expect(release.contract_file_name).to eq("my-video-project_misc_2020.02.10_1_doe-john")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -10,6 +10,7 @@ RSpec.describe Project, type: :model do
|
||||
it { is_expected.to have_many(:music_releases).dependent(:destroy) }
|
||||
it { is_expected.to have_many(:talent_releases).dependent(:destroy) }
|
||||
it { is_expected.to have_many(:medical_releases).dependent(:destroy) }
|
||||
it { is_expected.to have_many(:misc_releases).dependent(:destroy) }
|
||||
it { is_expected.to have_many(:videos).dependent(:destroy) }
|
||||
it { is_expected.to have_many(:contract_templates).dependent(:destroy) }
|
||||
it { is_expected.to have_many(:project_memberships).dependent(:destroy) }
|
||||
|
||||
Reference in New Issue
Block a user