From ea071a78e70fb002a76072198d499c5136364141 Mon Sep 17 00:00:00 2001 From: Thomas Scherz Date: Tue, 11 Jun 2024 12:19:00 -0400 Subject: [PATCH] Adds Decommissioned as a status. --- app/controllers/front_controller.rb | 6 +- .../software_records_controller.rb | 63 ++++++++++++++++--- app/views/shared/_dashboard_menu.html.erb | 9 +-- .../edit_decommissioned.html.erb | 38 +++++++++++ .../list_decommissioned.html.erb | 58 +++++++++++++++++ app/views/statuses/_form.html.erb | 6 +- config/routes.rb | 10 +++ db/seeds.rb | 3 +- lib/tasks/create_decommissioned.rake | 10 +++ 9 files changed, 184 insertions(+), 19 deletions(-) create mode 100644 app/views/software_records/edit_decommissioned.html.erb create mode 100644 app/views/software_records/list_decommissioned.html.erb create mode 100644 lib/tasks/create_decommissioned.rake diff --git a/app/controllers/front_controller.rb b/app/controllers/front_controller.rb index 15e45f93..859d015b 100644 --- a/app/controllers/front_controller.rb +++ b/app/controllers/front_controller.rb @@ -69,8 +69,10 @@ def search @parameter = params[:search].downcase search_term = "%#{@parameter}%" - software_records_columns = SoftwareRecord.columns.map { |column| "lower(#{column.name}) LIKE :search" } - @softwarerecords_results = SoftwareRecord.where(software_records_columns.join(' OR '), search: search_term) + software_records_columns = SoftwareRecord.columns.map { |column| "lower(software_records.#{column.name}) LIKE :search" } + @softwarerecords_results = SoftwareRecord.joins(:status) + .where.not(statuses: { status_type: 'Decommissioned' }) + .where(software_records_columns.join(' OR '), search: search_term) vendor_records_columns = VendorRecord.columns.map { |column| "lower(#{column.name}) LIKE :search" } @vendorrecords_results = VendorRecord.where(vendor_records_columns.join(' OR '), search: search_term) diff --git a/app/controllers/software_records_controller.rb b/app/controllers/software_records_controller.rb index ee95d904..192584fb 100644 --- a/app/controllers/software_records_controller.rb +++ b/app/controllers/software_records_controller.rb @@ -21,11 +21,14 @@ def index @params = request.query_parameters @software_records = if @params['filter_by'].to_s == 'software_types' && !@params['software_type_filter'].nil? && !@params['software_type_filter'].empty? - SoftwareRecord.where(software_type_id: @params['software_type_filter']).order("#{sort_column} #{sort_direction}") + SoftwareRecord.joins(:status).where(software_type_id: +@params['software_type_filter']).where.not(statuses: { status_type: 'Decommissioned' }).order("#{sort_column} #{sort_direction}") elsif @params['filter_by'].to_s == 'vendor_records' && !@params['vendor_record_filter'].nil? && !@params['vendor_record_filter'].empty? - SoftwareRecord.where(vendor_record_id: @params['vendor_record_filter']).order("#{sort_column} #{sort_direction}") + SoftwareRecord.joins(:status).where(vendor_record_id: +@params['vendor_record_filter']).where.not(statuses: { status_type: 'Decommissioned' }).order("#{sort_column} #{sort_direction}") else - SoftwareRecord.order("#{sort_column} #{sort_direction}") + SoftwareRecord.joins(:status).where.not(statuses: { status_type: 'Decommissioned' }).order("#{sort_column} +#{sort_direction}") end @vendor_records = VendorRecord.all @software_types = SoftwareType.all @@ -33,7 +36,7 @@ def index end def self.indesign_dashboard(user) - design_status = Status.where(status_type: 'Design') + design_status = Status.where(status_type: %w[Design Development]) design_filter = SoftwareRecord.where(status_id: 0) design_status.each do |design| design_filter = design_filter.or(SoftwareRecord.where(status_id: design.id)) @@ -158,16 +161,53 @@ def check_and_decrypt(sensitive_data) decrypt sensitive_data if sensitive_data.to_s.present? end + def list_decommissioned + $page_title = 'Decommissioned Software | UCL Application Portfolio' + @params = request.query_parameters + + @software_records = if @params['filter_by'].to_s == 'software_types' && !@params['software_type_filter'].nil? && + !@params['software_type_filter'].empty? + SoftwareRecord.joins(:status).where(software_type_id: @params['software_type_filter']).where(status: +'Decommissioned').order("#{sort_priority} #{sort_direction_priority}") + elsif @params['filter_by'].to_s == 'vendor_records' && !@params['vendor_record_filter'].nil? && + !@params['vendor_record_filter'].empty? + SoftwareRecord.joins(:status).where(vendor_record_id: @params['vendor_record_filter']).where(status: +'Decommissioned').order("#{sort_priority} #{sort_direction_priority}") + else + SoftwareRecord.joins(:status).where(statuses: { status_type: 'Decommissioned' }).order("#{sort_column} +#{sort_direction}") + end + @vendor_records = VendorRecord.all + @software_types = SoftwareType.all + @softwarerecords_count = SoftwareRecord.count + end + + def edit_decommissioned + @software_record = SoftwareRecord.find(params[:id]) + end + + def update_decommissioned + @software_record = SoftwareRecord.find(params[:id]) + if @software_record.update(software_record_params) + redirect_to list_decommissioned_path, notice: 'The Software title has been re-commissioned.' + else + render :edit_decommissioned + end + end + def list_upgrades $page_title = 'Maintenance Priority| UCL Application Portfolio' @params = request.query_parameters @software_records = if @params['filter_by'].to_s == 'software_types' && !@params['software_type_filter'].nil? && !@params['software_type_filter'].empty? - SoftwareRecord.where(software_type_id: @params['software_type_filter']).order("#{sort_priority} #{sort_direction_priority}") + SoftwareRecord.joins(:status).where(software_type_id: +@params['software_type_filter']).where.not(statuses: { status_type: 'Decommissioned' }).order("#{sort_priority} #{sort_direction_priority}") elsif @params['filter_by'].to_s == 'vendor_records' && !@params['vendor_record_filter'].nil? && !@params['vendor_record_filter'].empty? - SoftwareRecord.where(vendor_record_id: @params['vendor_record_filter']).order("#{sort_priority} #{sort_direction_priority}") + SoftwareRecord.joins(:status).where(vendor_record_id: +@params['vendor_record_filter']).where.not(statuses: { status_type: 'Decommissioned' }).order("#{sort_priority} #{sort_direction_priority}") else - SoftwareRecord.order("#{sort_priority} #{sort_direction_priority}") + SoftwareRecord.joins(:status).where.not(statuses: { status_type: 'Decommissioned' }).order("#{sort_priority} +#{sort_direction_priority}") end @vendor_records = VendorRecord.all @software_types = SoftwareType.all @@ -179,12 +219,15 @@ def list_road_map @params = request.query_parameters @software_records = if @params['filter_by'].to_s == 'software_types' && !@params['software_type_filter'].nil? && !@params['software_type_filter'].empty? - SoftwareRecord.where(software_type_id: @params['software_type_filter']).order("#{sort_priority} #{sort_direction_priority}") + SoftwareRecord.joins(:status).where(software_type_id: @params['software_type_filter']).where.not(status: +'Decommissioned').order("#{sort_priority} #{sort_direction_priority}") elsif @params['filter_by'].to_s == 'vendor_records' && !@params['vendor_record_filter'].nil? && !@params['vendor_record_filter'].empty? - SoftwareRecord.where(vendor_record_id: @params['vendor_record_filter']).order("#{sort_priority} #{sort_direction_priority}") + SoftwareRecord.joins(:status).where(vendor_record_id: @params['vendor_record_filter']).where.not(status: +'Decommissioned').order("#{sort_priority} #{sort_direction_priority}") else - SoftwareRecord.order("#{sort_column} #{sort_direction}") + SoftwareRecord.joins(:status).where.not(statuses: { status_type: 'Decommissioned' }).order("#{sort_column} +#{sort_direction}") end @vendor_records = VendorRecord.all @software_types = SoftwareType.all diff --git a/app/views/shared/_dashboard_menu.html.erb b/app/views/shared/_dashboard_menu.html.erb index 46124fe7..9416218e 100644 --- a/app/views/shared/_dashboard_menu.html.erb +++ b/app/views/shared/_dashboard_menu.html.erb @@ -19,8 +19,9 @@ View all Hosting Environments View all Change Requests
- Next Software Upgrades + Maintenance List Road Map List + Decommissioned List Manage all Users Import Data
@@ -47,9 +48,9 @@ View all Status View all Hosting Environments
- Next Software Upgrades + Maintenance List Road Map List - View all Change Requests + Change Request List
<% end %> @@ -65,7 +66,7 @@ View all Hosting Environments View all Change Request
- Next Software Upgrades + Maintenance List Road Map List
Export Software Records diff --git a/app/views/software_records/edit_decommissioned.html.erb b/app/views/software_records/edit_decommissioned.html.erb new file mode 100644 index 00000000..5df317ec --- /dev/null +++ b/app/views/software_records/edit_decommissioned.html.erb @@ -0,0 +1,38 @@ +
+
+
+ +

