caboose-rets 0.1.170 → 0.1.175

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 613aa2563eab7cf1e488088657635585fc93c58f4dac400bd71b1afaa4d0bf62
4
- data.tar.gz: c40bc36c632506231f2d13119a69b1008044ac213141cc9a552087e321e2b8b3
3
+ metadata.gz: 637b2123ba2412960a1763a4fcb8006166b5e1f7b507c98102afc47d01a45ea9
4
+ data.tar.gz: 7cac84f99f66ac4ebc8d0818b4fb36af5ad327e6f10f96ed6d7164a49bba2174
5
5
  SHA512:
6
- metadata.gz: e522910205a4d3c206888b3972501ea4ad7a78ea8f3103418cda5aa7e7e8247e7f6287a0773bf199b01ad5c8b037fd17e79127ec0d7526425eb239ea6b2388ed
7
- data.tar.gz: c92917dc214b87feb180442f3225f06e5d39ee598851484471b19016eabdb706c2dbc2a40154af5ec05e280252139d80744a13cf2995bd32c9bc4a61351a8a23
6
+ metadata.gz: 86e921fa5cbb92297bce5af3fa3cdcc484c853d44ce0b2842c8d6f8ef47c99042beb0640aaca040a257d4af45560b0fdf7120424bd5d348329c119893c2d8597
7
+ data.tar.gz: 1800b4c1d0bd0544662727bc7c49d11f43d724a5989263ab3b989b12396cde93de55a8f8e0706eb2a5def9a4c9aefd8ce52fe6a6a3dbb9aab7fd51f08081111d
@@ -2,7 +2,6 @@ module CabooseRets
2
2
  class PropertiesController < ApplicationController
3
3
 
4
4
  # @route GET /properties/search-options
5
- # q=rock quary
6
5
  def search_options
7
6
  count = params[:count_per_name] ? params[:count_per_name] : 10
8
7
  arr = SearchOption.results(params[:q], count)
@@ -22,10 +21,33 @@ module CabooseRets
22
21
  end
23
22
  end
24
23
  where = "(id is not null)"
24
+ search_options = []
25
+ searched_address = false
26
+
25
27
  if (@site && @site.id == 558) || request.original_fullpath =~ /^\/tuscaloosa-condos-for-sale(.*?)$/
26
- where = "(style ILIKE '%condo%' OR res_style ILIKE '%condo%' OR property_subtype ILIKE '%condo%' OR property_subtype ILIKE '%townhouse%')"
28
+ where = "(style ILIKE '%condo%' OR public_remarks ILIKE '%condo%' OR legal_description ILIKE '%unit%' OR res_style ILIKE '%condo%' OR property_subtype ILIKE '%condo%' OR property_subtype ILIKE '%townhouse%')"
29
+ end
30
+
31
+ if params[:location_query] && !params[:location_query].blank?
32
+ lc = params[:location_query]
33
+ if lc && lc.count > 0
34
+ lc.each do |lcid|
35
+ so = CabooseRets::SearchOption.where(:id => lcid).first
36
+ if so && so.name == "Street Address"
37
+ search_options << "( CONCAT(CONCAT(CONCAT(CONCAT(street_number, ' '),street_name),' '),street_suffix) ILIKE '%#{so.value}%' )"
38
+ searched_address = true
39
+ elsif so && so.name == "Street Name"
40
+ search_options << "( CONCAT(CONCAT(street_name,' '),street_suffix) ILIKE '%#{so.value}%' )"
41
+ elsif so
42
+ search_options << "(#{so.field} = '#{so.value}')"
43
+ searched_address = true if so.name == 'MLS Number'
44
+ end
45
+ end
46
+ end
27
47
  end
28
- # where = @site && @site.id == 558 ? "(style ILIKE '%condo%' OR res_style ILIKE '%condo%' OR property_subtype ILIKE '%condo%' OR property_subtype ILIKE '%townhouse%')" : "(id is not null)"
48
+
49
+ where2 = search_options.blank? ? "(id is not null)" : ("(" + search_options.join(' OR ') + ")")
50
+
29
51
  sortby = @site && @site.id == 558 ? "original_entry_timestamp" : CabooseRets::default_property_sort
30
52
  @saved_properties = CabooseRets::SavedProperty.where(:user_id => logged_in_user.id).pluck(:mls_number)
