Submit social housing lettings and sales data (CORE)
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.

54 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],
3 years ago
"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