caboose-rets 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/MIT-LICENSE +20 -0
- data/README.md +4 -0
- data/Rakefile +38 -0
- data/app/controllers/caboose_rets/agents_controller.rb +169 -0
- data/app/controllers/caboose_rets/application_controller.rb +6 -0
- data/app/controllers/caboose_rets/commercial_controller.rb +281 -0
- data/app/controllers/caboose_rets/land_controller.rb +69 -0
- data/app/controllers/caboose_rets/open_houses_controller.rb +60 -0
- data/app/controllers/caboose_rets/residential_controller.rb +108 -0
- data/app/helpers/caboose_rets/application_helper.rb +4 -0
- data/app/models/caboose_rets/agent.rb +65 -0
- data/app/models/caboose_rets/commercial_property.rb +214 -0
- data/app/models/caboose_rets/land_property.rb +143 -0
- data/app/models/caboose_rets/media.rb +23 -0
- data/app/models/caboose_rets/multi_family_property.rb +198 -0
- data/app/models/caboose_rets/office.rb +27 -0
- data/app/models/caboose_rets/open_house.rb +19 -0
- data/app/models/caboose_rets/residential_property.rb +236 -0
- data/app/models/caboose_rets/rets_importer.rb +303 -0
- data/app/models/caboose_rets/rets_plugin.rb +26 -0
- data/app/views/caboose_rets/agents/_admin_top_nav.html.erb +7 -0
- data/app/views/caboose_rets/agents/admin_edit.html.erb +28 -0
- data/app/views/caboose_rets/agents/admin_edit_bio.html.erb +31 -0
- data/app/views/caboose_rets/agents/admin_edit_contact_info.html.erb +31 -0
- data/app/views/caboose_rets/agents/admin_edit_mls_info.html.erb +71 -0
- data/app/views/caboose_rets/agents/admin_index.html.erb +48 -0
- data/app/views/caboose_rets/agents/details.html.erb +140 -0
- data/app/views/caboose_rets/agents/index.html.erb +163 -0
- data/app/views/caboose_rets/agents/listings.html.erb +121 -0
- data/app/views/caboose_rets/commercial/admin_edit.html.erb +452 -0
- data/app/views/caboose_rets/commercial/admin_index.html.erb +46 -0
- data/app/views/caboose_rets/commercial/details.html.erb +134 -0
- data/app/views/caboose_rets/commercial/index.html.erb +87 -0
- data/app/views/caboose_rets/open_houses/admin_new.html.erb +31 -0
- data/app/views/caboose_rets/residential/admin_edit.html.erb +250 -0
- data/app/views/caboose_rets/residential/admin_index.html.erb +44 -0
- data/app/views/caboose_rets/residential/details.html.erb +139 -0
- data/app/views/caboose_rets/residential/index.html.erb +102 -0
- data/app/views/caboose_rets/residential/residential_not_exists.html.erb +15 -0
- data/app/views/caboose_rets/residential/test_form.html.erb +4 -0
- data/config/routes.rb +87 -0
- data/lib/caboose-rets.rb +4 -0
- data/lib/caboose_rets/caboose_rets_helper.rb +2 -0
- data/lib/caboose_rets/engine.rb +7 -0
- data/lib/caboose_rets/version.rb +3 -0
- data/lib/tasks/caboose_rets.rake +855 -0
- data/test/caboose_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/test.log +25 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- metadata +169 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
|
2
|
+
module CabooseRets
|
3
|
+
class LandController < ApplicationController
|
4
|
+
|
5
|
+
# GET /land
|
6
|
+
def index
|
7
|
+
@gen = Caboose::PageBarGenerator.new(params, {
|
8
|
+
'mls_acct' => ''
|
9
|
+
},{
|
10
|
+
'model' => 'ResidentialProperty',
|
11
|
+
'sort' => 'mls_acct',
|
12
|
+
'desc' => false,
|
13
|
+
'base_url' => '/land',
|
14
|
+
'items_per_page' => 10
|
15
|
+
})
|
16
|
+
Caboose.log(@gen.where)
|
17
|
+
@properties = @gen.items
|
18
|
+
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
|
+
end
|
22
|
+
|
23
|
+
# GET /land/:mls_acct/details
|
24
|
+
def details
|
25
|
+
@property = ResidentialProperty.where(:mls_acct => params[:mls_acct]).first
|
26
|
+
if @property.nil?
|
27
|
+
@mls_acct = params[:mls_acct]
|
28
|
+
render 'land/land_not_exists'
|
29
|
+
return
|
30
|
+
end
|
31
|
+
@message = Message.new
|
32
|
+
end
|
33
|
+
|
34
|
+
#=============================================================================
|
35
|
+
# Admin actions
|
36
|
+
#=============================================================================
|
37
|
+
|
38
|
+
# GET /admin/land
|
39
|
+
def admin_index
|
40
|
+
return if !user_is_allowed('properties', 'view')
|
41
|
+
|
42
|
+
@gen = Caboose::PageBarGenerator.new(params, {
|
43
|
+
'name' => ''
|
44
|
+
},{
|
45
|
+
'model' => 'ResidentialProperty',
|
46
|
+
'sort' => 'mls_acct',
|
47
|
+
'desc' => false,
|
48
|
+
'base_url' => '/admin/land'
|
49
|
+
})
|
50
|
+
@properties = @gen.items
|
51
|
+
render :layout => 'caboose/admin'
|
52
|
+
end
|
53
|
+
|
54
|
+
# GET /admin/land/:mls_acct/edit
|
55
|
+
def admin_edit
|
56
|
+
return if !user_is_allowed('properties', 'edit')
|
57
|
+
@property = ResidentialProperty.where(:mls_acct => params[:mls_acct]).first
|
58
|
+
render :layout => 'caboose/admin'
|
59
|
+
end
|
60
|
+
|
61
|
+
# GET /admin/land/:mls_acct/refresh
|
62
|
+
def admin_refresh
|
63
|
+
RetsLandImporter.import_property(params[:mls_acct])
|
64
|
+
flash[:message] = "<p class='note success'>The property info has been updated from MLS.</p>"
|
65
|
+
render :json => Caboose::StdClass.new({ 'reload' => true })
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require "open-uri"
|
2
|
+
|
3
|
+
module CabooseRets
|
4
|
+
class OpenHousesController < ApplicationController
|
5
|
+
|
6
|
+
# GET /admin/open-houses/new
|
7
|
+
def admin_new
|
8
|
+
return if !user_is_allowed('post', 'new')
|
9
|
+
@post = Caboose::Post.new
|
10
|
+
render :layout => 'caboose/admin'
|
11
|
+
end
|
12
|
+
|
13
|
+
# POST /admin/open-houses
|
14
|
+
def admin_add
|
15
|
+
return if !user_is_allowed('post', 'add')
|
16
|
+
|
17
|
+
resp = Caboose::StdClass.new({
|
18
|
+
'error' => nil,
|
19
|
+
'redirect' => nil
|
20
|
+
})
|
21
|
+
|
22
|
+
mls = params[:mls]
|
23
|
+
post = post_from_mls(mls)
|
24
|
+
|
25
|
+
if post.nil?
|
26
|
+
resp.error = "No property with MLS id #{params[:mls]}."
|
27
|
+
else
|
28
|
+
post.published = false
|
29
|
+
post.save
|
30
|
+
resp.redirect = "/admin/posts/#{post.id}/edit"
|
31
|
+
end
|
32
|
+
|
33
|
+
render :json => resp
|
34
|
+
end
|
35
|
+
|
36
|
+
def post_from_mls(mls)
|
37
|
+
post = nil
|
38
|
+
[ResidentialProperty, CommercialProperty, CommercialProperty].each_with_index do |type, i|
|
39
|
+
|
40
|
+
prop = type.find(mls)
|
41
|
+
next if prop.nil?
|
42
|
+
ptype = ['residential', 'commercial', 'land'][i]
|
43
|
+
|
44
|
+
d = params[:date_time]
|
45
|
+
post = Caboose::Post.new
|
46
|
+
post.title = "Open House on #{d} at #{prop.street_num.to_s} #{prop.street_name.titleize}"
|
47
|
+
|
48
|
+
post.body = ""
|
49
|
+
post.body << "<p>#{prop.remarks}</p>" if prop.remarks and !prop.remarks.strip.empty?
|
50
|
+
post.body << "\n<p>Directions: #{prop.directions}</p>" if prop.directions and !prop.directions.strip.empty?
|
51
|
+
post.body << "\n<p><a href='/#{ptype}/#{prop.id}/details'>More details</a></p>"
|
52
|
+
|
53
|
+
post.image = open("https://s3.amazonaws.com/advantagerealtygroup.com/#{ptype}/#{mls}_1_original.jpg")
|
54
|
+
|
55
|
+
break
|
56
|
+
end
|
57
|
+
return post
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
|
2
|
+
module CabooseRets
|
3
|
+
class ResidentialController < ApplicationController
|
4
|
+
|
5
|
+
# GET /residential
|
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_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' => 'ResidentialProperty',
|
45
|
+
'sort' => 'current_price ASC, mls_acct',
|
46
|
+
'desc' => false,
|
47
|
+
'base_url' => '/residential',
|
48
|
+
'items_per_page' => 10
|
49
|
+
})
|
50
|
+
|
51
|
+
|
52
|
+
Caboose.log(@gen.where)
|
53
|
+
@properties = @gen.items
|
54
|
+
if params[:waterfront].present? then @properties.reject!{|p| p.waterfront.blank?} end
|
55
|
+
if params[:ftr_lotdesc] == 'golf' then @properties.reject!{|p| p.ftr_lotdesc != 'golf'} end
|
56
|
+
#if params[:foreclosure] then @properties.reject!{|p| p.foreclosure_yn != "Y"} end
|
57
|
+
end
|
58
|
+
|
59
|
+
# GET /residential/:mls_acct/details
|
60
|
+
def details
|
61
|
+
@property = ResidentialProperty.where(:mls_acct => params[:mls_acct]).first
|
62
|
+
if @property.lo_code == '46'
|
63
|
+
@agent = Agent.where(:la_code => @property.la_code).first
|
64
|
+
end
|
65
|
+
if @property.nil?
|
66
|
+
@mls_acct = params[:mls_acct]
|
67
|
+
render 'residential/residential_not_exists'
|
68
|
+
return
|
69
|
+
end
|
70
|
+
@message = Message.new
|
71
|
+
end
|
72
|
+
|
73
|
+
#=============================================================================
|
74
|
+
# Admin actions
|
75
|
+
#=============================================================================
|
76
|
+
|
77
|
+
# GET /admin/residential
|
78
|
+
def admin_index
|
79
|
+
return if !user_is_allowed('properties', 'view')
|
80
|
+
|
81
|
+
@gen = Caboose::PageBarGenerator.new(params, {
|
82
|
+
'mls_acct' => ''
|
83
|
+
},{
|
84
|
+
'model' => 'ResidentialProperty',
|
85
|
+
'sort' => 'mls_acct',
|
86
|
+
'desc' => false,
|
87
|
+
'base_url' => '/admin/residential'
|
88
|
+
})
|
89
|
+
@properties = @gen.items
|
90
|
+
render :layout => 'caboose/admin'
|
91
|
+
end
|
92
|
+
|
93
|
+
# GET /admin/residential/:mls_acct/edit
|
94
|
+
def admin_edit
|
95
|
+
return if !user_is_allowed('properties', 'edit')
|
96
|
+
@property = ResidentialProperty.where(:mls_acct => params[:mls_acct]).first
|
97
|
+
render :layout => 'caboose/admin'
|
98
|
+
end
|
99
|
+
|
100
|
+
# GET /admin/residential/:mls_acct/refresh
|
101
|
+
def admin_refresh
|
102
|
+
RetsResidentialImporter.import_property(params[:mls_acct])
|
103
|
+
flash[:message] = "<p class='note success'>The property info has been updated from MLS.</p>"
|
104
|
+
render :json => Caboose::StdClass.new({ 'reload' => true })
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
class CabooseRets::Agent < ActiveRecord::Base
|
3
|
+
self.table_name = "rets_agents"
|
4
|
+
has_many :commercial_properties
|
5
|
+
has_many :residential_properties
|
6
|
+
# attr_accessible :title, :body
|
7
|
+
has_attached_file :image,
|
8
|
+
:path => 'rets/agents/:la_code_:style.:extension',
|
9
|
+
:styles => {
|
10
|
+
:thumb => '100x150>',
|
11
|
+
:large => '200x300>'
|
12
|
+
}
|
13
|
+
after_initialize :fix_name
|
14
|
+
|
15
|
+
def office
|
16
|
+
Office.where(:lo_code => self.lo_code).first
|
17
|
+
end
|
18
|
+
|
19
|
+
def fix_name
|
20
|
+
return if self.first_name.nil?
|
21
|
+
self.first_name = self.first_name.split(' ').collect{ |str| str.downcase.capitalize }.join(' ')
|
22
|
+
return if self.last_name.nil?
|
23
|
+
self.last_name = self.last_name.split(' ').collect{ |str| str.downcase.capitalize }.join(' ')
|
24
|
+
if self.last_name.starts_with?('Mc')
|
25
|
+
self.last_name[2] = self.last_name[2].upcase
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def parse(data)
|
30
|
+
self.beeper_phone = data['LA_BEEPER_PHONE']
|
31
|
+
self.last_name = data['LA_LAST_NAME']
|
32
|
+
self.member_email = data['LA_MEMBER_EMAIL']
|
33
|
+
self.phone_home_fax = data['LA_PHONE_HOME_FAX']
|
34
|
+
self.car_phone = data['LA_CAR_PHONE']
|
35
|
+
self.la_code = data['LA_LA_CODE']
|
36
|
+
self.member_page = data['LA_MEMBER_PAGE']
|
37
|
+
self.phone_pager = data['LA_PHONE_PAGER']
|
38
|
+
self.date_created = data['LA_DATE_CREATED']
|
39
|
+
self.lo_code = data['LA_LO_CODE']
|
40
|
+
self.member_status = data['LA_MEMBER_STATUS']
|
41
|
+
self.phone_second_home = data['LA_PHONE_SECOND_HOME']
|
42
|
+
self.date_modified = data['LA_DATE_MODIFIED']
|
43
|
+
self.mail_addr1 = data['LA_MAIL_ADDR1']
|
44
|
+
self.nrds_id = data['LA_NRDS_ID']
|
45
|
+
self.phone_toll_free = data['LA_PHONE_TOLL_FREE']
|
46
|
+
self.defaultemail = data['LA_DEFAULTEMAIL']
|
47
|
+
self.mail_addr2 = data['LA_MAIL_ADDR2']
|
48
|
+
self.office_phone = data['LA_OFFICE_PHONE']
|
49
|
+
self.phone_voice_mail = data['LA_PHONE_VOICE_MAIL']
|
50
|
+
self.fax_phone = data['LA_FAX_PHONE']
|
51
|
+
self.mail_city = data['LA_MAIL_CITY']
|
52
|
+
self.other_phone = data['LA_OTHER_PHONE']
|
53
|
+
self.phone_voice_pager = data['LA_PHONE_VOICE_PAGER']
|
54
|
+
self.first_name = data['LA_FIRST_NAME']
|
55
|
+
self.mail_state = data['LA_MAIL_STATE']
|
56
|
+
self.phone_change_date = data['LA_PHONE_CHANGE_DATE']
|
57
|
+
self.photo_count = data['PHOTO_COUNT']
|
58
|
+
self.home_phone = data['LA_HOME_PHONE']
|
59
|
+
self.mail_zip = data['LA_MAIL_ZIP']
|
60
|
+
self.phone_direct_office = data['LA_PHONE_DIRECT_OFFICE']
|
61
|
+
self.photo_date_modified = data['PHOTO_DATE_MODIFIED']
|
62
|
+
#self.photo_url = ""
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,214 @@
|
|
1
|
+
|
2
|
+
class CabooseRets::CommercialProperty < ActiveRecord::Base
|
3
|
+
self.table_name = "rets_commercial"
|
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
|
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
|
20
|
+
|
21
|
+
def parse(data)
|
22
|
+
self.acreage = data['ACREAGE']
|
23
|
+
self.adjoining_land_use = data['ADJOINING_LAND_USE']
|
24
|
+
self.agent_notes = data['AGENT_NOTES']
|
25
|
+
self.agent_other_contact_desc = data['AGENT_OTHER_CONTACT_DESC']
|
26
|
+
self.agent_other_contact_phone = data['AGENT_OTHER_CONTACT_PHONE']
|
27
|
+
self.annual_taxes = data['ANNUAL_TAXES']
|
28
|
+
self.approx_age = data['APPROX_AGE']
|
29
|
+
self.area = data['AREA']
|
30
|
+
self.baths = data['BATHS']
|
31
|
+
self.baths_full = data['BATHS_FULL']
|
32
|
+
self.baths_half = data['BATHS_HALF']
|
33
|
+
self.bedrooms = data['BEDROOMS']
|
34
|
+
self.bom_date = data['BOM_DATE']
|
35
|
+
self.book_number = data['BOOK_NUMBER']
|
36
|
+
self.book_page = data['BOOK_PAGE']
|
37
|
+
self.book_type = data['BOOK_TYPE']
|
38
|
+
self.box_on_unit = data['BOX_ON_UNIT']
|
39
|
+
self.box_on_unit_yn = data['BOX_ON_UNIT_YN']
|
40
|
+
self.business_included_yn = data['BUSINESS_INCLUDED_YN']
|
41
|
+
self.buyer_broker = data['BUYER_BROKER']
|
42
|
+
self.buyer_broker_type = data['BUYER_BROKER_TYPE']
|
43
|
+
self.buyer_city = data['BUYER_CITY']
|
44
|
+
self.buyer_name = data['BUYER_NAME']
|
45
|
+
self.buyer_state = data['BUYER_STATE']
|
46
|
+
self.buyer_zip = data['BUYER_ZIP']
|
47
|
+
self.category = data['CATEGORY']
|
48
|
+
self.city = data['CITY']
|
49
|
+
self.city_code = data['CITY_CODE']
|
50
|
+
self.co_la_code = data['CO_LA_CODE']
|
51
|
+
self.co_lo_code = data['CO_LO_CODE']
|
52
|
+
self.co_sa_code = data['CO_SA_CODE']
|
53
|
+
self.co_so_code = data['CO_SO_CODE']
|
54
|
+
self.contacts = data['CONTACTS']
|
55
|
+
self.contr_broker = data['CONTR_BROKER']
|
56
|
+
self.contr_broker_type = data['CONTR_BROKER_TYPE']
|
57
|
+
self.county = data['COUNTY']
|
58
|
+
self.current_price = data['CURRENT_PRICE']
|
59
|
+
self.date_created = data['DATE_CREATED']
|
60
|
+
self.date_leased = data['DATE_LEASED']
|
61
|
+
self.date_modified = data['DATE_MODIFIED']
|
62
|
+
self.df_yn = data['DF_YN']
|
63
|
+
self.directions = data['DIRECTIONS']
|
64
|
+
self.display_address_yn = data['DISPLAY_ADDRESS_YN']
|
65
|
+
self.dom = data['DOM']
|
66
|
+
self.elem_school = data['ELEM_SCHOOL']
|
67
|
+
self.expenses_assoc = data['EXPENSES_ASSOC']
|
68
|
+
self.expenses_ins = data['EXPENSES_INS']
|
69
|
+
self.expenses_maint = data['EXPENSES_MAINT']
|
70
|
+
self.expenses_mgmt = data['EXPENSES_MGMT']
|
71
|
+
self.expenses_other = data['EXPENSES_OTHER']
|
72
|
+
self.expenses_tax = data['EXPENSES_TAX']
|
73
|
+
self.expenses_utility = data['EXPENSES_UTILITY']
|
74
|
+
self.expire_date = data['EXPIRE_DATE']
|
75
|
+
self.flood_plain = data['FLOOD_PLAIN']
|
76
|
+
self.ftr_building = data['FTR_BUILDING']
|
77
|
+
self.ftr_building_type = data['FTR_BUILDING_TYPE']
|
78
|
+
self.ftr_closing = data['FTR_CLOSING']
|
79
|
+
self.ftr_cooling = data['FTR_COOLING']
|
80
|
+
self.ftr_docs_on_file = data['FTR_DOCS_ON_FILE']
|
81
|
+
self.ftr_exterior = data['FTR_EXTERIOR']
|
82
|
+
self.ftr_financing = data['FTR_FINANCING']
|
83
|
+
self.ftr_flooring = data['FTR_FLOORING']
|
84
|
+
self.ftr_heating = data['FTR_HEATING']
|
85
|
+
self.ftr_interior = data['FTR_INTERIOR']
|
86
|
+
self.ftr_internet = data['FTR_INTERNET']
|
87
|
+
self.ftr_lease_terms = data['FTR_LEASE_TERMS']
|
88
|
+
self.ftr_property_desc = data['FTR_PROPERTY_DESC']
|
89
|
+
self.ftr_roof = data['FTR_ROOF']
|
90
|
+
self.ftr_sale_terms = data['FTR_SALE_TERMS']
|
91
|
+
self.ftr_sewer = data['FTR_SEWER']
|
92
|
+
self.ftr_showing = data['FTR_SHOWING']
|
93
|
+
self.ftr_sprinkler = data['FTR_SPRINKLER']
|
94
|
+
self.ftr_style = data['FTR_STYLE']
|
95
|
+
self.ftr_utilities = data['FTR_UTILITIES']
|
96
|
+
self.ftr_utilities_rental = data['FTR_UTILITIES_RENTAL']
|
97
|
+
self.ftr_water = data['FTR_WATER']
|
98
|
+
self.geo_precision = data['GEO_PRECISION']
|
99
|
+
self.georesult = data['GEORESULT']
|
100
|
+
self.high_school = data['HIGH_SCHOOL']
|
101
|
+
self.hoa_fee = data['HOA_FEE']
|
102
|
+
self.hoa_fee_yn = data['HOA_FEE_YN']
|
103
|
+
self.hoa_term = data['HOA_TERM']
|
104
|
+
self.income_gross = data['INCOME_GROSS']
|
105
|
+
self.income_net = data['INCOME_NET']
|
106
|
+
self.income_other = data['INCOME_OTHER']
|
107
|
+
self.income_rental = data['INCOME_RENTAL']
|
108
|
+
self.internet_yn = data['INTERNET_YN']
|
109
|
+
self.la_code = data['LA_CODE']
|
110
|
+
self.leased_through = data['LEASED_THROUGH']
|
111
|
+
self.legal_block = data['LEGAL_BLOCK']
|
112
|
+
self.legal_lot = data['LEGAL_LOT']
|
113
|
+
self.legals = data['LEGALS']
|
114
|
+
self.list_date = data['LIST_DATE']
|
115
|
+
self.list_price = data['LIST_PRICE']
|
116
|
+
self.listing_type = data['LISTING_TYPE']
|
117
|
+
self.lo_code = data['LO_CODE']
|
118
|
+
self.lockbox_yn = data['LOCKBOX_YN']
|
119
|
+
self.lot_dimensions = data['LOT_DIMENSIONS']
|
120
|
+
self.lot_dimensions_source = data['LOT_DIMENSIONS_SOURCE']
|
121
|
+
self.media_flag = data['MEDIA_FLAG']
|
122
|
+
self.middle_school = data['MIDDLE_SCHOOL']
|
123
|
+
self.mls_acct = data['MLS_ACCT']
|
124
|
+
self.municipality = data['MUNICIPALITY']
|
125
|
+
self.num_units = data['NUM_UNITS']
|
126
|
+
self.num_units_occupied = data['NUM_UNITS_OCCUPIED']
|
127
|
+
self.off_mkt_date = data['OFF_MKT_DATE']
|
128
|
+
self.off_mkt_days = data['OFF_MKT_DAYS']
|
129
|
+
self.office_notes = data['OFFICE_NOTES']
|
130
|
+
self.orig_lp = data['ORIG_LP']
|
131
|
+
self.other_fee = data['OTHER_FEE']
|
132
|
+
self.other_fee_type = data['OTHER_FEE_TYPE']
|
133
|
+
self.owner_name = data['OWNER_NAME']
|
134
|
+
self.owner_phone = data['OWNER_PHONE']
|
135
|
+
self.parcel_id = data['PARCEL_ID']
|
136
|
+
self.pending_date = data['PENDING_DATE']
|
137
|
+
self.photo_count = data['PHOTO_COUNT']
|
138
|
+
self.photo_date_modified = data['PHOTO_DATE_MODIFIED']
|
139
|
+
self.photo_description = data['PHOTO_DESCRIPTION']
|
140
|
+
self.photo_instr = data['PHOTO_INSTR']
|
141
|
+
self.posession = data['POSESSION']
|
142
|
+
self.price_change_date = data['PRICE_CHANGE_DATE']
|
143
|
+
self.price_sqft = data['PRICE_SQFT']
|
144
|
+
self.proj_close_date = data['PROJ_CLOSE_DATE']
|
145
|
+
self.prop_desc = data['PROP_DESC']
|
146
|
+
self.prop_id = data['PROP_ID']
|
147
|
+
self.prop_type = data['PROP_TYPE']
|
148
|
+
self.remarks = data['REMARKS']
|
149
|
+
self.road_frontage_ft = data['ROAD_FRONTAGE_FT']
|
150
|
+
self.sa_code = data['SA_CODE']
|
151
|
+
self.sale_lease = data['SALE_LEASE']
|
152
|
+
self.sale_notes = data['SALE_NOTES']
|
153
|
+
self.so_code = data['SO_CODE']
|
154
|
+
self.sold_date = data['SOLD_DATE']
|
155
|
+
self.sold_price = data['SOLD_PRICE']
|
156
|
+
self.sold_terms = data['SOLD_TERMS']
|
157
|
+
self.sqft_source = data['SQFT_SOURCE']
|
158
|
+
self.state = data['STATE']
|
159
|
+
self.status = data['STATUS']
|
160
|
+
self.status_date = data['STATUS_DATE']
|
161
|
+
self.status_flag = data['STATUS_FLAG']
|
162
|
+
self.street = data['STREET']
|
163
|
+
self.street_dir = data['STREET_DIR']
|
164
|
+
self.street_name = data['STREET_NAME']
|
165
|
+
self.street_num = data['STREET_NUM']
|
166
|
+
self.sub_agent = data['SUB_AGENT']
|
167
|
+
self.sub_agent_type = data['SUB_AGENT_TYPE']
|
168
|
+
self.sub_area = data['SUB_AREA']
|
169
|
+
self.subdivision = data['SUBDIVISION']
|
170
|
+
self.take_photo_yn = data['TAKE_PHOTO_YN']
|
171
|
+
self.third_party_comm_yn = data['THIRD_PARTY_COMM_YN']
|
172
|
+
self.tot_heat_sqft = data['TOT_HEAT_SQFT']
|
173
|
+
self.tour_date = data['TOUR_DATE']
|
174
|
+
self.tour_submit_date = data['TOUR_SUBMIT_DATE']
|
175
|
+
self.type_detailed = data['TYPE_DETAILED']
|
176
|
+
self.u1_dims = data['U1_DIMS']
|
177
|
+
self.u1_free_standing_yn = data['U1_FREE_STANDING_YN']
|
178
|
+
self.u1_sqft_manuf = data['U1_SQFT_MANUF']
|
179
|
+
self.u1_sqft_office = data['U1_SQFT_OFFICE']
|
180
|
+
self.u1_sqft_retail = data['U1_SQFT_RETAIL']
|
181
|
+
self.u1_sqft_total = data['U1_SQFT_TOTAL']
|
182
|
+
self.u1_sqft_warehouse = data['U1_SQFT_WAREHOUSE']
|
183
|
+
self.u1_year_built = data['U1_YEAR_BUILT']
|
184
|
+
self.u2_dims = data['U2_DIMS']
|
185
|
+
self.u2_free_standing_yn = data['U2_FREE_STANDING_YN']
|
186
|
+
self.u2_sqft_manuf = data['U2_SQFT_MANUF']
|
187
|
+
self.u2_sqft_office = data['U2_SQFT_OFFICE']
|
188
|
+
self.u2_sqft_retail = data['U2_SQFT_RETAIL']
|
189
|
+
self.u2_sqft_total = data['U2_SQFT_TOTAL']
|
190
|
+
self.u2_sqft_warehouse = data['U2_SQFT_WAREHOUSE']
|
191
|
+
self.u2_year_built = data['U2_YEAR_BUILT']
|
192
|
+
self.u3_dims = data['U3_DIMS']
|
193
|
+
self.u3_free_standing_yn = data['U3_FREE_STANDING_YN']
|
194
|
+
self.u3_sqft_manuf = data['U3_SQFT_MANUF']
|
195
|
+
self.u3_sqft_office = data['U3_SQFT_OFFICE']
|
196
|
+
self.u3_sqft_retail = data['U3_SQFT_RETAIL']
|
197
|
+
self.u3_sqft_total = data['U3_SQFT_TOTAL']
|
198
|
+
self.u3_sqft_warehouse = data['U3_SQFT_WAREHOUSE']
|
199
|
+
self.u3_year_built = data['U3_YEAR_BUILT']
|
200
|
+
self.unit_num = data['UNIT_NUM']
|
201
|
+
self.upload_source = data['UPLOAD_SOURCE']
|
202
|
+
self.vacancy_rate = data['VACANCY_RATE']
|
203
|
+
self.vacant_yn = data['VACANT_YN']
|
204
|
+
self.valuation_yn = data['VALUATION_YN']
|
205
|
+
self.vt_yn = data['VT_YN']
|
206
|
+
self.waterfront_yn = data['WATERFRONT_YN']
|
207
|
+
self.withdrawn_date = data['WITHDRAWN_DATE']
|
208
|
+
self.year_built = data['YEAR_BUILT']
|
209
|
+
self.zip = data['ZIP']
|
210
|
+
self.zoning_northport = data['ZONING_NORTHPORT']
|
211
|
+
self.zoning_tusc = data['ZONING_TUSC']
|
212
|
+
self.virtual_tour = data['VIRTUAL_TOUR']
|
213
|
+
end
|
214
|
+
end
|