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.
53 lines
2.8 KiB
53 lines
2.8 KiB
module Imports |
|
class OrganisationImportService < ImportService |
|
def create_organisations(folder) |
|
import_from(folder, :create_organisation) |
|
end |
|
|
|
private |
|
|
|
PROVIDER_TYPE = { |
|
"HOUSING-ASSOCIATION" => Organisation.provider_types[:PRP], |
|
"LOCAL-AUTHORITY" => Organisation.provider_types[:LA], |
|
}.freeze |
|
|
|
def create_organisation(xml_document) |
|
old_visible_id = organisation_field_value(xml_document, "visible-id") |
|
|
|
Organisation.create!( |
|
name: organisation_field_value(xml_document, "name"), |
|
provider_type: PROVIDER_TYPE[organisation_field_value(xml_document, "institution-type")], |
|
phone: organisation_field_value(xml_document, "telephone-number"), |
|
holds_own_stock: to_boolean(organisation_field_value(xml_document, "holds-stock")), |
|
active: to_boolean(organisation_field_value(xml_document, "active")), |
|
old_association_type: organisation_field_value(xml_document, "old-association-type"), |
|
software_supplier_id: organisation_field_value(xml_document, "software-supplier-id"), |
|
housing_management_system: organisation_field_value(xml_document, "housing-management-system"), |
|
choice_based_lettings: to_boolean(organisation_field_value(xml_document, "choice-based-lettings")), |
|
common_housing_register: to_boolean(organisation_field_value(xml_document, "common-housing-register")), |
|
choice_allocation_policy: to_boolean(organisation_field_value(xml_document, "choice-allocation-policy")), |
|
cbl_proportion_percentage: organisation_field_value(xml_document, "cbl-proportion-percentage"), |
|
enter_affordable_logs: to_boolean(organisation_field_value(xml_document, "enter-affordable-logs")), |
|
owns_affordable_logs: to_boolean(organisation_field_value(xml_document, "owns-affordable-rent")), |
|
housing_registration_no: organisation_field_value(xml_document, "housing-registration-no"), |
|
general_needs_units: organisation_field_value(xml_document, "general-needs-units"), |
|
supported_housing_units: organisation_field_value(xml_document, "supported-housing-units"), |
|
unspecified_units: organisation_field_value(xml_document, "unspecified-units"), |
|
old_org_id: organisation_field_value(xml_document, "id"), |
|
old_visible_id:, |
|
) |
|
rescue ActiveRecord::RecordNotUnique |
|
name = organisation_field_value(xml_document, "name") |
|
@logger.warn("Organisation #{name} is already present with old visible ID #{old_visible_id}, skipping.") |
|
rescue ActiveRecord::RecordInvalid |
|
@logger.error("Organisation #{old_visible_id}: Failed to import") |
|
raise |
|
end |
|
|
|
def organisation_field_value(xml_document, field) |
|
field_value(xml_document, "institution", field) |
|
rescue Nokogiri::SyntaxError |
|
field_value(xml_document, nil, field) |
|
end |
|
end |
|
end
|
|
|