Skip to content

Commit

Permalink
Added new files to upload completed documents
Browse files Browse the repository at this point in the history
  • Loading branch information
edwin-jebaraj committed Feb 4, 2025
1 parent 99a8bc9 commit 532f303
Show file tree
Hide file tree
Showing 25 changed files with 389 additions and 21 deletions.
13 changes: 6 additions & 7 deletions app/controllers/evaluation/download_documents_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,21 @@ class DownloadDocumentsController < ApplicationController
"EnergyBill",
"Support::EmailTemplateAttachment",
"Support::CaseUploadDocument",
"Support::EvaluatorsUploadDocument",
].freeze
def show; end

def update
update_support_details
send_data @download_document.file.download, type: @download_document.file_type, disposition: "inline", filename: @download_document.file_name
send_data @download_document.file.download, type: @download_document.file_type, disposition: "attachment", filename: @download_document.file_name
end

private

helper_method def current_evaluator
@current_evaluator ||= Support::Evaluator.find_by(support_case_id: params[:id], email: current_user.email)
return @current_evaluator if defined? @current_evaluator

@current_evaluator = Support::Evaluator.where("support_case_id = ? AND LOWER(email) = LOWER(?)", params[:id], current_user.email).first
end
def set_current_case
@current_case = Support::Case.find(params[:id])
Expand All @@ -36,7 +39,7 @@ def set_downloaded_documents
end

def check_user_is_evaluator
return if @current_evaluator.nil? || current_user == @current_evaluator.user
return if current_evaluator.present? && current_user.email.downcase == current_evaluator.email.downcase

redirect_to root_path, notice: I18n.t("evaluation.tasks.not_permitted")
end
Expand All @@ -45,10 +48,6 @@ def set_documents
@documents = @current_case.upload_documents
end

def download_document_data
[@download_document.file.download, { type: @download_document.file_type, disposition: "inline", filename: @download_document.file_name }]
end

