caboose-rets 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/controllers/caboose_rets/agents_controller.rb +3 -3
- data/app/controllers/caboose_rets/commercial_controller.rb +34 -4
- data/app/controllers/caboose_rets/land_controller.rb +5 -4
- data/app/controllers/caboose_rets/multi_family_controller.rb +5 -4
- data/app/controllers/caboose_rets/offices_controller.rb +56 -0
- data/app/controllers/caboose_rets/residential_controller.rb +4 -3
- data/app/models/caboose_rets/rets_importer.rb +1 -1
- data/app/models/caboose_rets/rets_plugin.rb +2 -2
- data/app/views/caboose_rets/agents/admin_edit_mls_info.html.erb +3 -5
- data/app/views/caboose_rets/commercial/admin_edit.html.erb +4 -6
- data/app/views/caboose_rets/commercial/admin_index.html.erb +2 -0
- data/app/views/caboose_rets/commercial/admin_new.html.erb +57 -0
- data/app/views/caboose_rets/land/admin_edit.html.erb +156 -0
- data/app/views/caboose_rets/land/admin_index.html.erb +44 -0
- data/app/views/caboose_rets/multi_family/admin_edit.html.erb +211 -0
- data/app/views/caboose_rets/multi_family/admin_index.html.erb +44 -0
- data/app/views/caboose_rets/offices/admin_edit.html.erb +55 -0
- data/app/views/caboose_rets/offices/admin_index.html.erb +48 -0
- data/app/views/caboose_rets/residential/admin_edit.html.erb +2 -4
- data/config/routes.rb +6 -0
- data/lib/caboose_rets/version.rb +1 -1
- metadata +9 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NTYxZjY0Y2FhMDc1YjAxYTE5OTAzNTU3ZGU4ODZjNjQxNjRkMTFmOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2M2YzA2YjBhZWFlMjEwOGI3N2ZmNDFjZjg2MWRlYWM5MTM1MzIwNg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Yjk1MmI3MjQ5ZTcwYjMyNDBmMWFjZWYwMmE2MGQwNGQ3ODQ0ZjZkYThiNmYy
|
10
|
+
NGZkMTRjNGQ0NzA0NzA5NmE0MjFhMjNjNDA2NTEyOTZiYjdiMzRmZGQ1YmM2
|
11
|
+
NjM1OWJlZGJkZWNkMmI3ZTRlNTFmZDVhMTAzYTFmMThkZDc4Mjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YTE3MzY4OWQ3YTc3YTc0OTEwMjkzMzRkNDZmODE0Y2RmYmQzNmRkMWJiNmY5
|
14
|
+
ZGU1N2Y0OGQxN2ExNjk2ZTJjZmI1Y2RmYWUzNWI1MTc4NTQ2YTk2MTQwMWQy
|
15
|
+
MTgwNjNkMDA3NDVhOWVlNzI1MjI2ZDE5NjljYjNiZWVmN2I1NzE=
|
@@ -127,9 +127,9 @@ module CabooseRets
|
|
127
127
|
# GET /admin/agents/:id/refresh
|
128
128
|
def admin_refresh
|
129
129
|
agent = Agent.find(params[:id])
|
130
|
-
|
131
|
-
|
132
|
-
render :json => Caboose::StdClass.new({ '
|
130
|
+
RetsImporter.import("(LA_LA_CODE=#{agent.la_code})", 'Agent', 'AGT')
|
131
|
+
RetsImporter.download_agent_images(agent)
|
132
|
+
render :json => Caboose::StdClass.new({ 'success' => "The agent's info has been updated from MLS." })
|
133
133
|
end
|
134
134
|
|
135
135
|
# GET /admin/agents/assistant-to-options
|
@@ -52,6 +52,35 @@ module CabooseRets
|
|
52
52
|
render :layout => 'caboose/admin'
|
53
53
|
end
|
54
54
|
|
55
|
+
# GET /admin/commercial/new
|
56
|
+
def admin_new
|
57
|
+
return if !user_is_allowed('properties', 'edit')
|
58
|
+
@agents = Agent.reorder("last_name, first_name").all
|
59
|
+
@offices = Office.reorder("lo_name")
|
60
|
+
render :layout => 'caboose/admin'
|
61
|
+
end
|
62
|
+
|
63
|
+
# POST /admin/commercial
|
64
|
+
def admin_add
|
65
|
+
return if !user_is_allowed('properties', 'edit')
|
66
|
+
|
67
|
+
max_id = 1000001
|
68
|
+
if CommercialProperty.where("id > 1000000").count > 0
|
69
|
+
max_id = CommercialProperty.maximum(:id, :conditions => ['id > 1000000'])
|
70
|
+
end
|
71
|
+
|
72
|
+
p = CommercialProperty.new
|
73
|
+
p.id = max_id + 1
|
74
|
+
p.mls_acct = p.id
|
75
|
+
p.la_code = params[:la_code]
|
76
|
+
p.lo_code = params[:lo_code]
|
77
|
+
p.save
|
78
|
+
|
79
|
+
render :json => Caboose::StdClass.new({
|
80
|
+
'redirect' => "/admin/commercial/#{p.id}/edit"
|
81
|
+
})
|
82
|
+
end
|
83
|
+
|
55
84
|
# GET /admin/commercial/:mls_acct/edit
|
56
85
|
def admin_edit
|
57
86
|
return if !user_is_allowed('properties', 'edit')
|
@@ -267,10 +296,11 @@ module CabooseRets
|
|
267
296
|
end
|
268
297
|
|
269
298
|
# GET /admin/commercial/:mls_acct/refresh
|
270
|
-
def admin_refresh
|
271
|
-
|
272
|
-
|
273
|
-
|
299
|
+
def admin_refresh
|
300
|
+
p = CommercialProperty.find(params[:mls_acct])
|
301
|
+
RetsImporter.import("(MLS_ACCT=#{p.mls_acct})", 'Property', 'COM')
|
302
|
+
RetsImporter.download_property_images(p)
|
303
|
+
render :json => Caboose::StdClass.new({ 'success' => "The property's info has been updated from MLS." })
|
274
304
|
end
|
275
305
|
|
276
306
|
end
|
@@ -107,10 +107,11 @@ module CabooseRets
|
|
107
107
|
end
|
108
108
|
|
109
109
|
# GET /admin/land/:mls_acct/refresh
|
110
|
-
def admin_refresh
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
def admin_refresh
|
111
|
+
p = LandProperty.find(params[:mls_acct])
|
112
|
+
RetsImporter.import("(MLS_ACCT=#{p.mls_acct})", 'Property', 'LND')
|
113
|
+
RetsImporter.download_property_images(p)
|
114
|
+
render :json => Caboose::StdClass.new({ 'success' => "The property's info has been updated from MLS." })
|
114
115
|
end
|
115
116
|
|
116
117
|
end
|
@@ -88,10 +88,11 @@ module CabooseRets
|
|
88
88
|
end
|
89
89
|
|
90
90
|
# GET /admin/multi_family/:mls_acct/refresh
|
91
|
-
def admin_refresh
|
92
|
-
|
93
|
-
|
94
|
-
|
91
|
+
def admin_refresh
|
92
|
+
p = MultiFamilyProperty.find(params[:mls_acct])
|
93
|
+
RetsImporter.import("(MLS_ACCT=#{p.mls_acct})", 'Property', 'LND')
|
94
|
+
RetsImporter.download_property_images(p)
|
95
|
+
render :json => Caboose::StdClass.new({ 'success' => "The property's info has been updated from MLS." })
|
95
96
|
end
|
96
97
|
|
97
98
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
|
2
|
+
module CabooseRets
|
3
|
+
class OfficesController < ApplicationController
|
4
|
+
|
5
|
+
#=============================================================================
|
6
|
+
# Admin functions
|
7
|
+
#=============================================================================
|
8
|
+
|
9
|
+
# GET /admin/offices
|
10
|
+
def admin_index
|
11
|
+
return if !user_is_allowed('offices', 'view')
|
12
|
+
|
13
|
+
@gen = Caboose::PageBarGenerator.new(params, {
|
14
|
+
'lo_code' => '',
|
15
|
+
'lo_name_like' => ''
|
16
|
+
},{
|
17
|
+
'model' => 'CabooseRets::Office',
|
18
|
+
'sort' => 'lo_name',
|
19
|
+
'desc' => false,
|
20
|
+
'base_url' => '/admin/offices'
|
21
|
+
})
|
22
|
+
@offices = @gen.items
|
23
|
+
render :layout => 'caboose/admin'
|
24
|
+
end
|
25
|
+
|
26
|
+
# GET /admin/offices/:id/edit
|
27
|
+
def admin_edit
|
28
|
+
return if !user_is_allowed('offices', 'edit')
|
29
|
+
@office = Office.find(params[:id])
|
30
|
+
render :layout => 'caboose/admin'
|
31
|
+
end
|
32
|
+
|
33
|
+
# GET /admin/offices/:id/refresh
|
34
|
+
def admin_refresh
|
35
|
+
office = Office.find(params[:id])
|
36
|
+
RetsImporter.import("(LO_LO_CODE=#{office.lo_code})", 'Office', 'OFF')
|
37
|
+
render :json => Caboose::StdClass.new({ 'success' => "The office's info has been updated from MLS." })
|
38
|
+
end
|
39
|
+
|
40
|
+
# GET /admin/offices/options
|
41
|
+
def office_options
|
42
|
+
options = [{
|
43
|
+
'value' => '',
|
44
|
+
'text' => '-- No Office --'
|
45
|
+
}]
|
46
|
+
Office.reorder('lo_name').all.each do |office|
|
47
|
+
options << {
|
48
|
+
'value' => office.lo_code,
|
49
|
+
'text' => office.lo_name
|
50
|
+
}
|
51
|
+
end
|
52
|
+
render :json => options
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -98,9 +98,10 @@ module CabooseRets
|
|
98
98
|
|
99
99
|
# GET /admin/residential/:mls_acct/refresh
|
100
100
|
def admin_refresh
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
p = ResidentialProperty.find(params[:mls_acct])
|
102
|
+
RetsImporter.import("(MLS_ACCT=#{p.mls_acct})", 'Property', 'RES')
|
103
|
+
RetsImporter.download_property_images(p)
|
104
|
+
render :json => Caboose::StdClass.new({ 'success' => "The property's info has been updated from MLS." })
|
104
105
|
end
|
105
106
|
|
106
107
|
end
|
@@ -313,7 +313,7 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
|
|
313
313
|
#=============================================================================
|
314
314
|
|
315
315
|
def self.log(msg)
|
316
|
-
puts "[rets_importer] #{msg}"
|
316
|
+
#puts "[rets_importer] #{msg}"
|
317
317
|
Rails.logger.info("[rets_importer] #{msg}")
|
318
318
|
end
|
319
319
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class RetsPlugin < Caboose::CaboosePlugin
|
1
|
+
class CabooseRets::RetsPlugin < Caboose::CaboosePlugin
|
2
2
|
|
3
3
|
def self.admin_nav(nav, user = nil, page = nil)
|
4
4
|
return nav if user.nil? || !user.is_allowed('properties', 'view')
|
@@ -11,7 +11,7 @@ class RetsPlugin < Caboose::CaboosePlugin
|
|
11
11
|
}
|
12
12
|
|
13
13
|
item['children'] << { 'id' => 'agents' , 'href' => '/admin/agents' , 'text' => 'Agents' , 'modal' => false }
|
14
|
-
item['children'] << { 'id' => '
|
14
|
+
item['children'] << { 'id' => 'offices' , 'href' => '/admin/offices' , 'text' => 'Offices' , 'modal' => false }
|
15
15
|
item['children'] << { 'id' => 'open-houses' , 'href' => '/admin/open-houses' , 'text' => 'Open Houses' , 'modal' => false }
|
16
16
|
item['children'] << { 'id' => 'residential' , 'href' => '/admin/residential' , 'text' => 'Residential Property' , 'modal' => false }
|
17
17
|
item['children'] << { 'id' => 'commercial' , 'href' => '/admin/commercial' , 'text' => 'Commercial Property' , 'modal' => false }
|
@@ -50,14 +50,12 @@
|
|
50
50
|
|
51
51
|
function refresh_agent_from_mls(agent_id)
|
52
52
|
{
|
53
|
-
|
53
|
+
modal.autosize("<p class='loading'>Refreshing agent info from MLS...</p>");
|
54
54
|
$.ajax({
|
55
55
|
url: '/admin/agents/' + agent_id + '/refresh',
|
56
56
|
success: function(resp) {
|
57
|
-
if (resp.error)
|
58
|
-
|
59
|
-
if (resp.reload)
|
60
|
-
location.reload();
|
57
|
+
if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
|
58
|
+
if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>");
|
61
59
|
}
|
62
60
|
});
|
63
61
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%
|
2
2
|
p = @property
|
3
|
-
is_custom_property = p.
|
3
|
+
is_custom_property = p.id > 1000000
|
4
4
|
attributes = [
|
5
5
|
'acreage',
|
6
6
|
'adjoining_land_use',
|
@@ -231,15 +231,13 @@ function refresh_property_from_mls(mls_acct)
|
|
231
231
|
$.ajax({
|
232
232
|
url: '/admin/commercial/' + mls_acct + '/refresh',
|
233
233
|
success: function(resp) {
|
234
|
-
if (resp.error)
|
235
|
-
|
236
|
-
if (resp.reload)
|
237
|
-
location.reload();
|
234
|
+
if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
|
235
|
+
if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>");
|
238
236
|
}
|
239
237
|
});
|
240
238
|
}
|
241
239
|
|
242
|
-
<% if
|
240
|
+
<% if is_custom_property %>
|
243
241
|
|
244
242
|
$(document).ready(function() {
|
245
243
|
m = new ModelBinder({
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<h1>New Custom Commercial Property</h1>
|
2
|
+
|
3
|
+
<% content_for :caboose_css do %>
|
4
|
+
<style type='text/css'>
|
5
|
+
#search_form_wrapper { margin-bottom: 10px; position: absolute; top:0; right: 0; }
|
6
|
+
</style>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<form action='/admin/commercial' method='post' id='commercial_form'>
|
10
|
+
<input type='hidden' name='authenticity_token' value='<%= form_authenticity_token %>' />
|
11
|
+
<p>Office:
|
12
|
+
<select name='lo_code'>
|
13
|
+
<option value=''>-- Select an office --</option>
|
14
|
+
<% @offices.each do |office| %>
|
15
|
+
<option value="<%= office.lo_code %>"><%= office.lo_name %></option>
|
16
|
+
<% end %>
|
17
|
+
</select>
|
18
|
+
</p>
|
19
|
+
<p>Agent:
|
20
|
+
<select name='la_code'>
|
21
|
+
<option value=''>-- Select an agent --</option>
|
22
|
+
<% @agents.each do |agent| %>
|
23
|
+
<option value="<%= agent.la_code %>"><%= agent.first_name %> <%= agent.last_name %></option>
|
24
|
+
<% end %>
|
25
|
+
</select>
|
26
|
+
</p>
|
27
|
+
<div id='message'></div>
|
28
|
+
<p>
|
29
|
+
<input type='button' value='< Back' onclick="window.location='/admin/commercial';" />
|
30
|
+
<input type='submit' value='Add Property' onclick='add_commercial_property(); return false;' />
|
31
|
+
</p>
|
32
|
+
</form>
|
33
|
+
|
34
|
+
<% content_for :caboose_js do %>
|
35
|
+
<script type='text/javascript'>
|
36
|
+
|
37
|
+
function add_commercial_property()
|
38
|
+
{
|
39
|
+
modal.autosize("<p class='loading'>Adding property...</p>");
|
40
|
+
$.ajax({
|
41
|
+
url: '/admin/commercial',
|
42
|
+
type: 'post',
|
43
|
+
data: $('#commercial_form').serialize(),
|
44
|
+
success: function(resp) {
|
45
|
+
if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
|
46
|
+
if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>");
|
47
|
+
if (resp.redirect) window.location = resp.redirect;
|
48
|
+
}
|
49
|
+
});
|
50
|
+
}
|
51
|
+
|
52
|
+
var model = false;
|
53
|
+
$(document).ready(function() {
|
54
|
+
modal = new CabooseModal(800);
|
55
|
+
});
|
56
|
+
</script>
|
57
|
+
<% end %>
|
@@ -0,0 +1,156 @@
|
|
1
|
+
<%
|
2
|
+
p = @property
|
3
|
+
%>
|
4
|
+
<h1>Edit Land Property</h1>
|
5
|
+
|
6
|
+
<p>
|
7
|
+
<input type='button' value='< Back' onclick="window.location='/admin/land';" />
|
8
|
+
<input type='button' value='Manually Refresh from MLS' onclick="refresh_property_from_mls('<%= p.mls_acct %>');" />
|
9
|
+
</p>
|
10
|
+
<div id='message'></div>
|
11
|
+
|
12
|
+
<table class='data'>
|
13
|
+
<tr><td>acreage </td><td><%= p.acreage %></td></tr>
|
14
|
+
<tr><td>acreage_source </td><td><%= p.acreage_source %></td></tr>
|
15
|
+
<tr><td>adjoining_land_use </td><td><%= p.adjoining_land_use %></td></tr>
|
16
|
+
<tr><td>agent_notes </td><td><%= p.agent_notes %></td></tr>
|
17
|
+
<tr><td>agent_other_contact_desc </td><td><%= p.agent_other_contact_desc %></td></tr>
|
18
|
+
<tr><td>agent_other_contact_phone </td><td><%= p.agent_other_contact_phone %></td></tr>
|
19
|
+
<tr><td>annual_taxes </td><td><%= p.annual_taxes %></td></tr>
|
20
|
+
<tr><td>area </td><td><%= p.area %></td></tr>
|
21
|
+
<tr><td>bom_date </td><td><%= p.bom_date %></td></tr>
|
22
|
+
<tr><td>book_number </td><td><%= p.book_number %></td></tr>
|
23
|
+
<tr><td>book_page </td><td><%= p.book_page %></td></tr>
|
24
|
+
<tr><td>book_type </td><td><%= p.book_type %></td></tr>
|
25
|
+
<tr><td>buyer_broker </td><td><%= p.buyer_broker %></td></tr>
|
26
|
+
<tr><td>buyer_broker_type </td><td><%= p.buyer_broker_type %></td></tr>
|
27
|
+
<tr><td>buyer_name </td><td><%= p.buyer_name %></td></tr>
|
28
|
+
<tr><td>category </td><td><%= p.category %></td></tr>
|
29
|
+
<tr><td>city </td><td><%= p.city %></td></tr>
|
30
|
+
<tr><td>city_code </td><td><%= p.city_code %></td></tr>
|
31
|
+
<tr><td>co_la_code </td><td><%= p.co_la_code %></td></tr>
|
32
|
+
<tr><td>co_lo_code </td><td><%= p.co_lo_code %></td></tr>
|
33
|
+
<tr><td>co_sa_code </td><td><%= p.co_sa_code %></td></tr>
|
34
|
+
<tr><td>co_so_code </td><td><%= p.co_so_code %></td></tr>
|
35
|
+
<tr><td>contacts </td><td><%= p.contacts %></td></tr>
|
36
|
+
<tr><td>contr_broker </td><td><%= p.contr_broker %></td></tr>
|
37
|
+
<tr><td>contr_broker_type </td><td><%= p.contr_broker_type %></td></tr>
|
38
|
+
<tr><td>converted </td><td><%= p.converted %></td></tr>
|
39
|
+
<tr><td>county </td><td><%= p.county %></td></tr>
|
40
|
+
<tr><td>current_price </td><td><%= p.current_price %></td></tr>
|
41
|
+
<tr><td>date_created </td><td><%= p.date_created %></td></tr>
|
42
|
+
<tr><td>date_modified </td><td><%= p.date_modified %></td></tr>
|
43
|
+
<tr><td>df_yn </td><td><%= p.df_yn %></td></tr>
|
44
|
+
<tr><td>directions </td><td><%= p.directions %></td></tr>
|
45
|
+
<tr><td>display_address_yn </td><td><%= p.display_address_yn %></td></tr>
|
46
|
+
<tr><td>dom </td><td><%= p.dom %></td></tr>
|
47
|
+
<tr><td>elem_school </td><td><%= p.elem_school %></td></tr>
|
48
|
+
<tr><td>expire_date </td><td><%= p.expire_date %></td></tr>
|
49
|
+
<tr><td>ftr_access </td><td><%= p.ftr_access %></td></tr>
|
50
|
+
<tr><td>ftr_docs_on_file </td><td><%= p.ftr_docs_on_file %></td></tr>
|
51
|
+
<tr><td>ftr_existing_struct </td><td><%= p.ftr_existing_struct %></td></tr>
|
52
|
+
<tr><td>ftr_extras </td><td><%= p.ftr_extras %></td></tr>
|
53
|
+
<tr><td>ftr_internet </td><td><%= p.ftr_internet %></td></tr>
|
54
|
+
<tr><td>ftr_lotdesc </td><td><%= p.ftr_lotdesc %></td></tr>
|
55
|
+
<tr><td>ftr_mineralrights </td><td><%= p.ftr_mineralrights %></td></tr>
|
56
|
+
<tr><td>ftr_possibleuse </td><td><%= p.ftr_possibleuse %></td></tr>
|
57
|
+
<tr><td>ftr_restrictions </td><td><%= p.ftr_restrictions %></td></tr>
|
58
|
+
<tr><td>ftr_sewer </td><td><%= p.ftr_sewer %></td></tr>
|
59
|
+
<tr><td>ftr_showing </td><td><%= p.ftr_showing %></td></tr>
|
60
|
+
<tr><td>ftr_terms </td><td><%= p.ftr_terms %></td></tr>
|
61
|
+
<tr><td>ftr_topography </td><td><%= p.ftr_topography %></td></tr>
|
62
|
+
<tr><td>ftr_utils </td><td><%= p.ftr_utils %></td></tr>
|
63
|
+
<tr><td>ftr_zoning </td><td><%= p.ftr_zoning %></td></tr>
|
64
|
+
<tr><td>geo_precision </td><td><%= p.geo_precision %></td></tr>
|
65
|
+
<tr><td>georesult </td><td><%= p.georesult %></td></tr>
|
66
|
+
<tr><td>high_school </td><td><%= p.high_school %></td></tr>
|
67
|
+
<tr><td>internet_yn </td><td><%= p.internet_yn %></td></tr>
|
68
|
+
<tr><td>la_code </td><td><%= p.la_code %></td></tr>
|
69
|
+
<tr><td>legal_block </td><td><%= p.legal_block %></td></tr>
|
70
|
+
<tr><td>legal_lot </td><td><%= p.legal_lot %></td></tr>
|
71
|
+
<tr><td>legal_section </td><td><%= p.legal_section %></td></tr>
|
72
|
+
<tr><td>legals </td><td><%= p.legals %></td></tr>
|
73
|
+
<tr><td>list_date </td><td><%= p.list_date %></td></tr>
|
74
|
+
<tr><td>list_price </td><td><%= p.list_price %></td></tr>
|
75
|
+
<tr><td>listing_type </td><td><%= p.listing_type %></td></tr>
|
76
|
+
<tr><td>lo_code </td><td><%= p.lo_code %></td></tr>
|
77
|
+
<tr><td>lot_dim_source </td><td><%= p.lot_dim_source %></td></tr>
|
78
|
+
<tr><td>lot_dimensions </td><td><%= p.lot_dimensions %></td></tr>
|
79
|
+
<tr><td>media_flag </td><td><%= p.media_flag %></td></tr>
|
80
|
+
<tr><td>middle_school </td><td><%= p.middle_school %></td></tr>
|
81
|
+
<tr><td>mls_acct </td><td><%= p.mls_acct %></td></tr>
|
82
|
+
<tr><td>municipality </td><td><%= p.municipality %></td></tr>
|
83
|
+
<tr><td>off_mkt_date </td><td><%= p.off_mkt_date %></td></tr>
|
84
|
+
<tr><td>off_mkt_days </td><td><%= p.off_mkt_days %></td></tr>
|
85
|
+
<tr><td>office_notes </td><td><%= p.office_notes %></td></tr>
|
86
|
+
<tr><td>orig_lp </td><td><%= p.orig_lp %></td></tr>
|
87
|
+
<tr><td>orig_price </td><td><%= p.orig_price %></td></tr>
|
88
|
+
<tr><td>other_fee </td><td><%= p.other_fee %></td></tr>
|
89
|
+
<tr><td>other_fee_type </td><td><%= p.other_fee_type %></td></tr>
|
90
|
+
<tr><td>owner_name </td><td><%= p.owner_name %></td></tr>
|
91
|
+
<tr><td>owner_phone </td><td><%= p.owner_phone %></td></tr>
|
92
|
+
<tr><td>parcel_id </td><td><%= p.parcel_id %></td></tr>
|
93
|
+
<tr><td>pending_date </td><td><%= p.pending_date %></td></tr>
|
94
|
+
<tr><td>photo_count </td><td><%= p.photo_count %></td></tr>
|
95
|
+
<tr><td>photo_date_modified </td><td><%= p.photo_date_modified %></td></tr>
|
96
|
+
<tr><td>price_change_date </td><td><%= p.price_change_date %></td></tr>
|
97
|
+
<tr><td>price_sqft </td><td><%= p.price_sqft %></td></tr>
|
98
|
+
<tr><td>proj_close_date </td><td><%= p.proj_close_date %></td></tr>
|
99
|
+
<tr><td>prop_id </td><td><%= p.prop_id %></td></tr>
|
100
|
+
<tr><td>prop_type </td><td><%= p.prop_type %></td></tr>
|
101
|
+
<tr><td>remarks </td><td><%= p.remarks %></td></tr>
|
102
|
+
<tr><td>road_frontage_ft </td><td><%= p.road_frontage_ft %></td></tr>
|
103
|
+
<tr><td>sa_code </td><td><%= p.sa_code %></td></tr>
|
104
|
+
<tr><td>sale_lease </td><td><%= p.sale_lease %></td></tr>
|
105
|
+
<tr><td>sale_notes </td><td><%= p.sale_notes %></td></tr>
|
106
|
+
<tr><td>so_code </td><td><%= p.so_code %></td></tr>
|
107
|
+
<tr><td>sold_date </td><td><%= p.sold_date %></td></tr>
|
108
|
+
<tr><td>sold_price </td><td><%= p.sold_price %></td></tr>
|
109
|
+
<tr><td>sold_terms </td><td><%= p.sold_terms %></td></tr>
|
110
|
+
<tr><td>state </td><td><%= p.state %></td></tr>
|
111
|
+
<tr><td>status </td><td><%= p.status %></td></tr>
|
112
|
+
<tr><td>status_date </td><td><%= p.status_date %></td></tr>
|
113
|
+
<tr><td>status_flag </td><td><%= p.status_flag %></td></tr>
|
114
|
+
<tr><td>street </td><td><%= p.street %></td></tr>
|
115
|
+
<tr><td>street_dir </td><td><%= p.street_dir %></td></tr>
|
116
|
+
<tr><td>street_name </td><td><%= p.street_name %></td></tr>
|
117
|
+
<tr><td>street_num </td><td><%= p.street_num %></td></tr>
|
118
|
+
<tr><td>sub_agent </td><td><%= p.sub_agent %></td></tr>
|
119
|
+
<tr><td>sub_agent_type </td><td><%= p.sub_agent_type %></td></tr>
|
120
|
+
<tr><td>subdivision </td><td><%= p.subdivision %></td></tr>
|
121
|
+
<tr><td>third_party_comm_yn </td><td><%= p.third_party_comm_yn %></td></tr>
|
122
|
+
<tr><td>unit_num </td><td><%= p.unit_num %></td></tr>
|
123
|
+
<tr><td>upload_source </td><td><%= p.upload_source %></td></tr>
|
124
|
+
<tr><td>valuation_yn </td><td><%= p.valuation_yn %></td></tr>
|
125
|
+
<tr><td>vt_yn </td><td><%= p.vt_yn %></td></tr>
|
126
|
+
<tr><td>waterfront </td><td><%= p.waterfront %></td></tr>
|
127
|
+
<tr><td>waterfront_yn </td><td><%= p.waterfront_yn %></td></tr>
|
128
|
+
<tr><td>wf_feet </td><td><%= p.wf_feet %></td></tr>
|
129
|
+
<tr><td>withdrawn_date </td><td><%= p.withdrawn_date %></td></tr>
|
130
|
+
<tr><td>zip </td><td><%= p.zip %></td></tr>
|
131
|
+
<tr><td>zoning_northport </td><td><%= p.zoning_northport %></td></tr>
|
132
|
+
<tr><td>zoning_tusc </td><td><%= p.zoning_tusc %></td></tr>
|
133
|
+
</table><br />
|
134
|
+
|
135
|
+
<% content_for :caboose_js do %>
|
136
|
+
<%= javascript_include_tag "caboose/model/all" %>
|
137
|
+
<script type='text/javascript'>
|
138
|
+
|
139
|
+
function refresh_property_from_mls(mls_acct)
|
140
|
+
{
|
141
|
+
modal.autosize("<p class='loading'>Refreshing property info and images from MLS...</p>");
|
142
|
+
$.ajax({
|
143
|
+
url: '/admin/land/' + mls_acct + '/refresh',
|
144
|
+
success: function(resp) {
|
145
|
+
if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
|
146
|
+
if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>");
|
147
|
+
}
|
148
|
+
});
|
149
|
+
}
|
150
|
+
|
151
|
+
var modal = false;
|
152
|
+
$(window).load(function() {
|
153
|
+
modal = new CabooseModal(800);
|
154
|
+
});
|
155
|
+
</script>
|
156
|
+
<% end %>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<h1>Land Properties</h1>
|
2
|
+
|
3
|
+
<style type='text/css'>
|
4
|
+
#search_form_wrapper { margin-bottom: 10px; position: absolute; top:0; right: 0; }
|
5
|
+
</style>
|
6
|
+
|
7
|
+
<div id='search_form_wrapper'>
|
8
|
+
<form action='/admin/land' method='get' id='search_form'>
|
9
|
+
<input type='text' name='mls_acct' placeholder='MLS #' value="<%= @gen.params['mls_acct'] %>" style='width: 100px;' />
|
10
|
+
<input type='submit' value='Search' />
|
11
|
+
</form>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<table class='data' id='properties_table'>
|
15
|
+
<tr>
|
16
|
+
<%= raw @gen.sortable_table_headings({
|
17
|
+
'mls_acct' => 'MLS #',
|
18
|
+
'street_num, street_name' => 'Address',
|
19
|
+
'la_code' => 'Agent',
|
20
|
+
'lo_code' => 'Office'
|
21
|
+
})
|
22
|
+
%>
|
23
|
+
</tr>
|
24
|
+
<% @properties.each do |p| %>
|
25
|
+
<% agent = p.agent %>
|
26
|
+
<% office = p.office %>
|
27
|
+
<tr onclick="window.location='/admin/land/<%= p.mls_acct %>/edit';">
|
28
|
+
<td><%= raw p.mls_acct %></td>
|
29
|
+
<td><%= raw "#{p.street_num} #{p.street_name}, #{p.city}" %></td>
|
30
|
+
<td><%= p.agent ? "#{agent.first_name} #{agent.last_name}" : p.la_code %></td>
|
31
|
+
<td><%= p.office ? office.lo_name : p.lo_code %></td>
|
32
|
+
</tr>
|
33
|
+
<% end %>
|
34
|
+
</table>
|
35
|
+
|
36
|
+
<p><%= raw @gen.generate %></p>
|
37
|
+
|
38
|
+
<% content_for :caboose_js do %>
|
39
|
+
<script type='text/javascript'>
|
40
|
+
$(document).ready(function() {
|
41
|
+
var modal = new CabooseModal(800);
|
42
|
+
});
|
43
|
+
</script>
|
44
|
+
<% end %>
|
@@ -0,0 +1,211 @@
|
|
1
|
+
<%
|
2
|
+
p = @property
|
3
|
+
%>
|
4
|
+
<h1>Multi-Family Property</h1>
|
5
|
+
|
6
|
+
<p>
|
7
|
+
<input type='button' value='< Back' onclick="window.location='/admin/multi-family';" />
|
8
|
+
<input type='button' value='Manually Refresh from MLS' onclick="refresh_property_from_mls('<%= p.mls_acct %>');" />
|
9
|
+
</p>
|
10
|
+
<div id='message'></div>
|
11
|
+
|
12
|
+
<table class='data'>
|
13
|
+
<tr><td>acreage </td><td><%= p.acreage %></td></tr>
|
14
|
+
<tr><td>agent_notes </td><td><%= p.agent_notes %></td></tr>
|
15
|
+
<tr><td>agent_other_contact_desc </td><td><%= p.agent_other_contact_desc %></td></tr>
|
16
|
+
<tr><td>agent_other_contact_phone </td><td><%= p.agent_other_contact_phone %></td></tr>
|
17
|
+
<tr><td>annual_taxes </td><td><%= p.annual_taxes %></td></tr>
|
18
|
+
<tr><td>area </td><td><%= p.area %></td></tr>
|
19
|
+
<tr><td>bom_date </td><td><%= p.bom_date %></td></tr>
|
20
|
+
<tr><td>book_number </td><td><%= p.book_number %></td></tr>
|
21
|
+
<tr><td>book_page </td><td><%= p.book_page %></td></tr>
|
22
|
+
<tr><td>book_type </td><td><%= p.book_type %></td></tr>
|
23
|
+
<tr><td>box_on_unit </td><td><%= p.box_on_unit %></td></tr>
|
24
|
+
<tr><td>buyer_broker </td><td><%= p.buyer_broker %></td></tr>
|
25
|
+
<tr><td>buyer_broker_type </td><td><%= p.buyer_broker_type %></td></tr>
|
26
|
+
<tr><td>buyer_name </td><td><%= p.buyer_name %></td></tr>
|
27
|
+
<tr><td>category </td><td><%= p.category %></td></tr>
|
28
|
+
<tr><td>city </td><td><%= p.city %></td></tr>
|
29
|
+
<tr><td>city_code </td><td><%= p.city_code %></td></tr>
|
30
|
+
<tr><td>contacts </td><td><%= p.contacts %></td></tr>
|
31
|
+
<tr><td>contr_broker </td><td><%= p.contr_broker %></td></tr>
|
32
|
+
<tr><td>contr_broker_type </td><td><%= p.contr_broker_type %></td></tr>
|
33
|
+
<tr><td>county </td><td><%= p.county %></td></tr>
|
34
|
+
<tr><td>co_la_code </td><td><%= p.co_la_code %></td></tr>
|
35
|
+
<tr><td>co_lo_code </td><td><%= p.co_lo_code %></td></tr>
|
36
|
+
<tr><td>co_sa_code </td><td><%= p.co_sa_code %></td></tr>
|
37
|
+
<tr><td>co_so_code </td><td><%= p.co_so_code %></td></tr>
|
38
|
+
<tr><td>current_price </td><td><%= p.current_price %></td></tr>
|
39
|
+
<tr><td>date_created </td><td><%= p.date_created %></td></tr>
|
40
|
+
<tr><td>date_leased </td><td><%= p.date_leased %></td></tr>
|
41
|
+
<tr><td>date_modified </td><td><%= p.date_modified %></td></tr>
|
42
|
+
<tr><td>df_yn </td><td><%= p.df_yn %></td></tr>
|
43
|
+
<tr><td>directions </td><td><%= p.directions %></td></tr>
|
44
|
+
<tr><td>display_address_yn </td><td><%= p.display_address_yn %></td></tr>
|
45
|
+
<tr><td>dom </td><td><%= p.dom %></td></tr>
|
46
|
+
<tr><td>elem_school </td><td><%= p.elem_school %></td></tr>
|
47
|
+
<tr><td>expenses_association </td><td><%= p.expenses_association %></td></tr>
|
48
|
+
<tr><td>expenses_insurance </td><td><%= p.expenses_insurance %></td></tr>
|
49
|
+
<tr><td>expenses_maintenance </td><td><%= p.expenses_maintenance %></td></tr>
|
50
|
+
<tr><td>expenses_management </td><td><%= p.expenses_management %></td></tr>
|
51
|
+
<tr><td>expenses_other </td><td><%= p.expenses_other %></td></tr>
|
52
|
+
<tr><td>expenses_tax </td><td><%= p.expenses_tax %></td></tr>
|
53
|
+
<tr><td>expire_date </td><td><%= p.expire_date %></td></tr>
|
54
|
+
<tr><td>flood_plain </td><td><%= p.flood_plain %></td></tr>
|
55
|
+
<tr><td>ftr_building_type </td><td><%= p.ftr_building_type %></td></tr>
|
56
|
+
<tr><td>ftr_construction </td><td><%= p.ftr_construction %></td></tr>
|
57
|
+
<tr><td>ftr_cooling </td><td><%= p.ftr_cooling %></td></tr>
|
58
|
+
<tr><td>ftr_exterior </td><td><%= p.ftr_exterior %></td></tr>
|
59
|
+
<tr><td>ftr_exterioramenit </td><td><%= p.ftr_exterioramenit %></td></tr>
|
60
|
+
<tr><td>ftr_floors </td><td><%= p.ftr_floors %></td></tr>
|
61
|
+
<tr><td>ftr_heating </td><td><%= p.ftr_heating %></td></tr>
|
62
|
+
<tr><td>ftr_interior </td><td><%= p.ftr_interior %></td></tr>
|
63
|
+
<tr><td>ftr_rent_incl </td><td><%= p.ftr_rent_incl %></td></tr>
|
64
|
+
<tr><td>ftr_roof </td><td><%= p.ftr_roof %></td></tr>
|
65
|
+
<tr><td>ftr_roof_age </td><td><%= p.ftr_roof_age %></td></tr>
|
66
|
+
<tr><td>ftr_showing </td><td><%= p.ftr_showing %></td></tr>
|
67
|
+
<tr><td>ftr_utils </td><td><%= p.ftr_utils %></td></tr>
|
68
|
+
<tr><td>ftr_zoning </td><td><%= p.ftr_zoning %></td></tr>
|
69
|
+
<tr><td>georesult </td><td><%= p.georesult %></td></tr>
|
70
|
+
<tr><td>geo_precision </td><td><%= p.geo_precision %></td></tr>
|
71
|
+
<tr><td>high_school </td><td><%= p.high_school %></td></tr>
|
72
|
+
<tr><td>hoa_fee </td><td><%= p.hoa_fee %></td></tr>
|
73
|
+
<tr><td>hoa_fee_yn </td><td><%= p.hoa_fee_yn %></td></tr>
|
74
|
+
<tr><td>hoa_term </td><td><%= p.hoa_term %></td></tr>
|
75
|
+
<tr><td>income </td><td><%= p.income %></td></tr>
|
76
|
+
<tr><td>income_other </td><td><%= p.income_other %></td></tr>
|
77
|
+
<tr><td>income_rent </td><td><%= p.income_rent %></td></tr>
|
78
|
+
<tr><td>internet_yn </td><td><%= p.internet_yn %></td></tr>
|
79
|
+
<tr><td>la_code </td><td><%= p.la_code %></td></tr>
|
80
|
+
<tr><td>legals </td><td><%= p.legals %></td></tr>
|
81
|
+
<tr><td>limited_service_yn </td><td><%= p.limited_service_yn %></td></tr>
|
82
|
+
<tr><td>listing_type </td><td><%= p.listing_type %></td></tr>
|
83
|
+
<tr><td>list_date </td><td><%= p.list_date %></td></tr>
|
84
|
+
<tr><td>list_price </td><td><%= p.list_price %></td></tr>
|
85
|
+
<tr><td>lot_dimensions </td><td><%= p.lot_dimensions %></td></tr>
|
86
|
+
<tr><td>lot_dimensions_source </td><td><%= p.lot_dimensions_source %></td></tr>
|
87
|
+
<tr><td>lo_code </td><td><%= p.lo_code %></td></tr>
|
88
|
+
<tr><td>management </td><td><%= p.management %></td></tr>
|
89
|
+
<tr><td>media_flag </td><td><%= p.media_flag %></td></tr>
|
90
|
+
<tr><td>middle_school </td><td><%= p.middle_school %></td></tr>
|
91
|
+
<tr><td>mls_acct </td><td><%= p.mls_acct %></td></tr>
|
92
|
+
<tr><td>municipality </td><td><%= p.municipality %></td></tr>
|
93
|
+
<tr><td>num_units </td><td><%= p.num_units %></td></tr>
|
94
|
+
<tr><td>num_units_occupied </td><td><%= p.num_units_occupied %></td></tr>
|
95
|
+
<tr><td>office_notes </td><td><%= p.office_notes %></td></tr>
|
96
|
+
<tr><td>off_mkt_date </td><td><%= p.off_mkt_date %></td></tr>
|
97
|
+
<tr><td>off_mkt_days </td><td><%= p.off_mkt_days %></td></tr>
|
98
|
+
<tr><td>orig_lp </td><td><%= p.orig_lp %></td></tr>
|
99
|
+
<tr><td>orig_price </td><td><%= p.orig_price %></td></tr>
|
100
|
+
<tr><td>other_fee </td><td><%= p.other_fee %></td></tr>
|
101
|
+
<tr><td>other_fee_type </td><td><%= p.other_fee_type %></td></tr>
|
102
|
+
<tr><td>owner_name </td><td><%= p.owner_name %></td></tr>
|
103
|
+
<tr><td>owner_phone </td><td><%= p.owner_phone %></td></tr>
|
104
|
+
<tr><td>parcel_id </td><td><%= p.parcel_id %></td></tr>
|
105
|
+
<tr><td>pending_date </td><td><%= p.pending_date %></td></tr>
|
106
|
+
<tr><td>photo_count </td><td><%= p.photo_count %></td></tr>
|
107
|
+
<tr><td>photo_date_modified </td><td><%= p.photo_date_modified %></td></tr>
|
108
|
+
<tr><td>price_change_date </td><td><%= p.price_change_date %></td></tr>
|
109
|
+
<tr><td>price_sqft </td><td><%= p.price_sqft %></td></tr>
|
110
|
+
<tr><td>proj_close_date </td><td><%= p.proj_close_date %></td></tr>
|
111
|
+
<tr><td>prop_id </td><td><%= p.prop_id %></td></tr>
|
112
|
+
<tr><td>prop_type </td><td><%= p.prop_type %></td></tr>
|
113
|
+
<tr><td>remarks </td><td><%= p.remarks %></td></tr>
|
114
|
+
<tr><td>sale_notes </td><td><%= p.sale_notes %></td></tr>
|
115
|
+
<tr><td>sale_rent </td><td><%= p.sale_rent %></td></tr>
|
116
|
+
<tr><td>sa_code </td><td><%= p.sa_code %></td></tr>
|
117
|
+
<tr><td>sold_date </td><td><%= p.sold_date %></td></tr>
|
118
|
+
<tr><td>sold_price </td><td><%= p.sold_price %></td></tr>
|
119
|
+
<tr><td>sold_terms </td><td><%= p.sold_terms %></td></tr>
|
120
|
+
<tr><td>so_code </td><td><%= p.so_code %></td></tr>
|
121
|
+
<tr><td>state </td><td><%= p.state %></td></tr>
|
122
|
+
<tr><td>status </td><td><%= p.status %></td></tr>
|
123
|
+
<tr><td>status_date </td><td><%= p.status_date %></td></tr>
|
124
|
+
<tr><td>status_flag </td><td><%= p.status_flag %></td></tr>
|
125
|
+
<tr><td>street </td><td><%= p.street %></td></tr>
|
126
|
+
<tr><td>street_dir </td><td><%= p.street_dir %></td></tr>
|
127
|
+
<tr><td>street_name </td><td><%= p.street_name %></td></tr>
|
128
|
+
<tr><td>street_num </td><td><%= p.street_num %></td></tr>
|
129
|
+
<tr><td>subdivision </td><td><%= p.subdivision %></td></tr>
|
130
|
+
<tr><td>sub_agent </td><td><%= p.sub_agent %></td></tr>
|
131
|
+
<tr><td>sub_agent_type </td><td><%= p.sub_agent_type %></td></tr>
|
132
|
+
<tr><td>third_party_comm_yn </td><td><%= p.third_party_comm_yn %></td></tr>
|
133
|
+
<tr><td>tot_heat_sqft </td><td><%= p.tot_heat_sqft %></td></tr>
|
134
|
+
<tr><td>u1_baths </td><td><%= p.u1_baths %></td></tr>
|
135
|
+
<tr><td>u1_num </td><td><%= p.u1_num %></td></tr>
|
136
|
+
<tr><td>u1_occ </td><td><%= p.u1_occ %></td></tr>
|
137
|
+
<tr><td>u1_rent </td><td><%= p.u1_rent %></td></tr>
|
138
|
+
<tr><td>u1_sqft </td><td><%= p.u1_sqft %></td></tr>
|
139
|
+
<tr><td>u1_yn </td><td><%= p.u1_yn %></td></tr>
|
140
|
+
<tr><td>u2_baths </td><td><%= p.u2_baths %></td></tr>
|
141
|
+
<tr><td>u2_num </td><td><%= p.u2_num %></td></tr>
|
142
|
+
<tr><td>u2_occ </td><td><%= p.u2_occ %></td></tr>
|
143
|
+
<tr><td>u2_rent </td><td><%= p.u2_rent %></td></tr>
|
144
|
+
<tr><td>u2_sqft </td><td><%= p.u2_sqft %></td></tr>
|
145
|
+
<tr><td>u2_yn </td><td><%= p.u2_yn %></td></tr>
|
146
|
+
<tr><td>u3_baths </td><td><%= p.u3_baths %></td></tr>
|
147
|
+
<tr><td>u3_num </td><td><%= p.u3_num %></td></tr>
|
148
|
+
<tr><td>u3_occ </td><td><%= p.u3_occ %></td></tr>
|
149
|
+
<tr><td>u3_rent </td><td><%= p.u3_rent %></td></tr>
|
150
|
+
<tr><td>u3_sqft </td><td><%= p.u3_sqft %></td></tr>
|
151
|
+
<tr><td>u3_yn </td><td><%= p.u3_yn %></td></tr>
|
152
|
+
<tr><td>u4_baths </td><td><%= p.u4_baths %></td></tr>
|
153
|
+
<tr><td>u4_num </td><td><%= p.u4_num %></td></tr>
|
154
|
+
<tr><td>u4_occ </td><td><%= p.u4_occ %></td></tr>
|
155
|
+
<tr><td>u4_rent </td><td><%= p.u4_rent %></td></tr>
|
156
|
+
<tr><td>u4_sqft </td><td><%= p.u4_sqft %></td></tr>
|
157
|
+
<tr><td>u4_yn </td><td><%= p.u4_yn %></td></tr>
|
158
|
+
<tr><td>u5_baths </td><td><%= p.u5_baths %></td></tr>
|
159
|
+
<tr><td>u5_num </td><td><%= p.u5_num %></td></tr>
|
160
|
+
<tr><td>u5_occ </td><td><%= p.u5_occ %></td></tr>
|
161
|
+
<tr><td>u5_rent </td><td><%= p.u5_rent %></td></tr>
|
162
|
+
<tr><td>u5_sqft </td><td><%= p.u5_sqft %></td></tr>
|
163
|
+
<tr><td>u5_yn </td><td><%= p.u5_yn %></td></tr>
|
164
|
+
<tr><td>u6_baths </td><td><%= p.u6_baths %></td></tr>
|
165
|
+
<tr><td>u6_num </td><td><%= p.u6_num %></td></tr>
|
166
|
+
<tr><td>u6_occ </td><td><%= p.u6_occ %></td></tr>
|
167
|
+
<tr><td>u6_rent </td><td><%= p.u6_rent %></td></tr>
|
168
|
+
<tr><td>u6_sqft </td><td><%= p.u6_sqft %></td></tr>
|
169
|
+
<tr><td>u6_yn </td><td><%= p.u6_yn %></td></tr>
|
170
|
+
<tr><td>u7_baths </td><td><%= p.u7_baths %></td></tr>
|
171
|
+
<tr><td>u7_num </td><td><%= p.u7_num %></td></tr>
|
172
|
+
<tr><td>u7_occ </td><td><%= p.u7_occ %></td></tr>
|
173
|
+
<tr><td>u7_rent </td><td><%= p.u7_rent %></td></tr>
|
174
|
+
<tr><td>u7_sqft </td><td><%= p.u7_sqft %></td></tr>
|
175
|
+
<tr><td>u7_yn </td><td><%= p.u7_yn %></td></tr>
|
176
|
+
<tr><td>u8_num </td><td><%= p.u8_num %></td></tr>
|
177
|
+
<tr><td>u8_occ </td><td><%= p.u8_occ %></td></tr>
|
178
|
+
<tr><td>u8_rent </td><td><%= p.u8_rent %></td></tr>
|
179
|
+
<tr><td>u8_sqft </td><td><%= p.u8_sqft %></td></tr>
|
180
|
+
<tr><td>u8_yn </td><td><%= p.u8_yn %></td></tr>
|
181
|
+
<tr><td>unit_num </td><td><%= p.unit_num %></td></tr>
|
182
|
+
<tr><td>upload_source </td><td><%= p.upload_source %></td></tr>
|
183
|
+
<tr><td>valuation_yn </td><td><%= p.valuation_yn %></td></tr>
|
184
|
+
<tr><td>vt_yn </td><td><%= p.vt_yn %></td></tr>
|
185
|
+
<tr><td>withdrawn_date </td><td><%= p.withdrawn_date %></td></tr>
|
186
|
+
<tr><td>year_built </td><td><%= p.year_built %></td></tr>
|
187
|
+
<tr><td>zip </td><td><%= p.zip %></td></tr>
|
188
|
+
</table><br />
|
189
|
+
|
190
|
+
<% content_for :caboose_js do %>
|
191
|
+
<%= javascript_include_tag "caboose/model/all" %>
|
192
|
+
<script type='text/javascript'>
|
193
|
+
|
194
|
+
function refresh_property_from_mls(mls_acct)
|
195
|
+
{
|
196
|
+
modal.autosize("<p class='loading'>Refreshing property info and images from MLS...</p>");
|
197
|
+
$.ajax({
|
198
|
+
url: '/admin/multi-family/' + mls_acct + '/refresh',
|
199
|
+
success: function(resp) {
|
200
|
+
if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
|
201
|
+
if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>");
|
202
|
+
}
|
203
|
+
});
|
204
|
+
}
|
205
|
+
|
206
|
+
var modal = false;
|
207
|
+
$(window).load(function() {
|
208
|
+
modal = new CabooseModal(800);
|
209
|
+
});
|
210
|
+
</script>
|
211
|
+
<% end %>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<h1>Multi-Family Properties</h1>
|
2
|
+
|
3
|
+
<style type='text/css'>
|
4
|
+
#search_form_wrapper { margin-bottom: 10px; position: absolute; top:0; right: 0; }
|
5
|
+
</style>
|
6
|
+
|
7
|
+
<div id='search_form_wrapper'>
|
8
|
+
<form action='/admin/multi-family' method='get' id='search_form'>
|
9
|
+
<input type='text' name='mls_acct' placeholder='MLS #' value="<%= @gen.params['mls_acct'] %>" style='width: 100px;' />
|
10
|
+
<input type='submit' value='Search' />
|
11
|
+
</form>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<table class='data' id='properties_table'>
|
15
|
+
<tr>
|
16
|
+
<%= raw @gen.sortable_table_headings({
|
17
|
+
'mls_acct' => 'MLS #',
|
18
|
+
'street_num, street_name' => 'Address',
|
19
|
+
'la_code' => 'Agent',
|
20
|
+
'lo_code' => 'Office'
|
21
|
+
})
|
22
|
+
%>
|
23
|
+
</tr>
|
24
|
+
<% @properties.each do |p| %>
|
25
|
+
<% agent = p.agent %>
|
26
|
+
<% office = p.office %>
|
27
|
+
<tr onclick="window.location='/admin/multi-family/<%= p.mls_acct %>/edit';">
|
28
|
+
<td><%= raw p.mls_acct %></td>
|
29
|
+
<td><%= raw "#{p.street_num} #{p.street_name}, #{p.city}" %></td>
|
30
|
+
<td><%= p.agent ? "#{agent.first_name} #{agent.last_name}" : p.la_code %></td>
|
31
|
+
<td><%= p.office ? office.lo_name : p.lo_code %></td>
|
32
|
+
</tr>
|
33
|
+
<% end %>
|
34
|
+
</table>
|
35
|
+
|
36
|
+
<p><%= raw @gen.generate %></p>
|
37
|
+
|
38
|
+
<% content_for :caboose_js do %>
|
39
|
+
<script type='text/javascript'>
|
40
|
+
$(document).ready(function() {
|
41
|
+
var modal = new CabooseModal(800);
|
42
|
+
});
|
43
|
+
</script>
|
44
|
+
<% end %>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<h1>Edit Office</h1>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
<input type='button' value='< Back' onclick="window.location='/admin/offices';" />
|
5
|
+
<input type='button' value='Refresh from MLS' onclick="refresh_office_from_mls(<%= @office.id %>);" />
|
6
|
+
</p>
|
7
|
+
<div id='message'></div>
|
8
|
+
|
9
|
+
<table class='data'>
|
10
|
+
<tr><td>lo_date_created </td><td><%= @office.lo_date_created %></td></tr>
|
11
|
+
<tr><td>lo_date_modified </td><td><%= @office.lo_date_modified %></td></tr>
|
12
|
+
<tr><td>lo_email </td><td><%= @office.lo_email %></td></tr>
|
13
|
+
<tr><td>lo_fax_phone </td><td><%= @office.lo_fax_phone %></td></tr>
|
14
|
+
<tr><td>lo_idx_yn </td><td><%= @office.lo_idx_yn %></td></tr>
|
15
|
+
<tr><td>lo_code </td><td><%= @office.lo_code %></td></tr>
|
16
|
+
<tr><td>lo_mailaddr1 </td><td><%= @office.lo_mailaddr1 %></td></tr>
|
17
|
+
<tr><td>lo_mailaddr2 </td><td><%= @office.lo_mailaddr2 %></td></tr>
|
18
|
+
<tr><td>lo_mailcity </td><td><%= @office.lo_mailcity %></td></tr>
|
19
|
+
<tr><td>lo_mailstate </td><td><%= @office.lo_mailstate %></td></tr>
|
20
|
+
<tr><td>lo_mailzip </td><td><%= @office.lo_mailzip %></td></tr>
|
21
|
+
<tr><td>lo_main_lo_code </td><td><%= @office.lo_main_lo_code %></td></tr>
|
22
|
+
<tr><td>lo_name </td><td><%= @office.lo_name %></td></tr>
|
23
|
+
<tr><td>lo_other_phone </td><td><%= @office.lo_other_phone %></td></tr>
|
24
|
+
<tr><td>lo_page </td><td><%= @office.lo_page %></td></tr>
|
25
|
+
<tr><td>lo_phone </td><td><%= @office.lo_phone %></td></tr>
|
26
|
+
<tr><td>lo_status </td><td><%= @office.lo_status %></td></tr>
|
27
|
+
<tr><td>photo_count </td><td><%= @office.photo_count %></td></tr>
|
28
|
+
<tr><td>photo_date_modified </td><td><%= @office.photo_date_modified %></td></tr>
|
29
|
+
</table>
|
30
|
+
|
31
|
+
<p><input type='button' value='< Back' onclick="window.location='/admin/offices';" /></p>
|
32
|
+
|
33
|
+
<% content_for :caboose_js do %>
|
34
|
+
<%= javascript_include_tag "caboose/model/all" %>
|
35
|
+
<script type='text/javascript'>
|
36
|
+
|
37
|
+
function refresh_office_from_mls(office_id)
|
38
|
+
{
|
39
|
+
modal.autosize("<p class='loading'>Refreshing office info from MLS...</p>");
|
40
|
+
$.ajax({
|
41
|
+
url: '/admin/offices/' + office_id + '/refresh',
|
42
|
+
success: function(resp) {
|
43
|
+
if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
|
44
|
+
if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>");
|
45
|
+
}
|
46
|
+
});
|
47
|
+
}
|
48
|
+
|
49
|
+
var modal = false;
|
50
|
+
$(window).load(function() {
|
51
|
+
modal = new CabooseModal(800);
|
52
|
+
});
|
53
|
+
|
54
|
+
</script>
|
55
|
+
<% end %>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
<style type='text/css'>
|
3
|
+
#search_form_wrapper { margin-bottom: 10px; position: absolute; top:0; right: 0; }
|
4
|
+
</style>
|
5
|
+
|
6
|
+
<h1>Offices</h1>
|
7
|
+
|
8
|
+
<div id='search_form_wrapper'>
|
9
|
+
<form action='/admin/offices' method='get' id='search_form'>
|
10
|
+
<input type='text' name='lo_name_like' placeholder='Name' value="<%= @gen.params['lo_name_like'] %>" style='width: 100px;' />
|
11
|
+
<input type='submit' value='Search' />
|
12
|
+
</form>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<% if @offices.count > 0 %>
|
16
|
+
<table class='data' id='agents_table'>
|
17
|
+
<tr>
|
18
|
+
<%= raw @gen.sortable_table_headings({
|
19
|
+
'lo_code' => 'Office Code',
|
20
|
+
'lo_name' => 'Name',
|
21
|
+
'lo_email' => 'Email',
|
22
|
+
'lo_phone' => 'Phone',
|
23
|
+
'lo_status' => 'Status'
|
24
|
+
})
|
25
|
+
%>
|
26
|
+
</tr>
|
27
|
+
<% @offices.each do |office| %>
|
28
|
+
<tr onclick="window.location='/admin/offices/<%= office.id %>';">
|
29
|
+
<td><%= office.lo_code %></td>
|
30
|
+
<td><%= office.lo_name %></td>
|
31
|
+
<td><%= office.lo_email %></td>
|
32
|
+
<td><%= office.lo_phone %></td>
|
33
|
+
<td><%= office.lo_status %></td>
|
34
|
+
</tr>
|
35
|
+
<% end %>
|
36
|
+
</table>
|
37
|
+
<p><%= raw @gen.generate %></p>
|
38
|
+
<% else %>
|
39
|
+
<p>No offices met your search.</p>
|
40
|
+
<% end %>
|
41
|
+
|
42
|
+
<% content_for :caboose_js do %>
|
43
|
+
<script type='text/javascript'>
|
44
|
+
$(document).ready(function() {
|
45
|
+
var modal = new CabooseModal(800);
|
46
|
+
});
|
47
|
+
</script>
|
48
|
+
<% end %>
|
@@ -234,10 +234,8 @@ function refresh_property_from_mls(mls_acct)
|
|
234
234
|
$.ajax({
|
235
235
|
url: '/admin/residential/' + mls_acct + '/refresh',
|
236
236
|
success: function(resp) {
|
237
|
-
if (resp.error)
|
238
|
-
|
239
|
-
if (resp.reload)
|
240
|
-
location.reload();
|
237
|
+
if (resp.error) modal.autosize("<p class='note error'>" + resp.error + "</p>");
|
238
|
+
if (resp.success) modal.autosize("<p class='note success'>" + resp.success + "</p>");
|
241
239
|
}
|
242
240
|
});
|
243
241
|
}
|
data/config/routes.rb
CHANGED
@@ -19,9 +19,15 @@ CabooseRets::Engine.routes.draw do
|
|
19
19
|
get "admin/open-houses/new" => "open_houses#admin_new"
|
20
20
|
post "admin/open-houses" => "open_houses#admin_add"
|
21
21
|
|
22
|
+
get "admin/offices" => "offices#admin_index"
|
23
|
+
get "admin/offices/:id" => "offices#admin_edit"
|
24
|
+
get "admin/offices/:id/refresh" => "offices#admin_refresh"
|
25
|
+
|
22
26
|
get "commercial" => "commercial#index"
|
23
27
|
get "commercial/:mls_acct/details" => "commercial#details"
|
24
28
|
get "commercial/:mls_acct" => "commercial#details"
|
29
|
+
get "admin/commercial/new" => "commercial#admin_new"
|
30
|
+
post "admin/commercial" => "commercial#admin_add"
|
25
31
|
get "admin/commercial" => "commercial#admin_index"
|
26
32
|
get "admin/commercial/:mls_acct/edit" => "commercial#admin_edit"
|
27
33
|
get "admin/commercial/:mls_acct/refresh" => "commercial#admin_refresh"
|
data/lib/caboose_rets/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-rets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
@@ -36,6 +36,7 @@ files:
|
|
36
36
|
- app/controllers/caboose_rets/commercial_controller.rb
|
37
37
|
- app/controllers/caboose_rets/land_controller.rb
|
38
38
|
- app/controllers/caboose_rets/multi_family_controller.rb
|
39
|
+
- app/controllers/caboose_rets/offices_controller.rb
|
39
40
|
- app/controllers/caboose_rets/open_houses_controller.rb
|
40
41
|
- app/controllers/caboose_rets/residential_controller.rb
|
41
42
|
- app/helpers/caboose_rets/application_helper.rb
|
@@ -60,8 +61,15 @@ files:
|
|
60
61
|
- app/views/caboose_rets/agents/listings.html.erb
|
61
62
|
- app/views/caboose_rets/commercial/admin_edit.html.erb
|
62
63
|
- app/views/caboose_rets/commercial/admin_index.html.erb
|
64
|
+
- app/views/caboose_rets/commercial/admin_new.html.erb
|
63
65
|
- app/views/caboose_rets/commercial/details.html.erb
|
64
66
|
- app/views/caboose_rets/commercial/index.html.erb
|
67
|
+
- app/views/caboose_rets/land/admin_edit.html.erb
|
68
|
+
- app/views/caboose_rets/land/admin_index.html.erb
|
69
|
+
- app/views/caboose_rets/multi_family/admin_edit.html.erb
|
70
|
+
- app/views/caboose_rets/multi_family/admin_index.html.erb
|
71
|
+
- app/views/caboose_rets/offices/admin_edit.html.erb
|
72
|
+
- app/views/caboose_rets/offices/admin_index.html.erb
|
65
73
|
- app/views/caboose_rets/open_houses/admin_new.html.erb
|
66
74
|
- app/views/caboose_rets/residential/_search_form.html.erb
|
67
75
|
- app/views/caboose_rets/residential/admin_edit.html.erb
|