spree_zoned 0.5.7 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,9 +2,11 @@ $(function () {
2
2
  if ($("#sel-prd-country").data("prd-country") == 0)
3
3
  {
4
4
  $(".handle").hide();
5
+ $(".delfromcountry").hide();
5
6
  }
6
7
  else
7
8
  {
8
9
  $(".handle").show();
10
+ $(".delfromcountry").show();
9
11
  }
10
12
  });
@@ -0,0 +1,29 @@
1
+ module Spree
2
+ module Admin
3
+ ProductsController.class_eval do
4
+
5
+ before_filter :filter_countries, :only => :index
6
+
7
+ def deletefc
8
+ country = session[:zoned] && session[:zoned][:prd_country]
9
+ @product.delfrom country.to_i if country
10
+ respond_to do |format|
11
+ format.html { redirect_to collection_url }
12
+ format.js { render :nothing => true }
13
+ end
14
+ end
15
+
16
+ protected
17
+
18
+ def filter_countries
19
+ country = session[:zoned] && session[:zoned][:prd_country]
20
+ if country
21
+ collection # returns immediately if already done
22
+ newcoll = @collection.select { |p| p.incountry? country.to_i }
23
+ @collection = newcoll
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -6,7 +6,6 @@ module Spree
6
6
  format.js do
7
7
  session[:zoned] ||= {}
8
8
  session[:zoned][:prd_country] = params[%s{sel-prd-country}]
9
- #render :nothing => true
10
9
  end
11
10
  end
12
11
  end
@@ -0,0 +1,12 @@
1
+ module Spree
2
+ HomeController.class_eval do
3
+
4
+ def index
5
+ p = params ? params : {}
6
+ @searcher = Spree::Config.searcher_class.new(p.merge({zoned_country: (session[:zoned] && session[:zoned][:current_country]) || {}}))
7
+ @products = @searcher.retrieve_products
8
+ respond_with(@products)
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Spree
2
+ ProductsController.class_eval do
3
+
4
+ def index
5
+ p = params ? params : {}
6
+ @searcher = Spree::Config.searcher_class.new(p.merge({zoned_country: (session[:zoned] && session[:zoned][:current_country]) || {}}))
7
+ @products = @searcher.retrieve_products
8
+ respond_with(@products)
9
+ end
10
+
11
+ end
12
+ end
@@ -5,7 +5,6 @@ module Spree
5
5
  format.js do
6
6
  session[:zoned] ||= {}
7
7
  session[:zoned][:current_country] = params[:id]
8
- render :nothing => true
9
8
  end
10
9
  end
11
10
  end
@@ -0,0 +1,50 @@
1
+ module Spree
2
+ module Admin
3
+ NavigationHelper.module_eval do
4
+
5
+ def link_to_deletefc(resource, options = {}, html_options={})
6
+ options.assert_valid_keys(:url, :caption, :title, :dataType, :success, :error, :name)
7
+
8
+ options.reverse_merge! :url => object_url(resource) + '/zoneddfc' unless options.key? :url
9
+ options.reverse_merge! :caption => t(:are_you_sure)
10
+ options.reverse_merge! :title => t(:confirm_delete)
11
+ options.reverse_merge! :dataType => 'script'
12
+ options.reverse_merge! :success => "function(r){ $('##{spree_dom_id resource}').fadeOut('hide'); }"
13
+ options.reverse_merge! :error => "function(jqXHR, textStatus, errorThrown){ show_flash_error(jqXHR.responseText); }"
14
+ options.reverse_merge! :name => icon('delete') + ' ' + t(:deletefc)
15
+
16
+ link_to_function_deletefc(options, html_options)
17
+ #link_to_function_delete_native(options, html_options)
18
+ end
19
+
20
+ # this function does not use jConfirm
21
+ def link_to_function_deletefc_native(options, html_options)
22
+ fn = %Q{
23
+ var answer = confirm("#{t(:are_you_sure)}");
24
+ if (!!answer) { #{link_to_function_deletefc_ajax(options)} };
25
+ }
26
+ link_to_function options[:name], fn, html_options
27
+ end
28
+
29
+ def link_to_function_deletefc(options, html_options)
30
+ link_to_function options[:name], "jConfirm('#{options[:caption]}', '#{options[:title]}', function(r) {
31
+ if(r){ #{link_to_function_deletefc_ajax(options)} }
32
+ });", html_options
33
+ end
34
+
35
+ def link_to_function_deletefc_ajax(options)
36
+ %Q{
37
+ $.ajax({
38
+ type: 'POST',
39
+ url: '#{options[:url]}',
40
+ data: ({_method: 'delete', authenticity_token: AUTH_TOKEN}),
41
+ dataType:'#{options[:dataType]}',
42
+ success: #{options[:success]},
43
+ error: #{options[:error]}
44
+ });
45
+ }
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ Product.class_eval do
3
+
4
+ def incountry?(country)
5
+ clist = Spree::Zoned::Product.where "spree_product_id = ? AND spree_country_id = ?", id, country
6
+ clist == [] || clist[0].orderno >= 0
7
+ end
8
+
9
+ def delfrom(country)
10
+ clist = Spree::Zoned::Product.where "spree_product_id = ? AND spree_country_id = ?", id, country
11
+ if clist == []
12
+ zp = Spree::Zoned::Product.new
13
+ zp.spree_country_id = country
14
+ zp.spree_product_id = id
15
+ else
16
+ zp = clist[0]
17
+ end
18
+ zp.orderno = -1
19
+ zp.save!
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ :name => "add_delfc",
3
+ :virtual_path => "spree/admin/products/index",
4
+ :insert_bottom => "[data-hook='admin_products_index_row_actions']",
5
+ :partial => "spree/admin/zoned/delfc",
6
+ )
@@ -0,0 +1,4 @@
1
+ <span class='delfromcountry'>
2
+ &nbsp;
3
+ <%= link_to_deletefc product unless product.deleted? %>
4
+ </span>
@@ -3,7 +3,7 @@
3
3
  <% selected = ((session[:zoned] && session[:zoned][:prd_country]) || 0) # preselect item "No country selected" %>
