From d70a19b7d59dbdd05350366d8ceeeb82d05b68be Mon Sep 17 00:00:00 2001 From: Bilal Date: Tue, 7 Jul 2020 17:19:04 +0200 Subject: [PATCH] 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');