Skip to content

Commit

Permalink
references #88 Allow historical status dates to be updated as well as…
Browse files Browse the repository at this point in the history
… specifying a date.
  • Loading branch information
mgurley committed Aug 15, 2017
1 parent 2e9de63 commit e28a92e
Show file tree
Hide file tree
Showing 11 changed files with 301 additions and 135 deletions.
10 changes: 6 additions & 4 deletions app/controllers/disburser_requests_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,6 @@ def create
flash[:success] = 'You have successfully created a repository request.'
redirect_to disburser_requests_url
else
Rails.logger.info("here we go")
Rails.logger.info("#{@disburser_request.errors.full_messages}")
flash.now[:alert] = 'Failed to create repository request.'
render action: 'new'
end
Expand Down Expand Up @@ -162,6 +160,7 @@ def data_status
flash[:success] = 'You have successfully updated the status of a repository request.'
redirect_to data_coordinator_disburser_requests_url
else
@disburser_request.data_status_status_at = DateTime.now.to_s(:date)
flash.now[:alert] = 'Failed to update the status of a repository request.'
render action: 'edit_data_status'
end
Expand All @@ -175,6 +174,7 @@ def specimen_status
flash[:success] = 'You have successfully updated the status of a repository request.'
redirect_to specimen_coordinator_disburser_requests_url
else
@disburser_request.specimen_status_status_at = DateTime.now.to_s(:date)
flash.now[:alert] = 'Failed to update the status of a repository request.'
render action: 'edit_specimen_status'
end
Expand All @@ -193,7 +193,9 @@ def admin_status
flash[:success] = 'You have successfully updated the status of a repository request.'
redirect_to admin_disburser_requests_url
else
puts 'love the booch'
@disburser_request.status_at = DateTime.now.to_s(:date)
@disburser_request.data_status_status_at = DateTime.now.to_s(:date)
@disburser_request.specimen_status_status_at = DateTime.now.to_s(:date)
flash.now[:alert] = 'Failed to update the status of a repository request.'
render action: 'edit_admin_status'
end
Expand Down Expand Up @@ -222,7 +224,7 @@ def load_specimen_types
end

def disburser_request_params
params.require(:disburser_request).permit(:status_at, :data_status_status_at, :specimen_status_status_at, :data_status_comments, :specimen_status_comments, :status_comments, :status, :data_status, :specimen_status, :title, :investigator, :irb_number, :feasibility, :cohort_criteria, :data_for_cohort, :methods_justifications, :methods_justifications_cache, :remove_methods_justifications, :custom_request_form, :custom_request_form_cache, :remove_custom_request_form, :supporting_document, :supporting_document_cache, :remove_supporting_document, disburser_request_details_attributes: [:disburser_request_id, :id, :specimen_type_id, :quantity, :volume, :comments, :_destroy])
params.require(:disburser_request).permit(:status_at, :data_status_status_at, :specimen_status_status_at, :data_status_comments, :specimen_status_comments, :status_comments, :status, :data_status, :specimen_status, :title, :investigator, :irb_number, :feasibility, :cohort_criteria, :data_for_cohort, :methods_justifications, :methods_justifications_cache, :remove_methods_justifications, :custom_request_form, :custom_request_form_cache, :remove_custom_request_form, :supporting_document, :supporting_document_cache, :remove_supporting_document, disburser_request_details_attributes: [:disburser_request_id, :id, :specimen_type_id, :quantity, :volume, :comments, :_destroy], disburser_request_statuses_attributes: [:disburser_request_id, :id, :status_at])
end

def load_repository
Expand Down
8 changes: 7 additions & 1 deletion app/models/disburser_request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,22 @@ class DisburserRequest < ApplicationRecord
belongs_to :repository
belongs_to :submitter, class_name: 'User', foreign_key: :submitter_id
has_many :disburser_request_details
has_many :disburser_request_statuses
has_many :disburser_request_statuses, -> { order(status_at: :asc) } do
def by_status_type(status_type)
self.select { |disburser_request_status| disburser_request_status.status_type == status_type }
end
end
has_many :disburser_request_votes
accepts_nested_attributes_for :disburser_request_details, reject_if: :all_blank, allow_destroy: true
accepts_nested_attributes_for :disburser_request_statuses, allow_destroy: false
validates_presence_of :investigator, :title, :specimen_status, :data_status, :status
validates_presence_of :methods_justifications, if: Proc.new { |disburser_reqeust| !disburser_reqeust.use_custom_request_form }
validates_presence_of :cohort_criteria, if: Proc.new { |disburser_reqeust| !disburser_reqeust.use_custom_request_form }
validates_presence_of :data_for_cohort, if: Proc.new { |disburser_reqeust| !disburser_reqeust.use_custom_request_form }
validates_presence_of :irb_number, if: Proc.new { |disburser_reqeust| !disburser_reqeust.feasibility }
validates_presence_of :custom_request_form, if: Proc.new { |disburser_reqeust| disburser_reqeust.use_custom_request_form }
validates_associated :disburser_request_details
validates_associated :disburser_request_statuses

mount_uploader :methods_justifications, MethodsJustificationsUploader
mount_uploader :custom_request_form, DisburserRequestCustomRequestFormUploader
Expand Down
5 changes: 1 addition & 4 deletions app/models/disburser_request_status.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ class DisburserRequestStatus < ApplicationRecord
has_paper_trail
belongs_to :disburser_request, required: false
belongs_to :user
validates_presence_of :status_at

after_create :send_email_notificaitons

Expand All @@ -10,10 +11,6 @@ class DisburserRequestStatus < ApplicationRecord
DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS = 'specimen_status'
DISBURSER_REQUEST_STATUS_TYPES = [DISBURSER_REQUEST_STATUS_TYPE_STATUS, DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS, DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS]

scope :by_status_type, (lambda do |status_type|
where(status_type: status_type)
end)

def send_email_notificaitons
if !Rails.env.test?
case self.status_type
Expand Down
13 changes: 13 additions & 0 deletions app/policies/disburser_request_policy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,19 @@ def download_file?
user.system_administrator || record.repository.repository_administrator?(user) || record.mine?(user) || record.repository.repository_coordinator?(user) || record.repository.committee_member?(user)
end

def edit_status_history?
user.system_administrator || record.repository.repository_administrator?(user)
end

def edit_specimen_status_history?
record.repository.specimen_coordinator?(user) ||user.system_administrator || record.repository.repository_administrator?(user)
end

def edit_data_status_history?
record.repository.data_coordinator?(user) ||user.system_administrator || record.repository.repository_administrator?(user)
end


def edit_admin_status?
user.system_administrator || record.repository.repository_administrator?(user)
end
Expand Down
112 changes: 66 additions & 46 deletions app/views/disburser_requests/_status_history.html.haml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.status_history{ class: "large-#{width} columns" }
- disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS).order('created_at ASC')
- disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS)
.statuses
%b
Status History
Expand All @@ -10,27 +10,33 @@
%table.hack_stack
%thead
%tr
%th.status
%th.status{ width: 200 }
Status
%th.date
%th.date{ width: 200 }
Date
%th.user
%th.user{ width: 200 }
User
%th.comments
%th.comments{ width: 200 }
Comments
%tbody
- disburser_request_statuses.each do |disburser_request_status|
= content_tag_for(:tr, disburser_request_status) do
%td.status
= disburser_request_status.status
%td.date
= disburser_request_status.status_at.to_s(:date)
%td.user
= disburser_request_status.user.full_name
%td.comments
= disburser_request_status.comments

- disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS).order('created_at ASC')
= f.fields_for :disburser_request_statuses do |disburser_request_status|
- if disburser_request_status.object.status_type == DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_STATUS
= content_tag_for(:tr, disburser_request_status.object) do
%td.status
= disburser_request_status.object.status
%td.date
- if policy(@disburser_request).edit_status_history? && allow_edit
= disburser_request_status.text_field :status_at, class: 'datepicker status_at', value: format_date(disburser_request_status.object.status_at), placeholder: 'Date'
= disburser_request_status.hidden_field :id
- if validation_errors?(disburser_request_status.object, :status_at)
%p.error= format_validation_errors(disburser_request_status.object, :status_at)
- else
= format_date(disburser_request_status.object.status_at)
%td.user
= disburser_request_status.object.user.full_name
%td.comments
= disburser_request_status.object.comments
- disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS)
.data_statuses
%b
Data Status History
Expand All @@ -41,27 +47,34 @@
%table.hack_stack
%thead
%tr
%th.status
%th.status{ width: 200 }
Status
%th.date
%th.date{ width: 200 }
Date
%th.user
%th.user{ width: 200 }
User
%th.comments
%th.comments{ width: 200 }
Comments
%tbody
- disburser_request_statuses.each do |disburser_request_status|
= content_tag_for(:tr, disburser_request_status) do
%td.status
= disburser_request_status.status
%td.date
= disburser_request_status.status_at.to_s(:date)
%td.user
= disburser_request_status.user.full_name
%td.comments
= disburser_request_status.comments
= f.fields_for :disburser_request_statuses do |disburser_request_status|
- if disburser_request_status.object.status_type == DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_DATA_STATUS
= content_tag_for(:tr, disburser_request_status.object) do
%td.status
= disburser_request_status.object.status
%td.date
- if policy(@disburser_request).edit_data_status_history? && allow_edit
= disburser_request_status.text_field :status_at, class: 'datepicker status_at', value: format_date(disburser_request_status.object.status_at), placeholder: 'Date'
= disburser_request_status.hidden_field :id
- if validation_errors?(disburser_request_status.object, :status_at)
%p.error= format_validation_errors(disburser_request_status.object, :status_at)
- else
= format_date(disburser_request_status.object.status_at)
%td.user
= disburser_request_status.object.user.full_name
%td.comments
= disburser_request_status.object.comments

- disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS).order('created_at ASC')
- disburser_request_statuses = @disburser_request.disburser_request_statuses.by_status_type(DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS)
.specimen_statuses
%b
Specimen Status History
Expand All @@ -72,22 +85,29 @@
%table.hack_stack
%thead
%tr
%th.status
%th.status{ width: 200 }
Status
%th.date
%th.date{ width: 200 }
Date
%th.user
%th.user{ width: 200 }
User
%th.comments
%th.comments{ width: 200 }
Comments
%tbody
- disburser_request_statuses.each do |disburser_request_status|
= content_tag_for(:tr, disburser_request_status) do
%td.status
= disburser_request_status.status
%td.date
= disburser_request_status.status_at.to_s(:date)
%td.user
= disburser_request_status.user.full_name
%td.comments
= disburser_request_status.comments
= f.fields_for :disburser_request_statuses do |disburser_request_status|
- if disburser_request_status.object.status_type == DisburserRequestStatus::DISBURSER_REQUEST_STATUS_TYPE_SPECIMEN_STATUS
= content_tag_for(:tr, disburser_request_status.object) do
%td.status
= disburser_request_status.object.status
%td.date
- if policy(@disburser_request).edit_specimen_status_history? && allow_edit
= disburser_request_status.text_field :status_at, class: 'datepicker status_at', value: format_date(disburser_request_status.object.status_at), placeholder: 'Date'
- if validation_errors?(disburser_request_status.object, :status_at)
%p.error= format_validation_errors(disburser_request_status.object, :status_at)
= disburser_request_status.hidden_field :id
- else
= format_date(disburser_request_status.object.status_at)
%td.user
= disburser_request_status.object.user.full_name
%td.comments
= disburser_request_status.object.comments
2 changes: 1 addition & 1 deletion app/views/disburser_requests/edit.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
Indicates required field
= render 'disburser_request', repository: @repository, f: f
.row
= render 'status_history', disburser_request: @disburser_request, width: 18
= render 'status_history', disburser_request: @disburser_request, width: 18, f: f, allow_edit: false
.status_update{ class: 'large-6 columns' }
- if @disburser_request.new_record? || @disburser_request.draft?
%b
Expand Down
2 changes: 1 addition & 1 deletion app/views/disburser_requests/edit_admin_status.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
%a{:href => "#vote-history"} Vote History
.tabs-content{"data-tabs-content" => "administration-info", class: 'large-24 columns'}
#status-history.tabs-panel.is-active
= render 'status_history', disburser_request: @disburser_request, width: 24
= render 'status_history', disburser_request: @disburser_request, width: 24, f: f, allow_edit: true
#vote-history.tabs-panel
= render 'vote_history', disburser_request: @disburser_request, width: 24
.row
Expand Down
53 changes: 26 additions & 27 deletions app/views/disburser_requests/edit_data_status.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,33 @@
= "Request for: #{@disburser_request.repository.name}"
= render 'edit_status', disburser_request: @disburser_request
.row
= render 'status_history', disburser_request: @disburser_request, width: 18
.status_update{ class: 'large-6 columns' }
- if policy(@disburser_request).edit_data_status?
= form_for @disburser_request, url: data_status_disburser_request_url(@disburser_request), html: { class: 'status_disburser_request_form', id: "status_disburser_request_#{@disburser_request.id}" } do |f|
.row
.status{ class: 'large-24 columns' }
%label{for: 'disburser_request_data_status' }
%b
Update Data Status
= f.hidden_field :data_status, id: :data_status_original
- DisburserRequest::DISBURSER_REQUEST_DATA_STATUSES.each do |disburser_request_data_status|
%br
= f.radio_button :data_status, disburser_request_data_status, checked: checked?(@disburser_request.data_status, disburser_request_data_status, false)
= f.label :data_status, disburser_request_data_status, value: disburser_request_data_status
- if @disburser_request.data_status == disburser_request_data_status
= '(current status)'
.data_status_status_at
%label{for: 'disburser_request_data_status_status_at' }
Date
= form_for @disburser_request, url: data_status_disburser_request_url(@disburser_request), html: { class: 'status_disburser_request_form', id: "status_disburser_request_#{@disburser_request.id}" } do |f|
= render 'status_history', disburser_request: @disburser_request, width: 18, f: f, allow_edit: true
.status_update{ class: 'large-6 columns' }
.row
.status{ class: 'large-24 columns' }
%label{for: 'disburser_request_data_status' }
%b
Update Data Status
= f.hidden_field :data_status, id: :data_status_original
- DisburserRequest::DISBURSER_REQUEST_DATA_STATUSES.each do |disburser_request_data_status|
%br
= f.radio_button :data_status, disburser_request_data_status, checked: checked?(@disburser_request.data_status, disburser_request_data_status, false)
= f.label :data_status, disburser_request_data_status, value: disburser_request_data_status
- if @disburser_request.data_status == disburser_request_data_status
= '(current status)'
.data_status_status_at
%label{for: 'disburser_request_data_status_status_at' }
Date
= f.text_field :data_status_status_at, disabled: true, class: 'datepicker'
- if validation_errors?(@disburser_request, :data_status_status_at)
%p.error=format_validation_errors(@disburser_request, :data_status_status_at)
%br
.data_status_comments
%label{for: 'disburser_request_data_status_comments' }
Data Status Comments
= f.text_area :data_status_comments, rows: 3, disabled: true
.row
.navigation{ class: 'large-offset-8 large-16 columns' }
= f.submit 'Save', class: 'button'
= link_to 'Cancel', data_coordinator_disburser_requests_url, class: 'cancel-link button warning'
.data_status_comments
%label{for: 'disburser_request_data_status_comments' }
Data Status Comments
= f.text_area :data_status_comments, rows: 3, disabled: true
.row
.navigation{ class: 'large-offset-8 large-16 columns' }
= f.submit 'Save', class: 'button'
= link_to 'Cancel', data_coordinator_disburser_requests_url, class: 'cancel-link button warning'
Loading

0 comments on commit e28a92e

Please sign in to comment.