From d70a19b7d59dbdd05350366d8ceeeb82d05b68be Mon Sep 17 00:00:00 2001 From: Bilal Date: Tue, 7 Jul 2020 17:19:04 +0200 Subject: [PATCH 1/7] allow review and approve --- app/controllers/medical_releases_controller.rb | 15 ++++++++++++++- app/models/medical_release.rb | 12 ++++++++++++ app/policies/medical_release_policy.rb | 8 ++++++++ .../medical_releases/_medical_release.html.erb | 15 +++++++++++++++ app/views/medical_releases/index.html.erb | 1 + app/views/medical_releases/review.html.erb | 16 ++++++++++++++++ config/locales/en.yml | 9 +++++++++ config/locales/es.yml | 14 ++++++++++++++ config/routes.rb | 10 +++++++++- ..._approval_info_columns_to_medical_releases.rb | 7 +++++++ db/structure.sql | 8 ++++++-- 11 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 app/views/medical_releases/review.html.erb create mode 100644 db/migrate/20200707155717_add_approval_info_columns_to_medical_releases.rb diff --git a/app/controllers/medical_releases_controller.rb b/app/controllers/medical_releases_controller.rb index 9c48ce0..46a19c8 100644 --- a/app/controllers/medical_releases_controller.rb +++ b/app/controllers/medical_releases_controller.rb @@ -2,7 +2,7 @@ class MedicalReleasesController < ApplicationController include ProjectContext, MedicalReleaseContext before_action :set_project, only: [:index] - before_action :set_medical_release, only: [:destroy] + before_action :set_medical_release, only: [:destroy, :review, :approve] include ProjectLayout @@ -18,6 +18,19 @@ class MedicalReleasesController < ApplicationController end end + def review + @project = @medical_release.project + end + + def approve + @project = @medical_release.project + + @medical_release.approve_by(current_user) + if @medical_release.save + redirect_to [@project, :medical_releases], notice: t('.release_approved') + end + end + private def medical_releases diff --git a/app/models/medical_release.rb b/app/models/medical_release.rb index 5d0692d..c520d8e 100644 --- a/app/models/medical_release.rb +++ b/app/models/medical_release.rb @@ -100,6 +100,18 @@ class MedicalRelease < ApplicationRecord "#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}" end + def approve_by(user) + return unless approved_at.nil? + + self.approved_by_user_name = user.full_name + self.approved_by_user_email = user.email + self.approved_at = DateTime.now + end + + def approved? + approved_at.present? + end + private def valid_answers diff --git a/app/policies/medical_release_policy.rb b/app/policies/medical_release_policy.rb index 8866337..9ce60ce 100644 --- a/app/policies/medical_release_policy.rb +++ b/app/policies/medical_release_policy.rb @@ -15,6 +15,14 @@ class MedicalReleasePolicy < ReleasePolicy user.manager? || user.account_manager? end + def review? + user.account_manager? + end + + def approve? + review? + end + def edit_photos? true end diff --git a/app/views/medical_releases/_medical_release.html.erb b/app/views/medical_releases/_medical_release.html.erb index 29c4b73..74cc105 100644 --- a/app/views/medical_releases/_medical_release.html.erb +++ b/app/views/medical_releases/_medical_release.html.erb @@ -1,5 +1,17 @@ <%= check_box_tag "medical_release_ids[]", medical_release.id, false %> + + <% if medical_release.approved? %> + <% if medical_release.approved_by_user_name.present? %> + <% tooltip_user_data = "#{medical_release.approved_by_user_name} [#{medical_release.approved_by_user_email}]" %> + <% else %> + <% tooltip_user_data = medical_release.approved_by_user_email %> + <% end %> + + <% end %> + <% if medical_release.photo.attached? %> <%= image_tag medium_variant(medical_release.photo), class: "img-fluid" %> @@ -37,6 +49,9 @@ <% 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(MedicalRelease).review? %> + <%= link_to fa_icon("search fw", text: "Review"), review_medical_release_path(medical_release), class: "dropdown-item" %> + <% end %> <% 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 %> diff --git a/app/views/medical_releases/index.html.erb b/app/views/medical_releases/index.html.erb index e056d0f..abba148 100644 --- a/app/views/medical_releases/index.html.erb +++ b/app/views/medical_releases/index.html.erb @@ -22,6 +22,7 @@ <%= check_box_tag "medical_release_ids[]", false, false %> + <%= t '.table_headers.approved'%> <%= MedicalRelease.human_attribute_name(:person_name) %> <%= MedicalRelease.human_attribute_name(:contact_info) %> diff --git a/app/views/medical_releases/review.html.erb b/app/views/medical_releases/review.html.erb new file mode 100644 index 0000000..a74f39b --- /dev/null +++ b/app/views/medical_releases/review.html.erb @@ -0,0 +1,16 @@ +
+ <%= card_header text: t(".heading"), close_action_path: [@project, :medical_releases] %> +
+ " width="90%" height="1200" /> + + <%= bootstrap_form_with model: @medical_release, method: :patch, url: [:approve, @medical_release], local: true do |form| %> + <% form.hidden_field :approved, value: true %> +
+ <%= link_to t("shared.cancel"), [@medical_release.project, :medical_releases], class: "col-3 text-reset" %> +
+ <%= form.button t('.actions.approve'), id: "approve_release", class: class_string("btn btn-block btn-success btn-primary"), data: { disable_with: t("shared.disable_with") } %> +
+
+ <% end %> +
+
\ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index d09ddeb..06d3c44 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -773,6 +773,8 @@ en: update: notice: The material release has been updated medical_releases: + approve: + release_approved: Medical release has been approved custom_validation_errors: question_answer_is_required: answer is required destroy: @@ -785,9 +787,16 @@ en: notes: Notes signed_at: Date Signed tags: Tags + approved: Approved medical_release: actions: manage: Manage + messages: + approved_tooltip: Approved by %{user} on %{timestamp} + review: + actions: + approve: Approve + heading: Review Medical Release misc_releases: destroy: alert: The misc release has been deleted diff --git a/config/locales/es.yml b/config/locales/es.yml index 439e747..2c8b910 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -274,6 +274,8 @@ es: create: Create Live Stream (ES) update: Save Changes (ES) create: 'Crear %{model}' + medical_release: + update: Approve (ES) update: 'Actualizar %{model}' location_releases: form: @@ -284,8 +286,20 @@ es: photos: dropzone_label: Tap to take a photo of Licensed Material (optional) (ES) medical_releases: + approve: + release_approved: Medical release has been approved (ES) custom_validation_errors: question_answer_is_required: answer is required (ES) + review: + actions: + approve: Approve (ES) + heading: Review Medical Release (ES) + index: + table_headers: + approved: Approved (ES) + medical_release: + messages: + approved_tooltip: "" public: appearance_releases: create: diff --git a/config/routes.rb b/config/routes.rb index d43bfb9..cc855b2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -137,12 +137,20 @@ 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, :misc_releases] + ALL_RELEASES = RELEASES + [:music_releases, :misc_releases] ALL_RELEASES.each do |release| resources release, only: [], concerns: :taggable end + # Customization for medical releases + resources :medical_releases, only: [], concerns: :taggable do + member do + get :review + patch :approve + end + end + resources :bulk_taggings, only: [:new, :create] namespace :api do diff --git a/db/migrate/20200707155717_add_approval_info_columns_to_medical_releases.rb b/db/migrate/20200707155717_add_approval_info_columns_to_medical_releases.rb new file mode 100644 index 0000000..00fa2c7 --- /dev/null +++ b/db/migrate/20200707155717_add_approval_info_columns_to_medical_releases.rb @@ -0,0 +1,7 @@ +class AddApprovalInfoColumnsToMedicalReleases < ActiveRecord::Migration[6.0] + def change + add_column :medical_releases, :approved_by_user_name, :text + add_column :medical_releases, :approved_by_user_email, :text + add_column :medical_releases, :approved_at, :timestamp + end +end diff --git a/db/structure.sql b/db/structure.sql index 51b4216..616c0ac 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1045,7 +1045,10 @@ CREATE TABLE public.medical_releases ( guardian_2_address_city character varying, guardian_2_address_state character varying, guardian_2_address_zip character varying, - guardian_2_address_country character varying + guardian_2_address_country character varying, + approved_by_user_name text, + approved_by_user_email text, + approved_at timestamp without time zone ); @@ -3902,6 +3905,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20200619134853'), ('20200622180507'), ('20200625144713'), -('20200702152130'); +('20200702152130'), +('20200707155717'); -- 2.47.3 From df3769902335510a619e1004aea5acdf34ed7cf2 Mon Sep 17 00:00:00 2001 From: Bilal Date: Tue, 7 Jul 2020 17:26:08 +0200 Subject: [PATCH 2/7] remove obsolete field --- app/views/medical_releases/review.html.erb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/medical_releases/review.html.erb b/app/views/medical_releases/review.html.erb index a74f39b..8499e7c 100644 --- a/app/views/medical_releases/review.html.erb +++ b/app/views/medical_releases/review.html.erb @@ -4,7 +4,6 @@ " width="90%" height="1200" /> <%= bootstrap_form_with model: @medical_release, method: :patch, url: [:approve, @medical_release], local: true do |form| %> - <% form.hidden_field :approved, value: true %>
<%= link_to t("shared.cancel"), [@medical_release.project, :medical_releases], class: "col-3 text-reset" %>
-- 2.47.3 From e8975ed5686dd8643e0d88907b9355ed3edabdb5 Mon Sep 17 00:00:00 2001 From: Bilal Date: Tue, 7 Jul 2020 18:51:04 +0200 Subject: [PATCH 3/7] add for office page in medical release pdf --- app/views/contracts/_for_office_use_only.erb | 13 +++++++++++++ app/views/contracts/pdf.html.erb | 7 +++++++ config/locales/en.yml | 10 +++++++++- config/locales/es.yml | 16 ++++++++++++---- 4 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 app/views/contracts/_for_office_use_only.erb diff --git a/app/views/contracts/_for_office_use_only.erb b/app/views/contracts/_for_office_use_only.erb new file mode 100644 index 0000000..15abd19 --- /dev/null +++ b/app/views/contracts/_for_office_use_only.erb @@ -0,0 +1,13 @@ +<% if preview %> +