Edit Software Status

+ + <%= form_with(model: @software_record, url: update_decommissioned_software_record_path(@software_record), local: true, class: 'mt-4') do |form| %> + <% if @software_record.errors.any? %> +
+

<%= pluralize(@software_record.errors.count, "error") %> prohibited this status from being saved:

+
    + <% @software_record.errors.full_messages.each do |message| %> +
  • <%= message %>
  • + <% end %> +
+
+ <% end %> + + <% if !@software_record.title.nil? && !@software_record.title.to_s.empty? %> +
+ <%= form.label :title, class: 'form-label' %> +

<%= @software_record.title %>

+
+ <% end %> + +
+ <%= form.label :status_id, class: 'form-label' %> + <%= form.collection_select :status_id, Status.all, :id, :title, prompt: "Select Status" %> +
+ +
+ <%= form.submit 'Update', class: 'btn btn-primary' %> + <%= link_to 'Back', software_records_path, class: 'btn btn-secondary ml-2' %> +
+ <% end %> +
+
+ diff --git a/app/views/software_records/list_decommissioned.html.erb b/app/views/software_records/list_decommissioned.html.erb new file mode 100644 index 00000000..dc90ce5f --- /dev/null +++ b/app/views/software_records/list_decommissioned.html.erb @@ -0,0 +1,58 @@ +
+
+
+
+