4
4
  <%= select_tag 'sel-prd-country',
5
5
  options_for_select( # common countries have negative id
6
- [["Kein Land ausgewählt", 0]] +
6
+ [[t(:nocountrysel), 0]] +
7
7
  Rails.application.config.commonCountriesForSelect,
8
8
  selected,
9
9
  ),
@@ -1,5 +1,8 @@
1
1
  <% if session[:zoned] && session[:zoned][:prd_country].to_i == 0 %>
2
2
  $(".handle").hide();
3
+ $(".delfromcountry").hide();
3
4
  <% else %>
4
5
  $(".handle").show();
5
- <% end %>
6
+ $(".delfromcountry").show();
7
+ <% end %>
8
+ location.href = "/admin/products"
@@ -0,0 +1 @@
1
+ location.reload();
@@ -1,3 +1,5 @@
1
+ require "spree/zoned/search/base"
2
+
1
3
  #
2
4
  # ZONED_COMMON_COUNTRIES is the list of countries that will be separately listed
3
5
  # in the beginning of the country select box for easy selection.
@@ -34,3 +36,5 @@ ZONED_COMMON_LOCALES =
34
36
  Rails.configuration.commonCountriesForSelect = ZONED_COMMON_COUNTRIES.map do |id|
35
37
  [ Spree::Country.find_by_id(id).name, -id ]
36
38
  end
39
+
40
+ Spree::Config.searcher_class = Spree::Zoned::Search::Base
@@ -0,0 +1,7 @@
1
+ # Sample localization file for German. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+ ---
4
+ de:
5
+ nocountrysel: "Kein Land ausgewählt"
6
+ deletefc: "Aus Land löschen"
7
+
@@ -1,5 +1,6 @@
1
1
  # Sample localization file for English. Add more files in this directory for other locales.
2
2
  # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
-
3
+ ---
4
4
  en:
5
- hello: "Hello world"
5
+ nocountrysel: "No country selected"
6
+ deletefc: "Delete from country"
data/config/routes.rb CHANGED
@@ -2,5 +2,6 @@ Spree::Core::Engine.routes.draw do
2
2
  match '/zonedcs' => "zoned#setcountry"
3
3
  namespace :admin do
4
4
  match '/zonedcs' => "zoned#setcountry"
5
+ match '/products/:id/zoneddfc' => "products#deletefc", :via => :delete
5
6
  end
6
7
  end
