From 7cdb814d6d8b57622b2e567ea44235278260b1ec Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Mon, 6 Jul 2020 10:22:04 +0200 Subject: [PATCH] Upstream sync --- .../javascripts/update_required_status.js | 13 ++++ app/models/medical_release.rb | 50 ++++++++++--- .../public/appearance_releases/new.html.erb | 12 ++-- .../public/medical_releases/new.html.erb | 16 ++--- app/views/public/misc_releases/new.html.erb | 14 ++-- app/views/public/talent_releases/new.html.erb | 12 ++-- app/views/shared/_address_fields.html.erb | 9 +-- config/locales/en.yml | 2 + config/locales/es.yml | 3 + .../medical_releases_controller_spec.rb | 23 +++++- .../user_managing_appearance_releases_spec.rb | 30 +++++--- .../user_managing_medical_releases_spec.rb | 71 ++++++++++++++++--- .../user_managing_misc_releases_spec.rb | 24 ++++++- .../user_managing_talent_releases_spec.rb | 50 +++++++++++++ spec/models/medical_release_spec.rb | 17 +++++ 15 files changed, 282 insertions(+), 64 deletions(-) create mode 100644 app/assets/javascripts/update_required_status.js diff --git a/app/assets/javascripts/update_required_status.js b/app/assets/javascripts/update_required_status.js new file mode 100644 index 0000000..a624317 --- /dev/null +++ b/app/assets/javascripts/update_required_status.js @@ -0,0 +1,13 @@ +$(document).on("turbolinks:load", function() { + $("[data-behavior=update-required-status]").click(function(e) { + const required = !!($(this)[0] && $(this)[0].checked); + + + $("[data-required-tag=guardian]").each(function(index, element) { + const labelForField = element.previousSibling; + + element.required = required; + labelForField.classList.add("required"); + }); + }); +}); \ No newline at end of file diff --git a/app/models/medical_release.rb b/app/models/medical_release.rb index 62f08b9..5d0692d 100644 --- a/app/models/medical_release.rb +++ b/app/models/medical_release.rb @@ -14,15 +14,37 @@ class MedicalRelease < ApplicationRecord NUMBER_OF_CUSTOM_FIELDS = 15 - composed_of :person_address, + composed_of :person_address, class_name: "Address", - mapping: [ - %w(person_address_street1 street1), - %w(person_address_street2 street2), - %w(person_address_city city), - %w(person_address_state state), - %w(person_address_zip zip), - %w(person_address_country country) + mapping: [ + %w[person_address_street1 street1], + %w[person_address_street2 street2], + %w[person_address_city city], + %w[person_address_state state], + %w[person_address_zip zip], + %w[person_address_country country] + ] + + composed_of :guardian_address, + class_name: 'Address', + mapping: [ + %w[guardian_address_street1 street1], + %w[guardian_address_street2 street2], + %w[guardian_address_city city], + %w[guardian_address_state state], + %w[guardian_address_zip zip], + %w[guardian_address_country country] + ] + + composed_of :guardian_2_address, + class_name: 'Address', + mapping: [ + %w[guardian_2_address_street1 street1], + %w[guardian_2_address_street2 street2], + %w[guardian_2_address_city city], + %w[guardian_2_address_state state], + %w[guardian_2_address_zip zip], + %w[guardian_2_address_country country] ] def self.face_photo_acceptable_content_types @@ -32,6 +54,7 @@ class MedicalRelease < ApplicationRecord # These validations apply to all releases validates :person_first_name, :person_last_name, presence: true validates :person_email, email: true, allow_blank: true + validate :valid_answers acts_as_taggable_on :internal_tags, :tags @@ -76,4 +99,15 @@ class MedicalRelease < ApplicationRecord def contract_file_name "#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}" end + + private + + def valid_answers + (1..ContractTemplate::NUMBER_OF_CUSTOM_FIELDS).each do |index| + if contract_template && contract_template["question_#{index}_text"].present? && + public_send("question_#{index}_answer").blank? + errors.add("question_#{index}", I18n.t('medical_releases.custom_validation_errors.question_answer_is_required')) + end + end + end end diff --git a/app/views/public/appearance_releases/new.html.erb b/app/views/public/appearance_releases/new.html.erb index c88d7d6..fc80010 100644 --- a/app/views/public/appearance_releases/new.html.erb +++ b/app/views/public/appearance_releases/new.html.erb @@ -16,7 +16,7 @@ <% unless @contract_template.guardian_clause.blank? %> <%= form.form_group :minor do %> - <%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %> + <%= 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 %> @@ -72,12 +72,12 @@
!@appearance_release.minor?) %>" data-ujs-target="guardian-fields"> <%= card_field_set_tag t(".guardian_info.heading") do %>
- <%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %> - <%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6" %> + <%= form.text_field :guardian_first_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_last_name, required: @appearance_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.phone_field :guardian_phone, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_email, required: @appearance_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
- <%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor? %> + <%= render "shared/address_fields", form: form, subject: "guardian", required: @appearance_release.minor?, data: { required_tag: "guardian" } %> <% end %>
diff --git a/app/views/public/medical_releases/new.html.erb b/app/views/public/medical_releases/new.html.erb index 7f4dd2f..dd58cc3 100644 --- a/app/views/public/medical_releases/new.html.erb +++ b/app/views/public/medical_releases/new.html.erb @@ -16,7 +16,7 @@ <% unless @contract_template.guardian_clause.blank? %> <%= form.form_group :minor do %> - <%= form.check_box :minor, label: t("helpers.label.medical_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %> + <%= form.check_box :minor, label: t("helpers.label.medical_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 %> @@ -30,7 +30,7 @@ <% (1..MedicalRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %> <% if @contract_template.public_send("question_#{n}_text").present? %>
- <%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %> + <%= form.text_area "question_#{n}_answer", required: true, wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
<% end %> <% end %> @@ -59,14 +59,12 @@
!@medical_release.minor?) %>" data-ujs-target="guardian-fields"> <%= card_field_set_tag t(".guardian_info.heading") do %>
- <%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6" %> + <%= form.text_field :guardian_first_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_last_name, required: @medical_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.phone_field :guardian_phone, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
-
- <%= form.text_field :guardian_email, required: @medical_release.minor?, wrapper_class: "col-sm-6" %> -
- <%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor? %> + <%= render "shared/address_fields", form: form, subject: "guardian", required: @medical_release.minor?, data: { required_tag: "guardian" } %> <% end %>
diff --git a/app/views/public/misc_releases/new.html.erb b/app/views/public/misc_releases/new.html.erb index 804068d..a2e8c50 100644 --- a/app/views/public/misc_releases/new.html.erb +++ b/app/views/public/misc_releases/new.html.erb @@ -11,7 +11,7 @@ <% unless @contract_template.guardian_clause.blank? %> <%= form.form_group :minor do %> - <%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %> + <%= 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 %> @@ -56,14 +56,12 @@
!@misc_release.minor?) %>" data-ujs-target="guardian-fields"> <%= card_field_set_tag t(".guardian_info.heading") do %>
- <%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %> + <%= form.text_field :guardian_first_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_last_name, required: @misc_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
-
- <%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %> -
- <%= render "shared/address_fields", form: form, subject: "guardian" %> + <%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %> <% end %>
diff --git a/app/views/public/talent_releases/new.html.erb b/app/views/public/talent_releases/new.html.erb index 01f4e72..6af7df2 100644 --- a/app/views/public/talent_releases/new.html.erb +++ b/app/views/public/talent_releases/new.html.erb @@ -16,7 +16,7 @@ <% unless @contract_template.guardian_clause.blank? %> <%= form.form_group :minor do %> - <%= form.check_box :minor, label: t("helpers.label.appearance_release.minor"), data: { target: "[data-ujs-target=guardian-fields]", toggle: "collapse" } %> + <%= 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 %> @@ -46,12 +46,12 @@
!@talent_release.minor?) %>" data-ujs-target="guardian-fields"> <%= card_field_set_tag t(".guardian_info.heading") do %>
- <%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3" %> - <%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6" %> - <%= form.text_field :guardian_email, wrapper_class: "col-sm-6" %> + <%= form.text_field :guardian_first_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_last_name, required: @talent_release.minor?, wrapper_class: "col-sm-3", data: { required_tag: "guardian" } %> + <%= form.phone_field :guardian_phone, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %> + <%= form.text_field :guardian_email, wrapper_class: "col-sm-6", data: { required_tag: "guardian" } %>
- <%= render "shared/address_fields", form: form, subject: "guardian" %> + <%= render "shared/address_fields", form: form, subject: "guardian", data: { required_tag: "guardian" } %> <% end %>
diff --git a/app/views/shared/_address_fields.html.erb b/app/views/shared/_address_fields.html.erb index 51cda48..8d175bb 100644 --- a/app/views/shared/_address_fields.html.erb +++ b/app/views/shared/_address_fields.html.erb @@ -1,14 +1,15 @@ <% field_name_prefix = subject.present? ? "#{subject}_" : "" %> <% required = required || false %> +<% data = data || nil %>
- <%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6" %> + <%= form.text_field "#{field_name_prefix}address_street1", required: required, wrapper_class: "col-sm-6", data: data %> <%= form.text_field "#{field_name_prefix}address_street2", wrapper_class: "col-sm-6" %>
- <%= 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" %> + <%= form.text_field "#{field_name_prefix}address_city", required: required, wrapper_class: "col-sm-6", data: data %> + <%= form.text_field "#{field_name_prefix}address_state", required: required, wrapper_class: "col-sm-3", data: data %> + <%= form.text_field "#{field_name_prefix}address_zip", required: required, wrapper_class: "col-sm-3", data: data %>
<%= form.form_group "#{field_name_prefix}address_country" do %> <%= form.label "#{field_name_prefix}address_country" %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 7734d89..ef8b351 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -772,6 +772,8 @@ en: update: notice: The material release has been updated medical_releases: + custom_validation_errors: + question_answer_is_required: answer is required destroy: alert: The medical release has been deleted index: diff --git a/config/locales/es.yml b/config/locales/es.yml index 91e271f..636e5f2 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -282,6 +282,9 @@ es: form: photos: dropzone_label: Tap to take a photo of Licensed Material (optional) (ES) + medical_releases: + custom_validation_errors: + question_answer_is_required: answer is required (ES) public: appearance_releases: create: diff --git a/spec/controllers/public/medical_releases_controller_spec.rb b/spec/controllers/public/medical_releases_controller_spec.rb index 794bdb2..d80325e 100644 --- a/spec/controllers/public/medical_releases_controller_spec.rb +++ b/spec/controllers/public/medical_releases_controller_spec.rb @@ -19,14 +19,29 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do end it "displays validation errors" do - contract_template = create(:contract_template, project: project) + contract_template = create(:contract_template, + project: project, + question_1_text: "Question 1", + question_2_text: "Question 2" + ) sign_in(user) - post :create, params: { account_id: user.primary_account.to_param, project_id: project, contract_template_id: contract_template, medical_release: { person_address_city: "Albuquerque" } } + post :create, params: { + account_id: user.primary_account.to_param, + project_id: project, + contract_template_id: contract_template, + medical_release: { + person_address_city: "Albuquerque", + question_2_answer: "Answer 2" + } + } + body = CGI.unescape_html(response.body) expect(body).to match /Person first name can't be blank/ expect(body).to match /Person last name can't be blank/ expect(body).to match />can't be blank