diff --git a/app/models/csv_variable_definition.rb b/app/models/csv_variable_definition.rb new file mode 100644 index 000000000..566a7a9a7 --- /dev/null +++ b/app/models/csv_variable_definition.rb @@ -0,0 +1,10 @@ +class CsvVariableDefinition < ApplicationRecord + validates :variable, presence: true + validates :definition, presence: true + validates :log_type, presence: true, inclusion: { in: %w[lettings sales] } + validates :year, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 2000, less_than_or_equal_to: 2099 } + attribute :last_accessed, :datetime + + scope :lettings, -> { where(log_type: "lettings") } + scope :sales, -> { where(log_type: "sales") } +end diff --git a/db/migrate/20240726152326_create_csv_variable_definitions.rb b/db/migrate/20240726152326_create_csv_variable_definitions.rb new file mode 100644 index 000000000..31dfba66a --- /dev/null +++ b/db/migrate/20240726152326_create_csv_variable_definitions.rb @@ -0,0 +1,15 @@ +class CreateCsvVariableDefinitions < ActiveRecord::Migration[7.0] + def change + create_table :csv_variable_definitions do |t| + t.string :variable, null: false + t.string :definition, null: false + t.string :log_type, null: false + t.integer :year, null: false + t.datetime :last_accessed + t.timestamps + end + + add_check_constraint :csv_variable_definitions, "log_type IN ('lettings', 'sales')", name: "log_type_check" + add_check_constraint :csv_variable_definitions, "year BETWEEN 2000 AND 2099", name: "year_check" + end +end diff --git a/db/schema.rb b/db/schema.rb index 50073d2d6..fb6274cfc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_07_15_082338) do +ActiveRecord::Schema[7.0].define(version: 2024_08_13_142947) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -46,6 +46,140 @@ ActiveRecord::Schema[7.0].define(version: 2024_07_15_082338) do t.index ["user_id"], name: "index_bulk_uploads_on_user_id" end + create_table "case_logs", force: :cascade do |t| + t.integer "status", default: 0 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.string "tenant_code" + t.integer "person_1_age" + t.string "person_1_gender" + t.string "tenant_ethnic_group" + t.string "tenant_nationality" + t.string "previous_housing_situation" + t.string "armed_forces" + t.string "person_1_economic_status" + t.integer "household_number_of_other_members" + t.string "person_2_relationship" + t.integer "person_2_age" + t.string "person_2_gender" + t.string "person_2_economic_status" + t.string "person_3_relationship" + t.integer "person_3_age" + t.string "person_3_gender" + t.string "person_3_economic_status" + t.string "person_4_relationship" + t.integer "person_4_age" + t.string "person_4_gender" + t.string "person_4_economic_status" + t.string "person_5_relationship" + t.integer "person_5_age" + t.string "person_5_gender" + t.string "person_5_economic_status" + t.string "person_6_relationship" + t.integer "person_6_age" + t.string "person_6_gender" + t.string "person_6_economic_status" + t.string "person_7_relationship" + t.integer "person_7_age" + t.string "person_7_gender" + t.string "person_7_economic_status" + t.string "person_8_relationship" + t.integer "person_8_age" + t.string "person_8_gender" + t.string "person_8_economic_status" + t.string "homelessness" + t.string "reason_for_leaving_last_settled_home" + t.string "benefit_cap_spare_room_subsidy" + t.string "armed_forces_active" + t.string "armed_forces_injured" + t.string "armed_forces_partner" + t.string "medical_conditions" + t.string "pregnancy" + t.string "accessibility_requirements" + t.string "condition_effects" + t.string "tenancy_code" + t.string "tenancy_start_date" + t.string "starter_tenancy" + t.string "fixed_term_tenancy" + t.string "tenancy_type" + t.string "letting_type" + t.string "letting_provider" + t.string "property_location" + t.string "previous_postcode" + t.string "property_relet" + t.string "property_vacancy_reason" + t.string "property_reference" + t.string "property_unit_type" + t.string "property_building_type" + t.string "property_number_of_bedrooms" + t.string "property_void_date" + t.string "property_major_repairs" + t.string "property_major_repairs_date" + t.integer "property_number_of_times_relet" + t.string "property_wheelchair_accessible" + t.integer "net_income" + t.string "net_income_frequency" + t.string "net_income_uc_proportion" + t.string "housing_benefit" + t.string "rent_frequency" + t.string "basic_rent" + t.string "service_charge" + t.string "personal_service_charge" + t.string "support_charge" + t.string "total_charge" + t.string "outstanding_amount" + t.string "time_lived_in_la" + t.string "time_on_la_waiting_list" + t.string "previous_la" + t.string "property_postcode" + t.string "reasonable_preference" + t.string "reasonable_preference_reason" + t.string "cbl_letting" + t.string "chr_letting" + t.string "cap_letting" + t.string "outstanding_rent_or_charges" + t.string "other_reason_for_leaving_last_settled_home" + t.boolean "accessibility_requirements_fully_wheelchair_accessible_housing" + t.boolean "accessibility_requirements_wheelchair_access_to_essential_rooms" + t.boolean "accessibility_requirements_level_access_housing" + t.boolean "accessibility_requirements_other_disability_requirements" + t.boolean "accessibility_requirements_no_disability_requirements" + t.boolean "accessibility_requirements_do_not_know" + t.boolean "accessibility_requirements_prefer_not_to_say" + t.boolean "condition_effects_vision" + t.boolean "condition_effects_hearing" + t.boolean "condition_effects_mobility" + t.boolean "condition_effects_dexterity" + t.boolean "condition_effects_stamina" + t.boolean "condition_effects_learning" + t.boolean "condition_effects_memory" + t.boolean "condition_effects_mental_health" + t.boolean "condition_effects_social_or_behavioral" + t.boolean "condition_effects_other" + t.boolean "condition_effects_prefer_not_to_say" + t.boolean "reasonable_preference_reason_homeless" + t.boolean "reasonable_preference_reason_unsatisfactory_housing" + t.boolean "reasonable_preference_reason_medical_grounds" + t.boolean "reasonable_preference_reason_avoid_hardship" + t.boolean "reasonable_preference_reason_do_not_know" + t.datetime "discarded_at", precision: nil + t.string "other_tenancy_type" + t.boolean "override_net_income_validation" + t.index ["discarded_at"], name: "index_case_logs_on_discarded_at" + end + + create_table "csv_variable_definitions", force: :cascade do |t| + t.string "variable", null: false + t.string "definition", null: false + t.string "log_type", null: false + t.integer "year", null: false + t.datetime "last_accessed" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.check_constraint "log_type::text = ANY (ARRAY['lettings'::character varying::text, 'sales'::character varying::text])", name: "log_type_check" + t.check_constraint "year >= 2000 AND year <= 2099", name: "year_check" + end + create_table "data_protection_confirmations", force: :cascade do |t| t.bigint "organisation_id" t.bigint "data_protection_officer_id" @@ -417,19 +551,21 @@ ActiveRecord::Schema[7.0].define(version: 2024_07_15_082338) do create_table "merge_requests", force: :cascade do |t| t.integer "requesting_organisation_id" - t.text "other_merging_organisations" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "status" t.integer "absorbing_organisation_id" - t.boolean "new_absorbing_organisation" - t.boolean "telephone_number_correct" - t.string "new_telephone_number" - t.string "new_organisation_name" - t.string "new_organisation_address_line1" - t.string "new_organisation_address_line2" - t.string "new_organisation_postcode" - t.string "new_organisation_telephone_number" + t.datetime "merge_date" + t.integer "requester_id" + t.string "helpdesk_ticket" + t.integer "total_users" + t.integer "total_schemes" + t.integer "total_lettings_logs" + t.integer "total_sales_logs" + t.integer "total_stock_owners" + t.integer "total_managing_agents" + t.boolean "signed_dsa", default: false + t.datetime "discarded_at" end create_table "notifications", force: :cascade do |t| @@ -808,15 +944,4 @@ ActiveRecord::Schema[7.0].define(version: 2024_07_15_082338) do end add_foreign_key "lettings_logs", "locations" - add_foreign_key "lettings_logs", "organisations", column: "owning_organisation_id", on_delete: :cascade - add_foreign_key "lettings_logs", "schemes" - add_foreign_key "local_authority_links", "local_authorities" - add_foreign_key "local_authority_links", "local_authorities", column: "linked_local_authority_id" - add_foreign_key "locations", "schemes" - add_foreign_key "organisation_relationships", "organisations", column: "child_organisation_id" - add_foreign_key "organisation_relationships", "organisations", column: "parent_organisation_id" - add_foreign_key "organisations", "organisations", column: "absorbing_organisation_id" - add_foreign_key "sales_logs", "organisations", column: "owning_organisation_id", on_delete: :cascade - add_foreign_key "schemes", "organisations", column: "owning_organisation_id", on_delete: :cascade - add_foreign_key "users", "organisations", on_delete: :cascade end