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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YThjNTc5MzdjOTdjYzJmY2Y3N2IzNGZhYWNhNzEzMTdiZGRkNzQxOA==
4
+ NTYxZjY0Y2FhMDc1YjAxYTE5OTAzNTU3ZGU4ODZjNjQxNjRkMTFmOQ==
5
5
  data.tar.gz: !binary |-
6
- ZDc5NjNmMTkwODUwNjAzMGEyMzVjNDc2ODVmNmRmMTFmOGQ0NmZiYQ==
6
+ Y2M2YzA2YjBhZWFlMjEwOGI3N2ZmNDFjZjg2MWRlYWM5MTM1MzIwNg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZmM5ZjJhMTYwOTExZjM5ZTNmZTJkNDg4NzcyNjhjNzY4YTBlY2I5ZTA3MWRl
10
- ODBiNGJiZjNkYmE2ZDE0MTMwMjRkMDI3MDY4NWU5Y2Q4ZTcwZGQ5MjNhMTE3
11
- ZTM0NWRmZjRiODU2MGJhNzgzNmQzYjc5MTVhNGQ1NDYxODJkMTU=
9
+ Yjk1MmI3MjQ5ZTcwYjMyNDBmMWFjZWYwMmE2MGQwNGQ3ODQ0ZjZkYThiNmYy
10
+ NGZkMTRjNGQ0NzA0NzA5NmE0MjFhMjNjNDA2NTEyOTZiYjdiMzRmZGQ1YmM2
11
+ NjM1OWJlZGJkZWNkMmI3ZTRlNTFmZDVhMTAzYTFmMThkZDc4Mjg=
12
12
  data.tar.gz: !binary |-
13
- YmNkMTI2YWJjNTFhYTQ5MDE2ZDVkNmI5OGZmNmE0ZmZjODQxMmU2MTFhZDY2
14
- MjUyOTQ2YzkwNGU2NzE2MGNlMTRiMzllZmQxNjJhNTEwNjdjMGJjYWIwMGJj
15
- YzMzMDE0NmFjYzFhZjQ2YjFjNDZjOTU0Yzk4MzgxODRjYWFjMTU=
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
- RetsAgentsImporter.import_agent(agent.la_code)
131
- flash[:message] = "<p class='note success'>The agent's info has been updated from MLS.</p>"
132
- render :json => Caboose::StdClass.new({ 'reload' => true })
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
- RetsCommercialImporter.import_property(params[:mls_acct], 'COM')
272
- flash[:message] = "<p class='note success'>The property info has been updated from MLS.</p>"
273
- render :json => Caboose::StdClass.new({ 'reload' => true })
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
- RetsLandImporter.import_property(params[:mls_acct])
112
- flash[:message] = "<p class='note success'>The property info has been updated from MLS.</p>"
113
- render :json => Caboose::StdClass.new({ 'reload' => true })
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
- RetsMultiFamilyImporter.import_property(params[:mls_acct])
93
- flash[:message] = "<p class='note success'>The property info has been updated from MLS.</p>"
94
- render :json => Caboose::StdClass.new({ 'reload' => true })
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
- RetsResidentialImporter.import_property(params[:mls_acct])
102
- flash[:message] = "<p class='note success'>The property info has been updated from MLS.</p>"
103
- render :json => Caboose::StdClass.new({ 'reload' => true })
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' => 'agents' , 'href' => '/admin/offices' , 'text' => 'Offices' , 'modal' => false }
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
- //modal.autosize("<p class='loading'>Refreshing agent info from MLS...</p>");
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
- modal.autosize("<p class='note error'>" + resp.error + "</p>");
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.mls_acct.starts_with?('0')
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
- modal.autosize("<p class='note error'>" + resp.error + "</p>");
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 p.mls_acct.starts_with?('0') %>
240
+ <% if is_custom_property %>
243
241
 
244
242
  $(document).ready(function() {
245
243
  m = new ModelBinder({
@@ -13,6 +13,8 @@
13
13
  </form>
14
14
  </div>
15
15
 
16
+ <p><input type='button' value='New Custom Commercial Property' onclick="window.location='/admin/commercial/new';" />
17
+
16
18
  <table class='data' id='properties_table'>
17
19
  <tr>
18
20
  <%= raw @gen.sortable_table_headings({
@@ -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
- modal.autosize("<p class='note error'>" + resp.error + "</p>");
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"
@@ -1,3 +1,3 @@
1
1
  module CabooseRets
2
- VERSION = '0.0.13'
2
+ VERSION = '0.0.14'
3
3
  end
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.13
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