Browse Source

Parse meta fields where namespace declarations aren't included (#983)

We import XML files that define logs from the previous CORE service. For an unknown reason, some of these files don't include the required namespace declarations to parse `meta` values. Instead of changing the source, this change introduces a new method that forces the namespace declaration for meta fields.
pull/985/head
James Rose 2 years ago committed by GitHub
parent
commit
a4fc795e31
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      app/services/imports/import_service.rb
  2. 10
      app/services/imports/lettings_logs_field_import_service.rb
  3. 12
      app/services/imports/lettings_logs_import_service.rb

8
app/services/imports/import_service.rb

@ -19,8 +19,12 @@ module Imports
end end
end end
def field_value(xml_document, namespace, field) def field_value(xml_document, namespace, field, *args)
xml_document.at_xpath("//#{namespace}:#{field}")&.text xml_document.at_xpath("//#{namespace}:#{field}", *args)&.text
end
def meta_field_value(xml_document, field)
field_value(xml_document, "meta", field, { "meta" => "http://data.gov.uk/core/metadata" })
end end
def overridden?(xml_document, namespace, field) def overridden?(xml_document, namespace, field)

10
app/services/imports/lettings_logs_field_import_service.rb

@ -16,8 +16,8 @@ module Imports
private private
def update_lettings_allocation(xml_doc) def update_lettings_allocation(xml_doc)
old_id = field_value(xml_doc, "meta", "document-id") old_id = meta_field_value(xml_doc, "document-id")
previous_status = field_value(xml_doc, "meta", "status") previous_status = meta_field_value(xml_doc, "status")
record = LettingsLog.find_by(old_id:) record = LettingsLog.find_by(old_id:)
if record.present? && previous_status.include?("submitted") if record.present? && previous_status.include?("submitted")
@ -46,11 +46,11 @@ module Imports
end end
def update_major_repairs(xml_doc) def update_major_repairs(xml_doc)
old_id = field_value(xml_doc, "meta", "document-id") old_id = meta_field_value(xml_doc, "document-id")
record = LettingsLog.find_by(old_id:) record = LettingsLog.find_by(old_id:)
if record.present? if record.present?
previous_status = field_value(xml_doc, "meta", "status") previous_status = meta_field_value(xml_doc, "status")
major_repairs_date = compose_date(xml_doc, "MRCDAY", "MRCMONTH", "MRCYEAR") major_repairs_date = compose_date(xml_doc, "MRCDAY", "MRCMONTH", "MRCYEAR")
major_repairs = if major_repairs_date.present? && previous_status.include?("submitted") major_repairs = if major_repairs_date.present? && previous_status.include?("submitted")
1 1
@ -69,7 +69,7 @@ module Imports
end end
def update_tenant_code(xml_doc) def update_tenant_code(xml_doc)
old_id = field_value(xml_doc, "meta", "document-id") old_id = meta_field_value(xml_doc, "document-id")
record = LettingsLog.find_by(old_id:) record = LettingsLog.find_by(old_id:)
if record.present? if record.present?

12
app/services/imports/lettings_logs_import_service.rb

@ -57,7 +57,7 @@ module Imports
def create_log(xml_doc) def create_log(xml_doc)
attributes = {} attributes = {}
previous_status = field_value(xml_doc, "meta", "status") previous_status = meta_field_value(xml_doc, "status")
# Required fields for status complete or logic to work # Required fields for status complete or logic to work
# Note: order matters when we derive from previous values (attributes parameter) # Note: order matters when we derive from previous values (attributes parameter)
@ -191,9 +191,9 @@ module Imports
# Not specific to our form but required for consistency (present in import) # Not specific to our form but required for consistency (present in import)
attributes["old_form_id"] = safe_string_as_integer(xml_doc, "FORM") attributes["old_form_id"] = safe_string_as_integer(xml_doc, "FORM")
attributes["created_at"] = Time.zone.parse(field_value(xml_doc, "meta", "created-date")) attributes["created_at"] = Time.zone.parse(meta_field_value(xml_doc, "created-date"))
attributes["updated_at"] = Time.zone.parse(field_value(xml_doc, "meta", "modified-date")) attributes["updated_at"] = Time.zone.parse(meta_field_value(xml_doc, "modified-date"))
attributes["old_id"] = field_value(xml_doc, "meta", "document-id") attributes["old_id"] = meta_field_value(xml_doc, "document-id")
# Required for our form invalidated questions (not present in import) # Required for our form invalidated questions (not present in import)
attributes["previous_la_known"] = attributes["prevloc"].nil? ? 0 : 1 attributes["previous_la_known"] = attributes["prevloc"].nil? ? 0 : 1
@ -236,7 +236,7 @@ module Imports
attributes["net_income_value_check"] = 0 attributes["net_income_value_check"] = 0
# Sets the log creator # Sets the log creator
owner_id = field_value(xml_doc, "meta", "owner-user-id").strip owner_id = meta_field_value(xml_doc, "owner-user-id").strip
if owner_id.present? if owner_id.present?
user = LegacyUser.find_by(old_user_id: owner_id)&.user user = LegacyUser.find_by(old_user_id: owner_id)&.user
@logger.warn "Missing user! We expected to find a legacy user with old_user_id #{owner_id}" unless user @logger.warn "Missing user! We expected to find a legacy user with old_user_id #{owner_id}" unless user
@ -355,7 +355,7 @@ module Imports
end end
def get_form_name_component(xml_doc, index) def get_form_name_component(xml_doc, index)
form_name = field_value(xml_doc, "meta", "form-name") form_name = meta_field_value(xml_doc, "form-name")
form_type_components = form_name.split("-") form_type_components = form_name.split("-")
form_type_components[index] form_type_components[index]
end end

Loading…
Cancel
Save