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.
		
		
		
		
		
			
		
			
				
					
					
						
							64 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							64 lines
						
					
					
						
							1.8 KiB
						
					
					
				class Location < ApplicationRecord | 
						|
  validate :validate_postcode | 
						|
  validates :units, :type_of_unit, :mobility_type, presence: true | 
						|
  belongs_to :scheme | 
						|
 | 
						|
  has_paper_trail | 
						|
 | 
						|
  before_save :lookup_postcode!, if: :postcode_changed? | 
						|
 | 
						|
  attr_accessor :add_another_location | 
						|
 | 
						|
  scope :search_by_postcode, ->(postcode) { where("postcode ILIKE ?", "%#{postcode.gsub(/\s+/, '')}%") } | 
						|
  scope :search_by_name, ->(name) { where("name ILIKE ?", "%#{name}%") } | 
						|
  scope :search_by, ->(param) { search_by_name(param).or(search_by_postcode(param)) } | 
						|
 | 
						|
  MOBILITY_TYPE = { | 
						|
    "Wheelchair-user standard": "W", | 
						|
    "Fitted with equipment and adaptations": "A", | 
						|
    "Property designed to accessible general standard": "M", | 
						|
    "None": "N", | 
						|
    "Missing": "X", | 
						|
  }.freeze | 
						|
 | 
						|
  enum mobility_type: MOBILITY_TYPE | 
						|
 | 
						|
  TYPE_OF_UNIT = { | 
						|
    "Bungalow": 6, | 
						|
    "Self-contained flat or bedsit": 1, | 
						|
    "Self-contained flat or bedsit with common facilities": 2, | 
						|
    "Self-contained house": 7, | 
						|
    "Shared flat": 3, | 
						|
    "Shared house or hostel": 4, | 
						|
  }.freeze | 
						|
 | 
						|
  enum type_of_unit: TYPE_OF_UNIT | 
						|
 | 
						|
  def display_attributes | 
						|
    [ | 
						|
      { name: "Location code ", value: location_code, suffix: false }, | 
						|
      { name: "Postcode", value: postcode, suffix: county }, | 
						|
      { name: "Type of unit", value: type_of_unit, suffix: false }, | 
						|
      { name: "Type of building", value: type_of_building, suffix: false }, | 
						|
    ] | 
						|
  end | 
						|
 | 
						|
private | 
						|
 | 
						|
  PIO = PostcodeService.new | 
						|
 | 
						|
  def validate_postcode | 
						|
    if postcode.nil? || !postcode&.match(POSTCODE_REGEXP) | 
						|
      error_message = I18n.t("validations.postcode") | 
						|
      errors.add :postcode, error_message | 
						|
    end | 
						|
  end | 
						|
 | 
						|
  def lookup_postcode! | 
						|
    result = PIO.lookup(postcode) | 
						|
    if result | 
						|
      self.location_code = result[:location_code] | 
						|
      self.location_admin_district = result[:location_admin_district] | 
						|
    end | 
						|
  end | 
						|
end
 | 
						|
 |