cirandas.net

ref: master

app/models/national_region.rb


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
class NationalRegion < ApplicationRecord

  SEARCHABLE_FIELDS = {
    :name => {:label => _('Name'), :weight => 1},
    :national_region_code => {:label => _('Region Code'), :weight => 1},
  }

  def self.search_city(city_name, like = false, state = nil)

    operator = "="
    find_return = :first
    adtional_contions = "";

    if like
     operator  = "ilike"
     find_return = :all
    end

    if state
      adtional_contions = " AND nr.name = :state "
    end


    conditions  = ["national_regions.name #{operator} :name AND
                    national_regions.national_region_type_id = :type" + adtional_contions,
                  {:name => city_name ,
                   :type => NationalRegionType::CITY,
                   :state => state}];

    region = NationalRegion
      .select('national_regions.name as city, nr.name as state, national_regions.national_region_code')
      .where(conditions)
      .joins('LEFT JOIN national_regions as nr ON  national_regions.parent_national_region_code = nr.national_region_code')
      .limit(10)
    region = region.send find_return

    return region
  end

  def self.search_state(state_name, like = false)
    operator = "="
    find_return = :first

    if like
     operator  = "ilike"
     find_return = :all
    end

     conditions  = ["national_regions.name #{operator} :name AND
                    national_regions.national_region_type_id = :type",
                  {:name => state_name,
                   :type => NationalRegionType::STATE}];

    region = NationalRegion
      .select('national_regions.name as state, national_regions.national_region_code')
      .where(conditions)
      .limit(10)
    region = region.send find_return

    return region
   end

  def self.validate!(city, state, country)

    country_region = NationalRegion
      .find_by(national_region_code: country, national_region_type_id: NationalRegionType::COUNTRY)

    if(country_region)

      nregion = NationalRegion.search_city(city, false, state);

      if nregion == nil
        raise _('Invalid city or state name.')
      end

    end

    return nregion

  end

end