def update_support_details
Support::EvaluatorsDownloadDocument.upsert(
{
Expand Down
7 changes: 6 additions & 1 deletion app/controllers/evaluation/tasks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ class TasksController < ApplicationController
before_action :set_uploaded_documents
before_action :set_downloaded_documents
before_action :download_document_status
before_action :uploaded_evalaution_files

def edit
session[:email_evaluator_link] = evaluation_task_path(@current_case, host: request.host)
Expand All @@ -16,7 +17,7 @@ def show; end
private

helper_method def current_evaluator
@current_evaluator ||= Support::Evaluator.find_by!(support_case_id: params[:id], email: current_user.email)
@current_evaluator ||= Support::Evaluator.find_by(support_case_id: params[:id], email: current_user.email)
end

def set_current_case
Expand Down Expand Up @@ -47,5 +48,9 @@ def download_document_status
"to_do"
end
end

def uploaded_evalaution_files
@uploaded_evalaution_files ||= Support::EvaluatorsUploadDocument.where(support_case_id: params[:id], email: current_user.email)
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
module Evaluation
class UploadCompletedDocumentsController < ApplicationController
before_action :set_current_case
before_action :check_user_is_evaluator
before_action { @back_url = evaluation_task_path(@current_case) }
before_action :uploaded_files
def show
@document_uploader = @current_case.document_uploader
end

def create
@document_uploader = @current_case.document_uploader(document_uploader_params)
if @document_uploader.valid?
@document_uploader.save_evaluation_document!(current_user.email)
current_evaluator.update!(case_document_uploader_params)
redirect_to @back_url
else
render :show
end
end

def destroy
@uploaded_document = Support::EvaluatorsUploadDocument.find(params[:document_id])
@support_document = Support::Document.find(@uploaded_document.attachable_id)
@back_url = evaluation_upload_completed_document_path(@current_case)
return unless params[:confirm]

@uploaded_document.destroy!
@support_document.destroy!
if @uploaded_files.empty?
reset_uploaded_documents
end
redirect_to evaluation_upload_completed_document_path(case_id: @current_case.id),
notice: I18n.t("support.cases.upload_documents.flash.destroyed", name: @uploaded_document.file_name)
end

private

helper_method def current_evaluator
return @current_evaluator if defined? @current_evaluator

@current_evaluator = Support::Evaluator.where("support_case_id = ? AND LOWER(email) = LOWER(?)", params[:case_id], current_user.email).first
end
def set_current_case
@current_case = Support::Case.find(params[:case_id])
@evaluation_due_date = @current_case.evaluation_due_date? ? @current_case.evaluation_due_date.strftime("%d %B %Y") : nil
end

def document_uploader_params
params.fetch(:document_uploader, {}).permit(:edit_form, files: [])
end

def case_document_uploader_params
params.require(:document_uploader).permit(:has_uploaded_documents)
end

def check_user_is_evaluator
return if current_evaluator.present? && current_user.email.downcase == current_evaluator.email.downcase

redirect_to root_path, notice: I18n.t("evaluation.tasks.not_permitted")
end

def reset_uploaded_documents
current_evaluator.update!(has_uploaded_documents: false)
end

def uploaded_files
@uploaded_files ||= Support::EvaluatorsUploadDocument.where(support_case_id: params[:case_id], email: current_user.email)
end
end
end
8 changes: 6 additions & 2 deletions app/controllers/support/cases/document_uploads_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,15 @@ def create
def destroy
@uploaded_document = Support::CaseUploadDocument.find(params[:document_id])
@support_document = Support::Document.find(@uploaded_document.attachable_id)
evaluator_downloaed_document = Support::EvaluatorsDownloadDocument.find_by(support_case_upload_document_id: params[:document_id])
@back_url = edit_support_case_document_uploads_path
return unless params[:confirm]

@uploaded_document.destroy!
@support_document.destroy!
if evaluator_downloaed_document
evaluator_downloaed_document.destroy!
end

if @uploaded_files.empty?
reset_uploaded_documents
Expand All @@ -42,15 +46,15 @@ def set_current_case
end

def document_uploader_params
params.fetch(:document_uploader, {}).permit(:has_uploaded_documents, files: [])
params.fetch(:document_uploader, {}).permit(:edit_form, files: [])
end

def case_document_uploader_params
params.require(:document_uploader).permit(:has_uploaded_documents)
end

def reset_uploaded_documents
@current_case.update!(has_uploaded_documents: nil)
@current_case.update!(has_uploaded_documents: false)
end
end
end
1 change: 1 addition & 0 deletions app/controllers/support/document_downloads_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class DocumentDownloadsController < Cases::ApplicationController
"EnergyBill",
"Support::EmailTemplateAttachment",
"Support::CaseUploadDocument",
"Support::EvaluatorsUploadDocument",
].freeze

def show
Expand Down
2 changes: 2 additions & 0 deletions app/models/support/case.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ class Case < ApplicationRecord

has_many :upload_documents, class_name: "Support::CaseUploadDocument", foreign_key: :support_case_id

has_many :evaluators_upload_documents, class_name: "Support::EvaluatorsUploadDocument", foreign_key: :support_case_id

# Support level
#
# L1 - Advice and guidance only
Expand Down
14 changes: 14 additions & 0 deletions app/models/support/case/document_uploadable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,18 @@ def upload_document_files(files:)
)
end
end

def upload_evaluation_document_files(files:, email:)
return if files.blank?

files.each do |file|
evaluators_upload_documents.create!(
attachable: Support::Document.create!(case: self, file_type: file.content_type, file:),
file_type: file.content_type,
file_name: file.original_filename,
file_size: file.size,
email:,
)
end
end
end
9 changes: 6 additions & 3 deletions app/models/support/case/document_uploader.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@ class Support::Case::DocumentUploader
attribute :files
attribute :upload_document_files
attribute :support_case
attribute :has_uploaded_documents
attribute :edit_form

validates :files, presence: true, if: -> { support_case.has_uploaded_documents.nil? }
validates :files, presence: true, if: -> { edit_form == "false" }
validate :files_safe, if: -> { files.present? }
validates :has_uploaded_documents, presence: true

def save!
support_case.upload_document_files(files:)
end

def save_evaluation_document!(email)
support_case.upload_evaluation_document_files(files:, email:)
end

private