31
53
  @pager = Caboose::PageBarGenerator.new(params, {
@@ -63,23 +85,26 @@ module CabooseRets
63
85
  'foreclosure_yn' => '',
64
86
  'address_like' => '',
65
87
  'street_name_like' => '',
66
- 'street_number_like' => '',
88
+ 'street_number_like' => '',
67
89
  'postal_code' => '',
68
- 'postal_code_like' => '',
90
+ 'postal_code_like' => '',
69
91
  'status' => 'Active'
70
92
  },{
71
93
  'model' => 'CabooseRets::Property',
72
94
  'sort' => sortby,
73
95
  'desc' => true,
74
96
  'abbreviations' => {
75
- 'address_like' => 'street_number_concat_street_dir_prefix_concat_street_name_concat_street_suffix_concat_street_dir_suffix_like'
97
+ 'address_like' => 'street_number_concat_street_dir_prefix_concat_street_name_concat_street_suffix_concat_street_dir_suffix_like'
76
98
  },
77
99
  'skip' => ['status'],
100
+ 'additional_params' => ['location_query'],
78
101
  'base_url' => base_url,
79
102
  'items_per_page' => 10,
80
- 'additional_where' => [ where ]
103
+ 'additional_where' => [ where, where2 ]
81
104
  })
82
105
 
106
+ @pager.original_params[:test] == "hey"
107
+
83
108
  @properties = @pager.items
84
109
  if params[:waterfronts].present? then @properties = @properties.reject{|p| p.waterfronts.blank?} end
85
110
  # if params[:ftr_lotdesc] == 'golf' then @properties.reject!{|p| p.ftr_lotdesc != 'golf'} end
@@ -95,6 +120,13 @@ module CabooseRets
95
120
  :saved_search => @saved_search,
96
121
  :pager => @pager
97
122
  }
123
+
124
+ if @properties && @properties.count == 1 && searched_address
125
+ only_property = @properties.first
126
+ redirect_to only_property.url and return
127
+ end
128
+
129
+
98
130
  end
99
131
 
100
132
  # @route GET /properties/:mls_number/details
@@ -696,7 +696,6 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
696
696
  end
697
697
  self.log2("Locking task...")
698
698
  task_started = self.lock_task
699
-
700
699
  begin
701
700
  overlap = 2.hours
702
701
  if (DateTime.now - self.last_purged).to_f >= 0.5
@@ -717,7 +716,6 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
717
716
  self.log2("Unlocking task if last updated...")
718
717
  self.unlock_task_if_last_updated(task_started)
719
718
  end
720
-
721
719
  # Start the same update process in 20 minutes
722
720
  self.log3(nil,nil,"Adding the update rets task for 20 minutes from now...")
723
721
  q = "handler like '%update_rets%'"
@@ -725,8 +723,14 @@ class CabooseRets::RetsImporter # < ActiveRecord::Base
725
723
  if count == 0 || (count == 1 && Delayed::Job.where(q).first.locked_at)
726
724
  self.delay(:run_at => 20.minutes.from_now, :priority => 10, :queue => 'rets').update_rets
727
725
  end
728
- # Delete old logs
729
- CabooseRets::Log.where("timestamp < ?",(DateTime.now - 30.days)).destroy_all
726
+
727
+ # Delete RETS logs over 7 days old
728
+ dt = DateTime.now - 7.days
729
+ sql = "delete from rets_logs where timestamp < '#{dt}';"
730
+ ActiveRecord::Base.connection.select_all(sql)
731
+
732
+ # Update search options
733
+ CabooseRets::SearchOption.delay(:queue => "rets", :priority => 15).update_search_options
730
734
  end
731
735
 
732
736
  def self.last_updated
@@ -16,43 +16,72 @@ class CabooseRets::SearchOption < ActiveRecord::Base
16
16
  'MLS Area' => ['area'],
17
17
  'Neighborhood' => ['subdivision'],
18
18
  'Street Name' => ['street_name'],
19
+ 'Street Address' => ['street_address'],
19
20
  'Property Type' => ['property_type'],
20
- 'MLS Number' => ['mls_number']
21
- #'feature',
22
- #'location',
21
+ 'MLS Number' => ['mls_number']
23
22
  }
24
23
  names.each do |name, fields|
25
24
  fields.each do |field|
26
25
  self.update_search_options_for_field(name, field)
27
26
  end
28
27
  end
29
-
28
+
30
29
  # Delete all flagged
31
30
  self.where(:flag_for_delete => true).delete_all
32
31
  end
33
32
 
34
33
  def self.update_search_options_for_field(name, field)
