class Scheme < ApplicationRecord belongs_to :organisation has_many :locations has_many :case_logs scope :search_by_code, ->(code) { where("code ILIKE ?", "%#{code}%") } scope :search_by_service_name, ->(name) { where("service_name ILIKE ?", "%#{name}%") } scope :search_by_postcode, ->(postcode) { joins(:locations).where("locations.postcode ILIKE ?", "%#{postcode.delete(' ')}%") } scope :search_by, ->(param) { search_by_postcode(param).or(search_by_service_name(param)).or(search_by_code(param)).distinct } SCHEME_TYPE = { 0 => "Missings", 4 => "Foyer", 5 => "Direct Access Hostel", 6 => "Other Supported Housing", 7 => "Housing for older people", }.freeze PRIMARY_CLIENT_GROUP = { "O" => "Homeless families with support needs", "H" => "Offenders & people at risk of offending", "M" => "Older people with support needs", "L" => "People at risk of domestic violence", "A" => "People with a physical or sensory disability", "G" => "People with alcohol problems", "F" => "People with drug problems", "B" => "People with HIV or AIDS", "D" => "People with learning disabilities", "E" => "People with mental health problems", "I" => "Refugees (permanent)", "S" => "Rough sleepers", "N" => "Single homeless people with support needs", "R" => "Teenage parents", "Q" => "Young people at risk", "P" => "Young people leaving care", "X" => "Missing", }.freeze SUPPORT_TYPE = { 0 => "Missing", 1 => "Resettlement Support", 2 => "Low levels of support", 3 => "Medium levels of support", 4 => "High levels of care and support", 5 => "Nursing care services to a care home", 6 => "Floating Support", }.freeze INTENDED_STAY = { "M" => "Medium stay", "P" => "Permanent", "S" => "Short Stay", "V" => "Very short stay", "X" => "Missing", }.freeze REGISTERED_UNDER_CARE_ACT = { 0 => "No", 1 => "Yes – part registered as a care home", }.freeze SENSITIVE = { 0 => "No", 1 => "Yes", }.freeze def display_attributes [ { name: "Service code", value: code }, { name: "Name", value: service_name }, { name: "Confidential information", value: sensitive_display }, { name: "Managed by", value: organisation.name }, { name: "Type of scheme", value: scheme_type_display }, { name: "Registered under Care Standards Act 2000", value: registered_under_care_act_display }, { name: "Total number of units", value: total_units }, { name: "Primary client group", value: primary_client_group_display }, { name: "Secondary client group", value: secondary_client_group_display }, { name: "Level of support given", value: support_type_display }, { name: "Intended length of stay", value: intended_stay_display }, ] end def scheme_type_display SCHEME_TYPE[scheme_type] end def sensitive_display SENSITIVE[sensitive] end def registered_under_care_act_display REGISTERED_UNDER_CARE_ACT[registered_under_care_act] end def primary_client_group_display PRIMARY_CLIENT_GROUP[primary_client_group] end def secondary_client_group_display PRIMARY_CLIENT_GROUP[secondary_client_group] end def support_type_display SUPPORT_TYPE[support_type] end def intended_stay_display INTENDED_STAY[intended_stay] end end