<%= form.text_field :name, required: true, wrapper_class: "col-12" %>
@@ -49,6 +60,91 @@
+ <% end %>
+
<%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form, signature_legal_text: @contract_template.signature_legal_text %>
<% end %>
diff --git a/app/views/public/material_releases/new.html.erb b/app/views/public/material_releases/new.html.erb
index 6e756e4..cb650f8 100644
--- a/app/views/public/material_releases/new.html.erb
+++ b/app/views/public/material_releases/new.html.erb
@@ -13,6 +13,17 @@
+ <% unless @contract_template.guardian_clause.blank? %>
+ <%= form.form_group :minor do %>
+ <%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { behavior: "update-required-status", target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %>
+ <% end %>
+
+ <%= card_field_set_tag t(".guardian_clause.heading") do %>
+
+ <% end %>
+
<%= card_field_set_tag t(".release_info.heading") do %>
<%= form.text_field :name, required: true, wrapper_class: "col-12" %>
@@ -40,6 +51,91 @@
+ <% unless @contract_template.guardian_clause.blank? %>
+
!@material_release.minor?) %>" data-ujs-target="guardian-fields">
+ <%= card_field_set_tag t(".guardian_info.heading") do %>
+
+ <%= form.text_field :guardian_first_name, required: @material_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
+ <%= form.text_field :guardian_last_name, required: @material_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %>
+ <%= form.phone_field :guardian_phone, required: @material_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
+ <%= form.text_field :guardian_email, required: @material_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
+
+ <%= render "shared/address_fields", form: form, subject: "guardian", required: @material_release.minor?, data: { required_tag: "guardian" } %>
+ <% end %>
+
+
+
+ <%= card_field_set_tag t(".guardian_photo.heading") do %>
+
<%= t ".guardian_photo.instructions" %>
+
+
+
+ <%= t ".photo.no_photo" %>
+
+
+
+ <% if @material_release.guardian_photo.attached? %>
+ <%= javascript_tag nonce: true do %>
+ App.PhotoPreview.set("[data-behavior=guardian-photo-preview]", "<%= url_for(@material_release.guardian_photo.variant(auto_orient: true, resize: '200x200')) %>");
+ <% end %>
+ <% end %>
+
+ <%= form.hidden_field :guardian_photo, value: form.object.guardian_photo.signed_id if @material_release.guardian_photo.attached? %>
+ <%= form.file_field :guardian_photo, required: @material_release.minor?, hide_label: true, data: { ujs_target: "guardian-photo-input" }, accept: @material_release.class.face_photo_acceptable_content_types.join(","), direct_upload: true %>
+
+ <%= button_tag t(".photo.take_photo"), type: "button", class: "btn btn-lg btn-primary take-photo-button", data: { behavior: "trigger-click", target: "[data-ujs-target=guardian-photo-input]" } %>
+
+
+ <%= t ".photo.warning" %>
+
+
+ <% end %>
+
+
+
+ <%= card_field_set_tag t(".guardian_2_info.heading") do %>
+
+ <%= form.text_field :guardian_2_first_name, wrapper_class: "col-sm-3" %>
+ <%= form.text_field :guardian_2_last_name, wrapper_class: "col-sm-3" %>
+ <%= form.phone_field :guardian_2_phone, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :guardian_2_email, wrapper_class: "col-sm-6" %>
+
+ <%= render "shared/address_fields", form: form, subject: "guardian_2" %>
+ <% end %>
+
+
+
+ <%= card_field_set_tag t(".guardian_2_photo.heading") do %>
+
<%= t ".guardian_2_photo.instructions" %>
+
+
+
+ <%= t ".photo.no_photo" %>
+
+
+
+ <% if @material_release.guardian_2_photo.attached? %>
+ <%= javascript_tag nonce: true do %>
+ App.PhotoPreview.set("[data-behavior=guardian-photo-preview]", "<%= url_for(@material_release.guardian_2_photo.variant(auto_orient: true, resize: '200x200')) %>");
+ <% end %>
+ <% end %>
+
+ <%= form.hidden_field :guardian_2_photo, value: form.object.guardian_2_photo.signed_id if @material_release.guardian_2_photo.attached? %>
+ <%= form.file_field :guardian_2_photo, hide_label: true, data: { ujs_target: "guardian-2-photo-input" }, accept: @material_release.class.face_photo_acceptable_content_types.join(","), direct_upload: true %>
+
+ <%= button_tag t(".photo.take_photo"), type: "button", class: "btn btn-lg btn-primary take-photo-button", data: { behavior: "trigger-click", target: "[data-ujs-target=guardian-2-photo-input]" } %>
+
+
+ <%= t ".photo.warning" %>
+
+
+ <% end %>
+
+
+
+
+ <% end %>
+
<%= card_field_set_tag t(".signature.heading") do %>
<%= render "shared/signature_fields", form: form, instruction: 'For Owner or Authorized Signatory', signature_legal_text: @contract_template.signature_legal_text %>
<% end %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 7363cdd..f4dc09b 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -46,6 +46,15 @@ en:
heading: 3 of 3 Contract & Exploitable Rights
files:
heading: 2 of 3 Files
+ guardian_2_info:
+ heading: Second Guardian Information (if company requires)
+ guardian_info:
+ heading: Guardian Information
+ photos:
+ guardian_2_photo:
+ heading: Second Guardian Photo
+ guardian_photo:
+ heading: Guardian Photo
index:
actions:
new: Import Release
@@ -436,6 +445,27 @@ en:
label:
acquired_media_release:
description: Description of property
+ guardian_2_address_city: Guardian 2 city
+ guardian_2_address_country: Guardian 2 country
+ guardian_2_address_state: Guardian 2 state
+ guardian_2_address_street1: Guardian 2 address
+ guardian_2_address_street2: Guardian 2 address (Line 2)
+ guardian_2_address_zip: Guardian 2 zip code
+ guardian_2_email: Guardian 2 email
+ guardian_2_first_name: Guardian 2 first name
+ guardian_2_last_name: Guardian 2 last name
+ guardian_2_phone: Guardian 2 phone
+ guardian_address_city: Guardian city
+ guardian_address_country: Guardian country
+ guardian_address_state: Guardian state
+ guardian_address_street1: Guardian address
+ guardian_address_street2: Guardian address (Line 2)
+ guardian_address_zip: Guardian zip code
+ guardian_email: Guardian email
+ guardian_first_name: Guardian first name
+ guardian_last_name: Guardian last name
+ guardian_phone: Guardian phone
+ minor: Is the person a minor?
name: Name of property
person_address: Address
person_address_city: City
@@ -501,6 +531,27 @@ en:
person_last_name: Owner last name
material_release:
description: Description of licensed material
+ guardian_2_address_city: Guardian 2 city
+ guardian_2_address_country: Guardian 2 country
+ guardian_2_address_state: Guardian 2 state
+ guardian_2_address_street1: Guardian 2 address
+ guardian_2_address_street2: Guardian 2 address (Line 2)
+ guardian_2_address_zip: Guardian 2 zip code
+ guardian_2_email: Guardian 2 email
+ guardian_2_first_name: Guardian 2 first name
+ guardian_2_last_name: Guardian 2 last name
+ guardian_2_phone: Guardian 2 phone
+ guardian_address_city: Guardian city
+ guardian_address_country: Guardian country
+ guardian_address_state: Guardian state
+ guardian_address_street1: Guardian address
+ guardian_address_street2: Guardian address (Line 2)
+ guardian_address_zip: Guardian zip code
+ guardian_email: Guardian email
+ guardian_first_name: Guardian first name
+ guardian_last_name: Guardian last name
+ guardian_phone: Guardian phone
+ minor: Is the person a minor?
name: Name of licensed material
person_address: Address
person_address_city: City
@@ -721,6 +772,8 @@ en:
acquired_media_release:
create: Import Release
update: Save Changes
+ acquired_media_releases:
+ create: Import Release
appearance_release:
create: Import Release
update: Save Changes
@@ -789,6 +842,7 @@ en:
empty: Location Releases will appear here
table_headers:
address: Address
+ amendment_signed: Amendment
approved: Approved
name: Location Name
notes: Notes
@@ -818,10 +872,18 @@ en:
form:
contract_and_rights:
heading: 3 of 4 Contract & Exploitable Rights
+ guardian_2_info:
+ heading: Second Guardian Information (if company requires)
+ guardian_info:
+ heading: Guardian Information
material_details:
heading: 1 of 3 Material Details
photos:
dropzone_label: Tap to take a photo of Licensed Material (optional)
+ guardian_2_photo:
+ heading: Second Guardian Photo
+ guardian_photo:
+ heading: Guardian Photo
heading: 4 of 4 Photos
signer_details:
heading: 2 of 4 Licensor/Owner Details
@@ -1042,10 +1104,28 @@ en:
cancel: Cancel
files:
heading: File Information
+ guardian_2_info:
+ heading: Second Guardian Information (if company requires)
+ guardian_2_photo:
+ heading: Second Guardian Photo
+ instructions: >
+ Lastly, it's time for second guardian to take a selfie photo! Please remove your hat and sunglasses (regular eyewear is ok), make sure that you are the only person in the photo, look straight into the camera, and say Cheese!
+ guardian_clause:
+ heading: Guardian Clause
+ guardian_info:
+ heading: Guardian Information
+ guardian_photo:
+ heading: Guardian Photo
+ instructions: >
+ Lastly, it's time for guardian to take a selfie photo! Please remove your hat and sunglasses (regular eyewear is ok), make sure that you are the only person in the photo, look straight into the camera, and say Cheese!
legal:
heading: Legal
personal_info:
heading: Licensor/Owner Contact Information
+ photo:
+ no_photo: No photo yet
+ take_photo: Take Photo
+ warning: If your photo appears sideways, it will be autocorrected when you submit your release.
signature:
heading: Signature
amendments:
@@ -1131,10 +1211,27 @@ en:
cancel: Cancel
contact_info:
heading: Licensor/Owner Contact Information
+ guardian_2_info:
+ heading: Second Guardian Information (if company requires)
+ guardian_2_photo:
+ heading: Second Guardian Photo
+ instructions: >
+ Lastly, it's time for second guardian to take a selfie photo! Please remove your hat and sunglasses (regular eyewear is ok), make sure that you are the only person in the photo, look straight into the camera, and say Cheese!
+ guardian_clause:
+ heading: Guardian Clause
+ guardian_info:
+ heading: Guardian Information
+ guardian_photo:
+ heading: Guardian Photo
+ instructions: >
+ Lastly, it's time for guardian to take a selfie photo! Please remove your hat and sunglasses (regular eyewear is ok), make sure that you are the only person in the photo, look straight into the camera, and say Cheese!
legal:
heading: Legal
photo:
heading: Photos
+ no_photo: No photo yet
+ take_photo: Take Photo
+ warning: If your photo appears sideways, it will be autocorrected when you submit your release.
release_info:
heading: Release Information
signature:
diff --git a/config/locales/es.yml b/config/locales/es.yml
index a4a4688..9e1f967 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -2,6 +2,18 @@ es:
acquired_media_releases:
acquired_media_release:
no_media: No Media (ES)
+ create:
+ notice: The acquired media release has been created (ES)
+ form:
+ guardian_2_info:
+ heading: Guardian Information (if company requires) [ES]
+ guardian_info:
+ heading: Guardian Information (ES)
+ photos:
+ guardian_2_photo:
+ heading: Second Guardian Photo
+ guardian_photo:
+ heading: Guardian Photo
index:
table_headers:
file_infos_count: No. Files (ES)
@@ -222,6 +234,29 @@ 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:
+ acquired_media_release:
+ guardian_2_address_city: Guardian 2 city (ES)
+ guardian_2_address_country: Guardian 2 country (ES)
+ guardian_2_address_state: Guardian 2 state (ES)
+ guardian_2_address_street1: Guardian 2 address (ES)
+ guardian_2_address_street2: Guardian 2 address (Line 2) (ES)
+ guardian_2_address_zip: Guardian 2 zip code (ES)
+ guardian_2_email: Guardian 2 email (ES)
+ guardian_2_first_name: Guardian 2 first name (ES)
+ guardian_2_last_name: Guardian 2 last name (ES)
+ guardian_2_phone: Guardian 2 phone (ES)
+ 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_email: Guardian email (ES)
+ guardian_first_name: Guardian first name (ES)
+ guardian_last_name: Guardian last name (ES)
+ guardian_name: Nómbre del tutor legal
+ guardian_phone: Número de teléfono del tutor legal
+ minor: El firmante es un menor
appearance_release:
guardian_2_address_city: Guardian 2 city (ES)
guardian_2_address_country: Guardian 2 country (ES)
@@ -250,6 +285,29 @@ es:
person_email: Dirección de correo electrónico
person_name: Nómbre
person_phone: Número de teléfono
+ material_release:
+ guardian_2_address_city: Guardian 2 city (ES)
+ guardian_2_address_country: Guardian 2 country (ES)
+ guardian_2_address_state: Guardian 2 state (ES)
+ guardian_2_address_street1: Guardian 2 address (ES)
+ guardian_2_address_street2: Guardian 2 address (Line 2) (ES)
+ guardian_2_address_zip: Guardian 2 zip code (ES)
+ guardian_2_email: Guardian 2 email (ES)
+ guardian_2_first_name: Guardian 2 first name (ES)
+ guardian_2_last_name: Guardian 2 last name (ES)
+ guardian_2_phone: Guardian 2 phone (ES)
+ 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_email: Guardian email (ES)
+ guardian_first_name: Guardian first name (ES)
+ guardian_last_name: Guardian last name (ES)
+ guardian_name: Nómbre del tutor legal
+ guardian_phone: Número de teléfono del tutor legal
+ minor: El firmante es un menor
medical_release:
guardian_2_address_city: Guardian 2 city (ES)
guardian_2_address_country: Guardian 2 country (ES)
@@ -328,6 +386,8 @@ es:
person_name: Jane Doe
person_phone: 555-555-5555
submit:
+ acquired_media_releases:
+ create: Import Release (ES)
appearance_release:
create: Crear Autorización
broadcast:
@@ -336,6 +396,8 @@ es:
contract_template:
update: Save changes (ES)
create: 'Crear %{model}'
+ material_release:
+ create: Import Release (ES)
medical_release:
update: Approve (ES)
update: 'Actualizar %{model}'
@@ -346,6 +408,7 @@ es:
index:
table_headers:
address: Address (ES)
+ amendment_signed: Amendment (ES)
notes: Notes (ES)
signed_at: Date Signed (ES)
tags: Tags (ES)
@@ -356,9 +419,19 @@ es:
amendment_not_signed_tooltip: Amendment not yet signed (ES)
amendment_signed_tooltip: Amendment Signed (ES)
material_releases:
+ create:
+ notice: The acquired media release has been created (ES)
form:
+ guardian_2_info:
+ heading: Guardian Information (if company requires) [ES]
+ guardian_info:
+ heading: Guardian Information (ES)
photos:
dropzone_label: Tap to take a photo of Licensed Material (optional) (ES)
+ guardian_2_photo:
+ heading: Second Guardian Photo
+ guardian_photo:
+ heading: Guardian Photo
index:
table_headers:
name: Name (ES)
@@ -401,6 +474,26 @@ es:
signed_at: Date Signed (ES)
tags: Tags (ES)
public:
+ acquired_media_releases:
+ new:
+ guardian_2_info:
+ heading: Second Guardian Information (if company requires) [ES]
+ guardian_2_photo:
+ heading: Second Guardian Photo (ES)
+ instructions: >
+ (ES) Lastly, it's time for second guardian to take a selfie photo! Please remove your hat and sunglasses (regular eyewear is ok), make sure that you are the only person in the photo, look straight into the camera, and say Cheese! (ES)
+ guardian_clause:
+ heading: Guardian Clause (ES)
+ guardian_info:
+ heading: Guardian Information (ES)
+ guardian_photo:
+ heading: Guardian Photo (ES)
+ instructions: >
+ (ES) Lastly, it's time for guardian to take a selfie photo! Please remove your hat and sunglasses (regular eyewear is ok), make sure that you are the only person in the photo, look straight into the camera, and say Cheese! (ES)
+ photo:
+ no_photo: No photo yet (ES)
+ take_photo: Take Photo (ES)
+ warning: If your photo appears sideways, it will be autocorrected when you submit your release. (ES)
amendments:
create:
amendment_already_signed_message: Release amendment is already signed! (ES)
@@ -450,8 +543,25 @@ es:
heading: Photos (ES)
material_releases:
new:
+ guardian_2_info:
+ heading: Second Guardian Information (if company requires) [ES]
+ guardian_2_photo:
+ heading: Second Guardian Photo (ES)
+ instructions: >
+ (ES) Lastly, it's time for second guardian to take a selfie photo! Please remove your hat and sunglasses (regular eyewear is ok), make sure that you are the only person in the photo, look straight into the camera, and say Cheese! (ES)
+ guardian_clause:
+ heading: Guardian Clause (ES)
+ guardian_info:
+ heading: Guardian Information (ES)
+ guardian_photo:
+ heading: Guardian Photo (ES)
+ instructions: >
+ (ES) Lastly, it's time for guardian to take a selfie photo! Please remove your hat and sunglasses (regular eyewear is ok), make sure that you are the only person in the photo, look straight into the camera, and say Cheese! (ES)
photo:
heading: Photos (ES)
+ no_photo: No photo yet (ES)
+ take_photo: Take Photo (ES)
+ warning: If your photo appears sideways, it will be autocorrected when you submit your release. (ES)
medical_releases:
new:
guardian_2_info:
diff --git a/db/migrate/20200725231419_add_guardians_fields_to_acquired_media_releases.rb b/db/migrate/20200725231419_add_guardians_fields_to_acquired_media_releases.rb
new file mode 100644
index 0000000..9cf38e3
--- /dev/null
+++ b/db/migrate/20200725231419_add_guardians_fields_to_acquired_media_releases.rb
@@ -0,0 +1,25 @@
+class AddGuardiansFieldsToAcquiredMediaReleases < ActiveRecord::Migration[6.0]
+ def change
+ add_column :acquired_media_releases, :minor, :boolean, default: false
+ add_column :acquired_media_releases, :guardian_first_name, :string
+ add_column :acquired_media_releases, :guardian_last_name, :string
+ add_column :acquired_media_releases, :guardian_email, :string
+ add_column :acquired_media_releases, :guardian_phone, :string
+ add_column :acquired_media_releases, :guardian_address_street1, :string
+ add_column :acquired_media_releases, :guardian_address_street2, :string
+ add_column :acquired_media_releases, :guardian_address_city, :string
+ add_column :acquired_media_releases, :guardian_address_state, :string
+ add_column :acquired_media_releases, :guardian_address_zip, :string
+ add_column :acquired_media_releases, :guardian_address_country, :string
+ add_column :acquired_media_releases, :guardian_2_first_name, :string
+ add_column :acquired_media_releases, :guardian_2_last_name, :string
+ add_column :acquired_media_releases, :guardian_2_email, :string
+ add_column :acquired_media_releases, :guardian_2_phone, :string
+ add_column :acquired_media_releases, :guardian_2_address_street1, :string
+ add_column :acquired_media_releases, :guardian_2_address_street2, :string
+ add_column :acquired_media_releases, :guardian_2_address_city, :string
+ add_column :acquired_media_releases, :guardian_2_address_state, :string
+ add_column :acquired_media_releases, :guardian_2_address_zip, :string
+ add_column :acquired_media_releases, :guardian_2_address_country, :string
+ end
+end
\ No newline at end of file
diff --git a/db/migrate/20200727143209_add_guardians_fields_to_material_releases.rb b/db/migrate/20200727143209_add_guardians_fields_to_material_releases.rb
new file mode 100644
index 0000000..8a06faf
--- /dev/null
+++ b/db/migrate/20200727143209_add_guardians_fields_to_material_releases.rb
@@ -0,0 +1,25 @@
+class AddGuardiansFieldsToMaterialReleases < ActiveRecord::Migration[6.0]
+ def change
+ add_column :material_releases, :minor, :boolean, default: false
+ add_column :material_releases, :guardian_first_name, :string
+ add_column :material_releases, :guardian_last_name, :string
+ add_column :material_releases, :guardian_email, :string
+ add_column :material_releases, :guardian_phone, :string
+ add_column :material_releases, :guardian_address_street1, :string
+ add_column :material_releases, :guardian_address_street2, :string
+ add_column :material_releases, :guardian_address_city, :string
+ add_column :material_releases, :guardian_address_state, :string
+ add_column :material_releases, :guardian_address_zip, :string
+ add_column :material_releases, :guardian_address_country, :string
+ add_column :material_releases, :guardian_2_first_name, :string
+ add_column :material_releases, :guardian_2_last_name, :string
+ add_column :material_releases, :guardian_2_email, :string
+ add_column :material_releases, :guardian_2_phone, :string
+ add_column :material_releases, :guardian_2_address_street1, :string
+ add_column :material_releases, :guardian_2_address_street2, :string
+ add_column :material_releases, :guardian_2_address_city, :string
+ add_column :material_releases, :guardian_2_address_state, :string
+ add_column :material_releases, :guardian_2_address_zip, :string
+ add_column :material_releases, :guardian_2_address_country, :string
+ end
+end
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 76a20f1..7246f09 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -9,6 +9,20 @@ SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
+--
+-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -
+--
+
+CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
+
+
+--
+-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -
+--
+
+COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
+
+
--
-- Name: fuzzystrmatch; Type: EXTENSION; Schema: -; Owner: -
--
@@ -161,7 +175,28 @@ CREATE TABLE public.acquired_media_releases (
signed_at timestamp without time zone,
approved_by_user_name text,
approved_by_user_email text,
- approved_at timestamp without time zone
+ approved_at timestamp without time zone,
+ minor boolean DEFAULT false,
+ guardian_first_name character varying,
+ guardian_last_name character varying,
+ guardian_email character varying,
+ guardian_phone 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_2_first_name character varying,
+ guardian_2_last_name character varying,
+ guardian_2_email character varying,
+ guardian_2_phone character varying,
+ guardian_2_address_street1 character varying,
+ guardian_2_address_street2 character varying,
+ guardian_2_address_city character varying,
+ guardian_2_address_state character varying,
+ guardian_2_address_zip character varying,
+ guardian_2_address_country character varying
);
@@ -981,7 +1016,28 @@ CREATE TABLE public.material_releases (
person_last_name character varying,
approved_by_user_name text,
approved_by_user_email text,
- approved_at timestamp without time zone
+ approved_at timestamp without time zone,
+ minor boolean DEFAULT false,
+ guardian_first_name character varying,
+ guardian_last_name character varying,
+ guardian_email character varying,
+ guardian_phone 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_2_first_name character varying,
+ guardian_2_last_name character varying,
+ guardian_2_email character varying,
+ guardian_2_phone character varying,
+ guardian_2_address_street1 character varying,
+ guardian_2_address_street2 character varying,
+ guardian_2_address_city character varying,
+ guardian_2_address_state character varying,
+ guardian_2_address_zip character varying,
+ guardian_2_address_country character varying
);
@@ -1419,7 +1475,6 @@ CREATE TABLE public.settings (
--
CREATE SEQUENCE public.settings_id_seq
- AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
@@ -1455,7 +1510,6 @@ CREATE TABLE public.taggings (
--
CREATE SEQUENCE public.taggings_id_seq
- AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
@@ -1486,7 +1540,6 @@ CREATE TABLE public.tags (
--
CREATE SEQUENCE public.tags_id_seq
- AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
@@ -3944,6 +3997,8 @@ INSERT INTO "schema_migrations" (version) VALUES
('20200716105723'),
('20200720051634'),
('20200720131309'),
-('20200721140821');
+('20200721140821'),
+('20200725231419'),
+('20200727143209');
diff --git a/spec/controllers/api/sync_controller_spec.rb b/spec/controllers/api/sync_controller_spec.rb
index f34878a..c070b6e 100644
--- a/spec/controllers/api/sync_controller_spec.rb
+++ b/spec/controllers/api/sync_controller_spec.rb
@@ -94,7 +94,7 @@ RSpec.describe Api::SyncController, type: :controller do
expect(appearance_releases.first).to include('guardian_photo')
expect(talent_releases.first).to include('guardian_photo')
expect(location_releases.first).not_to include('guardian_photo')
- expect(material_releases.first).not_to include('guardian_photo')
+ expect(material_releases.first).to include('guardian_photo')
end
it 'guardian photo has same format as other photos' do
diff --git a/spec/factories/acquired_media_releases.rb b/spec/factories/acquired_media_releases.rb
index 699d7ac..952f049 100644
--- a/spec/factories/acquired_media_releases.rb
+++ b/spec/factories/acquired_media_releases.rb
@@ -18,6 +18,16 @@ FactoryBot.define do
end
end
+ trait :minor do
+ minor true
+ guardian_first_name "Guardian1"
+ guardian_last_name "First"
+ guardian_2_first_name "Guardian2"
+ guardian_2_last_name "Second"
+ guardian_phone "1111"
+ guardian_2_phone "2222"
+ end
+
factory :acquired_media_release_with_contract_template do
after(:build) do |acquired_media_release, _|
acquired_media_release.contract_template = build(:acquired_media_release_contract_template)
diff --git a/spec/factories/material_releases.rb b/spec/factories/material_releases.rb
index d4ac6d5..164979f 100644
--- a/spec/factories/material_releases.rb
+++ b/spec/factories/material_releases.rb
@@ -15,6 +15,16 @@ FactoryBot.define do
end
end
+ trait :minor do
+ minor true
+ guardian_first_name "Guardian1"
+ guardian_last_name "First"
+ guardian_2_first_name "Guardian2"
+ guardian_2_last_name "Second"
+ guardian_phone "1111"
+ guardian_2_phone "2222"
+ end
+
trait :with_photo do
photos do
path = Rails.root.join("spec", "fixtures", "files", "material_photo.png")
diff --git a/spec/features/user_manages_contract_templates_spec.rb b/spec/features/user_manages_contract_templates_spec.rb
index 48ba336..6c90ff8 100644
--- a/spec/features/user_manages_contract_templates_spec.rb
+++ b/spec/features/user_manages_contract_templates_spec.rb
@@ -160,7 +160,7 @@ RSpec.feature 'User manages contract templates', type: :feature do
expect(content_disposition).to include('inline')
expect(pdf_body).to have_content('PREVIEW ONLY')
expect(pdf_body).to have_content('Acquired Media Release')
- expect(pdf_body).not_to have_content('Guardian')
+ expect(pdf_body).to have_content('Guardian')
visit new_project_contract_template_path(project)
select 'Location Release', from: 'Release type'
@@ -178,7 +178,7 @@ RSpec.feature 'User manages contract templates', type: :feature do
expect(content_disposition).to include('inline')
expect(pdf_body).to have_content('PREVIEW ONLY')
expect(pdf_body).to have_content('Material Release')
- expect(pdf_body).not_to have_content('Guardian')
+ expect(pdf_body).to have_content('Guardian')
end
context 'preventing creation of release template with wrong fee value' do
diff --git a/spec/features/user_manages_project_directories_spec.rb b/spec/features/user_manages_project_directories_spec.rb
index 6ad5bc3..6af2448 100644
--- a/spec/features/user_manages_project_directories_spec.rb
+++ b/spec/features/user_manages_project_directories_spec.rb
@@ -51,6 +51,13 @@ RSpec.feature "User manages project custom folders", type: :feature do
expect(page).to have_content("UPLOAD NEW FILES")
+ expect do
+ click_button "Upload Files"
+ end.not_to raise_exception
+
+ expect(page).to have_content("UPLOAD NEW FILES")
+ expect(page).not_to have_content("The folder has been updated")
+
drop_file Rails.root.join(file_fixture("person_photo.png")), type: :dropzone
click_button "Upload Files"
diff --git a/spec/features/user_managing_acquired_media_releases_spec.rb b/spec/features/user_managing_acquired_media_releases_spec.rb
index 453a12e..61ac8c8 100644
--- a/spec/features/user_managing_acquired_media_releases_spec.rb
+++ b/spec/features/user_managing_acquired_media_releases_spec.rb
@@ -12,7 +12,7 @@ feature "User managing acquired_media releases" do
expect(country_field_value).to eq "US"
end
- scenario "creating a release", js: true do
+ scenario "creating a release for an adult", js: true do
contract_template = create(:contract_template, project: project)
visit new_account_project_contract_template_acquired_media_release_path(project.account, project, contract_template)
@@ -35,11 +35,121 @@ feature "User managing acquired_media releases" do
draw_signature file_fixture("signature.png"), "acquired_media_release_signature_base64"
end
- click_button "I have read and agree to the above"
+ click_button submit_release_button
expect(AcquiredMediaRelease.last.categories).to include("Video Footage")
expect(AcquiredMediaRelease.last.categories).to include("Still Photograph")
- expect(page).to have_content("Your release was successfully submitted. Thank you.")
+ expect(page).to have_content successful_submission_message
+ end
+
+ scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_acquired_media_release_path(project.account, project, contract_template)
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'false'
+ expect(field).not_to be_visible
+ end
+
+ page.check person_is_minor_checkbox
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'true'
+ expect(field).to be_visible
+ end
+ end
+
+ scenario 'creating a release for a minor', js: true do
+ project = create(:project, members: current_user, account: current_user.primary_account)
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_acquired_media_release_path(project.account, project, contract_template)
+
+ expect(page).not_to have_content guardian_information_heading.upcase
+ expect(page).not_to have_content guardian_photo_heading.upcase
+
+ page.check person_is_minor_checkbox
+
+ expect(page).to have_content guardian_information_heading.upcase
+ expect(page).to have_content guardian_photo_heading.upcase
+ expect(page).to have_content guardian_email_field.titleize
+
+ fill_in acquired_media_name_field, with: "Jane Doe"
+ acquired_media_category_fields
+ fill_in acquried_media_description_field, with: "Description"
+ fill_in acquried_media_owner_first_name, with: "Jane"
+ fill_in acquried_media_owner_last_name, with: "Doe"
+ fill_in acquired_media_person_title, with: "Ms."
+ fill_in acquired_media_person_phone, with: "555-5555-5555"
+ fill_in acquired_media_person_email, with: "person@example.com"
+ fill_in acquired_media_person_fax, with: "FAX"
+ fill_in acquired_media_person_address_street_1, with: "Street 1"
+ fill_in acquired_media_person_address_city, with: "City"
+ fill_in acquired_media_person_address_state, with: "State"
+ fill_in acquired_media_release_person_address_zip, with: "ZIP"
+
+ fill_in guardian_first_name_field, with: 'Guardian'
+ fill_in guardian_last_name_field, with: 'Name'
+ fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
+ attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
+ fill_in_guardian_address_fields
+ draw_signature file_fixture("signature.png"), "acquired_media_release_signature_base64"
+
+ click_button submit_release_button
+
+ expect(page).to have_content(successful_submission_message)
+ end
+
+ scenario 'creating a release for a minor with two guardians', js: true do
+ project = create(:project, members: current_user, account: current_user.primary_account)
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_acquired_media_release_path(project.account, project, contract_template)
+
+ expect(page).not_to have_content guardian_2_information_heading.upcase
+ expect(page).not_to have_content guardian_2_photo_heading.upcase
+
+ page.check person_is_minor_checkbox
+ expect(page).to have_content guardian_information_heading.upcase
+ expect(page).to have_content guardian_photo_heading.upcase
+ expect(page).to have_content guardian_email_field.titleize
+
+ expect(page).to have_content guardian_2_information_heading.upcase
+ expect(page).to have_content guardian_2_photo_heading.upcase
+ expect(page).to have_content guardian_2_phone_field.titleize
+
+ fill_in acquired_media_name_field, with: "Jane Doe"
+ acquired_media_category_fields
+ fill_in acquried_media_description_field, with: "Description"
+ fill_in acquried_media_owner_first_name, with: "Jane"
+ fill_in acquried_media_owner_last_name, with: "Doe"
+ fill_in acquired_media_person_title, with: "Ms."
+ fill_in acquired_media_person_phone, with: "555-5555-5555"
+ fill_in acquired_media_person_email, with: "person@example.com"
+ fill_in acquired_media_person_fax, with: "FAX"
+ fill_in acquired_media_person_address_street_1, with: "Street 1"
+ fill_in acquired_media_person_address_city, with: "City"
+ fill_in acquired_media_person_address_state, with: "State"
+ fill_in acquired_media_release_person_address_zip, with: "ZIP"
+
+ fill_in guardian_first_name_field, with: 'Guardian'
+ fill_in guardian_last_name_field, with: 'Name'
+ fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
+ attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
+ fill_in_guardian_address_fields
+ draw_signature file_fixture("signature.png"), "acquired_media_release_signature_base64"
+
+ fill_in guardian_2_first_name_field, with: 'Second'
+ fill_in guardian_2_last_name_field, with: 'Guardian'
+ fill_in guardian_2_phone_field, with: '999'
+
+ click_button submit_release_button
+
+ expect(page).to have_content(successful_submission_message)
+ expect(AcquiredMediaRelease.last.guardian_2_first_name).to eq 'Second'
end
scenario "creating a release, if contract template contains signature legal language, it is shown" do
@@ -51,6 +161,106 @@ feature "User managing acquired_media releases" do
end
context "when signed in" do
+ before do
+ sign_in current_user
+ end
+
+ scenario "creating a release for an adult", js: true do
+ visit new_project_acquired_media_release_path(project)
+
+ fill_in acquired_media_name_field, with: "Jane Doe"
+ acquired_media_category_fields
+
+ attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false
+
+ click_button import_release_button
+
+ expect(page).to have_content successful_import_message
+ end
+
+ scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
+ visit new_project_acquired_media_release_path(project)
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'false'
+ expect(field).not_to be_visible
+ end
+
+ page.check person_is_minor_checkbox
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'true'
+ expect(field).to be_visible
+ end
+ end
+
+ scenario "creating a release for a minor", js: true do
+ visit new_project_acquired_media_release_path(project)
+
+ expect(page).not_to have_content guardian_information_heading.upcase
+ expect(page).not_to have_content guardian_photo_heading
+
+ page.check person_is_minor_checkbox
+
+ expect(page).to have_content guardian_information_heading.upcase
+ expect(page).to have_content guardian_photo_heading
+ expect(page).to have_content guardian_email_field.titleize
+
+ fill_in acquired_media_name_field, with: "Jane Doe"
+ acquired_media_category_fields
+ attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false
+
+ fill_in guardian_first_name_field, with: 'Guardian'
+ fill_in guardian_last_name_field, with: 'Name'
+ fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
+ attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
+ fill_in_guardian_address_fields
+
+ click_button import_release_button
+
+ expect(page).to have_content successful_import_message
+ expect(AcquiredMediaRelease.last.guardian_first_name).to eq 'Guardian'
+ end
+
+ scenario "creating a release for a minor with two guardians", js: true do
+ visit new_project_acquired_media_release_path(project)
+
+ expect(page).not_to have_content guardian_2_information_heading.upcase
+ expect(page).not_to have_content guardian_2_photo_heading
+
+ page.check person_is_minor_checkbox
+
+ expect(page).to have_content guardian_information_heading.upcase
+ expect(page).to have_content guardian_photo_heading
+ expect(page).to have_content guardian_email_field.titleize
+
+ expect(page).to have_content guardian_2_information_heading.upcase
+ expect(page).to have_content guardian_2_photo_heading
+ expect(page).to have_content guardian_2_phone_field.titleize
+
+ fill_in acquired_media_name_field, with: "Jane Doe"
+ acquired_media_category_fields
+ attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false
+
+ fill_in guardian_first_name_field, with: 'Guardian'
+ fill_in guardian_last_name_field, with: 'Name'
+ fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
+ attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
+ fill_in_guardian_address_fields
+
+ fill_in guardian_2_first_name_field, with: 'Second'
+ fill_in guardian_2_last_name_field, with: 'Guardian'
+ fill_in guardian_2_phone_field, with: '999'
+
+ click_button import_release_button
+
+ expect(page).to have_content successful_import_message
+ expect(AcquiredMediaRelease.last.guardian_first_name).to eq 'Guardian'
+ expect(AcquiredMediaRelease.last.guardian_2_first_name).to eq 'Second'
+ end
+
scenario "creating, updating, destroying a release", js: true do
release_data = {
name: "Test Acquired Media Release",
@@ -65,7 +275,7 @@ feature "User managing acquired_media releases" do
visit new_project_acquired_media_release_path(project)
by "attaching only a contract" do
- attach_file "acquired_media_release[contract]", Rails.root.join(file_fixture("contract.pdf")), visible: false
+ attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false
click_button create_release_button
expect(page).to have_invalid_field(acquired_media_name_field)
@@ -117,7 +327,7 @@ feature "User managing acquired_media releases" do
end
end
- scenario "viewing the contract PDF" do
+ scenario "viewing the contract PDF for an adult" do
acquired_media_release = create(:acquired_media_release_with_contract_template,
:native,
project: project,
@@ -176,6 +386,25 @@ feature "User managing acquired_media releases" do
expect(pdf_body).to have_content("Other files")
end
+ scenario "viewing the contract PDF for a minor" do
+ acquired_media_release = create(:acquired_media_release_with_contract_template,
+ :native,
+ :minor,
+ project: project,
+ person_name: "Jane Doe")
+
+ visit project_acquired_media_releases_path(project)
+ click_link *view_release_pdf_link_for(acquired_media_release)
+
+ expect(content_type).to eq("application/pdf")
+ expect(pdf_body).to have_content acquired_media_release.guardian_first_name
+ expect(pdf_body).to have_content acquired_media_release.guardian_last_name
+ expect(pdf_body).to have_content acquired_media_release.guardian_2_first_name
+ expect(pdf_body).to have_content acquired_media_release.guardian_2_last_name
+ expect(pdf_body).to have_content acquired_media_release.guardian_phone
+ expect(pdf_body).to have_content acquired_media_release.guardian_2_phone
+ end
+
scenario "searching for a release", js: true do
collection1 = create(:acquired_media_release, name: "EDM Music", project: project)
collection2 = create(:acquired_media_release, name: "Classical Music", project: project)
@@ -508,4 +737,103 @@ feature "User managing acquired_media releases" do
def date_issued
t 'contracts.for_office_use_only.description_labels.date_issued'
end
+
+ def person_is_minor_checkbox
+ 'acquired_media_release_minor'
+ end
+
+ def guardian_2_first_name_field
+ t 'helpers.label.acquired_media_release.guardian_2_first_name'
+ end
+
+ def guardian_2_last_name_field
+ t 'helpers.label.acquired_media_release.guardian_2_last_name'
+ end
+
+ def guardian_2_phone_field
+ t 'helpers.label.acquired_media_release.guardian_2_phone'
+ end
+
+ def guardian_first_name_field
+ t 'helpers.label.acquired_media_release.guardian_first_name'
+ end
+
+ def guardian_last_name_field
+ t 'helpers.label.acquired_media_release.guardian_last_name'
+ end
+
+ def guardian_phone_field
+ t 'helpers.label.acquired_media_release.guardian_phone'
+ end
+
+ def guardian_email_field
+ t 'helpers.label.acquired_media_release.guardian_email'
+ end
+
+ def guardian_address_street1_field
+ t('helpers.label.acquired_media_release.guardian_address_street1')
+ end
+
+ def guardian_address_city_field
+ t('helpers.label.acquired_media_release.guardian_address_city')
+ end
+
+ def guardian_address_state_field
+ t('helpers.label.acquired_media_release.guardian_address_state')
+ end
+
+ def guardian_address_zip_field
+ t('helpers.label.acquired_media_release.guardian_address_zip')
+ end
+
+ def guardian_photo_field
+ 'acquired_media_release[guardian_photo]'
+ end
+
+ def guardian_2_photo_field
+ 'acquired_media_release[guardian_2_photo]'
+ 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 submit_release_button
+ 'I have read and agree to the above'
+ end
+
+ def successful_submission_message
+ 'Your release was successfully submitted. Thank you.'
+ end
+
+ def guardian_information_heading
+ t 'public.acquired_media_releases.new.guardian_info.heading'
+ end
+
+ def guardian_photo_heading
+ t 'public.acquired_media_releases.new.guardian_photo.heading'
+ end
+
+ def guardian_2_information_heading
+ t 'public.acquired_media_releases.new.guardian_2_info.heading'
+ end
+
+ def guardian_2_photo_heading
+ t 'public.acquired_media_releases.new.guardian_2_photo.heading'
+ end
+
+ def contract_field
+ 'acquired_media_release[contract]'
+ end
+
+ def import_release_button
+ t 'helpers.submit.acquired_media_releases.create'
+ end
+
+ def successful_import_message
+ t 'acquired_media_releases.create.notice'
+ end
end
diff --git a/spec/features/user_managing_location_releases_spec.rb b/spec/features/user_managing_location_releases_spec.rb
index db3e53a..3eb55de 100644
--- a/spec/features/user_managing_location_releases_spec.rb
+++ b/spec/features/user_managing_location_releases_spec.rb
@@ -127,6 +127,14 @@ feature "User managing location releases" do
sign_in current_user
end
+ scenario "listing all releases, table have correct headers", js:true do
+ ct = create(:contract_template, :with_amendment_clause, project: project)
+ create(:location_release, :native, project: project, contract_template: ct)
+ visit project_location_releases_path(project)
+
+ table_headers.each { |s| expect(page).to have_content s }
+ end
+
scenario "creating a release", js: true do
visit new_project_location_release_path(project)
@@ -729,4 +737,16 @@ feature "User managing location releases" do
def amendment_signature_label
t 'contracts.amendment_page.description_labels.amendment_signature'
end
+
+ def table_headers
+ [
+ t('location_releases.index.table_headers.approved'),
+ t('location_releases.index.table_headers.name'),
+ t('location_releases.index.table_headers.address'),
+ t('location_releases.index.table_headers.notes'),
+ t('location_releases.index.table_headers.tags'),
+ t('location_releases.index.table_headers.signed_at'),
+ t('location_releases.index.table_headers.amendment_signed')
+ ]
+ end
end
diff --git a/spec/features/user_managing_material_releases_spec.rb b/spec/features/user_managing_material_releases_spec.rb
index ae69e09..b98f5d6 100644
--- a/spec/features/user_managing_material_releases_spec.rb
+++ b/spec/features/user_managing_material_releases_spec.rb
@@ -40,6 +40,93 @@ feature "User managing material releases" do
expect(MaterialRelease.last.photos.attached?).to eq true
end
+ scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_material_release_path(project.account, project, contract_template)
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'false'
+ expect(field).not_to be_visible
+ end
+
+ page.check person_is_minor_checkbox
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'true'
+ expect(field).to be_visible
+ end
+ end
+
+ scenario 'creating a release for a minor', js: true do
+ project = create(:project, members: current_user, account: current_user.primary_account)
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_material_release_path(project.account, project, contract_template)
+
+ expect(page).not_to have_content guardian_information_heading.upcase
+ expect(page).not_to have_content guardian_photo_heading.upcase
+
+ page.check person_is_minor_checkbox
+
+ expect(page).to have_content guardian_information_heading.upcase
+ expect(page).to have_content guardian_photo_heading.upcase
+ expect(page).to have_content guardian_email_field.titleize
+
+ fill_all_fields
+
+ fill_in guardian_first_name_field, with: 'Guardian'
+ fill_in guardian_last_name_field, with: 'Name'
+ fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
+ attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
+ fill_in_guardian_address_fields
+
+ draw_signature file_fixture("signature.png"), signature_field
+
+ click_button submit_release_button
+
+ expect(page).to have_content(successful_submission_message)
+ end
+
+ scenario 'creating a release for a minor with two guardians', js: true do
+ project = create(:project, members: current_user, account: current_user.primary_account)
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_material_release_path(project.account, project, contract_template)
+
+ expect(page).not_to have_content guardian_2_information_heading.upcase
+ expect(page).not_to have_content guardian_2_photo_heading.upcase
+
+ page.check person_is_minor_checkbox
+ expect(page).to have_content guardian_information_heading.upcase
+ expect(page).to have_content guardian_photo_heading.upcase
+ expect(page).to have_content guardian_email_field.titleize
+
+ expect(page).to have_content guardian_2_information_heading.upcase
+ expect(page).to have_content guardian_2_photo_heading.upcase
+ expect(page).to have_content guardian_2_phone_field.titleize
+
+ fill_all_fields
+
+ fill_in guardian_first_name_field, with: 'Guardian'
+ fill_in guardian_last_name_field, with: 'Name'
+ fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
+ attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
+ fill_in_guardian_address_fields
+ draw_signature file_fixture("signature.png"), signature_field
+
+ fill_in guardian_2_first_name_field, with: 'Second'
+ fill_in guardian_2_last_name_field, with: 'Guardian'
+ fill_in guardian_2_phone_field, with: '999'
+
+ click_button submit_release_button
+
+ expect(page).to have_content(successful_submission_message)
+ expect(MaterialRelease.last.guardian_2_first_name).to eq 'Second'
+ end
+
scenario "creating release is possible only after filling all fields", js: true do
contract_template = create(:contract_template, project: project)
@@ -98,7 +185,7 @@ feature "User managing material releases" do
sign_in current_user
end
- scenario "creating a release", js: true do
+ scenario "creating a release for and adult", js: true do
visit new_project_material_release_path(project)
by "attaching only a contract" do
@@ -120,13 +207,94 @@ feature "User managing material releases" do
click_button create_release_button
expect(page).to have_content(create_release_notice)
- expect(page).to have_photo("material_photo.png")
+ expect(page).to have_photo("material_photo.png", visible: :all)
click_on "Manage"
expect(page).to have_link("Download")
end
end
+ scenario "creating a release for a minor - guardian fields are required when minor checkbox is checked", js: true do
+ visit new_project_material_release_path(project)
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'false'
+ expect(field).not_to be_visible
+ end
+
+ page.check person_is_minor_checkbox
+
+ all('input[data-required-tag="guardian"]').each do |field|
+ expect(field['required']).to eq 'true'
+ expect(field).to be_visible
+ end
+ end
+
+ scenario "creating a release for a minor", js: true do
+ visit new_project_material_release_path(project)
+
+ expect(page).not_to have_content guardian_information_heading.upcase
+ expect(page).not_to have_content guardian_photo_heading
+
+ page.check person_is_minor_checkbox
+
+ expect(page).to have_content guardian_information_heading.upcase
+ expect(page).to have_content guardian_photo_heading
+ expect(page).to have_content guardian_email_field.titleize
+
+ fill_in_release_fields name: "Apple Laptop"
+ attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false
+
+ fill_in guardian_first_name_field, with: 'Guardian'
+ fill_in guardian_last_name_field, with: 'Name'
+ fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
+ attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
+ fill_in_guardian_address_fields
+
+ click_button import_release_button
+
+ expect(page).to have_content successful_import_message
+ expect(MaterialRelease.last.guardian_first_name).to eq 'Guardian'
+ end
+
+ scenario "creating a release for a minor with two guardians", js: true do
+ visit new_project_material_release_path(project)
+
+ expect(page).not_to have_content guardian_2_information_heading.upcase
+ expect(page).not_to have_content guardian_2_photo_heading
+
+ page.check person_is_minor_checkbox
+
+ expect(page).to have_content guardian_information_heading.upcase
+ expect(page).to have_content guardian_photo_heading
+ expect(page).to have_content guardian_email_field.titleize
+
+ expect(page).to have_content guardian_2_information_heading.upcase
+ expect(page).to have_content guardian_2_photo_heading
+ expect(page).to have_content guardian_2_phone_field.titleize
+
+ fill_in_release_fields name: "Apple Laptop"
+ attach_file contract_field, Rails.root.join(file_fixture("contract.pdf")), visible: false
+
+ fill_in guardian_first_name_field, with: 'Guardian'
+ fill_in guardian_last_name_field, with: 'Name'
+ fill_in guardian_phone_field, with: '001101'
+ fill_in guardian_email_field, with: 'valid@email.com'
+ attach_file guardian_photo_field, file_fixture('hemsworth.jpeg'), visible: :all
+ fill_in_guardian_address_fields
+
+ fill_in guardian_2_first_name_field, with: 'Second'
+ fill_in guardian_2_last_name_field, with: 'Guardian'
+ fill_in guardian_2_phone_field, with: '999'
+
+ click_button import_release_button
+
+ expect(page).to have_content successful_import_message
+ expect(MaterialRelease.last.guardian_first_name).to eq 'Guardian'
+ expect(MaterialRelease.last.guardian_2_first_name).to eq 'Second'
+ end
+
scenario "updating an existing release", js: true do
material_release = create(:material_release, :non_native, project: project)
@@ -190,7 +358,7 @@ feature "User managing material releases" do
click_on "Save Changes"
expect(page).to have_content("The release has been updated")
- expect(page).to have_photo("material_photo.png")
+ expect(page).to have_photo("material_photo.png", visible: :all)
end
scenario "viewing the contract PDF" do
@@ -419,8 +587,8 @@ feature "User managing material releases" do
"material_release[person_address_zip]"
end
- def have_photo(filename)
- have_selector("img[src*='#{filename}']")
+ def have_photo(filename, visible: true)
+ have_selector("img[src*='#{filename}']", visible: visible)
end
def import_material_release_link(project)
@@ -542,4 +710,107 @@ feature "User managing material releases" do
def date_issued
t 'contracts.for_office_use_only.description_labels.date_issued'
end
+
+ def person_is_minor_checkbox
+ 'material_release_minor'
+ end
+
+ def guardian_2_first_name_field
+ t 'helpers.label.material_release.guardian_2_first_name'
+ end
+
+ def guardian_2_last_name_field
+ t 'helpers.label.material_release.guardian_2_last_name'
+ end
+
+ def guardian_2_phone_field
+ t 'helpers.label.material_release.guardian_2_phone'
+ end
+
+ def guardian_first_name_field
+ t 'helpers.label.material_release.guardian_first_name'
+ end
+
+ def guardian_last_name_field
+ t 'helpers.label.material_release.guardian_last_name'
+ end
+
+ def guardian_phone_field
+ t 'helpers.label.material_release.guardian_phone'
+ end
+
+ def guardian_email_field
+ t 'helpers.label.material_release.guardian_email'
+ end
+
+ def guardian_address_street1_field
+ t('helpers.label.material_release.guardian_address_street1')
+ end
+
+ def guardian_address_city_field
+ t('helpers.label.material_release.guardian_address_city')
+ end
+
+ def guardian_address_state_field
+ t('helpers.label.material_release.guardian_address_state')
+ end
+
+ def guardian_address_zip_field
+ t('helpers.label.material_release.guardian_address_zip')
+ end
+
+ def guardian_photo_field
+ 'material_release[guardian_photo]'
+ end
+
+ def guardian_2_photo_field
+ 'material_release[guardian_2_photo]'
+ 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 submit_release_button
+ 'I have read and agree to the above'
+ end
+
+ def successful_submission_message
+ 'Your release was successfully submitted. Thank you.'
+ end
+
+ def guardian_information_heading
+ t 'public.material_releases.new.guardian_info.heading'
+ end
+
+ def guardian_photo_heading
+ t 'public.material_releases.new.guardian_photo.heading'
+ end
+
+ def guardian_2_information_heading
+ t 'public.material_releases.new.guardian_2_info.heading'
+ end
+
+ def guardian_2_photo_heading
+ t 'public.material_releases.new.guardian_2_photo.heading'
+ end
+
+ def contract_field
+ 'material_release[contract]'
+ end
+
+ def import_release_button
+ t 'helpers.submit.material_release.create'
+ end
+
+ def successful_import_message
+ t 'material_releases.create.notice'
+ end
+
+ def signature_field
+ 'material_release_signature_base64'
+ end
end