Commit 0669cbb2be3a45b2bb3adcc2843b2656dc24679b

Authored by MoisesMachado
1 parent 9a9aaa40

ActionItem129: added an action to the search controller to find enterprises by t…

…he products_categories of its products or for distance of a point


git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@1771 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/public/search_controller.rb
@@ -120,6 +120,14 @@ class SearchController < ApplicationController @@ -120,6 +120,14 @@ class SearchController < ApplicationController
120 @tagged = @tag.taggings.map(&:taggable) 120 @tagged = @tag.taggings.map(&:taggable)
121 end 121 end
122 122
  123 + def sellers
  124 + options = {}
  125 + @product_category = ProductCategory.find_by_path(params[:product_category].join('/')) if params[:product_category]
  126 + options.merge!({:include => :products, :conditions => ['products.product_category_id = ?', @product_category.id]}) if @product_category
  127 + options.merge!({:origin => [params[:lat].to_f, params[:long].to_f], :within => params[:radius] }) if params[:lat] && params[:long] && params[:radius]
  128 + @enterprises = Enterprise.find(:all, options)
  129 + end
  130 +
123 ####################################################### 131 #######################################################
124 132
125 def popup 133 def popup
app/models/profile.rb
@@ -35,6 +35,8 @@ class Profile < ActiveRecord::Base @@ -35,6 +35,8 @@ class Profile < ActiveRecord::Base
35 35
36 acts_as_having_settings :field => :data 36 acts_as_having_settings :field => :data
37 37
  38 + acts_as_mappable :default_units => :kms
  39 +
38 # Valid identifiers must match this format. 40 # Valid identifiers must match this format.
39 IDENTIFIER_FORMAT = /^[a-z][a-z0-9~.]*([_-][a-z0-9~.]+)*$/ 41 IDENTIFIER_FORMAT = /^[a-z][a-z0-9~.]*([_-][a-z0-9~.]+)*$/
40 42
test/functional/search_controller_test.rb
@@ -748,6 +748,29 @@ class SearchControllerTest < Test::Unit::TestCase @@ -748,6 +748,29 @@ class SearchControllerTest < Test::Unit::TestCase
748 assert_not_includes assigns(:results)[:comments], comment4 748 assert_not_includes assigns(:results)[:comments], comment4
749 end 749 end
750 750
  751 + should 'find enterprise by product category' do
  752 + ent1 = Enterprise.create!(:name => 'test1', :identifier => 'test1')
  753 + prod_cat = ProductCategory.create!(:name => 'pc-test', :environment => Environment.default)
  754 + prod = ent1.products.create!(:name => 'teste', :product_category => prod_cat)
  755 +
  756 + ent2 = Enterprise.create!(:name => 'test2', :identifier => 'test2')
  757 +
  758 + get :sellers, :product_category => ['pc-test']
  759 +
  760 + assert_includes assigns('enterprises'), ent1
  761 + assert_not_includes assigns('enterprises'), ent2
  762 + end
  763 +
  764 + should 'find enterprise by origin and radius' do
  765 + ent1 = Enterprise.create!(:name => 'test1', :identifier => 'test1', :lat => 45.0, :lng => 45.0)
  766 + ent2 = Enterprise.create!(:name => 'test2', :identifier => 'test2', :lat => 30.0, :lng => 30.0)
  767 +
  768 + get :sellers, :lat => 45.0, :long => 45.0, :radius => 10
  769 +
  770 + assert_includes assigns('enterprises'), ent1
  771 + assert_not_includes assigns('enterprises'), ent2
  772 + end
  773 +
751 should 'not show term "Category:" before product category' do 774 should 'not show term "Category:" before product category' do
752 Profile.delete_all 775 Profile.delete_all
753 ent = Enterprise.create!(:name => 'teste1', :identifier => 'teste1') 776 ent = Enterprise.create!(:name => 'teste1', :identifier => 'teste1')
test/unit/profile_test.rb
@@ -442,6 +442,20 @@ class ProfileTest < Test::Unit::TestCase @@ -442,6 +442,20 @@ class ProfileTest < Test::Unit::TestCase
442 assert_not_includes list, outside 442 assert_not_includes list, outside
443 end 443 end
444 444
  445 + should 'have latitude and longitude' do
  446 + e = Enterprise.create!(:name => 'test1', :identifier => 'test1')
  447 + e.lat, e.lng = 45, 45 ; e.save!
  448 +
  449 + assert_includes Enterprise.find_within(2, :origin => [45, 45]), e
  450 + end
  451 +
  452 + should 'have latitude and longitude and find' do
  453 + e = Enterprise.create!(:name => 'test1', :identifier => 'test1')
  454 + e.lat, e.lng = 45, 45 ; e.save!
  455 +
  456 + assert_includes Enterprise.find(:all, :within => 2, :origin => [45, 45]), e
  457 + end
  458 +
445 private 459 private
446 460
447 def assert_invalid_identifier(id) 461 def assert_invalid_identifier(id)