@@ -0,0 +1,98 @@
1
+ #
2
+ # Copied from spree_core-1.1.1/lib/spree/core/search/base.rb
3
+ #
4
+ # changes are marked using "{ CHANGE" and "CHANGE }"
5
+ #
6
+
7
+ module Spree
8
+ module Zoned
9
+ module Search
10
+ class Base
11
+ attr_accessor :properties
12
+
13
+ def initialize(params)
14
+ @properties = {}
15
+ prepare(params)
16
+ end
17
+
18
+ def retrieve_products
19
+ @products_scope = get_base_scope
20
+ curr_page = page || 1
21
+
22
+ @products = @products_scope.includes([:master]).page(curr_page).per(per_page)
23
+ end
24
+
25
+ def method_missing(name)
26
+ if @properties.has_key? name
27
+ @properties[name]
28
+ else
29
+ super
30
+ end
31
+ end
32
+
33
+ protected
34
+ def get_base_scope
35
+ base_scope = Spree::Product.active
36
+ #
37
+ # Add scope for filtering products accoding to country setting of the spree_zoned extension
38
+ # { CHANGE
39
+ country = @properties[:zoned_country]
40
+ base_scope = base_scope.joins(
41
+ 'LEFT OUTER JOIN spree_zoned_products ON spree_zoned_products.spree_product_id = spree_products.id' +
42
+ " AND spree_zoned_products.spree_country_id = #{country}").where(
43
+ '(spree_zoned_products.orderno IS NULL OR spree_zoned_products.orderno >= 0)') if country
44
+ # CHANGE }
45
+ base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
46
+ base_scope = get_products_conditions_for(base_scope, keywords) unless keywords.blank?
47
+ base_scope = base_scope.on_hand unless Spree::Config[:show_zero_stock_products]
48
+ base_scope = add_search_scopes(base_scope)
49
+ base_scope
50
+ end
51
+
52
+ def add_search_scopes(base_scope)
53
+ search.each do |name, scope_attribute|
54
+ next if name.to_s =~ /eval|send|system/
55
+
56
+ scope_name = name.intern
57
+ if base_scope.respond_to? scope_name
58
+ base_scope = base_scope.send(scope_name, *scope_attribute)
59
+ else
60
+ base_scope = base_scope.merge(Spree::Product.search({scope_name => scope_attribute}).result)
61
+ end
62
+ end if search
63
+ base_scope
64
+ end
65
+
66
+ # method should return new scope based on base_scope
67
+ def get_products_conditions_for(base_scope, query)
68
+ base_scope.like_any([:name, :description], query.split)
69
+ end
70
+
71
+ def prepare(params)
72
+ @properties[:taxon] = params[:taxon].blank? ? nil : Spree::Taxon.find(params[:taxon])
73
+ @properties[:keywords] = params[:keywords]
74
+ @properties[:search] = params[:search]
75
+
76
+ per_page = params[:per_page].to_i
77
+ @properties[:per_page] = per_page > 0 ? per_page : Spree::Config[:products_per_page]
78
+ @properties[:page] = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
79
+ # { CHANGE
80
+ @properties[:zoned_country] = params[:zoned_country]
81
+ # CHANGE }
82
+
83
+ # if !params[:order_by_price].blank?
84
+ # @product_group = Spree::ProductGroup.new.from_route([params[:order_by_price] + '_by_master_price'])
85
+ # elsif params[:product_group_name]
86
+ # @cached_product_group = Spree::ProductGroup.find_by_permalink(params[:product_group_name])
87
+ # @product_group = Spree::ProductGroup.new
88
+ # elsif params[:product_group_query]
89
+ # @product_group = Spree::ProductGroup.new.from_route(params[:product_group_query].split('/'))
90
+ # else
91
+ # @product_group = Spree::ProductGroup.new
92
+ # end
93
+ # @product_group = @product_group.from_search(params[:search]) if params[:search]
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
data/spree_zoned.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
  Gem::Specification.new do |s|
3
3
  s.platform = Gem::Platform::RUBY
4
4
  s.name = 'spree_zoned'
5
- s.version = '0.5.7'
5
+ s.version = '0.5.8'
6
6
  s.summary = 'A Spree extension to make your store zoned'
7
7
  s.description = "Everything you need for a zoned Spree store: zoned pricing, zoned products, zoned product ordering, zoned locales, ...\nProbalbly essential to you if you operate outside of the US."
8
8
  s.required_ruby_version = '>= 1.9.2'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_zoned
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.5.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-15 00:00:00.000000000 Z
12
+ date: 2012-06-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: spree_core
@@ -129,22 +129,32 @@ files:
129
129
  - app/assets/javascripts/store/spree_zoned.js
130
130
  - app/assets/stylesheets/admin/spree_zoned.css
131
131
  - app/assets/stylesheets/store/spree_zoned.css
132
+ - app/controllers/spree/admin/products_controller_decorator.rb
132
133
  - app/controllers/spree/admin/zoned_controller.rb
134
+ - app/controllers/spree/home_controller_decorator.rb
135
+ - app/controllers/spree/products_controller_decorator.rb
133
136
  - app/controllers/spree/zoned_controller.rb
137
+ - app/helpers/spree/admin/navigation_helper_decorator.rb
134
138
  - app/helpers/spree/base_helper_decorator.rb
139
+ - app/models/spree/product_decorator.rb
135
140
  - app/models/spree/zoned/product.rb
136
141
  - app/overrides/add_country_selectbox.rb
142
+ - app/overrides/add_delfc.rb
137
143
  - app/overrides/add_js_prd_index.rb
138
144
  - app/overrides/add_prd_country.rb
139
145
  - app/overrides/add_prd_handles.rb
146
+ - app/views/spree/admin/zoned/_delfc.html.erb
140
147
  - app/views/spree/admin/zoned/_prd_country.html.erb
141
148
  - app/views/spree/admin/zoned/setcountry.js.erb
142
149
  - app/views/spree/zoned/_countryselect.html.erb
150
+ - app/views/spree/zoned/setcountry.js.erb
143
151
  - config/initializers/zoned_init.rb
152
+ - config/locales/de.yml
144
153
  - config/locales/en.yml
145
154
  - config/routes.rb
146
155
  - db/migrate/20120611133806_create_spree_zoned_products.rb
147
156
  - lib/generators/spree_zoned/install/install_generator.rb
157
+ - lib/spree/zoned/search/base.rb
148
158
  - lib/spree_zoned.rb
149
159
  - lib/spree_zoned/engine.rb
150
160
  - script/rails