caboose-rets 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWU1ZDdiMDI1Mjk0NDE5ZTExNWJmZTc4ZGIyMDUyNDNhN2VhOTIzYw==
4
+ NDY2ZmI0MGRhMDAxODUxNjg0ZTczMjA4YzJmYjNkNzE1N2YyY2IyZg==
5
5
  data.tar.gz: !binary |-
6
- ZTQwYWY0YjJlYTM3ZGUyNDNmN2E1YmUyMzJiMmFiNzE2MTQwZWEyZg==
6
+ ZTUyZjkzOGY4MDFjM2VjMDA4M2VmNWIxZDQ2OGEzOTMwODM4ZGQyNQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NjU5MjdlZWYwNWYzMzRlZjIyNjAxMTc0MGU0ZDQxNGQ4YzY5YTRjNTQ2ZjRk
10
- OGI4MWM5ZTFmZjIwYTkzYWRiMTE4OTc5YTIxNmRiMGVkNGI4OGE4YTAyODUw
11
- ZGJhNDAwMGZiNTQ3MjkwMzA2OGZkMThhZDUzMmE2MGM0ZWRmZTc=
9
+ ZjM0YWEyZjEwZDM2NDFmNWQ2YjUyZmQzNDI2NjM1ZGIyNmQ1ZGE3MDAyYmQ3
10
+ ODBiNjQ1Y2VmNjk0YjAwZTMyMDZkMjI1ZjllODJjNTc3NmQwNmM2M2Y4MzIx
11
+ NWM2ZjhlYTE0ODZlNDdiMGI0NWFkNzU0MDZkMmViZDI5MjI5OGE=
12
12
  data.tar.gz: !binary |-
13
- ZTE0ZTAxNDU4YTRmZGJjYjFlYTgzOTIwYzY0NjkyNjI3NDVmODQ3OWYzZDAx
14
- OTEzOTg4YmY2MjRiODM0NDVjMWFmNTk2ZTMzZmIyNjdjNDJhYTZhZTg1ZTJh
15
- ODQxZDY3ODJkY2VlNzA2NTI3YWE1ZGYwYzFiMDY3NWVjYTkxOTM=
13
+ ODc1ODE5MTU3YmU1ODRmMzYyODkwMGVhODQ2MGEzYzQwYjdlYzU1Mjk2NGYy
14
+ ZTExZmE3ZjIwMjQxZDk3ZTM5ZGRkNzc5ZDk4NTllZWVmMmQ5MmRkODkxOWQ3
15
+ Y2UwZmZkZDE1Yjc3YWQwMWJjZDgwY2JmZDUzY2RjM2IyZWY5YWM=
@@ -1,5 +1,5 @@
1
1
 
2
- class CabooseRets
2
+ module CabooseRets
3
3
  class CommercialController < ApplicationController
4
4
 
5
5
  # GET /commercial
@@ -18,7 +18,7 @@ class CabooseRets
18
18
  'lo_code' => '',
19
19
  'address' => '',