def files_safe
Expand Down
7 changes: 7 additions & 0 deletions app/models/support/evaluators_upload_document.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Support
class EvaluatorsUploadDocument < ApplicationRecord
belongs_to :case, class_name: "Support::Case", foreign_key: :support_case_id
belongs_to :attachable, polymorphic: true, optional: true
delegate :file, :file_type, to: :attachable
end
end
2 changes: 1 addition & 1 deletion app/views/evaluation/download_documents/show.html.erb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<%= render partial: "support/cases/components/case_header",
locals: { current_case: @current_case } %>
<h1 class="govuk-heading-l"><%= I18n.t("evaluation.download_documents.header") %></h1>
<p class="govuk-body">Use these documents to complete your evaluation of each supplier</p>
<p class="govuk-body">Use these documents to complete your evaluation of each supplier.</p>
<p class="govuk-body govuk-!-static-margin-bottom-8">If you have a problem or conflict of interest,
<% mail_to_address = "mailto:#{ENV.fetch('MS_GRAPH_SHARED_MAILBOX_ADDRESS')}?subject= Case #{ @current_case.ref} - query" %>
<%= link_to "contact us", mail_to_address , class: "govuk-link" %>
Expand Down
16 changes: 14 additions & 2 deletions app/views/evaluation/tasks/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,22 @@
download_status = govuk_tag(text: I18n.t("support.case.label.tasklist.status.to_do"))
end

if @download_document_status == 'complete' && current_evaluator.present? && current_evaluator.has_uploaded_documents == true
upload_status = govuk_tag(text: I18n.t("support.case.label.tasklist.status.complete"), colour: "green")
elsif @download_document_status == 'complete' && ( current_evaluator.present? && current_evaluator.has_uploaded_documents == false && @uploaded_evalaution_files.any? )
upload_status = govuk_tag(text: I18n.t("support.case.label.tasklist.status.in_progress"))
else
upload_status = govuk_tag(text: I18n.t("support.case.label.tasklist.status.to_do"))
end

task_list.with_item(title: I18n.t("evaluation.task_list.item.download_documents"), href: evaluation_download_document_path(@current_case), status: download_status)

task_list.with_item(title: I18n.t("evaluation.task_list.item.upload_completed_documents")) do | item |
item.with_status(text: govuk_tag(text: I18n.t("support.case.label.tasklist.status.cannot_start"), colour: "grey"), cannot_start_yet: true)
if @download_document_status == 'complete'
task_list.with_item(title: I18n.t("evaluation.task_list.item.upload_completed_documents"), href: evaluation_upload_completed_document_path(@current_case), status: upload_status)
else
task_list.with_item(title: I18n.t("evaluation.task_list.item.upload_completed_documents")) do | item |
item.with_status(text: govuk_tag(text: I18n.t("support.case.label.tasklist.status.cannot_start"), colour: "grey"), cannot_start_yet: true)
end
end

task_list.with_item(title: I18n.t("evaluation.task_list.item.evaluation_approved_by_dfe")) do | item |
Expand Down
32 changes: 32 additions & 0 deletions app/views/evaluation/upload_completed_documents/_form.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<%= form_with model: @document_uploader, scope: :document_uploader, url: evaluation_upload_completed_documents_path,
html: { "data-controller" => "case-files" } do |form| %>
<h2 class="govuk-heading-m"><%= I18n.t("support.cases.upload_documents.choose_file_title") %></h2>
<%= form.govuk_error_summary %>
<span class="govuk-button govuk-button--secondary" role="button"
data-case-files-target="btnDisplayFileDialog">
<%= I18n.t("support.cases.upload_documents.button.choose_file") %>
</span>
<%= render "uploaded_documents" %>
<div class="govuk-form-group govuk-!-margin-top-7">
<fieldset class="govuk-fieldset">
<legend class="govuk-fieldset__legend govuk-fieldset__legend--s"><%= I18n.t("evaluation.upload_evaluation.file_upload_confirmation") %></legend>
<div class="govuk-radios">
<div class="govuk-radios__item">
<%= form.radio_button :has_uploaded_documents, true, checked: current_evaluator.present? && current_evaluator.has_uploaded_documents == true, class: "govuk-radios__input" %>
<%= form.label :has_uploaded_documents, "Yes, I have uploaded all documents", value: true, class: "govuk-label govuk-radios__label" %>
</div>
<div class="govuk-radios__item">
<%= form.radio_button :has_uploaded_documents, false, checked: current_evaluator.present? && current_evaluator.has_uploaded_documents == false, class: "govuk-radios__input" %>
<%= form.label :has_uploaded_documents, "No", value: false, class: "govuk-label govuk-radios__label" %>
</div>
</div>
</fieldset>
</div>
<div class="govuk-button-group flex-align-center">
<%= form.submit I18n.t("generic.button.continue"), class: "govuk-button", role: "button", "data-action" => "case-files#submit", data: { disable_with: "Uploading..." } %>
<%= link_to I18n.t("generic.button.cancel"), @back_url, class: "govuk-link govuk-link--no-visited-state" %>
</div>
<%= hidden_field_tag :case_id, @current_case.id %>
<%= form.govuk_file_field :files, multiple: true, include_hidden: false, class: "govuk-!-display-none", "data-case-files-target" => "filesField", form_group: { class: "govuk-!-display-none" } %>
<%= form.hidden_field :edit_form, value: @uploaded_files.any? ? true: false %>
<% end %>
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<h3 class="govuk-heading-s govuk-!-margin-bottom-2"><%= I18n.t("support.cases.upload_documents.file_uploaded") %></h3>
</div>
</div>