35
- q = ["select distinct(#{field}) from rets_properties where (status = ? or status = ?)", 'Pending', 'Active']
36
- rows = ActiveRecord::Base.connection.select_rows(ActiveRecord::Base.send(:sanitize_sql_array, q))
37
- rows.each do |row|
38
- so = self.where(:name => name, :field => field, :value => row[0]).first
39
- if so.nil?
40
- self.create(:name => name, :field => field, :value => row[0])
41
- else
42
- so.flag_for_delete = false
43
- so.save
34
+ if field == 'street_name'
35
+ CabooseRets::Property.where(:status => "Active", :property_type => "Residential").where("street_name is not null").order(:id).all.each do |prop|
36
+ add = "#{prop.street_name} #{prop.street_suffix}"
37
+ val = add.blank? ? nil : add.strip
38
+ next if val.blank?
39
+ so = self.where(:name => name, :field => field, :value => val).first
40
+ if so.nil? && !field.blank?
41
+ self.create(:name => name, :field => field, :value => val)
42
+ elsif so
43
+ so.flag_for_delete = false
44
+ so.save
45
+ end
46
+ end
47
+ elsif field == 'street_address'
48
+ CabooseRets::Property.where(:status => "Active", :property_type => "Residential").where("street_name is not null and street_number is not null").order(:id).all.each do |prop|
49
+ add = "#{prop.street_number} #{prop.street_name} #{prop.street_suffix}"
50
+ val = add.blank? ? nil : add.strip
51
+ next if val.blank?
52
+ so = self.where(:name => name, :field => field, :value => val).first
53
+ if so.nil? && !field.blank?
54
+ self.create(:name => name, :field => field, :value => val)
55
+ elsif so
56
+ so.flag_for_delete = false
57
+ so.save
58
+ end
59
+ end
60
+ else
61
+ q = ["select distinct(#{field}) from rets_properties where status = ? and property_type = ?", 'Active', 'Residential']
62
+ rows = ActiveRecord::Base.connection.select_rows(ActiveRecord::Base.send(:sanitize_sql_array, q))
63
+ rows.each do |row|
64
+ val = row[0].blank? ? nil : row[0].titleize.strip
65
+ next if val.blank?
66
+ so = self.where(:name => name, :field => field, :value => val).first
67
+ if so.nil? && !field.blank?
68
+ self.create(:name => name, :field => field, :value => val)
69
+ elsif so
70
+ so.flag_for_delete = false
71
+ so.save
72
+ end
44
73
  end
45
74
  end
46
75
  end
47
76
 
48
77
  def self.results(str, count_per_name = 10)
49
78
  q = ["select * from (
50
- select name, field, value, row_number() over (partition by name order by field) as rownum
79
+ select id, name, field, value, row_number() over (partition by name order by field) as rownum
51
80
  from rets_search_options
52
81
  where lower(value) like ?
53
82
  ) tmp where rownum < #{count_per_name}", "%#{str}%"]
54
83
  rows = ActiveRecord::Base.connection.select_rows(ActiveRecord::Base.send(:sanitize_sql_array, q))
55
- arr = rows.collect{ |row| { :name => row[0], :field => row[1], :value => row[2] }}
84
+ arr = rows.collect{ |row| { :id => row[0].to_i, :name => row[1], :field => row[2], :text => row[3] }}
56
85
  return arr
57
86
  end
58
87
 
@@ -1,3 +1,3 @@
1
1
  module CabooseRets
2
- VERSION = '0.1.170'
2
+ VERSION = '0.1.175'
3
3
  end
@@ -283,9 +283,7 @@ namespace :caboose_rets do
283
283
  end
284
284
  CabooseRets::RetsImporter.log("Updating rets data...")
285
285
  task_started = lock_task
286
-
287
286
  begin
288
- # RetsImporter.update_all_after(last_updated - Rational(1,86400))
289
287
  CabooseRets::RetsImporter.update_after(last_updated, true)
290
288
  save_last_updated(task_started)
291
289
  unlock_task
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-rets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.170
4
+ version: 0.1.175
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-28 00:00:00.000000000 Z
11
+ date: 2021-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: caboose-cms
@@ -162,7 +162,7 @@ homepage: http://github.com/williambarry007/caboose-rets
162
162
  licenses:
163
163
  - MIT
164
164
  metadata: {}
165
- post_install_message:
165
+ post_install_message:
166
166
  rdoc_options: []
167
167
  require_paths:
168
168
  - lib
@@ -177,9 +177,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
177
  - !ruby/object:Gem::Version
178
178
  version: '0'
179
179
  requirements: []
180
- rubyforge_project:
180
+ rubyforge_project:
181
181
  rubygems_version: 2.7.8
182
- signing_key:
182
+ signing_key:
183
183
  specification_version: 4
184
184
  summary: Library to download RETS data to a local website.
185
185
  test_files: