Class: Form1010Ezr::Service

Inherits:
Common::Client::Base show all
Includes:
Common::Client::Concerns::Monitoring, SentryLogging, VA1010Forms::Utils
Defined in:
lib/form1010_ezr/service.rb

Constant Summary collapse

STATSD_KEY_PREFIX =
'api.1010ezr'
FORM_ID =
'10-10EZR'

Instance Method Summary collapse

Methods included from SentryLogging

#log_exception_to_sentry, #log_message_to_sentry, #non_nil_hash?, #normalize_level, #rails_logger

Methods included from VA1010Forms::Utils

#override_parsed_form, #soap

Methods included from Common::Client::Concerns::Monitoring

#with_monitoring

Methods inherited from Common::Client::Base

configuration, #raise_backend_exception

Constructor Details

#initialize(user) ⇒ Service

Returns a new instance of Service.

Parameters:

  • user (Object)


24
25
26
27
# File 'lib/form1010_ezr/service.rb', line 24

def initialize(user)
  super()
  @user = user
end

Instance Method Details

#log_submission_failure(parsed_form) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/form1010_ezr/service.rb', line 76

def log_submission_failure(parsed_form)
  StatsD.increment("#{Form1010Ezr::Service::STATSD_KEY_PREFIX}.failed_wont_retry")

  if parsed_form.present?
    PersonalInformationLog.create!(
      data: parsed_form,
      error_class: 'Form1010Ezr FailedWontRetry'
    )

    log_message_to_sentry(
      '1010EZR total failure',
      :error,
      {
        first_initial: parsed_form['veteranFullName']['first'][0],
        middle_initial: parsed_form['veteranFullName']['middle'].try(:[], 0),
        last_initial: parsed_form['veteranFullName']['last'][0]
      },
      ezr: :total_failure
    )
  end
end

#submit_async(parsed_form) ⇒ Object



29
30
31
32
33
34
# File 'lib/form1010_ezr/service.rb', line 29

def submit_async(parsed_form)
  HCA::EzrSubmissionJob.perform_async(
    HealthCareApplication::LOCKBOX.encrypt(parsed_form.to_json),
    HealthCareApplication.get_user_identifier(@user)
  )
end

#submit_form(parsed_form) ⇒ Object

Parameters:

  • parsed_form (HashWithIndifferentAccess)

    JSON form data



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/form1010_ezr/service.rb', line 63

def submit_form(parsed_form)
  parsed_form = configure_and_validate_form(parsed_form)
  if Flipper.enabled?(:ezr_async, @user)
    submit_async(parsed_form)
  else
    submit_sync(parsed_form)
  end
rescue => e
  log_submission_failure(parsed_form)
  Rails.logger.error "10-10EZR form submission failed: #{e.message}"
  raise e
end

#submit_sync(parsed_form) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/form1010_ezr/service.rb', line 36

def submit_sync(parsed_form)
  formatted = HCA::EnrollmentSystem.veteran_to_save_submit_form(parsed_form, @user, FORM_ID)
  content = Gyoku.xml(formatted)
  submission = soap.build_request(:save_submit_form, message: content)
  response = with_monitoring do
    perform(:post, '', submission.body)
  rescue => e
    increment_failure('submit_form', e)
    raise e
  ensure
    increment_total('submit_form')
  end

  root = response.body.locate('S:Envelope/S:Body/submitFormResponse').first
  form_submission_id = root.locate('formSubmissionId').first.text.to_i

  # Log the 'formSubmissionId' for successful submissions
  Rails.logger.info("SubmissionID=#{form_submission_id}")

  {
    success: true,
    formSubmissionId: form_submission_id,
    timestamp: root.locate('timeStamp').first&.text || Time.now.getlocal.to_s
  }
end