<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<div class="govuk-!-display-none" data-case-files-target="fileList">
<div data-case-files-target="filePreview">
<div data-case-files-target="previewTemplate">
<div class="case-files__file">
<span class="case-files__file-name" data-dz-name></span>
<div class="case-files__file-actions">
<span class="case-files__file-remove">
<a class="govuk-link govuk-link--no-visited-state" href="#" data-dz-remove><%= I18n.t("generic.button.delete") %></a>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<% @uploaded_files.each do |uploaded_file| %>
<div class="case-files__file">
<span class="case-files__file-name">
<%= link_to uploaded_file.file_name, evaluation_download_document_path(@current_case, document_type: uploaded_file.class, document_id: uploaded_file.id), method: :put, class: "govuk-link" %>
</span>
<div class="case-files__file-actions">
<span class="case-files__file-remove">
<%= link_to I18n.t("generic.button.delete"),
evaluation_upload_completed_document_path(case_id: @current_case, document_id: uploaded_file),
method: :delete,
class: "govuk-link govuk-link--no-visited-state" %>
</span>
</div>
</div>
<% end %>
</div>
</div>
13 changes: 13 additions & 0 deletions app/views/evaluation/upload_completed_documents/destroy.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<%= render partial: "support/cases/components/case_header", locals: { current_case: @current_case } %>
<h1 class="govuk-heading-l">
<%= I18n.t("support.cases.upload_documents.delete_confirmation", name:@uploaded_document.file_name) %>
</h1>
<div class="govuk-button-group flex-align-center">
<%= link_to I18n.t("generic.button.delete"),
evaluation_upload_completed_document_path(case_id: @current_case, confirm: true, document_id: @uploaded_document.id),
method: :delete,
class: "govuk-button govuk-button--warning" %>
<%= link_to I18n.t("generic.button.cancel"),
evaluation_upload_completed_document_path(@current_case),
class: "govuk-link govuk-link--no-visited-state" %>
</div>
9 changes: 9 additions & 0 deletions app/views/evaluation/upload_completed_documents/show.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<%= render partial: "support/cases/components/case_header",
locals: { current_case: @current_case } %>
<h1 class="govuk-heading-l"><%= I18n.t("evaluation.upload_evaluation.header") %></h1>
<p class="govuk-body">
<%= I18n.t("evaluation.upload_evaluation.page_body_text1") %>
<br>
<%= I18n.t("evaluation.upload_evaluation.page_body_text2") %>
</p>
<%= render "form" %>
2 changes: 1 addition & 1 deletion app/views/support/cases/document_uploads/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,5 @@
</div>

<%= form.govuk_file_field :files, multiple: true, include_hidden: false, class: "govuk-!-display-none", "data-case-files-target" => "filesField", form_group: { class: "govuk-!-display-none" } %>

<%= form.hidden_field :edit_form, value: @uploaded_files.any? ? true: false %>
<% end %>
2 changes: 1 addition & 1 deletion app/views/support/cases/show/_tasklist.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

if @current_case.has_uploaded_documents == true
document_upload_Status = govuk_tag(text: I18n.t("support.case.label.tasklist.status.complete"), colour: "green")
elsif @current_case.has_uploaded_documents == false
elsif @current_case.has_uploaded_documents == false && @current_case.upload_documents.any?
document_upload_Status = govuk_tag(text: I18n.t("support.case.label.tasklist.status.in_progress"))
else
document_upload_Status = govuk_tag(text: I18n.t("support.case.label.tasklist.status.to_do"))
Expand Down
Loading

0 comments on commit 532f303

Please sign in to comment.