20
20
  },{
21
- 'model' => 'CommercialProperty',
21
+ 'model' => 'CabooseRets::CommercialProperty',
22
22
  'sort' => 'mls_acct',
23
23
  'desc' => false,
24
24
  'base_url' => '/commercial',
@@ -29,11 +29,7 @@ class CabooseRets
29
29
 
30
30
  # GET /commercial/:mls_acct/details
31
31
  def details
32
- @property = CommercialProperty.where(:mls_acct => params[:mls_acct]).first
33
- if @property.lo_code == '46'
34
- @agent = Agent.where(:la_code => @property.la_code).first
35
- end
36
- @message = Message.new
32
+ @property = CommercialProperty.where(:mls_acct => params[:mls_acct]).first
37
33
  end
38
34
 
39
35
  #=============================================================================
@@ -4,31 +4,79 @@ module CabooseRets
4
4
 
5
5
  # GET /land
6
6
  def index
7
- @gen = Caboose::PageBarGenerator.new(params, {
8
- 'mls_acct' => ''
7
+ @gen = Caboose::PageBarGenerator.new(params, {
8
+ 'acreage' => '',
9
+ 'acreage_gte' => '',
10
+ 'acreage_lte' => '',
11
+ 'acreage_source' => '',
12
+ 'adjoining_land_use' => '',
13
+ 'agent_notes_like' => '',
14
+ 'area' => '',
15
+ 'bom_date' => '',
16
+ 'city' => '',
17
+ 'city_code' => '',
18
+ 'co_la_code' => '',
19
+ 'co_lo_code' => '',
20
+ 'co_sa_code' => '',
21
+ 'co_so_code' => '',
22
+ 'converted' => '',
23
+ 'county' => '',
24
+ 'current_price_gte' => '',
25
+ 'current_price_lte' => '',
26
+ 'date_created_gte' => '',
27
+ 'date_created_lte' => '',
28
+ 'date_modified_gte' => '',
29
+ 'date_modified_lte' => '',
30
+ 'elem_school' => '',
31
+ 'ftr_access_like' => '',
32
+ 'ftr_lotdesc_like' => '',
33
+ 'ftr_mineralrights' => '',
34
+ 'ftr_zoning' => '',
35
+ 'high_school' => '',
36
+ 'internet_yn' => '',
37
+ 'la_code' => '',
38
+ 'list_date_gte' => '',
39
+ 'list_date_lte' => '',
40
+ 'list_price_gte' => '',
41
+ 'list_price_lte' => '',
42
+ 'lo_code' => '',
43
+ 'middle_school' => '',
44
+ 'mls_acct' => '',
45
+ 'municipality' => '',
46
+ 'parcel_id' => '',
47
+ 'prop_type' => '',
48
+ 'remarks_like' => '',
49
+ 'sa_code' => '',
50
+ 'so_code' => '',
51
+ 'state' => '',
52
+ 'status' => '',
53
+ 'street_name_like' => '',
54
+ 'street_num_like' => '',
55
+ 'subdivision' => '',
56
+ 'unit_num' => '',
57
+ 'waterfront' => '',
58
+ 'waterfront_yn' => '',
59
+ 'zip' => ''
9
60
  },{
10
- 'model' => 'ResidentialProperty',
61
+ 'model' => 'CabooseRets::LandProperty',
11
62
  'sort' => 'mls_acct',
12
63
  'desc' => false,
13
64
  'base_url' => '/land',
14
65
  'items_per_page' => 10
15
66
  })
16
- Caboose.log(@gen.where)
67
+
17
68
  @properties = @gen.items
18
69
  if params[:waterfront].present? then @properties.reject!{|p| p.waterfront.blank?} end
19
- if params[:ftr_lotdesc] == 'golf' then @properties.reject!{|p| p.ftr_lotdesc != 'golf'} end
20
- #if params[:foreclosure] then @properties.reject!{|p| p.foreclosure_yn != "Y"} end
21
70
  end
22
71
 
23
72
  # GET /land/:mls_acct/details
24
73
  def details
25
- @property = ResidentialProperty.where(:mls_acct => params[:mls_acct]).first
74
+ @property = CabooseRets::LandProperty.where(:mls_acct => params[:mls_acct]).first
26
75
  if @property.nil?
27
76
  @mls_acct = params[:mls_acct]
28
- render 'land/land_not_exists'
77
+ render 'land/not_exists'
29
78
  return
30
- end
31
- @message = Message.new
79
+ end
32
80
  end
33
81
 
34
82
  #=============================================================================
@@ -0,0 +1,98 @@
1
+
2
+ module CabooseRets
3
+ class MultiFamilyController < ApplicationController
4
+
5
+ # GET /multi-family
6
+ def index
7
+ params[:street_num_like] = params[:street_name_like].tr('A-z', '').tr(' ', '') unless params[:street_name_like].nil?
8
+ unless params[:street_name_like].nil?
9
+ params[:street_name_like] = params[:street_name_like].tr('0-9', "")
10
+ until params[:street_name_like][0] != " " || params[:street_name_like] == ''
11
+ params[:street_name_like][0] = '' if params[:street_name_like][0].to_i == 0
12
+ end
13
+ end
14
+
15
+ @gen = Caboose::PageBarGenerator.new(params, {
16
+ 'name' => '',
17
+ 'current_price_gte' => '',
18
+ 'current_price_lte' => '',
19
+ 'bedrooms_gte' => '',
20
+ 'bedrooms_lte' => '',
21
+ 'prop_type' => '',
22
+ 'tot_heat_sqft_gte' => '',
23
+ 'tot_heat_sqft_lte' => '',
24
+ 'neighborhood' => '',
25
+ 'elem_school' => '',
26
+ 'middle_school' => '',
27
+ 'high_school' => '',
28
+ 'address' => '',
29
+ 'lo_lo_code' => '',
30
+ 'remarks_like' => '',
31
+ 'waterfront' => '',
32
+ 'ftr_lotdesc_like' => '',
33
+ 'mls_acct' => '',
34
+ 'subdivision' => '',
35
+ 'foreclosure_yn' => '',
36
+ 'street_name_like' => '',
37
+ 'street_num_like' => '',
38
+ 'date_created_gte' => '',
39
+ 'date_created_lte' => '',
40
+ 'date_modified_gte' => '',
41
+ 'date_modified_lte' => '',
42
+ 'status' => ['active', 'pending']
43
+ },{
44
+ 'model' => 'CabooseRets::MultiFamilyProperty',
45
+ 'sort' => 'current_price ASC, mls_acct',
46
+ 'desc' => false,
47
+ 'base_url' => '/multi-family',
48
+ 'items_per_page' => 10
49
+ })
50
+ @properties = @gen.items
51
+ end
52
+
53
+ # GET /multi_family/:mls_acct/details
54
+ def details
55
+ @property = MultiFamilyProperty.where(:mls_acct => params[:mls_acct]).first
56
+ if @property.nil?
57
+ @mls_acct = params[:mls_acct]
58
+ render 'multi_family/not_exists'
59
+ return
60
+ end
61
+ end
62
+
63
+ #=============================================================================
64
+ # Admin actions
65
+ #=============================================================================
66
+
67
+ # GET /admin/multi_family
68
+ def admin_index
69
+ return if !user_is_allowed('properties', 'view')
70
+
71
+ @gen = Caboose::PageBarGenerator.new(params, {
72
+ 'mls_acct' => ''
73
+ },{
74
+ 'model' => 'MultiFamilyProperty',
75
+ 'sort' => 'mls_acct',
76
+ 'desc' => false,
77
+ 'base_url' => '/admin/multi_family'
78
+ })
79
+ @properties = @gen.items
80
+ render :layout => 'caboose/admin'
81
+ end
82
+
83
+ # GET /admin/multi_family/:mls_acct/edit
84
+ def admin_edit
85
+ return if !user_is_allowed('properties', 'edit')
86
+ @property = MultiFamilyProperty.where(:mls_acct => params[:mls_acct]).first
87
+ render :layout => 'caboose/admin'
88
+ end
89
+
90
+ # GET /admin/multi_family/:mls_acct/refresh
91
+ def admin_refresh
92
+ RetsMultiFamilyImporter.import_property(params[:mls_acct])
93
+ flash[:message] = "<p class='note success'>The property info has been updated from MLS.</p>"
94
+ render :json => Caboose::StdClass.new({ 'reload' => true })
95
+ end
96
+
97
+ end
98
+ end
@@ -26,7 +26,7 @@ module CabooseRets
26
26
  'middle_school' => '',
27
27
  'high_school' => '',
28
28
  'address' => '',
29
- 'lo_code' => '',
29
+ 'lo_lo_code' => '',
30
30
  'remarks_like' => '',
31
31
  'waterfront' => '',
32
32
  'ftr_lotdesc_like' => '',
@@ -41,16 +41,15 @@ module CabooseRets
41
41
  'date_modified_lte' => '',
42
42
  'status' => ['active', 'pending']
43
43
  },{
44
- 'model' => 'ResidentialProperty',
44
+ 'model' => 'CabooseRets::ResidentialProperty',
45
45
  'sort' => 'current_price ASC, mls_acct',
46
46
  'desc' => false,
47
47
  'base_url' => '/residential',
48
48
  'items_per_page' => 10
49
49
  })
50
-
51
-
52
- Caboose.log(@gen.where)
53
- @properties = @gen.items
50
+
51
+ @properties = @gen.items
52
+
54
53
  if params[:waterfront].present? then @properties.reject!{|p| p.waterfront.blank?} end
55
54
  if params[:ftr_lotdesc] == 'golf' then @properties.reject!{|p| p.ftr_lotdesc != 'golf'} end
56
55
  #if params[:foreclosure] then @properties.reject!{|p| p.foreclosure_yn != "Y"} end
@@ -67,7 +66,7 @@ module CabooseRets
67
66
  render 'residential/residential_not_exists'
68
67
  return
69
68
  end
70
- @message = Message.new
69
+ #@message = Message.new
71
70
  end
72
71
 
73
72
  #=============================================================================
@@ -2,21 +2,20 @@
2
2
  class CabooseRets::CommercialProperty < ActiveRecord::Base
3
3
  self.table_name = "rets_commercial"
4
4
 
5
- def agent
6
- return Agent.where(:la_code => self.la_code).first
7
- end
8
-
9
- def office
10
- return Office.where(:lo_code => self.lo_code).first
11
- end
5
+ def agent() return CabooseRets::Agent.where(:la_code => self.la_code).first end
6
+ def office() return CabooseRets::Office.where(:lo_code => self.lo_code).first end
7
+ def images() return CabooseRets::Media.where(:mls_acct => self.mls_acct).order(:media_order).all end
12
8
 
13
- def images
14
- return Media.where(:mls_acct => self.id).order(:media_order).all
15
- end
16
-
17
- def self.geolocatable
18
- all(conditions: "latitude IS NOT NULL AND longitude IS NOT NULL")
19
- end
9
+ def self.geolocatable() all(conditions: "latitude IS NOT NULL AND longitude IS NOT NULL") end
10
+ #def self.property_types() self.pucs("prop_type" ).reject(&:empty?).sort end
11
+ #def self.statuses() self.pucs("status" ).reject(&:empty?).sort end
12
+ #def self.zips() self.pucs("zip" ).reject(&:empty?).sort end
13
+ #def self.cities() self.pucs("city" ).reject(&:empty?).sort end
14
+ #def self.counties() self.pucs("county" ).reject(&:empty?).sort end
15
+ #def self.subdivisions() self.pucs("subdivision" ).reject(&:empty?).sort end
16
+ #def self.elem_schools() self.pucs("elem_school" ).reject(&:empty?).sort end
17
+ #def self.middle_schools() self.pucs("middle_school" ).reject(&:empty?).sort end
18
+ #def self.high_schools() self.pucs("high_school" ).reject(&:empty?).sort end
20
19
 
21
20
  def parse(data)
22
21
  self.acreage = data['ACREAGE']
@@ -2,21 +2,20 @@
2
2
  class CabooseRets::LandProperty < ActiveRecord::Base
3
3
  self.table_name = "rets_land"
4
4
 
5
- def agent
6
- return Agent.where(:la_code => self.la_code).first
7
- end
5
+ def agent() return CabooseRets::Agent.where(:la_code => self.la_code).first end
6
+ def office() return CabooseRets::Office.where(:lo_code => self.lo_code).first end
7
+ def images() return CabooseRets::Media.where(:mls_acct => self.mls_acct).order(:media_order).all end
8
8
 
9
- def office
10
- return Office.where(:lo_code => self.lo_code).first
11
- end
12
-
13
- def images
14
- return Media.where(:mls_acct => self.id).order(:media_order).all
15
- end
16
-
17
- def self.geolocatable
18
- all(conditions: "latitude IS NOT NULL AND longitude IS NOT NULL")
19
- end
9
+ def self.geolocatable() all(conditions: "latitude IS NOT NULL AND longitude IS NOT NULL") end
10
+ #def self.property_types() self.unique_field("prop_type" ) end
11
+ #def self.statuses() self.unique_field("status" ) end
12
+ #def self.zips() self.unique_field("zip" ) end
13
+ #def self.cities() self.unique_field("city" ) end
14
+ #def self.counties() self.unique_field("county" ) end
15
+ #def self.subdivisions() self.unique_field("subdivision" ) end
16
+ #def self.elem_schools() self.unique_field("elem_school" ) end
17
+ #def self.middle_schools() self.unique_field("middle_school" ) end
18
+ #def self.high_schools() self.unique_field("high_school" ) end
20
19
 
21
20
  def parse(data)
22
21
  self.acreage = data['ACREAGE']
@@ -2,22 +2,12 @@
2
2
  class CabooseRets::MultiFamilyProperty < ActiveRecord::Base
3
3
  self.table_name = "rets_multi_family"
4
4
 
5
- def agent
6
- return Agent.where(:la_code => self.la_code).first
7
- end
8
-
9
- def office
10
- return Office.where(:lo_code => self.lo_code).first
11
- end
5
+ def agent() return CabooseRets::Agent.where(:la_code => self.la_code).first end
6
+ def office() return CabooseRets::Office.where(:lo_code => self.lo_code).first end
7
+ def images() return CabooseRets::Media.where(:mls_acct => self.mls_acct).order(:media_order).all end
8
+
9
+ def self.geolocatable() all(conditions: "latitude IS NOT NULL AND longitude IS NOT NULL") end
12
10
 
13
- def images
14
- return Media.where(:mls_acct => self.id).order(:media_order).all
15
- end
16
-
17
- def self.geolocatable
18
- all(conditions: "latitude IS NOT NULL AND longitude IS NOT NULL")
19
- end
20
-
21
11
  def parse(data)
22
12
  self.acreage = data['ACREAGE']
23
13
  self.agent_notes = data['AGENT_NOTES']
@@ -9,7 +9,7 @@ class CabooseRets::Office < ActiveRecord::Base
9
9
  self.lo_email = data['LO_EMAIL']
10
10
  self.lo_fax_phone = data['LO_FAX_PHONE']
11
11
  self.lo_idx_yn = data['LO_IDX_YN']
12
- self.lo_lo_code = data['LO_LO_CODE']
12
+ self.lo_code = data['LO_LO_CODE']
13
13
  self.lo_mailaddr1 = data['LO_MAILADDR1']
14
14
  self.lo_mailaddr2 = data['LO_MAILADDR2']
15
15
  self.lo_mailcity = data['LO_MAILCITY']
@@ -2,21 +2,20 @@
2
2
  class CabooseRets::ResidentialProperty < ActiveRecord::Base
3
3
  self.table_name = "rets_residential"
4
4
 
5
- def agent
6
- return Agent.where(:la_code => self.la_code).first
7
- end
5
+ def agent() return CabooseRets::Agent.where(:la_code => self.la_code).first end
6
+ def office() return CabooseRets::Office.where(:lo_code => self.lo_code).first end
7
+ def images() return CabooseRets::Media.where(:mls_acct => self.mls_acct).order(:media_order).all end
8
8
 
9
- def office
10
- return Office.where(:lo_code => self.lo_code).first
11
- end
12
-
13
- def images
14
- return Media.where(:mls_acct => self.id).order(:media_order).all
15
- end
16
-
17
- def self.geolocatable
18
- all(conditions: "latitude IS NOT NULL AND longitude IS NOT NULL")
19
- end
9
+ def self.geolocatable() all(conditions: "latitude IS NOT NULL AND longitude IS NOT NULL") end
10
+ #def self.property_types() self.uniq.pluck("prop_type" ).reject(&:empty?).sort end
11
+ #def self.statuses() self.uniq.pluck("status" ).reject(&:empty?).sort end
12
+ #def self.zips() self.uniq.pluck("zip" ).reject(&:empty?).sort end
13
+ #def self.cities() self.uniq.pluck("city" ).reject(&:empty?).sort end
14
+ #def self.counties() self.uniq.pluck("county" ).reject(&:empty?).sort end
15
+ #def self.subdivisions() self.uniq.pluck("subdivision" ).reject(&:empty?).sort end
16
+ #def self.elem_schools() self.uniq.pluck("elem_school" ).reject(&:empty?).sort end
17
+ #def self.middle_schools() self.uniq.pluck("middle_school" ).reject(&:empty?).sort end
18
+ #def self.high_schools() self.uniq.pluck("high_school" ).reject(&:empty?).sort end
20
19
 
21
20
  def parse(data)
22
21
  self.bedrooms = data['BEDROOMS']
@@ -2,10 +2,7 @@ require 'ruby-rets'
2
2
  require 'httparty'
3
3
  require 'json'
4
4
 
5
- # Check for examples:
6
5
  # http://rets.solidearth.com/ClientHome.aspx
7
- # https://www.flexmls.com/developers/rets/tutorials/dmql-tutorial/
8
- # https://www.flexmls.com/developers/rets/tutorials/how-to-efficiently-replicate-rets-data/
9
6
 
10
7
  class CabooseRets::RetsImporter # < ActiveRecord::Base
11
8
 
@@ -83,10 +80,13 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
83
80
  # Main updater
84
81
  #=============================================================================
85
82
 
86
- def self.update_after(date_modified)
87
- self.get_config if @@config.nil? || @@config['url'].nil?
88
-
89
- # Import the data
83
+ def self.update_after(date_modified)
84
+ self.update_data_after(date_modified)
85
+ self.update_images_after(date_modified)
86
+ end
87
+
88
+ def self.update_data_after(date_modified)
89
+ self.get_config if @@config.nil? || @@config['url'].nil?
90
90
  self.import_modified_after(date_modified, 'Agent' , 'AGT')
91
91
  self.import_modified_after(date_modified, 'Office' , 'OFF')
92
92
  self.import_modified_after(date_modified, 'OpenHouse' , 'OPH')
@@ -94,9 +94,11 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
94
94
  self.import_modified_after(date_modified, 'Property' , 'LND')
95
95
  self.import_modified_after(date_modified, 'Property' , 'MUL')
96
96
  self.import_modified_after(date_modified, 'Property' , 'RES')
97
- #self.update_coords(obj)
98
-
99
- # Import the images
97
+ self.update_coords
98
+ end
99
+
100
+ def self.update_images_after(date_modified)
101
+ self.get_config if @@config.nil? || @@config['url'].nil?
100
102
  self.download_agent_images_modified_after(date_modified)
101
103
  self.download_property_images_modified_after(date_modified)
102
104
  end
@@ -197,7 +199,8 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
197
199
  #=============================================================================
198
200
 
199
201
  def self.download_property_images_modified_after(date_modified)
200
- [CommercialProperty, LandProperty, MultiFamilyProperty, ResidentialProperty].each do |model|
202
+ models = [CabooseRets::CommercialProperty, CabooseRets::LandProperty, CabooseRets::MultiFamilyProperty, CabooseRets::ResidentialProperty]
203
+ models.each do |model|
201
204
  model.where("photo_date_modified > ?", date_modified.strftime('%FT%T')).each do |p|
202
205
  self.download_property_images(p)
203
206
  end
@@ -243,29 +246,16 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
243
246
  # GPS
244
247
  #=============================================================================
245
248
 
246
- def self.update_coords(p, type = 'RES')
247
- if type == 'RES'
248
- self.update_property_coords(ResidentialProperty, 'residential', p)
249
- elsif type == 'COM'
250
- self.update_property_coords(CommercialProperty, 'commercial', p)
251
- elsif type == 'LND'
252
- self.update_property_coords(LandProperty, 'land', p)
253
- end
254
- end
255
-
256
- def self.update_property_coords(property_class, symbolic_name, property = nil)
257
- if (property.nil?)
258
- if (property_class.where(:latitude => nil).count == 0)
259
- self.log "All #{symbolic_name} properties have GPS coordinates."
260
- return
249
+ def self.update_coords(p = nil)
250
+ if p.nil?
251
+ models = [CabooseRets::CommercialProperty, CabooseRets::LandProperty, CabooseRets::MultiFamilyProperty, CabooseRets::ResidentialProperty]
252
+ models.each do |model|
253
+ model.where(:latitude => nil).reorder(:mls_acct).each do |p|
254
+ self.update_coords(p)
255
+ end
261
256
  end
262
- property_class.where(:latitude => nil).reorder(:mls_acct).each do |p|
263
- self.update_property_coords(property_class, symbolic_name, p)
264
- end
265
- self.update_property_coords(property_class, symbolic_name, nil)
266
257
  return
267
258
  end
268
- p = property
269
259
 
270
260
  coords = self.coords_from_address(CGI::escape "#{p.street_num} #{p.street_name}, #{p.city}, #{p.state} #{p.zip}")
271
261
  return if coords.nil? || coords == false
@@ -273,14 +263,13 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
273
263
  p.latitude = coords['lat']
274
264
  p.longitude = coords['lng']
275
265
  p.save
276
- self.log "Saved #{symbolic_name} property #{p.mls_acct} coords"
266
+ self.log "Saved coords for mls_acct #{p.mls_acct}"
277
267
  end
278
268
 
279
269
  def self.coords_from_address(address)
280
270
  begin
281
271
  uri = "https://maps.googleapis.com/maps/api/geocode/json?address=#{address}&sensor=false"
282
- uri.gsub!(" ", "+")
283
-
272
+ uri.gsub!(" ", "+")
284
273
  resp = HTTParty.get(uri)
285
274
  json = JSON.parse(resp.body)
286
275
  return json['results'][0]['geometry']['location']
@@ -298,6 +287,5 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
298
287
  def self.log(msg)
299
288
  puts "[rets_importer] #{msg}"
300
289
  Rails.logger.info("[rets_importer] #{msg}")
301
- end
302
-
290
+ end
303
291
  end
@@ -0,0 +1,201 @@
1
+
2
+ <label onclick="toggle_slide('residential_search_form');">Search Form</label>
3
+
4
+ <div class='search_form' id='residential_search_form' style='display: none;'>
5
+ <form action="/residential" method="get" id='search_form'>
6
+ <ul>
7
+ <li class='price_range'>
8
+ <label>Price Range</label>
9
+ <div>
10
+ <select id="current_price_gte" name="current_price_gte">
11
+ <option value="" selected="selected">Select</option>
12
+ <% (10000..50000).step(10000) do |x| %><option value="<%= x %>"><%= number_to_currency(x, :precision => 0) %></option><% end %>
13
+ <% (100000..950000).step(50000) do |x| %><option value="<%= x %>"><%= number_to_currency(x, :precision => 0) %></option><% end %>
14
+ <option value="1000000">$1,000,000+</option>
15
+ </select>
16
+ <span>To</span>
17
+ <select id="current_price_lte" name="current_price_lte">
18
+ <option value="" selected="selected">Select</option>
19
+ <% (10000..50000).step(10000) do |x| %><option value="<%= x %>"><%= number_to_currency(x, :precision => 0) %></option><% end %>
20
+ <% (100000..950000).step(50000) do |x| %><option value="<%= x %>"><%= number_to_currency(x, :precision => 0) %></option><% end %>
21
+ <option value="1000000">$1,000,000+</option>
22
+ </select>
23
+ </div>
24
+ </li>
25
+
26
+ <li class='bedroom_count'>
27
+ <label>How Many Beds?</label>
28
+ <div>
29
+ <select id="bedrooms_gte" name="bedrooms_gte">
30
+ <option value="">Any</option>
31
+ <% (1..5).each do |x| %><option value="<%= x %>"><%= x %></option><% end %>
32
+ </select>
33
+ <span>To</span>
34
+ <select id="bedrooms_lte" name="bedrooms_lte">
35
+ <option value="">Any</option>
36
+ <% (1..5).each do |x| %><option value="<%= x %>"><%= x %></option><% end %>
37
+ </select>
38
+ </div>
39
+ </li>
40
+
41
+ <li class='property_type'>
42
+ <label>Property Type</label>
43
+ <div>
44
+ <select id="prop_type" name="prop_type">
45
+ <option value="">Select</option>
46
+ <% @types.each do |f| %><option value="<%= f %>"> <%= f.titleize %></option><% end %>
47
+ </select>
48
+ </div>
49
+ </li>
50
+
51
+ <li class='mls_acct'>
52
+ <label>MLS #</label>
53
+ <div><input class="search-input" id="mls_acct" name="mls_acct" type="text" placeholder="Enter Here" /></div>
54
+ </li>
55
+
56
+ <li class='square_footage'>
57
+ <label>Square Feet</label>
58
+ <div>
59
+ <select id="tot_heat_sqft_gte" name="tot_heat_sqft_gte">
60
+ <option value="" selected="selected">Select</option>
61
+ <% (250..4000).step(250) do |x| %><option value="<%= x %>"><%= x %></option><% end %>
62
+ </select>
63
+ <span>To</span>
64
+ <select id="tot_heat_sqft_lte" name="tot_heat_sqft_lte">
65
+ <option value="" selected="selected">Select</option>
66
+ <% (250..4000).step(250) do |x| %><option value="<%= x %>"><%= x %></option><% end %>
67
+ </select>
68
+ </div>
69
+ </li>
70
+
71
+ <li class='neighborhood'>
72
+ <label>Neighborhood</label>
73
+ <div>
74
+ <select id="subdivision" name="subdivision">
75
+ <option value="">Neighborhood</option>
76
+ <% @subdivisions.each do |f| %><option value="<%= f %>"><%= f.titleize %></option><% end %>
77
+ </select>
78
+ </div>
79
+ </li>
80
+
81
+ <li class='elem_school'>
82
+ <label>Elementary School</label>
83
+ <div>
84
+ <select id="elem_school" name="elem_school">
85
+ <option value="">Select</option>
86
+ <% @elem_schools.each do |f| %><option value="<%= f %>"><%= f.titleize %></option><% end %>
87
+ </select>
88
+ </div>
89
+ </li>
90
+
91
+ <li class='middle_school'>
92
+ <label>Middle School</label>
93
+ <div>
94
+ <select id="middle_school" name="middle_school">
95
+ <option value="">Select</option>
96
+ <% @middle_schools.each do |f| %><option value="<%= f %>"><%= f.titleize %></option><% end %>
97
+ </select>
98
+ </div>
99
+ </li>
100
+
101
+ <li class='high_school'>
102
+ <label>High School</label>
103
+ <div>
104
+ <select id="high_school" name="high_school">
105
+ <option value="">Select</option>
106
+ <% @high_schools.each do |f| %><option value="<%= f %>"><%= f.titleize %></option><% end %>
107
+ </select>
108
+ </div>
109
+ </li>
110
+
111
+ <li class='street'>
112
+ <label>Street</label>
113
+ <div><input id="street_name_like" name="street_name_like" type="text" placeholder="Street" /></div>
114
+ </li>
115
+
116
+ <li class='remarks'>
117
+ <label>Search Keyword</label>
118
+ <div><input id="remarks" name="remarks_like" type="text" placeholder="Keywords" /></div>
119
+ </li>
120
+
121
+ <li class='waterfront'>
122
+ <label>Waterfront</label>
123
+ <div>
124
+ <select id="waterfront" name="waterfront">
125
+ <option value="" selected="selected">Select</option>
126
+ <option value="Y">Yes</option>
127
+ <option value="">No</option>
128
+ </select>
129
+ </div>
130
+ </li>
131
+
132
+ <li class='golf'>
133
+ <label class="h-float-right">Golf Course</label>
134
+ <div>
135
+ <select id="ftr_lotdesc_like" name="ftr_lotdesc_like">
136
+ <option value="" selected="selected">Select</option>
137
+ <option value="golf">Yes</option>
138
+ <option value="">No</option>
139
+ </select>
140
+ </div>
141
+ </li>
142
+
143
+ <li class='latest'>
144
+ <label>Show listings created when?</label>
145
+ <div>
146
+ <select id="date_created_gte" name="date_created_gte">
147
+ <option value="">All Listings</option>
148
+ <% d = DateTime.now - 3 %><option value="<%= d.strftime('%F') %>">In the past 3 days</option>
149
+ <% d = DateTime.now - 7 %><option value="<%= d.strftime('%F') %>">In the past 7 days</option>
150
+ <% d = DateTime.now - 30 %><option value="<%= d.strftime('%F') %>">In the past month</option>
151
+ </select>
152
+ </div>
153
+ </li>
154
+
155
+ <li class='property_status'>
156
+ <label>Property Status</label>
157
+ <div>
158
+ <select id="status" name="status">
159
+ <option value="">All</option>
160
+ <% @statuses.each do |x| %><option value="<%= x %>" <% if x == 'Active'%> selected="selected" <% end %> ><%= x %></option><% end %>
161
+ </select>
162
+ </div>
163
+ </li>
164
+ </ul>
165
+
166
+ <p><input type="submit" value="Search" onclick='search_properties(); return false;' /></p>
167
+ </form>
168
+ </div>
169
+
170
+ <% content_for :js do %>
171
+ <script type='text/javascript'>
172
+
173
+ function input_val(el) {
174
+ t = $(el).attr('type');
175
+ if (t == 'button' || t == 'submit')
176
+ return false;
177
+ val = $(el).val();
178
+ if (val.length > 0)
179
+ return "" + $(el).attr('id') + "=" + val;
180
+ }
181
+ function search_properties() {
182
+ data = []
183
+ $('#search_form input' ).each(function(i, el) { v = input_val(el); if (v) data[data.length] = v; });
184
+ $('#search_form select' ).each(function(i, el) { v = input_val(el); if (v) data[data.length] = v; });
185
+ data = data.join('&');
186
+ if (data.length > 0)
187
+ data = "?" + data
188
+ window.location = '/residential' + data
189
+ }
190
+
191
+ function toggle_slide(el)
192
+ {
193
+ var div = $('#' + el);
194
+ if (div.is(":visible"))
195
+ div.slideUp();
196
+ else
197
+ div.slideDown();
198
+ }
199
+
200
+ </script>
201
+ <% end %>
@@ -1,102 +1,49 @@
1
- <div class="l-wrapper">
2
- <a class="m-btn h-space-mtm" href="/search/residential">Search Residential Listings</a>
3
-
4
- <div class="l-sidebar-border inflate-tenor-baritone h-space-pvm">
5
- <div class="sidebar-body l-grid-border">
6
- <p></p>
7
- <div class="l-grid inflate-baritone-bass listing">
8
- <% if @properties.nil? || @properties == [] %>
9
- <div class='no-results'>No results found</div>
10
- <% else %>
11
- <% @properties.each do |p| %>
12
- <div class='grid-row'>
13
- <div class='grid-unit-1of4 list-part' id='list1'>
14
- <a href="/residential/<%= p.mls_acct %>/details"><img src='https://s3.amazonaws.com/advantagerealtygroup.com/residential/<%= p.mls_acct %>_1_thumb.jpg' width="400" /></a><br>
15
- <div id='list-meta'>
16
- <span class='address'><% if !p.unit_num.nil? && p.unit_num.strip.length > 0 %>Unit <%= p.unit_num %>, <% end %><%= p.street_num %> <%= p.street_name.titleize %></span><br> <!-- , {city}, {state} {zip} -->
17
- <% if p.lo_code != '46' %>
18
- <span class="nonadvantage_agent"><% if p.owner_name && p.office && p.office.name %>Listing Courtesy of <%= p.office.name.titleize %><% end %></span>
19
- <% else %>
20
- <span class="advantage_agent"><% if p.agent %>Listing Courtesy of <%= p.agent.first_name.titleize %> <%= p.agent.last_name.titleize %><% end %></span>
21
- <% end %>
22
- </div>
23
- </div>
24
-
25
- <div class='grid-unit-1of4 list-part' id='list2'>
26
- <% if p.current_price != 0 %><span class='price'><%=h number_to_currency(p.current_price, :precision => 0) %></span><br><% end %>
27
- <% if p.foreclosure_yn == 'Y' %> <span class='list-info' style='font-size: 0.8em;'>(Foreclosure)</span><br> <% end %>
28
- <div class="info-meta">
29
- <span class='list-info'>Sq. footage: <span class='sqfeet'> <%= p.tot_heat_sqft %></span></span> <br>
30
- <span class='list-info'>Bedrooms: <%= p.bedrooms %></span> <br>
31
- <span class='list-info'>Full baths: <%= p.baths_full %></span> <br>
32
- <span class='list-info'>Half baths: <%= p.baths_half %></span> <br>
33
- </div>
34
- <span>MLS#: <%= p.mls_acct %></span>
35
- </div>
36
1
 
37
- <div class='grid-unit-1of4 list-part' id='list3'>
38
- <div class="list-schools">
39
- Schools:<br>
40
- <span class="school"> Elementary - <%= p.elem_school.titleize %></span> <br>
41
- <span class="school">Middle - <%= p.middle_school.titleize %></span> <br>
42
- <span class="school">High - <%= p.high_school.titleize %></span> <br>
43
- </div>
44
- <div class='desc-container'>
45
- <span class='description'><%= p.remarks %></span>
46
- </div>
47
- </div>
2
+ <%= render :partial => 'caboose_rets/residential/search_form' %>
48
3
 
49
- <div class='grid-unit-1of4 list-part' id='list4'>
50
- <a href="/residential/<%= p.mls_acct %>/details" class="m-btn-ornate">
51
- <div class="btn-inner see-more">MORE DETAILS</div>
52
- </a>
53
- <br>
54
- <% if p.lo_code == '46' && p.agent %>
55
- <a href="/agents/<%= p.la_code %>" class="m-btn-ornate">
56
- <div class="btn-inner contact-btn">Contact <%= p.agent.first_name.titleize %> <%= p.agent.last_name.titleize %></div>
57
- </a>
58
- <% else %>
59
- <a href="/agents/048540000" class="m-btn-ornate">
60
- <div class="btn-inner contact-btn">Contact Advantage</div>
61
- </a>
62
- <% end %>
63
- <br>
64
- <% unless defined? p.virtual_tour && p.virtual_tour %>
65
- <a href="<%= p.virtual_tour %>" class="m-btn-ornate">
66
- <div class="btn-inner contact-btn">Take Virtual Tour</div>
67
- </a>
68
- <% end %>
69
- </div>
70
- </div>
71
- <% end %>
72
- <%= @gen.generate.html_safe %>
4
+ <div class='listings'>
5
+ <% if @properties.nil? || @properties == [] %>
6
+ <div class='no-results'>No results found</div>
7
+ <% else %>
8
+ <ul>
9
+ <% @properties.each do |p| %>
10
+ <li>
11
+ <% if p.images && p.images.count > 0 %>
12
+ <div class='image'><a href="/residential/<%= p.mls_acct %>/details"><img src="<%= p.images[0].url(:thumb) %>" /></a></div>
73
13
  <% end %>
74
- </div>
75
- </div> <!-- .sidebar-body -->
76
- </div> <!-- .l-sidebar -->
77
- </div> <!-- .l-wrapper -->
78
-
79
- <% content_for :caboose_js do %>
80
- <script style="text/javascript">
81
- function toTitleCase(str) {
82
- return str.replace(/\w\S*/g, function(txt) {
83
- if (txt != "of" && txt != "<br>") {
84
- return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
85
- } else {
86
- return txt;
87
- }
88
- });
89
- }
90
- $.fn.digits = function() {
91
- return this.each(function(){
92
- $(this).text( $(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") );
93
- })
94
- }
95
- $('.price').digits();
96
- $('.sqfeet').digits();
97
- //$.each( $(".advantage_agent"), function() { $(this).text( toTitleCase( $(this).text() ))});
98
- //$.each( $(".contact-btn"), function() { $(this).text( toTitleCase( $(this).text() ))});
99
- //$.each( $(".address"), function() { $(this).text( toTitleCase( $(this).text() ))});
100
- //$.each( $(".school"), function() { $(this).text( toTitleCase( $(this).text() ))});
101
- </script>
102
- <% end %>
14
+ <div class="address"><% if !p.unit_num.nil? && p.unit_num.strip.length > 0 %>Unit <%= p.unit_num %>, <% end %><%= p.street_num %> <%= p.street_name.titleize %></div>
15
+ <% if p.agent %>
16
+ <div class="agent">
17
+ Listing Courtesy of <%= p.agent.first_name.titleize %> <%= p.agent.last_name.titleize %>
18
+ <% if p.office %> with <%= p.office.name.titleize %><% end %>
19
+ </div>
20
+ <% end %>
21
+ <% if p.current_price != 0 %><span class='price' >$<%= p.current_price %></span><% end %>
22
+ <% if p.foreclosure_yn == 'Y' %><span class='foreclosure' >(Foreclosure)</span><% end %>
23
+ <ul class="meta">
24
+ <li class='sq_footage' ><label>Sq. footage: </label><span><%= p.tot_heat_sqft %></span></li>
25
+ <li class='bedrooms' ><label>Bedrooms: </label><span><%= p.bedrooms %></span></li>
26
+ <li class='full_baths' ><label>Full baths: </label><span><%= p.baths_full %></span></li>
27
+ <li class='half_baths' ><label>Half baths: </label><span><%= p.baths_half %></span></li>
28
+ </div>
29
+ <ul class='schools'>
30
+ <li><label>Elementary: </label><span><%= p.elem_school.titleize %><span></li>
31
+ <li><label>Middle: </label><span><%= p.middle_school.titleize %><span></li>
32
+ <li><label>High: </label><span><%= p.high_school.titleize %><span></li>
33
+ </ul>
34
+ <div class='mls_acct'><label>MLS#: </label><span><%= p.mls_acct %></span></div>
35
+ <div class='remarks'><%= p.remarks %></div>
36
+ <div class='more_details'><a href='/residential/<%= p.mls_acct %>/details'>MORE DETAILS</a></div>
37
+ <% if p.agent || p.office %>
38
+ <div class='contact lo_code_<%= p.lo_code %>'>Contact
39
+ <% if p.agent %><a href="/agents/<%= p.la_code %>"><%= p.agent.first_name.titleize %> <%= p.agent.last_name.titleize %></a>
40
+ <% else %><a href="/offices/<%= p.lo_code %>"><%= p.office.name %></a><% end %>
41
+ </div>
42
+ <% end %>
43
+ <% if p.virtual_tour %><div class='virtual_tour'><a href="<%= p.virtual_tour %>">Take Virtual Tour</a></div><% end %>
44
+ </li>
45
+ <% end %>
46
+ </ul>
47
+ <%= @gen.generate.html_safe %>
48
+ <% end %>
49
+ </div>
data/config/routes.rb CHANGED
@@ -1,87 +1,58 @@
1
- Caboose::Engine.routes.draw do
2
-
3
- get "admin" => "admin#index"
4
- put "admin/station" => "station#index_admin"
5
- get "station" => "station#index"
6
- get "station/plugin-count" => "station#plugin_count"
7
-
8
- get "login" => "login#index"
9
- post "login" => "login#login"
10
- get "logout" => "logout#index"
11
- get "register" => "register#index"
12
- post "register" => "register#register"
1
+ CabooseRets::Engine.routes.draw do
2
+
3
+ get "agents" => "agents#index"
4
+ get "agents/:la_code" => "agents#details"
5
+ get "agents/:la_code/listings" => "agents#listings"
6
+ get "admin/agents" => "agents#admin_index"
7
+ get "admin/agents/assistant-to-options" => "agents#admin_assistant_to_options"
8
+ get "admin/agents/agent_options" => "agents#agent_options"
9
+ get "admin/agents/:id/edit" => "agents#admin_edit"
10
+ get "admin/agents/:id/edit-bio" => "agents#admin_edit_bio"
11
+ get "admin/agents/:id/edit-contact-info" => "agents#admin_edit_contact_info"
12
+ get "admin/agents/:id/edit-mls-info" => "agents#admin_edit_mls_info"
13
+ get "admin/agents/:id/refresh" => "agents#admin_refresh"
14
+ put "admin/agents/:id" => "agents#admin_update"
15
+ post "admin/agents/:id" => "agents#admin_update"
16
+
17
+ get "open-houses" => "open_houses#index"
18
+ get "open-houses/:id" => "open_houses#details"
19
+ get "admin/open-houses/new" => "open_houses#admin_new"
20
+ post "admin/open-houses" => "open_houses#admin_add"
21
+
22
+ get "commercial" => "commercial#index"
23
+ get "commercial/:mls_acct/details" => "commercial#details"
24
+ get "commercial/:mls_acct" => "commercial#details"
25
+ get "admin/commercial" => "commercial#admin_index"
26
+ get "admin/commercial/:mls_acct/edit" => "commercial#admin_edit"
27
+ get "admin/commercial/:mls_acct/refresh" => "commercial#admin_refresh"
28
+ put "admin/commercial/:mls_acct" => "commercial#admin_update"
29
+ post "admin/commercial/:mls_acct" => "commercial#admin_update"
30
+
31
+ get "residential" => "residential#index"
32
+ get "residential/:mls_acct/details" => "residential#details"
33
+ get "residential/:mls_acct" => "residential#details"
34
+ get "admin/residential" => "residential#admin_index"
35
+ get "admin/residential/:mls_acct/edit" => "residential#admin_edit"
36
+ get "admin/residential/:mls_acct/refresh" => "residential#admin_refresh"
37
+ put "admin/residential/:mls_acct" => "residential#admin_update"
38
+ post "admin/residential/:mls_acct" => "residential#admin_update"
39
+
40
+ get "land" => "land#index"
41
+ get "land/:mls_acct/details" => "land#details"
42
+ get "land/:mls_acct" => "land#details"
43
+ get "admin/land" => "land#admin_index"
44
+ get "admin/land/:mls_acct/edit" => "land#admin_edit"
45
+ get "admin/land/:mls_acct/refresh" => "land#admin_refresh"
46
+ put "admin/land/:mls_acct" => "land#admin_update"
47
+ post "admin/land/:mls_acct" => "land#admin_update"
48
+
49
+ get "multi-family" => "multi_family#index"
50
+ get "multi-family/:mls_acct/details" => "multi_family#details"
51
+ get "multi-family/:mls_acct" => "multi_family#details"
52
+ get "admin/multi-family" => "multi_family#admin_index"
53
+ get "admin/multi-family/:mls_acct/edit" => "multi_family#admin_edit"
54
+ get "admin/multi-family/:mls_acct/refresh" => "multi_family#admin_refresh"
55
+ put "admin/multi-family/:mls_acct" => "multi_family#admin_update"
56
+ post "admin/multi-family/:mls_acct" => "multi_family#admin_update"
13
57
 
14
- get "admin/users" => "users#index"
15
- get "admin/users/options" => "users#options"
16
- get "admin/users/new" => "users#new"
17
- get "admin/users/:id/edit-password" => "users#edit_password"
18
- get "admin/users/:id/edit" => "users#edit"
19
- put "admin/users/:id" => "users#update"
20
- post "admin/users" => "users#create"
21
- delete "admin/users/:id" => "users#destroy"
22
-
23
- get "admin/roles" => "roles#index"
24
- get "admin/roles/options" => "roles#options"
25
- get "admin/roles/new" => "roles#new"
26
- get "admin/roles/:id/edit" => "roles#edit"
27
- put "admin/roles/:id" => "roles#update"
28
- post "admin/roles" => "roles#create"
29
- delete "admin/roles/:id" => "roles#destroy"
30
-
31
- get "admin/permissions" => "permissions#index"
32
- get "admin/permissions/options" => "permissions#options"
33
- get "admin/permissions/new" => "permissions#new"
34
- get "admin/permissions/:id/edit" => "permissions#edit"
35
- put "admin/permissions/:id" => "permissions#update"
36
- post "admin/permissions" => "permissions#create"
37
- delete "admin/permissions/:id" => "permissions#destroy"
38
-
39
- get "admin/settings" => "settings#index"
40
- get "admin/settings/options" => "settings#options"
41
- get "admin/settings/new" => "settings#new"
42
- get "admin/settings/:id/edit" => "settings#edit"
43
- put "admin/settings/:id" => "settings#update"
44
- post "admin/settings" => "settings#create"
45
- delete "admin/settings/:id" => "settings#destroy"
46
-
47
- #get "pages" => "pages#index"
48
- get "pages/:id" => "pages#show"
49
- get "pages/:id/redirect" => "pages#redirect"
50
- get "admin/pages/sitemap-options" => "pages#admin_sitemap_options"
51
- get "admin/pages/robots-options" => "pages#admin_robots_options"
52
- get "admin/pages/format-options" => "pages#admin_content_format_options"
53
- get "admin/pages/new" => "pages#admin_new"
54
- get "admin/pages/:id/uri" => "pages#admin_page_uri"
55
- get "admin/pages/:id/delete" => "pages#admin_delete_form"
56
- get "admin/pages/:id/sitemap" => "pages#admin_sitemap"
57
- get "admin/pages/:id/edit" => "pages#admin_edit_general"
58
- get "admin/pages/:id/css" => "pages#admin_edit_css"
59
- get "admin/pages/:id/js" => "pages#admin_edit_js"
60
- get "admin/pages/:id/seo" => "pages#admin_edit_seo"
61
- get "admin/pages/:id/content" => "pages#admin_edit_content"
62
- put "admin/pages/:id" => "pages#admin_update"
63
- get "admin/pages" => "pages#admin_index"
64
- post "admin/pages" => "pages#admin_create"
65
- delete "admin/pages/:id" => "pages#admin_delete"
66
-
67
- get "posts" => "posts#index"
68
- get "posts/:id" => "posts#detail"
69
- get "admin/posts/category-options" => "posts#admin_category_options"
70
- get "admin/posts/new" => "posts#admin_new"
71
- get "admin/posts/:id/delete" => "posts#admin_delete_form"
72
- get "admin/posts/:id/edit" => "posts#admin_edit_general"
73
- get "admin/posts/:id/content" => "posts#admin_edit_content"
74
- get "admin/posts/:id/categories" => "posts#admin_edit_categories"
75
- get "admin/posts/:id/add-to-category" => "posts#admin_add_to_category"
76
- get "admin/posts/:id/remove-from-category" => "posts#admin_remove_from_category"
77
- get "admin/posts/:id/delete" => "posts#admin_delete_form"
78
- put "admin/posts/:id" => "posts#admin_update"
79
- post "admin/posts/:id" => "posts#admin_update"
80
- get "admin/posts" => "posts#admin_index"
81
- post "admin/posts" => "posts#admin_add"
82
- delete "admin/posts/:id" => "posts#admin_delete"
83
-
84
- match '*path' => 'pages#show'
85
- root :to => 'pages#show'
86
-
87
58
  end
@@ -1,3 +1,3 @@
1
1
  module CabooseRets
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -67,7 +67,7 @@ namespace :caboose_rets do
67
67
  t.string :lo_email
68
68
  t.string :lo_fax_phone
69
69
  t.string :lo_idx_yn
70
- t.string :lo_lo_code
70
+ t.string :lo_code
71
71
  t.string :lo_mailaddr1
72
72
  t.string :lo_mailaddr2
73
73
  t.string :lo_mailcity
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-rets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-31 00:00:00.000000000 Z
11
+ date: 2013-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: caboose-cms
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.77
19
+ version: 0.2.81
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.77
26
+ version: 0.2.81
27
27
  description: Library to download RETS data to a local website for easy use.
28
28
  email:
29
29
  - william@nine.is
@@ -35,6 +35,7 @@ files:
35
35
  - app/controllers/caboose_rets/application_controller.rb
36
36
  - app/controllers/caboose_rets/commercial_controller.rb
37
37
  - app/controllers/caboose_rets/land_controller.rb
38
+ - app/controllers/caboose_rets/multi_family_controller.rb
38
39
  - app/controllers/caboose_rets/open_houses_controller.rb
39
40
  - app/controllers/caboose_rets/residential_controller.rb
40
41
  - app/helpers/caboose_rets/application_helper.rb
@@ -62,6 +63,7 @@ files:
62
63
  - app/views/caboose_rets/commercial/details.html.erb
63
64
  - app/views/caboose_rets/commercial/index.html.erb
64
65
  - app/views/caboose_rets/open_houses/admin_new.html.erb
66
+ - app/views/caboose_rets/residential/_search_form.html.erb
65
67
  - app/views/caboose_rets/residential/admin_edit.html.erb
66
68
  - app/views/caboose_rets/residential/admin_index.html.erb
67
69
  - app/views/caboose_rets/residential/details.html.erb
@@ -111,7 +113,8 @@ files:
111
113
  - test/integration/navigation_test.rb
112
114
  - test/test_helper.rb
113
115
  homepage: http://github.com/williambarry007/caboose-rets
114
- licenses: []
116
+ licenses:
117
+ - MIT
115
118
  metadata: {}
116
119
  post_install_message:
117
120
  rdoc_options: []