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
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YWU1ZDdiMDI1Mjk0NDE5ZTExNWJmZTc4ZGIyMDUyNDNhN2VhOTIzYw==
5
+ data.tar.gz: !binary |-
6
+ ZTQwYWY0YjJlYTM3ZGUyNDNmN2E1YmUyMzJiMmFiNzE2MTQwZWEyZg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NjU5MjdlZWYwNWYzMzRlZjIyNjAxMTc0MGU0ZDQxNGQ4YzY5YTRjNTQ2ZjRk
10
+ OGI4MWM5ZTFmZjIwYTkzYWRiMTE4OTc5YTIxNmRiMGVkNGI4OGE4YTAyODUw
11
+ ZGJhNDAwMGZiNTQ3MjkwMzA2OGZkMThhZDUzMmE2MGM0ZWRmZTc=
12
+ data.tar.gz: !binary |-
13
+ ZTE0ZTAxNDU4YTRmZGJjYjFlYTgzOTIwYzY0NjkyNjI3NDVmODQ3OWYzZDAx
14
+ OTEzOTg4YmY2MjRiODM0NDVjMWFmNTk2ZTMzZmIyNjdjNDJhYTZhZTg1ZTJh
15
+ ODQxZDY3ODJkY2VlNzA2NTI3YWE1ZGYwYzFiMDY3NWVjYTkxOTM=
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 William Barry
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ <h1>Caboose RETS</h1>
2
+
3
+ <p>RETS plugin for Caboose CMS.</p>
4
+
data/Rakefile ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'CabooseRets'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task :default => :test
@@ -0,0 +1,169 @@
1
+
2
+ module CabooseRets
3
+ class AgentsController < ApplicationController
4
+
5
+ # GET /agents
6
+ def index
7
+ @agents = Agent.where("lo_code = '46' AND hide IS false").order("last_name, first_name")
8
+ @agent = Agent.where(:la_code => '048540000').first
9
+ @assistants = Agent.where(:assistant_to => '048540000').order("last_name, first_name")
10
+ end
11
+
12
+ # GET /agents/:la_code
13
+ def details
14
+ la_code = params[:la_code]
15
+ @agents = Agent.where("lo_code = '46' AND hide IS false").order("last_name, first_name")
16
+ @agent = Agent.where(:la_code => la_code).first || Agent.where(:la_code => '048540000').first
17
+ Caboose.log(@agent.last_name)
18
+ @assistants = Agent.where(:assistant_to => la_code).order("last_name, first_name")
19
+ @next = Agent.where("\'la_code\' > \'#{la_code}\' AND \'la_code\' <> \'048540000\' AND \'lo_code\' = \'46\' AND hide IS false").order("last_name, first_name").first
20
+ @prev = Agent.where("\'la_code\' < \'#{la_code}\' AND \'la_code\' <> \'048540000\' AND \'lo_code\' = \'46\' AND hide IS false").order("last_name, first_name").first
21
+ end
22
+
23
+ # GET /agents/:la_code/listings
24
+ def listings
25
+ @agent = Agent.where(:la_code => params[:la_code]).first
26
+ is_agents = "la_code = ? AND (status = 'Active' OR status = 'Pending')"
27
+ is_coagents = "co_la_code = ? AND (status = 'Active' OR status = 'Pending')"
28
+
29
+ residential_properties = ResidentialProperty.where(is_agents, params[:la_code])
30
+ residential_properties += ResidentialProperty.where(is_coagents, params[:la_code]).select{ |p| defined? p && p.mls_acct }
31
+
32
+ commercial_properties = CommercialProperty.where(is_agents, params[:la_code])
33
+ commercial_properties += CommercialProperty.where(is_coagents, params[:la_code]).select{ |p| defined? p && p.mls_acct }
34
+
35
+ land_properties = LandProperty.where(is_agents, params[:la_code])
36
+ land_properties += LandProperty.where(is_coagents, params[:la_code]).select{ |p| defined? p && p.mls_acct }
37
+
38
+ @property_groups = [
39
+ { type: 'RES' , title: 'Residential Listings' , url_prefix: 'residential' , properties: residential_properties },
40
+ { type: 'COM' , title: 'Commercial Listings' , url_prefix: 'commercial' , properties: commercial_properties },
41
+ { type: 'LND' , title: 'Land Listings' , url_prefix: 'land' , properties: land_properties },
42
+ ]
43
+
44
+ @message = Message.new
45
+ end
46
+
47
+ #=============================================================================
48
+ # Admin functions
49
+ #=============================================================================
50
+
51
+ # GET /admin/agents
52
+ def admin_index
53
+ return if !user_is_allowed('agents', 'view')
54
+
55
+ @gen = Caboose::PageBarGenerator.new(params, {
56
+ 'lo_code' => '',
57
+ 'la_code' => '',
58
+ 'first_name_like' => '',
59
+ 'last_name_like' => ''
60
+ },{
61
+ 'model' => 'Agent',
62
+ 'sort' => 'last_name, first_name',
63
+ 'desc' => false,
64
+ 'base_url' => '/admin/agents'
65
+ })
66
+ @agents = @gen.items
67
+ render :layout => 'caboose/admin'
68
+ end
69
+
70
+ # GET /admin/agents/:id/edit
71
+ def admin_edit
72
+ return if !user_is_allowed('agents', 'edit')
73
+ @agent = Agent.find(params[:id])
74
+ @boss = @agent.assistant_to.nil? || @agent.assistant_to.strip.length == 0 ? nil : Agent.where(:la_code => @agent.assistant_to).first
75
+ render :layout => 'caboose/admin'
76
+ end
77
+
78
+ # GET /admin/agents/:id/edit-bio
79
+ def admin_edit_bio
80
+ return if !user_is_allowed('agents', 'edit')
81
+ @agent = Agent.find(params[:id])
82
+ render :layout => 'caboose/admin'
83
+ end
84
+
85
+ # GET /admin/agents/:id/edit-contact-info
86
+ def admin_edit_contact_info
87
+ return if !user_is_allowed('agents', 'edit')
88
+ @agent = Agent.find(params[:id])
89
+ render :layout => 'caboose/admin'
90
+ end
91
+
92
+ # GET /admin/agents/:id/edit-mls-info
93
+ def admin_edit_mls_info
94
+ return if !user_is_allowed('agents', 'edit')
95
+ @agent = Agent.find(params[:id])
96
+ render :layout => 'caboose/admin'
97
+ end
98
+
99
+ # POST /admin/agents/:id
100
+ def admin_update
101
+ Caboose.log(params)
102
+ return if !user_is_allowed('agents', 'edit')
103
+
104
+ resp = Caboose::StdClass.new({'attributes' => {}})
105
+ agent = Agent.find(params[:id])
106
+
107
+ save = true
108
+ params.each do |name,value|
109
+ case name
110
+ when 'hide'
111
+ agent.hide = value
112
+ when 'contact_info'
113
+ agent.contact_info = value
114
+ when 'bio'
115
+ agent.bio = value
116
+ when 'assistant_to'
117
+ agent.assistant_to = value
118
+ if !value.nil? && value.length > 0 && Agent.exists?(:la_code => value)
119
+ boss = Agent.where(:la_code => value).first
120
+ resp.attributes['assistant_to'] = { 'text' => "#{boss.first_name} #{boss.last_name}" }
121
+ else
122
+ resp.attributes['assistant_to'] = { 'text' => "Not an assistant" }
123
+ end
124
+ end
125
+ end
126
+ resp.success = save && agent.save
127
+ render :json => resp
128
+ end
129
+
130
+ # GET /admin/agents/:id/refresh
131
+ def admin_refresh
132
+ agent = Agent.find(params[:id])
133
+ RetsAgentsImporter.import_agent(agent.la_code)
134
+ flash[:message] = "<p class='note success'>The agent's info has been updated from MLS.</p>"
135
+ render :json => Caboose::StdClass.new({ 'reload' => true })
136
+ end
137
+
138
+ # GET /admin/agents/assistant-to-options
139
+ def admin_assistant_to_options
140
+ options = [{
141
+ 'value' => '',
142
+ 'text' => '-- Not an assistant --'
143
+ }]
144
+ Agent.where(:lo_code => '46').reorder('last_name, first_name').all.each do |a|
145
+ options << {
146
+ 'value' => a.la_code,
147
+ 'text' => "#{a.first_name} #{a.last_name}"
148
+ }
149
+ end
150
+ render :json => options
151
+ end
152
+
153
+ # GET /admin/agents/agent_options
154
+ def agent_options
155
+ options = [{
156
+ 'value' => '',
157
+ 'text' => '-- No Agent --'
158
+ }]
159
+ Agent.where(:lo_code => '46').reorder('last_name, first_name').all.each do |a|
160
+ options << {
161
+ 'value' => a.la_code,
162
+ 'text' => "#{a.first_name} #{a.last_name}"
163
+ }
164
+ end
165
+ render :json => options
166
+ end
167
+
168
+ end
169
+ end
@@ -0,0 +1,6 @@
1
+
2
+ module CabooseRets
3
+ class ApplicationController < Caboose::ApplicationController
4
+
5
+ end
6
+ end
@@ -0,0 +1,281 @@
1
+
2
+ class CabooseRets
3
+ class CommercialController < ApplicationController
4
+
5
+ # GET /commercial
6
+ def index
7
+ @gen = Caboose::PageBarGenerator.new(params, {
8
+ 'name' => '',
9
+ 'current_price_gte' => '',
10
+ 'current_price_lte' => '',
11
+ 'prop_type' => '',
12
+ 'tot_heat_sqft_gte' => '',
13
+ 'city' => '',
14
+ 'county' => '',
15
+ 'zip' => '',
16
+ 'mls_acct' => '',
17
+ # 'added_by_advantage' => '',
18
+ 'lo_code' => '',
19
+ 'address' => '',
20
+ },{
21
+ 'model' => 'CommercialProperty',
22
+ 'sort' => 'mls_acct',
23
+ 'desc' => false,
24
+ 'base_url' => '/commercial',
25
+ 'items_per_page' => 10
26
+ })
27
+ @properties = @gen.items
28
+ end
29
+
30
+ # GET /commercial/:mls_acct/details
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
37
+ end
38
+
39
+ #=============================================================================
40
+ # Admin actions
41
+ #=============================================================================
42
+
43
+ # GET /admin/commercial
44
+ def admin_index
45
+ return if !user_is_allowed('properties', 'view')
46
+
47
+ @gen = Caboose::PageBarGenerator.new(params, {
48
+ 'name' => ''
49
+ },{
50
+ 'model' => 'CommercialProperty',
51
+ 'sort' => 'mls_acct',
52
+ 'desc' => false,
53
+ 'base_url' => '/admin/commercial'
54
+ })
55
+ @properties = @gen.items
56
+ render :layout => 'caboose/admin'
57
+ end
58
+
59
+ # GET /admin/commercial/:mls_acct/edit
60
+ def admin_edit
61
+ return if !user_is_allowed('properties', 'edit')
62
+ @property = CommercialProperty.where(:mls_acct => params[:mls_acct]).first
63
+ render :layout => 'caboose/admin'
64
+ end
65
+
66
+ # POST /admin/commercial/:mls_acct
67
+ def admin_update
68
+ return if !user_is_allowed('properties', 'edit')
69
+
70
+ resp = Caboose::StdClass.new({'attributes' => {}})
71
+ property = CommercialProperty.find(params[:id])
72
+
73
+ save = true
74
+ params.each do |name,value|
75
+ case name
76
+ when 'acreage',
77
+ 'adjoining_land_use',
78
+ 'agent_notes',
79
+ 'agent_other_contact_desc',
80
+ 'agent_other_contact_phone',
81
+ 'annual_taxes',
82
+ 'approx_age',
83
+ 'area',
84
+ 'baths',
85
+ 'baths_full',
86
+ 'baths_half',
87
+ 'bedrooms',
88
+ 'bom_date',
89
+ 'book_number',
90
+ 'book_page',
91
+ 'book_type',
92
+ 'box_on_unit',
93
+ 'box_on_unit_yn',
94
+ 'business_included_yn',
95
+ 'buyer_broker',
96
+ 'buyer_broker_type',
97
+ 'buyer_city',
98
+ 'buyer_name',
99
+ 'buyer_state',
100
+ 'buyer_zip',
101
+ 'category',
102
+ 'city',
103
+ 'city_code',
104
+ 'co_la_code',
105
+ 'co_lo_code',
106
+ 'co_sa_code',
107
+ 'co_so_code',
108
+ 'contacts',
109
+ 'contr_broker',
110
+ 'contr_broker_type',
111
+ 'county',
112
+ 'current_price',
113
+ 'date_created',
114
+ 'date_leased',
115
+ 'date_modified',
116
+ 'df_yn',
117
+ 'directions',
118
+ 'display_address_yn',
119
+ 'dom',
120
+ 'elem_school',
121
+ 'expenses_assoc',
122
+ 'expenses_ins',
123
+ 'expenses_maint',
124
+ 'expenses_mgmt',
125
+ 'expenses_other',
126
+ 'expenses_tax',
127
+ 'expenses_utility',
128
+ 'expire_date',
129
+ 'flood_plain',
130
+ 'ftr_building',
131
+ 'ftr_building_type',
132
+ 'ftr_closing',
133
+ 'ftr_cooling',
134
+ 'ftr_docs_on_file',
135
+ 'ftr_exterior',
136
+ 'ftr_financing',
137
+ 'ftr_flooring',
138
+ 'ftr_heating',
139
+ 'ftr_interior',
140
+ 'ftr_internet',
141
+ 'ftr_lease_terms',
142
+ 'ftr_property_desc',
143
+ 'ftr_roof',
144
+ 'ftr_sale_terms',
145
+ 'ftr_sewer',
146
+ 'ftr_showing',
147
+ 'ftr_sprinkler',
148
+ 'ftr_style',
149
+ 'ftr_utilities',
150
+ 'ftr_utilities_rental',
151
+ 'ftr_water',
152
+ 'geo_precision',
153
+ 'georesult',
154
+ 'high_school',
155
+ 'hoa_fee',
156
+ 'hoa_fee_yn',
157
+ 'hoa_term',
158
+ 'income_gross',
159
+ 'income_net',
160
+ 'income_other',
161
+ 'income_rental',
162
+ 'internet_yn',
163
+ 'la_code',
164
+ 'leased_through',
165
+ 'legal_block',
166
+ 'legal_lot',
167
+ 'legals',
168
+ 'list_date',
169
+ 'list_price',
170
+ 'listing_type',
171
+ 'lo_code',
172
+ 'lockbox_yn',
173
+ 'lot_dimensions',
174
+ 'lot_dimensions_source',
175
+ 'media_flag',
176
+ 'middle_school',
177
+ 'mls_acct',
178
+ 'municipality',
179
+ 'num_units',
180
+ 'num_units_occupied',
181
+ 'off_mkt_date',
182
+ 'off_mkt_days',
183
+ 'office_notes',
184
+ 'orig_lp',
185
+ 'other_fee',
186
+ 'other_fee_type',
187
+ 'owner_name',
188
+ 'owner_phone',
189
+ 'parcel_id',
190
+ 'pending_date',
191
+ 'photo_count',
192
+ 'photo_date_modified',
193
+ 'photo_description',
194
+ 'photo_instr',
195
+ 'posession',
196
+ 'price_change_date',
197
+ 'price_sqft',
198
+ 'proj_close_date',
199
+ 'prop_desc',
200
+ 'prop_id',
201
+ 'prop_type',
202
+ 'remarks',
203
+ 'road_frontage_ft',
204
+ 'sa_code',
205
+ 'sale_lease',
206
+ 'sale_notes',
207
+ 'so_code',
208
+ 'sold_date',
209
+ 'sold_price',
210
+ 'sold_terms',
211
+ 'sqft_source',
212
+ 'state',
213
+ 'status',
214
+ 'status_date',
215
+ 'status_flag',
216
+ 'street',
217
+ 'street_dir',
218
+ 'street_name',
219
+ 'street_num',
220
+ 'sub_agent',
221
+ 'sub_agent_type',
222
+ 'sub_area',
223
+ 'subdivision',
224
+ 'take_photo_yn',
225
+ 'third_party_comm_yn',
226
+ 'tot_heat_sqft',
227
+ 'tour_date',
228
+ 'tour_submit_date',
229
+ 'type_detailed',
230
+ 'u1_dims',
231
+ 'u1_free_standing_yn',
232
+ 'u1_sqft_manuf',
233
+ 'u1_sqft_office',
234
+ 'u1_sqft_retail',
235
+ 'u1_sqft_total',
236
+ 'u1_sqft_warehouse',
237
+ 'u1_year_built',
238
+ 'u2_dims',
239
+ 'u2_free_standing_yn',
240
+ 'u2_sqft_manuf',
241
+ 'u2_sqft_office',
242
+ 'u2_sqft_retail',
243
+ 'u2_sqft_total',
244
+ 'u2_sqft_warehouse',
245
+ 'u2_year_built',
246
+ 'u3_dims',
247
+ 'u3_free_standing_yn',
248
+ 'u3_sqft_manuf',
249
+ 'u3_sqft_office',
250
+ 'u3_sqft_retail',
251
+ 'u3_sqft_total',
252
+ 'u3_sqft_warehouse',
253
+ 'u3_year_built',
254
+ 'unit_num',
255
+ 'upload_source',
256
+ 'vacancy_rate',
257
+ 'vacant_yn',
258
+ 'valuation_yn',
259
+ 'vt_yn',
260
+ 'waterfront_yn',
261
+ 'withdrawn_date',
262
+ 'year_built',
263
+ 'zip',
264
+ 'zoning_northport',
265
+ 'zoning_tusc'
266
+ property[name.to_sym] = value
267
+ end
268
+ end
269
+ resp.success = save && property.save
270
+ render json: resp
271
+ end
272
+
273
+ # GET /admin/commercial/:mls_acct/refresh
274
+ def admin_refresh
275
+ RetsCommercialImporter.import_property(params[:mls_acct], 'COM')
276
+ flash[:message] = "<p class='note success'>The property info has been updated from MLS.</p>"
277
+ render :json => Caboose::StdClass.new({ 'reload' => true })
278
+ end
279
+
280
+ end
281
+ end