Skip to content

Commit

Permalink
Merge pull request #325 from bmic-development/jm-moved_xls_creation_f…
Browse files Browse the repository at this point in the history
…or_emails

JM-(SPARCRequest-Production) Step 4 Survey Submission Long Process Time
  • Loading branch information
Stuart-Johnson committed Jun 16, 2017
2 parents 1be22bf + 6d0eb85 commit b7d60dc
Show file tree
Hide file tree
Showing 12 changed files with 236 additions and 221 deletions.
59 changes: 4 additions & 55 deletions app/lib/notifier_logic.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,14 +84,8 @@ def send_admin_notifications(sub_service_requests, request_amendment: false, ssr
sub_service_requests.each do |sub_service_request|
audit_report = request_amendment ? sub_service_request.audit_line_items(@current_user) : nil
sub_service_request.organization.submission_emails_lookup.each do |submission_email|
service_list_false = sub_service_request.service_request.service_list(false, nil, sub_service_request)
service_list_true = sub_service_request.service_request.service_list(true, nil, sub_service_request)
line_items = sub_service_request.line_items
protocol = @service_request.protocol
controller = set_instance_variables(@current_user, @service_request, service_list_false, service_list_true, line_items, protocol)
xls = controller.render_to_string action: 'show', formats: [:xlsx]
individual_ssr = @sub_service_request.present? ? true : false
Notifier.delay.notify_admin(submission_email.email, xls, @current_user, sub_service_request, audit_report, ssr_destroyed, individual_ssr)
Notifier.delay.notify_admin(submission_email.email, @current_user, sub_service_request, audit_report, ssr_destroyed, individual_ssr)
end
end
end
Expand Down Expand Up @@ -158,15 +152,6 @@ def send_user_notifications(request_amendment: false)
audit_report = nil
end

service_list_false = @service_request.service_list(false)
service_list_true = @service_request.service_list(true)
line_items = @service_request.line_items
protocol = @service_request.protocol

controller = set_instance_variables(@current_user, @service_request, service_list_false, service_list_true, line_items, protocol)

xls = controller.render_to_string action: 'show', formats: [:xlsx]

if @service_request.protocol.project_roles.where(identity: @current_user).where.not(project_rights: "approve").any?
approval = @service_request.approvals.create
else
Expand All @@ -179,9 +164,9 @@ def send_user_notifications(request_amendment: false)
# Do not want to send authorized user request amendment emails when audit_report is not present

if request_amendment && audit_report.present?
Notifier.delay.notify_user(project_role, @service_request, @sub_service_request, xls, approval, @current_user, audit_report, individual_ssr)
Notifier.delay.notify_user(project_role, @service_request, @sub_service_request, approval, @current_user, audit_report, individual_ssr)
elsif !request_amendment
Notifier.delay.notify_user(project_role, @service_request, @sub_service_request, xls, approval, @current_user, audit_report, individual_ssr)
Notifier.delay.notify_user(project_role, @service_request, @sub_service_request, approval, @current_user, audit_report, individual_ssr)
end
end
end
Expand All @@ -193,33 +178,8 @@ def send_service_provider_notifications(sub_service_requests, request_amendment:
end

def send_individual_service_provider_notification(sub_service_request, service_provider, audit_report=nil, ssr_destroyed=false, request_amendment=false)
attachments = {}
service_list_true = @service_request.service_list(true, service_provider)
service_list_false = @service_request.service_list(false, service_provider)

# Retrieves the valid line items for service provider to calculate total direct cost in the xls
line_items = []
@service_request.sub_service_requests.each do |ssr|
if service_provider.identity.is_service_provider?(ssr)
line_items << ssr.line_items
end
end

line_items = line_items.flatten
protocol = @service_request.protocol
controller = set_instance_variables(@current_user, @service_request, service_list_false, service_list_true, line_items, protocol)
xls = controller.render_to_string action: 'show', formats: [:xlsx]
attachments["service_request_#{sub_service_request.service_request.id}.xlsx"] = xls
#TODO this is not very multi-institutional
# generate the required forms pdf if it's required

if sub_service_request.organization.tag_list.include? 'required forms'
request_for_grant_billing_form = RequestGrantBillingPdf.generate_pdf service_request
attachments["request_for_grant_billing_#{sub_service_request.service_request.id}.pdf"] = request_for_grant_billing_form
end

individual_ssr = @sub_service_request.present? ? true : false
Notifier.delay.notify_service_provider(service_provider, @service_request, attachments, @current_user, sub_service_request, audit_report, ssr_destroyed, request_amendment, individual_ssr)
Notifier.delay.notify_service_provider(service_provider, @service_request, @current_user, sub_service_request, audit_report, ssr_destroyed, request_amendment, individual_ssr)
end

def filter_audit_trail(identity, ssr_ids_that_need_auditing)
Expand Down Expand Up @@ -302,15 +262,4 @@ def find_draft_ssrs
end
ssrs_with_draft_status
end

def set_instance_variables(current_user, service_request, service_list_false, service_list_true, line_items, protocol)
controller = ServiceRequestsController.new()
controller.instance_variable_set(:"@current_user", current_user)
controller.instance_variable_set(:"@service_request", service_request)
controller.instance_variable_set(:"@service_list_false", service_list_false)
controller.instance_variable_set(:"@service_list_true", service_list_true)
controller.instance_variable_set(:"@line_items", line_items)
controller.instance_variable_set(:"@protocol", protocol)
controller
end
end
121 changes: 87 additions & 34 deletions app/mailers/notifier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,25 @@ def new_identity_waiting_for_approval identity
mail(:to => email, :cc => cc, :from => @identity.email, :subject => subject)
end

def notify_user(project_role, service_request, ssr, xls, approval, user_current, audit_report=nil, individual_ssr=false)
def notify_user(project_role, service_request, ssr, approval, user_current, audit_report=nil, individual_ssr=false)

@protocol = service_request.protocol
@service_request = service_request

### ATTACHMENTS ###
service_list_false = @service_request.service_list(false)
service_list_true = @service_request.service_list(true)
controller = set_instance_variables(user_current, @service_request, service_list_false, service_list_true, @service_request.line_items, @protocol)

xls = controller.render_to_string action: 'show', formats: [:xlsx]
### END ATTACHMENTS ###

if audit_report.present?
@status = 'request_amendment'
elsif individual_ssr
@status = ssr.status
else
@status = service_request.status
@status = @service_request.status
end

@notes = []
Expand All @@ -50,14 +61,12 @@ def notify_user(project_role, service_request, ssr, xls, approval, user_current,
@full_name = @identity.full_name
@audit_report = audit_report

@protocol = service_request.protocol
@service_request = service_request
@service_requester_id = @service_request.sub_service_requests.first.service_requester_id

@portal_link = DASHBOARD_LINK + "/protocols/#{@protocol.id}"
@ssrs_to_be_displayed = individual_ssr ? [ssr] : service_request.sub_service_requests
@ssrs_to_be_displayed = individual_ssr ? [ssr] : @service_request.sub_service_requests

attachments["service_request_#{@service_request.protocol.id}.xlsx"] = xls
attachments["service_request_#{@protocol.id}.xlsx"] = xls

# only send these to the correct person in the production env
email = @identity.email
Expand All @@ -66,25 +75,26 @@ def notify_user(project_role, service_request, ssr, xls, approval, user_current,
mail(:to => email, :from => NO_REPLY_FROM, :subject => subject)
end

def notify_admin(submission_email_address, xls, user_current, ssr, audit_report=nil, ssr_destroyed=false, individual_ssr=false)
def notify_admin(submission_email_address, user_current, ssr, audit_report=nil, ssr_destroyed=false, individual_ssr=false)

@protocol = ssr.protocol
@service_request = ssr.service_request

### ATTACHMENTS ###
service_list_false = @service_request.service_list(false, nil, ssr)
service_list_true = @service_request.service_list(true, nil, ssr)
controller = set_instance_variables(user_current, @service_request, service_list_false, service_list_true, ssr.line_items, @protocol)
xls = controller.render_to_string action: 'show', formats: [:xlsx]
### END ATTACHMENTS ###

@ssr_deleted = false
@notes = ssr.protocol.notes
@notes = @protocol.notes

if ssr_destroyed
@status = 'ssr_destroyed'
elsif audit_report.present?
@status = 'request_amendment'
elsif individual_ssr
@status = ssr.status
else
@status = ssr.service_request.status
end
@status = status(ssr_destroyed, audit_report.present?, individual_ssr, ssr, @service_request)

@role = 'none'
@full_name = submission_email_address

@protocol = ssr.protocol
@service_request = ssr.service_request
@service_requester_id = @service_request.sub_service_requests.first.service_requester_id
@ssrs_to_be_displayed = [ssr]

Expand All @@ -94,7 +104,7 @@ def notify_admin(submission_email_address, xls, user_current, ssr, audit_report=
@audit_report = audit_report

if !ssr_destroyed
attachments["service_request_#{@service_request.protocol.id}.xlsx"] = xls
attachments["service_request_#{@protocol.id}.xlsx"] = xls
end

email = submission_email_address
Expand All @@ -103,31 +113,50 @@ def notify_admin(submission_email_address, xls, user_current, ssr, audit_report=
mail(:to => email, :from => NO_REPLY_FROM, :subject => subject)
end

def notify_service_provider(service_provider, service_request, attachments_to_add, user_current, ssr, audit_report=nil, ssr_destroyed=false, request_amendment=false, individual_ssr=false)
@notes = service_request.protocol.notes

if ssr_destroyed
@status = 'ssr_destroyed'
elsif request_amendment
@status = 'request_amendment'
elsif individual_ssr
@status = ssr.status
else
@status = service_request.status
end
def notify_service_provider(service_provider, service_request, user_current, ssr, audit_report=nil, ssr_destroyed=false, request_amendment=false, individual_ssr=false)
@protocol = service_request.protocol
@service_request = service_request
@notes = @protocol.notes

@status = status(ssr_destroyed, request_amendment, individual_ssr, ssr, @service_request)

@role = 'none'
@full_name = service_provider.identity.full_name

@protocol = service_request.protocol
@service_request = service_request
@service_requester_id = @service_request.sub_service_requests.first.service_requester_id

@audit_report = audit_report

@portal_link = DASHBOARD_LINK + "/protocols/#{@protocol.id}"
@portal_text = "Administrators/Service Providers, Click Here"

### ATTACHMENTS ###
attachments_to_add = {}
service_list_true = @service_request.service_list(true, service_provider)
service_list_false = @service_request.service_list(false, service_provider)

# Retrieves the valid line items for service provider to calculate total direct cost in the xls
line_items = []
@service_request.sub_service_requests.each do |sub_service_request|
if service_provider.identity.is_service_provider?(sub_service_request)
line_items << sub_service_request.line_items
end
end

line_items = line_items.flatten
controller = set_instance_variables(user_current, @service_request, service_list_false, service_list_true, line_items, @protocol)

xls = controller.render_to_string action: 'show', formats: [:xlsx]
attachments_to_add["service_request_#{@service_request.id}.xlsx"] = xls
#TODO this is not very multi-institutional
# generate the required forms pdf if it's required

if ssr.organization.tag_list.include? 'required forms'
request_for_grant_billing_form = RequestGrantBillingPdf.generate_pdf @service_request
attachments_to_add["request_for_grant_billing_#{@service_request.id}.pdf"] = request_for_grant_billing_form
end
### END ATTACHMENTS ###

# only display the ssrs that are associated with service_provider
@ssrs_to_be_displayed = [ssr] if service_provider.identity.is_service_provider?(ssr)

Expand Down Expand Up @@ -247,4 +276,28 @@ def epic_queue_complete sent, failed
@failed = failed
mail(:to => EPIC_QUEUE_REPORT_TO, :from => NO_REPLY_FROM, :subject => "Epic Queue Complete")
end

def set_instance_variables(current_user, service_request, service_list_false, service_list_true, line_items, protocol)
controller = ServiceRequestsController.new()
controller.instance_variable_set(:"@current_user", current_user)
controller.instance_variable_set(:"@service_request", service_request)
controller.instance_variable_set(:"@service_list_false", service_list_false)
controller.instance_variable_set(:"@service_list_true", service_list_true)
controller.instance_variable_set(:"@line_items", line_items)
controller.instance_variable_set(:"@protocol", protocol)
controller
end

def status(ssr_destroyed, request_amendment, individual_ssr, ssr, service_request)
if ssr_destroyed
status = 'ssr_destroyed'
elsif request_amendment
status = 'request_amendment'
elsif individual_ssr
status = ssr.status
else
status = service_request.status
end
status
end
end
6 changes: 6 additions & 0 deletions spec/factories/pricing_setup.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,11 @@
trait :charge_master do
charge_master true
end

trait :without_validations do
to_create { |instance| instance.save(validate: false) }
end

factory :pricing_setup_without_validations, traits: [:without_validations]
end
end
4 changes: 2 additions & 2 deletions spec/lib/notifier_logic/ssr_deletion_emails_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@
end

NotifierLogic.new(@sr, nil, logged_in_user).ssr_deletion_emails(@ssr, ssr_destroyed: true, request_amendment: false)
expect(Notifier).to have_received(:notify_service_provider).with(@service_provider, @sr, anything, logged_in_user, @ssr, nil, true, false, false)
expect(Notifier).to have_received(:notify_service_provider).with(@service_provider, @sr, logged_in_user, @ssr, nil, true, false, false)
end

it 'should notify admin (deletion email)' do
Expand All @@ -97,7 +97,7 @@
end

NotifierLogic.new(@sr, nil, logged_in_user).ssr_deletion_emails(@ssr, ssr_destroyed: true, request_amendment: false)
expect(Notifier).to have_received(:notify_admin).with(@admin_email, anything, logged_in_user, @ssr, nil, true, false)
expect(Notifier).to have_received(:notify_admin).with(@admin_email, logged_in_user, @ssr, nil, true, false)
end
end
end
Expand Down

0 comments on commit b7d60dc

Please sign in to comment.