You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.9 KiB
60 lines
1.9 KiB
module Imports |
|
class SchemeImportService < ImportService |
|
def create_schemes(folder) |
|
import_from(folder, :create_scheme) |
|
end |
|
|
|
def create_scheme(xml_document) |
|
old_id = string_or_nil(xml_document, "id") |
|
status = string_or_nil(xml_document, "status") |
|
|
|
if status == "Approved" |
|
Scheme.create!( |
|
owning_organisation_id: find_owning_organisation_id(xml_document), |
|
managing_organisation_id: find_managing_organisation_id(xml_document), |
|
service_name: string_or_nil(xml_document, "name"), |
|
arrangement_type: string_or_nil(xml_document, "arrangement_type"), |
|
old_id:, |
|
old_visible_id: safe_string_as_integer(xml_document, "visible-id"), |
|
) |
|
else |
|
@logger.warn("Scheme with legacy ID #{old_id} is not approved (#{status}), skipping") |
|
end |
|
end |
|
|
|
private |
|
|
|
def scheme_field_value(xml_document, field) |
|
field_value(xml_document, "mgmtgroup", field) |
|
end |
|
|
|
def string_or_nil(xml_doc, attribute) |
|
str = scheme_field_value(xml_doc, attribute) |
|
str.presence |
|
end |
|
|
|
# Safe: A string that represents only an integer (or empty/nil) |
|
def safe_string_as_integer(xml_doc, attribute) |
|
str = scheme_field_value(xml_doc, attribute) |
|
Integer(str, exception: false) |
|
end |
|
|
|
def find_owning_organisation_id(xml_doc) |
|
old_org_id = string_or_nil(xml_doc, "institution") |
|
organisation = Organisation.find_by(old_org_id:) |
|
raise "Organisation not found with legacy ID #{old_org_id}" if organisation.nil? |
|
|
|
organisation.id |
|
end |
|
|
|
def find_managing_organisation_id(xml_doc) |
|
old_visible_id = safe_string_as_integer(xml_doc, "agent") |
|
return unless old_visible_id |
|
|
|
organisation = Organisation.find_by(old_visible_id:) |
|
raise "Organisation not found with legacy visible ID #{old_visible_id}" if organisation.nil? |
|
|
|
organisation.id |
|
end |
|
end |
|
end
|
|
|