caboose-rets 0.0.2

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.
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