Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WTH/KG/JM - (SPARCDashboard) Add "Edit" Epic Question / CofC Answers for Authorized Users #1012

Merged
merged 40 commits into from
Jul 26, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
77c94ac
wth - (SPARCDashboard) Add "Edit" Epic Question / CofC Answers for Au…
Jul 6, 2017
c37a62c
committing
Jul 11, 2017
2196f0f
committing this
Jul 11, 2017
cb35272
committing this
Jul 11, 2017
51f044b
committing for Will's perusal
jwiel86 Jul 11, 2017
c9d6182
committing
jwiel86 Jul 12, 2017
e97c605
adding specs
Jul 12, 2017
d43cab1
added file
Jul 13, 2017
3626b89
added specs that check view details after editing
Jul 14, 2017
7395078
expanding spec coverage [#148375589]
jwiel86 Jul 14, 2017
cf63df0
wth - (SPARCDashboard) Add "Edit" Epic Question / CofC Answers for Au…
Jul 6, 2017
473b770
committing
Jul 11, 2017
a16c1fa
committing this
Jul 11, 2017
b8b78b7
committing this
Jul 11, 2017
c646035
committing for Will's perusal
jwiel86 Jul 11, 2017
f385fe7
committing
jwiel86 Jul 12, 2017
10bb1c6
adding specs
Jul 12, 2017
33b4143
added file
Jul 13, 2017
0fcc6d2
added specs that check view details after editing
Jul 14, 2017
70ad7fc
expanding spec coverage [#148375589]
jwiel86 Jul 14, 2017
1fef16c
Merge branch 'wth-edit-epic-question' of github.com:sparc-request/spa…
jwiel86 Jul 14, 2017
0c5dc69
fixing duplicated JS/SASS
Jul 14, 2017
b53ee47
missed case for update protocol type
Jul 14, 2017
caeb1c6
expanding view detail specs
jwiel86 Jul 17, 2017
55e8553
Merge branch 'wth-edit-epic-question' of github.com:sparc-request/spa…
jwiel86 Jul 17, 2017
6a273fb
no longer need this instance variable
Jul 17, 2017
74551d8
addded change protocol type specs
jwiel86 Jul 17, 2017
ffe29e1
Merge branch 'wth-edit-epic-question' of github.com:sparc-request/spa…
jwiel86 Jul 17, 2017
cddcd6f
moved view display stq logic into helper
jwiel86 Jul 17, 2017
7b787b3
calling correct method
jwiel86 Jul 17, 2017
3644d22
YMLize text and refactor a few queries [#148375589]
Jul 18, 2017
029a373
more YAML replacement [#148375589]
Jul 18, 2017
29e23e1
fixed query bug
jwiel86 Jul 18, 2017
5bbbc2b
Merge branch 'wth-edit-epic-question' of github.com:sparc-request/spa…
jwiel86 Jul 18, 2017
f54b309
edge case for editing epic questions
jwiel86 Jul 18, 2017
3d262fa
clean up logic a bit [#148375589]
Jul 18, 2017
af5198d
add condition for edit answer [#148375589]
Jul 18, 2017
b9a9bd0
last tweaks
jwiel86 Jul 18, 2017
40d4032
Merge branch 'v3.0.0' into wth-edit-epic-question
jwiel86 Jul 20, 2017
f891bae
Merge branch 'v3.0.0' into wth-edit-epic-question
jwiel86 Jul 26, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
297 changes: 150 additions & 147 deletions app/assets/javascripts/protocol_form.js.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ toggleFields = (fields, state) ->
resetRmIdFields = (fields, value) ->
$(fields).val(value)

study_type_form = '.selected_for_epic_dependent'
study_selected_for_epic_button = '#selected_for_epic_button'
certificate_of_confidence_dropdown = '#study_type_answer_certificate_of_conf_answer'
higher_level_of_privacy_dropdown = '#study_type_answer_higher_level_of_privacy_answer'
epic_inbasket_dropdown = '#study_type_answer_epic_inbasket_answer'
research_active_dropdown = '#study_type_answer_research_active_answer'
restrict_sending_dropdown = '#study_type_answer_restrict_sending_answer'
certificate_of_confidence_no_epic = '#study_type_answer_certificate_of_conf_no_epic_answer'
higher_level_of_privacy_no_epic = '#study_type_answer_higher_level_of_privacy_no_epic_answer'

$(document).ready ->

if $('.human-subjects:checkbox:checked').length > 0
Expand Down Expand Up @@ -72,21 +82,11 @@ $(document).ready ->
srid : srid
if confirm(I18n['protocols']['change_type']['warning'])
$.ajax
type: 'PATCH'
type: 'PUT'
url: "#{in_dashboard}/protocols/#{protocol_id}/update_protocol_type"
data: data
# Protocol Edit End

study_type_form = '.selected_for_epic_dependent'
study_selected_for_epic_button = '#selected_for_epic_button'
certificate_of_confidence_dropdown = '#study_type_answer_certificate_of_conf_answer'
higher_level_of_privacy_dropdown = '#study_type_answer_higher_level_of_privacy_answer'
epic_inbasket_dropdown = '#study_type_answer_epic_inbasket_answer'
research_active_dropdown = '#study_type_answer_research_active_answer'
restrict_sending_dropdown = '#study_type_answer_restrict_sending_answer'
certificate_of_confidence_no_epic = '#study_type_answer_certificate_of_conf_no_epic_answer'
higher_level_of_privacy_no_epic = '#study_type_answer_higher_level_of_privacy_no_epic_answer'

epic_box_alert_message = () ->
options = {
resizable: false,
Expand All @@ -99,45 +99,11 @@ $(document).ready ->
}
$('#epic_box_alert').dialog(options).dialog("open")

$.prototype.hide_elt = () ->
this[0].selectedIndex = 0
this.selectpicker('refresh')
this.closest('.row').hide()
return this

$.prototype.show_elt = () ->
this.closest('.row').show()
return this

determine_study_type = (answers) ->
array_values = new Array()
for k,v of answers
array_values.push(v)
nil_value = $.inArray('', array_values) < 5
if array_values[0] == 'true' || !nil_value
$.ajax
type: 'POST'
data: answers
url: "/study_type/determine_study_type_note"
success: ->
$('#study_type_note').show()
errors: ->
sweetAlert("Oops...", "Something went wrong!", "error")

#########################
### FORM FIELDS LOGIC ###
#######################################################################################

### INITIAL PAGE LOAD EDIT STUDY IN SPARCRequest #######################
if $('#study_selected_for_epic_true_button').hasClass('active')
$(study_type_form).show()
$(certificate_of_confidence_dropdown).show_elt()
$('#study_type_answer_certificate_of_conf_answer').show_elt()
$('#study_type_note').show()

else if $('#study_selected_for_epic_false_button').hasClass('active') || $('input#epic_config').val() == 'false'
$(study_type_form).show()
$(certificate_of_confidence_no_epic).show_elt()
setup_epic_question_config()

###FUNDING STATUS FIELDS DISPLAY###
$(document).on 'change', '#protocol_funding_status', ->
Expand All @@ -159,107 +125,6 @@ $(document).ready ->



###PUBLISH IN EPIC BUTTON STATES###
$(document).on 'click', '#selected_for_epic_button label', ->
$(this).addClass('active')
$(this).children('input').prop('checked')
$(this).siblings('.active').removeClass('active')

###END PUBLISH IN EPIC BUTTON STATES###

if $("input[name='protocol[selected_for_epic]'][val='true']").prop('checked')
$(study_type_form).show()
$(certificate_of_confidence_dropdown).show_elt()

###EPIC BUTTON FIELDS DISPLAY###
$(document).on 'change', "input[name='protocol[selected_for_epic]']", ->
# Publish Study in Epic - Radio
switch $('#selected_for_epic_button .btn input:radio:checked').val()
when 'true'
$('.question-label').addClass('required')
$(certificate_of_confidence_no_epic).hide_elt().trigger 'change'
$(certificate_of_confidence_dropdown).show_elt()
when 'false'
$('.question-label').removeClass('required')
$(certificate_of_confidence_dropdown).hide_elt().trigger 'change'
$(certificate_of_confidence_no_epic).show_elt()
$(study_type_form).hide()
$(study_type_form).show()


$(document).on 'change', certificate_of_confidence_dropdown, (e) ->
new_value = $(e.target).val()
if new_value == 'false'
$(higher_level_of_privacy_dropdown).show_elt()
$('#study_type_note').hide()
else if new_value == 'true'
$(higher_level_of_privacy_dropdown).hide_elt()
$(epic_inbasket_dropdown).hide_elt()
$(research_active_dropdown).hide_elt()
$(restrict_sending_dropdown).hide_elt()
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
else
$(higher_level_of_privacy_dropdown).hide_elt()
$(epic_inbasket_dropdown).hide_elt()
$(research_active_dropdown).hide_elt()
$(restrict_sending_dropdown).hide_elt()
$('#study_type_note').hide()
return

$(document).on 'change', higher_level_of_privacy_dropdown, (e) ->
if $(e.target).val() == ''
$(epic_inbasket_dropdown).hide_elt()
$(research_active_dropdown).hide_elt()
$(restrict_sending_dropdown).hide_elt()
$('#study_type_note').hide()
else
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
if $('#selected_for_epic_button .btn input:radio:checked').val() == 'true'
$(epic_inbasket_dropdown).show_elt()
return

$(document).on 'change', epic_inbasket_dropdown, (e) ->
if $(e.target).val() == ''
$(research_active_dropdown).hide_elt()
$(restrict_sending_dropdown).hide_elt()
$('#study_type_note').hide()
else
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
$(research_active_dropdown).show_elt()
return

$(document).on 'change', research_active_dropdown, (e) ->
if $(e.target).val() == ''
$(restrict_sending_dropdown).hide_elt()
$('#study_type_note').hide()
else
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
$(restrict_sending_dropdown).show_elt()
return

$(document).on 'change', restrict_sending_dropdown, (e) ->
new_value = $(e.target).val()
if new_value != ''
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
else
$('#study_type_note').hide()
return

$(document).on 'change', certificate_of_confidence_no_epic, (e) ->
new_value = $(e.target).val()
if new_value == 'false'
$(higher_level_of_privacy_no_epic).show_elt()
else
$(higher_level_of_privacy_no_epic).hide_elt()
return

###END EPIC BUTTON FIELDS DISPLAY###

###HUMAN SUBJECTS FIELDS DISPLAY###
$(document).on 'change', '#protocol_research_types_info_attributes_human_subjects', ->
switch $(this).attr('checked')
Expand Down Expand Up @@ -360,3 +225,141 @@ $(document).ready ->
$('#user-select-clear-icon').hide()
$("#protocol_project_roles_attributes_0_identity_id[type='hidden']").val('')
$("#protocol_project_roles_attributes_0_identity_id[type='text']").val('').show()

$.prototype.hide_elt = () ->
this[0].selectedIndex = 0
this.selectpicker('refresh')
this.closest('.row').hide()
return this

$.prototype.show_elt = () ->
this.closest('.row').show()
return this

determine_study_type = (answers) ->
array_values = new Array()
for k,v of answers
array_values.push(v)
nil_value = $.inArray('', array_values) < 5
if array_values[0] == 'true' || !nil_value
$.ajax
type: 'POST'
data: answers
url: "/study_type/determine_study_type_note"
success: ->
$('#study_type_note').show()
errors: ->
sweetAlert("Oops...", "Something went wrong!", "error")

(exports ? this).setup_epic_question_config = () ->
if $('#study_selected_for_epic_true_button').hasClass('active')
$(study_type_form).show()
$(certificate_of_confidence_dropdown).show_elt()
$('#study_type_answer_certificate_of_conf_answer').show_elt()
$('#study_type_note').show()

else if $('#study_selected_for_epic_false_button').hasClass('active') || $('input#epic_config').val() == 'false'
$(study_type_form).show()
$(certificate_of_confidence_no_epic).show_elt()

###PUBLISH IN EPIC BUTTON STATES###
$(document).on 'click', '#selected_for_epic_button label', ->
$(this).addClass('active')
$(this).children('input').prop('checked')
$(this).siblings('.active').removeClass('active')

###END PUBLISH IN EPIC BUTTON STATES###

if $("input[name='protocol[selected_for_epic]'][val='true']").prop('checked')
$(study_type_form).show()
$(certificate_of_confidence_dropdown).show_elt()

###EPIC BUTTON FIELDS DISPLAY###
$(document).on 'change', "input[name='protocol[selected_for_epic]']", ->
# Publish Study in Epic - Radio
switch $('#selected_for_epic_button .btn input:radio:checked').val()
when 'true'
$('.question-label').addClass('required')
$(certificate_of_confidence_no_epic).hide_elt().trigger 'change'
$(certificate_of_confidence_dropdown).show_elt()
when 'false'
$('.question-label').removeClass('required')
$(certificate_of_confidence_dropdown).hide_elt().trigger 'change'
$(certificate_of_confidence_no_epic).show_elt()
$(study_type_form).hide()
$(study_type_form).show()


$(document).on 'change', certificate_of_confidence_dropdown, (e) ->
new_value = $(e.target).val()
if new_value == 'false'
$(higher_level_of_privacy_dropdown).show_elt()
$('#study_type_note').hide()
else if new_value == 'true'
$(higher_level_of_privacy_dropdown).hide_elt()
$(epic_inbasket_dropdown).hide_elt()
$(research_active_dropdown).hide_elt()
$(restrict_sending_dropdown).hide_elt()
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
else
$(higher_level_of_privacy_dropdown).hide_elt()
$(epic_inbasket_dropdown).hide_elt()
$(research_active_dropdown).hide_elt()
$(restrict_sending_dropdown).hide_elt()
$('#study_type_note').hide()
return

$(document).on 'change', higher_level_of_privacy_dropdown, (e) ->
if $(e.target).val() == ''
$(epic_inbasket_dropdown).hide_elt()
$(research_active_dropdown).hide_elt()
$(restrict_sending_dropdown).hide_elt()
$('#study_type_note').hide()
else
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
if $('#selected_for_epic_button .btn input:radio:checked').val() == 'true'
$(epic_inbasket_dropdown).show_elt()
return

$(document).on 'change', epic_inbasket_dropdown, (e) ->
if $(e.target).val() == ''
$(research_active_dropdown).hide_elt()
$(restrict_sending_dropdown).hide_elt()
$('#study_type_note').hide()
else
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
$(research_active_dropdown).show_elt()
return

$(document).on 'change', research_active_dropdown, (e) ->
if $(e.target).val() == ''
$(restrict_sending_dropdown).hide_elt()
$('#study_type_note').hide()
else
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
$(restrict_sending_dropdown).show_elt()
return

$(document).on 'change', restrict_sending_dropdown, (e) ->
new_value = $(e.target).val()
if new_value != ''
data = { ans1: $(certificate_of_confidence_dropdown).val(), ans2: $(higher_level_of_privacy_dropdown).val(), ans3: $(epic_inbasket_dropdown).val(), ans4: $(research_active_dropdown).val(), ans5: $(restrict_sending_dropdown).val(), ans6: "", ans7: "" }
determine_study_type(data)
else
$('#study_type_note').hide()
return

$(document).on 'change', certificate_of_confidence_no_epic, (e) ->
new_value = $(e.target).val()
if new_value == 'false'
$(higher_level_of_privacy_no_epic).show_elt()
else
$(higher_level_of_privacy_no_epic).hide_elt()
return

###END EPIC BUTTON FIELDS DISPLAY###

2 changes: 1 addition & 1 deletion app/controllers/dashboard/protocols_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ def edit
def update
protocol_type = protocol_params[:type]
@protocol = @protocol.becomes(protocol_type.constantize) unless protocol_type.nil?
if params[:updated_protocol_type] == 'true' && protocol_type == 'Study'
if (params[:updated_protocol_type] == 'true' && protocol_type == 'Study') || params[:can_edit] == 'true'
@protocol.assign_attributes(study_type_question_group_id: StudyTypeQuestionGroup.active_id)
@protocol.assign_attributes(selected_for_epic: protocol_params[:selected_for_epic]) if protocol_params[:selected_for_epic]
if @protocol.valid?
Expand Down
31 changes: 31 additions & 0 deletions app/controllers/dashboard/study_type_answers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Copyright © 2011-2016 MUSC Foundation for Research Development
# All rights reserved.

# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided with the distribution.

# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.

# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
# SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

class Dashboard::StudyTypeAnswersController < Dashboard::BaseController

def edit
@protocol = Protocol.find(params[:protocol_id])
@edit_answers = params[:edit_answers].present?
@protocol.populate_for_edit
respond_to do |format|
format.js
end
end
end