caboose-rets 0.0.13 → 0.0.14

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