caboose-rets 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +4 -0
  4. data/Rakefile +38 -0
  5. data/app/controllers/caboose_rets/agents_controller.rb +169 -0
  6. data/app/controllers/caboose_rets/application_controller.rb +6 -0
  7. data/app/controllers/caboose_rets/commercial_controller.rb +281 -0
  8. data/app/controllers/caboose_rets/land_controller.rb +69 -0
  9. data/app/controllers/caboose_rets/open_houses_controller.rb +60 -0
  10. data/app/controllers/caboose_rets/residential_controller.rb +108 -0
  11. data/app/helpers/caboose_rets/application_helper.rb +4 -0
  12. data/app/models/caboose_rets/agent.rb +65 -0
  13. data/app/models/caboose_rets/commercial_property.rb +214 -0
  14. data/app/models/caboose_rets/land_property.rb +143 -0
  15. data/app/models/caboose_rets/media.rb +23 -0
  16. data/app/models/caboose_rets/multi_family_property.rb +198 -0
  17. data/app/models/caboose_rets/office.rb +27 -0
  18. data/app/models/caboose_rets/open_house.rb +19 -0
  19. data/app/models/caboose_rets/residential_property.rb +236 -0
  20. data/app/models/caboose_rets/rets_importer.rb +303 -0
  21. data/app/models/caboose_rets/rets_plugin.rb +26 -0
  22. data/app/views/caboose_rets/agents/_admin_top_nav.html.erb +7 -0
  23. data/app/views/caboose_rets/agents/admin_edit.html.erb +28 -0
  24. data/app/views/caboose_rets/agents/admin_edit_bio.html.erb +31 -0
  25. data/app/views/caboose_rets/agents/admin_edit_contact_info.html.erb +31 -0
  26. data/app/views/caboose_rets/agents/admin_edit_mls_info.html.erb +71 -0
  27. data/app/views/caboose_rets/agents/admin_index.html.erb +48 -0
  28. data/app/views/caboose_rets/agents/details.html.erb +140 -0
  29. data/app/views/caboose_rets/agents/index.html.erb +163 -0
  30. data/app/views/caboose_rets/agents/listings.html.erb +121 -0
  31. data/app/views/caboose_rets/commercial/admin_edit.html.erb +452 -0
  32. data/app/views/caboose_rets/commercial/admin_index.html.erb +46 -0
  33. data/app/views/caboose_rets/commercial/details.html.erb +134 -0
  34. data/app/views/caboose_rets/commercial/index.html.erb +87 -0
  35. data/app/views/caboose_rets/open_houses/admin_new.html.erb +31 -0
  36. data/app/views/caboose_rets/residential/admin_edit.html.erb +250 -0
  37. data/app/views/caboose_rets/residential/admin_index.html.erb +44 -0
  38. data/app/views/caboose_rets/residential/details.html.erb +139 -0
  39. data/app/views/caboose_rets/residential/index.html.erb +102 -0
  40. data/app/views/caboose_rets/residential/residential_not_exists.html.erb +15 -0
  41. data/app/views/caboose_rets/residential/test_form.html.erb +4 -0
  42. data/config/routes.rb +87 -0
  43. data/lib/caboose-rets.rb +4 -0
  44. data/lib/caboose_rets/caboose_rets_helper.rb +2 -0
  45. data/lib/caboose_rets/engine.rb +7 -0
  46. data/lib/caboose_rets/version.rb +3 -0
  47. data/lib/tasks/caboose_rets.rake +855 -0
  48. data/test/caboose_test.rb +7 -0
  49. data/test/dummy/README.rdoc +261 -0
  50. data/test/dummy/Rakefile +7 -0
  51. data/test/dummy/app/assets/javascripts/application.js +15 -0
  52. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  53. data/test/dummy/app/controllers/application_controller.rb +3 -0
  54. data/test/dummy/app/helpers/application_helper.rb +2 -0
  55. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  56. data/test/dummy/config.ru +4 -0
  57. data/test/dummy/config/application.rb +59 -0
  58. data/test/dummy/config/boot.rb +10 -0
  59. data/test/dummy/config/database.yml +25 -0
  60. data/test/dummy/config/environment.rb +5 -0
  61. data/test/dummy/config/environments/development.rb +37 -0
  62. data/test/dummy/config/environments/production.rb +67 -0
  63. data/test/dummy/config/environments/test.rb +37 -0
  64. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  65. data/test/dummy/config/initializers/inflections.rb +15 -0
  66. data/test/dummy/config/initializers/mime_types.rb +5 -0
  67. data/test/dummy/config/initializers/secret_token.rb +7 -0
  68. data/test/dummy/config/initializers/session_store.rb +8 -0
  69. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  70. data/test/dummy/config/locales/en.yml +5 -0
  71. data/test/dummy/config/routes.rb +4 -0
  72. data/test/dummy/db/test.sqlite3 +0 -0
  73. data/test/dummy/log/test.log +25 -0
  74. data/test/dummy/public/404.html +26 -0
  75. data/test/dummy/public/422.html +26 -0
  76. data/test/dummy/public/500.html +25 -0
  77. data/test/dummy/public/favicon.ico +0 -0
  78. data/test/dummy/script/rails +6 -0
  79. data/test/integration/navigation_test.rb +10 -0
  80. data/test/test_helper.rb +15 -0
  81. 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,4 @@
1
+ module CabooseRets
2
+ module ApplicationHelper
3
+ end
4
+ 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