Decommissioned +List

+ Collection of all the software application that have been decommissioned.

+
+
+
+
+ +<% if @softwarerecords_count != 0 %> +
+
+ + + + + + <% if current_user.role.to_s == "viewer" %> + + <% elsif current_user.role.to_s == "owner" %> + + <% else %> + + <% end %> + + + + + <% @software_records.each do |software_record| %> + + + <% if current_user.role.to_s == "viewer" %> + + <% elsif current_user.role.to_s == "owner" %> + + <% else %> + + + <% end %> + + <% end %> + +
<%= sortable "title", "Title" %> + <% if params[:direction] == "asc" || params[:direction] == nil %> + + <% else %> + + <% end %>ActionsActionsActions
<%= software_record.title %><%= link_to 'View', software_record , { :class => "btn btn-success action-btn" }%><%= link_to 'Change Status', edit_decommissioned_software_record_path(software_record), class: "btn btn-primary action-btn", style: +"white-space: nowrap;" %><%= link_to 'Change Status', edit_decommissioned_software_record_path(software_record), class: "btn btn-primary action-btn", style: +"white-space: nowrap;" %>
+
+
+<% else %> +

No records found

+<% end %> diff --git a/app/views/statuses/_form.html.erb b/app/views/statuses/_form.html.erb index f8538bb5..03e3d735 100644 --- a/app/views/statuses/_form.html.erb +++ b/app/views/statuses/_form.html.erb @@ -20,9 +20,11 @@
<%= form.label :status_type %> <% if component.eql?("new") %> - <%= form.select :status_type, options_for_select(['Design', 'Production', 'Other'], :selected=>"Design"), {}, {:class => "form-control"} %> + <%= form.select :status_type, options_for_select(['Design', 'Production', 'Decommissioned', 'Development', 'Other'], :selected=>"Design"), +{}, {:class => "form-control"} %> <% else %> - <%= form.select :status_type, options_for_select(['Design', 'Production', 'Other'], :selected=>Status.find_by_id(params[:id]).status_type.to_s), {}, {:class => "form-control"} %> + <%= form.select :status_type, options_for_select(['Design', 'Production', 'Decommissioned', 'Development', 'Other'], +:selected=>Status.find_by_id(params[:id]).status_type.to_s), {}, {:class => "form-control"} %> <% end %>


diff --git a/config/routes.rb b/config/routes.rb index 7d476917..eacc0a14 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -16,6 +16,8 @@ root 'front#index' get 'list_upgrades' => 'software_records#list_upgrades' get 'list_road_map' => 'software_records#list_road_map' + get 'list_decommissioned' => 'software_records#list_decommissioned' + resources :software_records do member do get 'edit_road_map' @@ -23,8 +25,16 @@ end end + resources :software_records do + member do + get 'edit_decommissioned' + patch 'update_decommissioned' + end + end + # get 'software_records/:id/edit_roadmap', to: 'software_records#edit_road_map', as: 'edit_road_map_software_record' get 'edit_road_map_software_records' => 'software_records#list_road_map' + get 'edit_decommissioned_software_records' => 'software_records#list_decommissioned' get 'about', to: 'front#about' get 'contact', to: 'front#contact' get 'request/new', to: 'front#new' diff --git a/db/seeds.rb b/db/seeds.rb index 6f6ac53f..0b8c6c26 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -33,7 +33,8 @@ # Create default status types status = { 'Available': 'Production', 'Development': 'Design', - 'Production': 'Production' } + 'Production': 'Production', + 'Decommissioned': 'Decommissioned' } status.each do |name, desc| Status.create(title: name, status_type: desc) diff --git a/lib/tasks/create_decommissioned.rake b/lib/tasks/create_decommissioned.rake new file mode 100644 index 00000000..307b5ef8 --- /dev/null +++ b/lib/tasks/create_decommissioned.rake @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +namespace 'app_port' do + desc 'Creates Decommissioned Status' + task create_decom: :environment do + # NOTE: In order to see progress in the logs, you must have logging at :info or above + WorksResave.work_resave + Status.new(title: 'Decommissioned', status_type: 'Decommissioned') + end +end