PREVIEW ONLY

+<% end %> + +

<%= t '.heading' %>

+ +
+ <%= description_list_pair t('.description_labels.producer'), releasable.project.account.name %> + <%= description_list_pair t('.description_labels.production'), releasable.project.name %> + <%= description_list_pair t('.description_labels.employee_issued_to'), releasable.name %> + <%= description_list_pair t('.description_labels.issued_by'), releasable.approved_by_user_name %> + <%= description_list_pair t('.description_labels.date_issued'), releasable.approved_at %> +
\ No newline at end of file diff --git a/app/views/contracts/pdf.html.erb b/app/views/contracts/pdf.html.erb index b430b4e..f9d72f7 100644 --- a/app/views/contracts/pdf.html.erb +++ b/app/views/contracts/pdf.html.erb @@ -25,6 +25,13 @@
<%= render "contracts/signature_page", releasable: releasable, contract_template: contract_template, preview: preview %>
+ +<% if releasable.class == MedicalRelease && releasable.approved? %> +
+ <%= render "contracts/for_office_use_only", releasable: releasable, preview: preview %> +
+<% end %> + <% if releasable.class == AcquiredMediaRelease %>
<%= render "contracts/files", release: releasable, preview: preview %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 06d3c44..ee0a356 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -288,6 +288,14 @@ en: print_QR_code: Print out release QR codes releases_automatically_organized: Releases are automatically organized as they’re submitted contracts: + for_office_use_only: + description_labels: + date_issued: Date Issued + employee_issued_to: Employee Issued To + issued_by: Issued By + producer: Producer + production: Production + heading: For Office Use Only photos: guardian_2_photo_heading: Second guardian photo guardian_photo_heading: Guardian photo @@ -784,10 +792,10 @@ en: search: Search empty: Medical releases will appear here table_headers: + approved: Approved notes: Notes signed_at: Date Signed tags: Tags - approved: Approved medical_release: actions: manage: Manage diff --git a/config/locales/es.yml b/config/locales/es.yml index 2c8b910..d45f7d6 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -107,6 +107,14 @@ es: print_QR_code: Print out release QR codes (ES) releases_automatically_organized: Releases are automatically organized as they’re submitted (ES) contracts: + for_office_use_only: + description_labels: + date_issued: Date Issued (ES) + employee_issued_to: Employee Issued To (ES) + issued_by: Issued By (ES) + producer: Producer (ES) + production: Production (ES) + heading: For Office Use Only (ES) photos: guardian_2_photo_heading: Second guardian photo (ES) guardian_photo_heading: Guardian photo (ES) @@ -290,16 +298,16 @@ es: release_approved: Medical release has been approved (ES) custom_validation_errors: question_answer_is_required: answer is required (ES) - review: - actions: - approve: Approve (ES) - heading: Review Medical Release (ES) index: table_headers: approved: Approved (ES) medical_release: messages: approved_tooltip: "" + review: + actions: + approve: Approve (ES) + heading: Review Medical Release (ES) public: appearance_releases: create: -- 2.47.3 From 9e0702c389dc1cd5f3245f079a41c4996885fcd3 Mon Sep 17 00:00:00 2001 From: Bilal Date: Tue, 7 Jul 2020 20:24:02 +0200 Subject: [PATCH 4/7] add specs --- .../_medical_release.html.erb | 2 +- config/locales/en.yml | 1 + config/locales/es.yml | 2 + .../medical_releases_controller_spec.rb | 23 +++ .../user_managing_medical_releases_spec.rb | 133 ++++++++++++++++++ 5 files changed, 160 insertions(+), 1 deletion(-) diff --git a/app/views/medical_releases/_medical_release.html.erb b/app/views/medical_releases/_medical_release.html.erb index 74cc105..8adc402 100644 --- a/app/views/medical_releases/_medical_release.html.erb +++ b/app/views/medical_releases/_medical_release.html.erb @@ -50,7 +50,7 @@ <%= link_to fa_icon("tags fw", text: "Tags"), [:new, medical_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %> <% end %> <% if policy(MedicalRelease).review? %> - <%= link_to fa_icon("search fw", text: "Review"), review_medical_release_path(medical_release), class: "dropdown-item" %> + <%= link_to fa_icon("search fw", text: t('.actions.review')), review_medical_release_path(medical_release), class: "dropdown-item" %> <% end %> <% 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" %> diff --git a/config/locales/en.yml b/config/locales/en.yml index ee0a356..3a6b39c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -799,6 +799,7 @@ en: medical_release: actions: manage: Manage + review: Review messages: approved_tooltip: Approved by %{user} on %{timestamp} review: diff --git a/config/locales/es.yml b/config/locales/es.yml index d45f7d6..31d7f2c 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -302,6 +302,8 @@ es: table_headers: approved: Approved (ES) medical_release: + actions: + review: Review (ES) messages: approved_tooltip: "" review: diff --git a/spec/controllers/medical_releases_controller_spec.rb b/spec/controllers/medical_releases_controller_spec.rb index e7dfa51..7a5cc5b 100644 --- a/spec/controllers/medical_releases_controller_spec.rb +++ b/spec/controllers/medical_releases_controller_spec.rb @@ -88,4 +88,27 @@ RSpec.describe MedicalReleasesController, type: :controller do }.to change(MedicalRelease, :count).by(-1) end end + + describe "#review" do + let!(:medical_release) { create(:medical_release, project: project) } + + it "responds successfully" do + get :review, params: { project_id: project, id: medical_release } + + expect(response).to be_successful + end + end + + describe "#approve" do + it "changes approval status successfully" do + medical_release = create(:medical_release, project: project) + + expect(MedicalRelease.last.approved?).to eq false + + patch :approve, params: { project_id: project, id: medical_release } + + expect(response).to redirect_to [project, :medical_releases] + expect(MedicalRelease.last.approved?).to eq true + end + end end diff --git a/spec/features/user_managing_medical_releases_spec.rb b/spec/features/user_managing_medical_releases_spec.rb index ad395f1..31dcbaa 100644 --- a/spec/features/user_managing_medical_releases_spec.rb +++ b/spec/features/user_managing_medical_releases_spec.rb @@ -182,6 +182,18 @@ feature "User managing medical releases" do sign_in current_user end + scenario "Approved releases have checkmark and non-approved releases don't have checkmarks" do + create(:medical_release_with_contract_template, :native, project: project) + + visit project_medical_releases_path(project) + expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 0) + + create(:medical_release_with_contract_template, :native, project: project, approved_by_user_email: "some@email.com", approved_at: DateTime.now) + visit project_medical_releases_path(project) + + expect(page).to have_css('i.fa.fa-check-circle.fa-2x', count: 1) + 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) @@ -200,6 +212,15 @@ feature "User managing medical releases" do expect(page).to have_link("Download", exact: true, count: 2) end + scenario "Review 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(review_action, exact: true) + end + scenario "Downloading PDF of native medical release is possible" do native_release = create(:medical_release_with_contract_template, :native, project: project) @@ -208,6 +229,64 @@ feature "User managing medical releases" do click_link *view_release_pdf_link_for(native_release) expect(content_type).to eq('application/pdf') end + + scenario "Reviewing release" do + create(:medical_release_with_contract_template, :native, project: project) + + visit project_medical_releases_path(project) + + click_link review_action + + expect(page).to have_content review_page_heading + expect(page).to have_content approve_button + end + + scenario 'When viewing the contract PDF of approved release there is page for office use only' do + medical_release = create(:medical_release_with_contract_template, + :native, + project: project, + person_first_name: 'Jane', + person_last_name: 'Doe', + approved_by_user_name: "Big Joe", + approved_by_user_email: "some@email.com", + approved_at: DateTime.now) + + sign_in(current_user) + visit project_medical_releases_path(project) + click_link *view_release_pdf_link_for(medical_release) + + expect(content_type).to eq('application/pdf') + expect(content_disposition).to include('inline') + expect(pdf_body).to have_content for_office_use_only.upcase + expect(pdf_body).to have_content producer_label + expect(pdf_body).to have_content production_label + expect(pdf_body).to have_content employee_issued_to_label + expect(pdf_body).to have_content issued_by_label + expect(pdf_body).to have_content date_issued + expect(pdf_body).to have_content 'Big Joe' + end + + scenario 'When viewing the contract PDF of not approved release there is no page for office use only' do + medical_release = create(:medical_release_with_contract_template, + :native, + project: project, + person_first_name: 'Jane', + person_last_name: 'Doe') + + sign_in(current_user) + visit project_medical_releases_path(project) + click_link *view_release_pdf_link_for(medical_release) + + expect(content_type).to eq('application/pdf') + expect(content_disposition).to include('inline') + expect(pdf_body).not_to have_content for_office_use_only.upcase + expect(pdf_body).not_to have_content producer_label + expect(pdf_body).not_to have_content production_label + expect(pdf_body).not_to have_content employee_issued_to_label + expect(pdf_body).not_to have_content issued_by_label + expect(pdf_body).not_to have_content date_issued + expect(pdf_body).not_to have_content 'Big Joe' + end end context "when the user is manager(project manager)" do @@ -235,6 +314,15 @@ feature "User managing medical releases" do expect(page).to have_link("Download", exact: true, count: 0) end + scenario "Review 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).not_to have_link(review_action, exact: true) + end + scenario "Downloading PDF of native medical release is not possible" do native_release = create(:medical_release_with_contract_template, :native, project: project) @@ -279,6 +367,15 @@ feature "User managing medical releases" do expect(page).to have_link("Download", exact: true, count: 0) end + scenario "Review 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).not_to have_link(review_action, exact: true) + end + scenario "Downloading PDF of native medical release is not possible" do native_release = create(:medical_release_with_contract_template, :native, project: project) @@ -458,4 +555,40 @@ feature "User managing medical releases" do def dummy_signature_legal_text 'Some signature legal language' end + + def review_action + t 'medical_releases.medical_release.actions.review' + end + + def review_page_heading + t 'medical_releases.review.heading' + end + + def approve_button + t 'medical_releases.review.actions.approve' + end + + def for_office_use_only + t 'contracts.for_office_use_only.heading' + end + + def producer_label + t 'contracts.for_office_use_only.description_labels.producer' + end + + def production_label + t 'contracts.for_office_use_only.description_labels.production' + end + + def employee_issued_to_label + t 'contracts.for_office_use_only.description_labels.employee_issued_to' + end + + def issued_by_label + t 'contracts.for_office_use_only.description_labels.issued_by' + end + + def date_issued + t 'contracts.for_office_use_only.description_labels.date_issued' + end end -- 2.47.3 From 196fa7b93b8f45c83da5a68dd83698f77889c8e2 Mon Sep 17 00:00:00 2001 From: Bilal Date: Wed, 8 Jul 2020 11:58:03 +0200 Subject: [PATCH 5/7] move approvals to the new controller --- app/controllers/approvals_controller.rb | 21 +++++++++++++++++++ .../medical_releases_controller.rb | 15 +------------ .../new.html.erb} | 2 +- .../_medical_release.html.erb | 2 +- config/locales/en.yml | 13 ++++++------ config/locales/es.yml | 13 ++++++------ config/routes.rb | 5 +---- 7 files changed, 39 insertions(+), 32 deletions(-) create mode 100644 app/controllers/approvals_controller.rb rename app/views/{medical_releases/review.html.erb => approvals/new.html.erb} (83%) diff --git a/app/controllers/approvals_controller.rb b/app/controllers/approvals_controller.rb new file mode 100644 index 0000000..ad7bdd9 --- /dev/null +++ b/app/controllers/approvals_controller.rb @@ -0,0 +1,21 @@ +class ApprovalsController < ApplicationController + include MedicalReleaseContext + + before_action :set_medical_release + before_action :set_project + + layout "project" + + def create + @medical_release.approve_by(current_user) + if @medical_release.save + redirect_to [@project, :medical_releases], notice: t('.release_approved') + end + end + + private + + def set_project + @project = @medical_release.project + end +end diff --git a/app/controllers/medical_releases_controller.rb b/app/controllers/medical_releases_controller.rb index 46a19c8..9c48ce0 100644 --- a/app/controllers/medical_releases_controller.rb +++ b/app/controllers/medical_releases_controller.rb @@ -2,7 +2,7 @@ class MedicalReleasesController < ApplicationController include ProjectContext, MedicalReleaseContext before_action :set_project, only: [:index] - before_action :set_medical_release, only: [:destroy, :review, :approve] + before_action :set_medical_release, only: [:destroy] include ProjectLayout @@ -18,19 +18,6 @@ class MedicalReleasesController < ApplicationController end end - def review - @project = @medical_release.project - end - - def approve - @project = @medical_release.project - - @medical_release.approve_by(current_user) - if @medical_release.save - redirect_to [@project, :medical_releases], notice: t('.release_approved') - end - end - private def medical_releases diff --git a/app/views/medical_releases/review.html.erb b/app/views/approvals/new.html.erb similarity index 83% rename from app/views/medical_releases/review.html.erb rename to app/views/approvals/new.html.erb index 8499e7c..688d2ba 100644 --- a/app/views/medical_releases/review.html.erb +++ b/app/views/approvals/new.html.erb @@ -3,7 +3,7 @@
" width="90%" height="1200" /> - <%= bootstrap_form_with model: @medical_release, method: :patch, url: [:approve, @medical_release], local: true do |form| %> + <%= bootstrap_form_with model: @medical_release, method: :post, url: medical_release_approvals_path(@medical_release), local: true do |form| %>
<%= link_to t("shared.cancel"), [@medical_release.project, :medical_releases], class: "col-3 text-reset" %>
diff --git a/app/views/medical_releases/_medical_release.html.erb b/app/views/medical_releases/_medical_release.html.erb index 8adc402..94a9c92 100644 --- a/app/views/medical_releases/_medical_release.html.erb +++ b/app/views/medical_releases/_medical_release.html.erb @@ -50,7 +50,7 @@ <%= link_to fa_icon("tags fw", text: "Tags"), [:new, medical_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %> <% end %> <% if policy(MedicalRelease).review? %> - <%= link_to fa_icon("search fw", text: t('.actions.review')), review_medical_release_path(medical_release), class: "dropdown-item" %> + <%= link_to fa_icon("search fw", text: t('.actions.review')), new_medical_release_approvals_path(medical_release), class: "dropdown-item" %> <% end %> <% if policy(MedicalRelease).download_single? && policy(Contract).show? && (medical_release.contract.attached? || medical_release.contract_template.present?) %> <%= link_to fa_icon("download fw", text: "Download"), [medical_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 3a6b39c..4fd633d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -171,6 +171,13 @@ en: sidebar: files: Files team_member: Team Member + approvals: + create: + release_approved: Medical release has been approved + new: + actions: + approve: Approve + heading: Review Medical Release blank_contracts: new: number_of_copies_label: Number of copies @@ -781,8 +788,6 @@ en: update: notice: The material release has been updated medical_releases: - approve: - release_approved: Medical release has been approved custom_validation_errors: question_answer_is_required: answer is required destroy: @@ -802,10 +807,6 @@ en: review: Review messages: approved_tooltip: Approved by %{user} on %{timestamp} - review: - actions: - approve: Approve - heading: Review Medical Release misc_releases: destroy: alert: The misc release has been deleted diff --git a/config/locales/es.yml b/config/locales/es.yml index 31d7f2c..10d3be8 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -50,6 +50,13 @@ es: all_releases: All Releases (ES) complete_releases: Complete Releases (ES) incomplete_releases: Incomplete Releases (ES) + approvals: + create: + release_approved: Medical release has been approved (ES) + new: + actions: + approve: Approve (ES) + heading: Review Medical Release (ES) blank_contracts: new: number_of_copies_label: Number of copies (ES) @@ -294,8 +301,6 @@ es: photos: dropzone_label: Tap to take a photo of Licensed Material (optional) (ES) medical_releases: - approve: - release_approved: Medical release has been approved (ES) custom_validation_errors: question_answer_is_required: answer is required (ES) index: @@ -306,10 +311,6 @@ es: review: Review (ES) messages: approved_tooltip: "" - review: - actions: - approve: Approve (ES) - heading: Review Medical Release (ES) public: appearance_releases: create: diff --git a/config/routes.rb b/config/routes.rb index cc855b2..5096446 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -145,10 +145,7 @@ Rails.application.routes.draw do # Customization for medical releases resources :medical_releases, only: [], concerns: :taggable do - member do - get :review - patch :approve - end + resource :approvals, only: [:new, :create] end resources :bulk_taggings, only: [:new, :create] -- 2.47.3 From 49ab21a3cf1cdca5c66f67cead21a372d926fd30 Mon Sep 17 00:00:00 2001 From: Bilal Date: Wed, 8 Jul 2020 12:19:14 +0200 Subject: [PATCH 6/7] fix specs --- spec/controllers/approvals_controller_spec.rb | 36 +++++++++++++++++++ .../user_managing_medical_releases_spec.rb | 4 +-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 spec/controllers/approvals_controller_spec.rb diff --git a/spec/controllers/approvals_controller_spec.rb b/spec/controllers/approvals_controller_spec.rb new file mode 100644 index 0000000..ad374d1 --- /dev/null +++ b/spec/controllers/approvals_controller_spec.rb @@ -0,0 +1,36 @@ +require "rails_helper" + +RSpec.describe ApprovalsController, type: :controller do + render_views + + let(:user) { create(:user) } + let(:account) { user.primary_account } + let(:project) { create(:project, account: user.primary_account) } + + before do + sign_in user + end + + describe "#new" do + let!(:medical_release) { create(:medical_release, project: project) } + + it "responds successfully" do + get :new, params: { medical_release_id: medical_release } + + expect(response).to be_successful + end + end + + describe "#create" do + it "changes approval status successfully" do + medical_release = create(:medical_release, project: project) + + expect(MedicalRelease.last.approved?).to eq false + + post :create, params: { medical_release_id: medical_release } + + expect(response).to redirect_to [project, :medical_releases] + expect(MedicalRelease.last.approved?).to eq true + end + end +end diff --git a/spec/features/user_managing_medical_releases_spec.rb b/spec/features/user_managing_medical_releases_spec.rb index 31dcbaa..198497e 100644 --- a/spec/features/user_managing_medical_releases_spec.rb +++ b/spec/features/user_managing_medical_releases_spec.rb @@ -561,11 +561,11 @@ feature "User managing medical releases" do end def review_page_heading - t 'medical_releases.review.heading' + t 'approvals.new.heading' end def approve_button - t 'medical_releases.review.actions.approve' + t 'approvals.new.actions.approve' end def for_office_use_only -- 2.47.3 From 11c6575b47ddf623522f1911cfb75efdfe8f42c1 Mon Sep 17 00:00:00 2001 From: Bilal Date: Wed, 8 Jul 2020 12:32:05 +0200 Subject: [PATCH 7/7] fix MR comments --- app/helpers/tooltip_helper.rb | 8 +++++++ app/models/medical_release.rb | 2 +- .../_medical_release.html.erb | 6 +---- .../medical_releases_controller_spec.rb | 23 ------------------- 4 files changed, 10 insertions(+), 29 deletions(-) diff --git a/app/helpers/tooltip_helper.rb b/app/helpers/tooltip_helper.rb index 77db302..f409b97 100644 --- a/app/helpers/tooltip_helper.rb +++ b/app/helpers/tooltip_helper.rb @@ -5,4 +5,12 @@ module TooltipHelper concat tag.div(class: "tooltip-inner") end end + + def get_approval_data_for_medical_release(medical_release) + if medical_release.approved_by_user_name.present? + "#{medical_release.approved_by_user_name} [#{medical_release.approved_by_user_email}]" + else + medical_release.approved_by_user_email + end + end end diff --git a/app/models/medical_release.rb b/app/models/medical_release.rb index c520d8e..996bfc5 100644 --- a/app/models/medical_release.rb +++ b/app/models/medical_release.rb @@ -105,7 +105,7 @@ class MedicalRelease < ApplicationRecord self.approved_by_user_name = user.full_name self.approved_by_user_email = user.email - self.approved_at = DateTime.now + self.approved_at = Time.zone.now end def approved? diff --git a/app/views/medical_releases/_medical_release.html.erb b/app/views/medical_releases/_medical_release.html.erb index 94a9c92..a598998 100644 --- a/app/views/medical_releases/_medical_release.html.erb +++ b/app/views/medical_releases/_medical_release.html.erb @@ -2,11 +2,7 @@ <%= check_box_tag "medical_release_ids[]", medical_release.id, false %> <% if medical_release.approved? %> - <% if medical_release.approved_by_user_name.present? %> - <% tooltip_user_data = "#{medical_release.approved_by_user_name} [#{medical_release.approved_by_user_email}]" %> - <% else %> - <% tooltip_user_data = medical_release.approved_by_user_email %> - <% end %> + <% tooltip_user_data = get_approval_data_for_medical_release(medical_release) %> diff --git a/spec/controllers/medical_releases_controller_spec.rb b/spec/controllers/medical_releases_controller_spec.rb index 7a5cc5b..e7dfa51 100644 --- a/spec/controllers/medical_releases_controller_spec.rb +++ b/spec/controllers/medical_releases_controller_spec.rb @@ -88,27 +88,4 @@ RSpec.describe MedicalReleasesController, type: :controller do }.to change(MedicalRelease, :count).by(-1) end end - - describe "#review" do - let!(:medical_release) { create(:medical_release, project: project) } - - it "responds successfully" do - get :review, params: { project_id: project, id: medical_release } - - expect(response).to be_successful - end - end - - describe "#approve" do - it "changes approval status successfully" do - medical_release = create(:medical_release, project: project) - - expect(MedicalRelease.last.approved?).to eq false - - patch :approve, params: { project_id: project, id: medical_release } - - expect(response).to redirect_to [project, :medical_releases] - expect(MedicalRelease.last.approved?).to eq true - end - end end -- 2.47.3