solidus_multi_domain 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +33 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/Gemfile +9 -0
- data/README.md +72 -0
- data/Rakefile +21 -0
- data/app/controllers/concerns/spree_multi_domain/create_line_item_support.rb +16 -0
- data/app/controllers/concerns/spree_multi_domain/show_product_support.rb +17 -0
- data/app/controllers/spree/admin/products_controller_decorator.rb +12 -0
- data/app/controllers/spree/admin/stores_controller.rb +24 -0
- data/app/controllers/spree/api/line_items_controller_decorator.rb +1 -0
- data/app/controllers/spree/api/orders_controller_decorator.rb +21 -0
- data/app/controllers/spree/api/products_controller_decorator.rb +1 -0
- data/app/controllers/spree/api/shipments_controller_decorator.rb +17 -0
- data/app/controllers/spree/home_controller_decorator.rb +7 -0
- data/app/controllers/spree/products_controller_decorator.rb +1 -0
- data/app/controllers/spree/taxons_controller_decorator.rb +10 -0
- data/app/helpers/spree/products_helper_decorator.rb +11 -0
- data/app/mailers/spree/carton_mailer_decorator.rb +13 -0
- data/app/mailers/spree/order_mailer.rb +35 -0
- data/app/models/spree/order_decorator.rb +8 -0
- data/app/models/spree/payment_method_decorator.rb +13 -0
- data/app/models/spree/product_decorator.rb +4 -0
- data/app/models/spree/promotion/rules/store.rb +30 -0
- data/app/models/spree/shipping_method_decorator.rb +18 -0
- data/app/models/spree/store_decorator.rb +25 -0
- data/app/models/spree/store_payment_method.rb +6 -0
- data/app/models/spree/store_shipping_method.rb +6 -0
- data/app/models/spree/taxon_decorator.rb +5 -0
- data/app/models/spree/taxonomy_decorator.rb +3 -0
- data/app/models/spree/tracker_decorator.rb +7 -0
- data/app/models/spree_multi_domain/line_item_decorator.rb +20 -0
- data/app/overrides/decorate_admin_configurations_index.rb +5 -0
- data/app/overrides/decorate_admin_products_form.rb +6 -0
- data/app/overrides/decorate_admin_products_index.rb +20 -0
- data/app/overrides/decorate_admin_trackers_form.rb +6 -0
- data/app/overrides/decorate_admin_trackers_index.rb +13 -0
- data/app/views/spree/admin/products/_index_headers.html.erb +1 -0
- data/app/views/spree/admin/products/_index_rows.html.erb +1 -0
- data/app/views/spree/admin/products/_index_search_fields.html.erb +4 -0
- data/app/views/spree/admin/products/_stores.html.erb +8 -0
- data/app/views/spree/admin/promotions/rules/_store.html.erb +8 -0
- data/app/views/spree/admin/stores/_form.html.erb +90 -0
- data/app/views/spree/admin/stores/edit.html.erb +29 -0
- data/app/views/spree/admin/stores/index.html.erb +43 -0
- data/app/views/spree/admin/stores/new.html.erb +29 -0
- data/app/views/spree/admin/taxonomies/_form.html.erb +12 -0
- data/app/views/spree/admin/trackers/_index_rows.html.erb +1 -0
- data/app/views/spree/admin/trackers/_store.html.erb +6 -0
- data/app/views/spree/shared/_google_analytics.html.erb +39 -0
- data/bin/rails +7 -0
- data/circle.yml +6 -0
- data/config/locales/en.yml +26 -0
- data/config/locales/fr.yml +9 -0
- data/config/locales/pl.yml +10 -0
- data/config/locales/ru.yml +9 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20091202123245_add_order_store.rb +17 -0
- data/db/migrate/20100114020535_add_store_to_tracker.rb +25 -0
- data/db/migrate/20100227180338_create_products_stores.rb +13 -0
- data/db/migrate/20100616204303_store_id_for_taxonomies.rb +19 -0
- data/db/migrate/20110601125650_remove_datetime_columns_from_products_stores.rb +13 -0
- data/db/migrate/20110601145424_add_indexes_to_products_stores.rb +11 -0
- data/db/migrate/20120223183401_namespace.rb +9 -0
- data/db/migrate/20121210224018_add_store_payment_methods.rb +10 -0
- data/db/migrate/20130308084714_add_logo_to_stores.rb +13 -0
- data/db/migrate/20130325231147_add_store_shipping_methods.rb +14 -0
- data/db/migrate/20130412212659_add_spree_promotion_rules_stores.rb +8 -0
- data/db/migrate/20150304200122_add_indexes.rb +6 -0
- data/lib/assets/javascripts/spree/backend/solidus_multi_domain.js +1 -0
- data/lib/assets/javascripts/spree/backend/store_picker.js +34 -0
- data/lib/assets/javascripts/spree/frontend/solidus_multi_domain.js +0 -0
- data/lib/assets/stylesheets/spree/frontend/solidus_multi_domain.css +5 -0
- data/lib/generators/spree_multi_domain/install/install_generator.rb +24 -0
- data/lib/solidus_multi_domain.rb +3 -0
- data/lib/spree/controller_helpers/order_decorator.rb +11 -0
- data/lib/spree/search/multi_domain.rb +19 -0
- data/lib/spree_multi_domain/engine.rb +65 -0
- data/lib/spree_multi_domain/multi_domain_helpers.rb +31 -0
- data/solidus_multi_domain.gemspec +31 -0
- data/spec/controllers/spree/admin/products_controller_spec.rb +39 -0
- data/spec/controllers/spree/admin/stores_controller_spec.rb +12 -0
- data/spec/controllers/spree/api/line_items_controller_spec.rb +35 -0
- data/spec/controllers/spree/api/orders_controller_spec.rb +44 -0
- data/spec/controllers/spree/api/products_controller_spec.rb +52 -0
- data/spec/controllers/spree/api/shipments_controller_spec.rb +63 -0
- data/spec/controllers/spree/products_controller_spec.rb +49 -0
- data/spec/helpers/products_helper_decorator_spec.rb +22 -0
- data/spec/mailers/carton_mailer_spec.rb +41 -0
- data/spec/models/spree/line_item_spec.rb +39 -0
- data/spec/models/spree/order_spec.rb +18 -0
- data/spec/models/spree/payment_method_spec.rb +33 -0
- data/spec/models/spree/product_spec.rb +18 -0
- data/spec/models/spree/shipping_method_decorator_spec.rb +27 -0
- data/spec/models/spree/store_spec.rb +42 -0
- data/spec/models/spree/taxon_decorator_spec.rb +30 -0
- data/spec/models/spree/tracker_spec.rb +19 -0
- data/spec/requests/global_controller_helpers_spec.rb +65 -0
- data/spec/requests/template_renderer_spec.rb +25 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/support/factory_overrides.rb +10 -0
- metadata +278 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
module Spree
|
2
|
+
Store.class_eval do
|
3
|
+
has_and_belongs_to_many :products, join_table: 'spree_products_stores'
|
4
|
+
has_many :taxonomies
|
5
|
+
has_many :orders
|
6
|
+
|
7
|
+
has_many :store_payment_methods
|
8
|
+
has_many :payment_methods, through: :store_payment_methods
|
9
|
+
|
10
|
+
has_many :store_shipping_methods
|
11
|
+
has_many :shipping_methods, through: :store_shipping_methods
|
12
|
+
|
13
|
+
has_and_belongs_to_many :promotion_rules, class_name: 'Spree::Promotion::Rules::Store', join_table: 'spree_promotion_rules_stores', association_foreign_key: 'promotion_rule_id'
|
14
|
+
|
15
|
+
has_attached_file :logo,
|
16
|
+
styles: { mini: '48x48>', small: '100x100>', medium: '250x250>' },
|
17
|
+
default_style: :medium,
|
18
|
+
url: 'stores/:id/:style/:basename.:extension',
|
19
|
+
path: 'stores/:id/:style/:basename.:extension',
|
20
|
+
convert_options: { all: '-strip -auto-orient' }
|
21
|
+
|
22
|
+
validates_attachment_file_name :logo, matches: [/png\Z/i, /jpe?g\Z/i],
|
23
|
+
if: -> { respond_to?(:logo_file_name) }
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module SpreeMultiDomain::LineItemDecorator
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
class ProductDoesNotBelongToStoreError < StandardError; end
|
5
|
+
|
6
|
+
included do
|
7
|
+
prepend(InstanceMethods)
|
8
|
+
before_create :ensure_product_belongs_to_store
|
9
|
+
end
|
10
|
+
|
11
|
+
module InstanceMethods
|
12
|
+
private
|
13
|
+
|
14
|
+
def ensure_product_belongs_to_store
|
15
|
+
raise SpreeMultiDomain::LineItemDecorator::ProductDoesNotBelongToStoreError if order.store.present? && !product.stores.include?(order.store)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Spree::LineItem.include(SpreeMultiDomain::LineItemDecorator)
|
@@ -0,0 +1,5 @@
|
|
1
|
+
Deface::Override.new(:virtual_path => "spree/admin/shared/_configuration_menu",
|
2
|
+
:name => "multi_domain_admin_configurations_menu",
|
3
|
+
:insert_bottom => "[data-hook='admin_configurations_sidebar_menu']",
|
4
|
+
:text => "<%= configurations_sidebar_menu_item Spree.t(:stores_admin), admin_stores_url %>",
|
5
|
+
:disabled => false)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Deface::Override.new(
|
2
|
+
:virtual_path => "spree/admin/products/index",
|
3
|
+
:name => "multi_domain_admin_products_index_headers",
|
4
|
+
:insert_before => "[data-hook='admin_products_index_header_actions']",
|
5
|
+
:partial => "spree/admin/products/index_headers",
|
6
|
+
:disabled => false)
|
7
|
+
|
8
|
+
Deface::Override.new(
|
9
|
+
:virtual_path => "spree/admin/products/index",
|
10
|
+
:name => "multi_domain_admin_products_index_rows",
|
11
|
+
:insert_before => "[data-hook='admin_products_index_row_actions']",
|
12
|
+
:partial => "spree/admin/products/index_rows",
|
13
|
+
:disabled => false)
|
14
|
+
|
15
|
+
Deface::Override.new(
|
16
|
+
:virtual_path => "spree/admin/products/index",
|
17
|
+
:name => "multi_domain_admin_products_index_search",
|
18
|
+
:insert_top => "[data-hook='admin_products_index_search']",
|
19
|
+
:partial => "spree/admin/products/index_search_fields",
|
20
|
+
:disabled => false)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Deface::Override.new(
|
2
|
+
:virtual_path => "spree/admin/trackers/index",
|
3
|
+
:name => "multi_domain_admin_trackers_index_headers",
|
4
|
+
:insert_before => "[data-hook='admin_trackers_index_headers'] th:last",
|
5
|
+
:text => "<th><%= I18n.t(:store) %></th>",
|
6
|
+
:disabled => false)
|
7
|
+
|
8
|
+
Deface::Override.new(
|
9
|
+
:virtual_path => "spree/admin/trackers/index",
|
10
|
+
:name => "multi_domain_admin_trackers_index_rows",
|
11
|
+
:insert_before => "[data-hook='admin_trackers_index_rows'] td:last",
|
12
|
+
:partial => "spree/admin/trackers/index_rows",
|
13
|
+
:disabled => false)
|
@@ -0,0 +1 @@
|
|
1
|
+
<th><%= Spree.t(:stores) %></th>
|
@@ -0,0 +1 @@
|
|
1
|
+
<td><%= product.stores.map(&:code).join(", ") unless product.stores.empty? %></td>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<div class="stores">
|
2
|
+
<%= hidden_field_tag 'update_store_ids', true %>
|
3
|
+
<%= f.label :stores, Spree.t(:stores)%><br />
|
4
|
+
<% Spree::Store.all.each do |store| %>
|
5
|
+
<%= check_box_tag "product[store_ids][]", store.id, @product.stores.include?(store), id: "product_store_id_#{store.id}" %>
|
6
|
+
<%= label_tag "product_store_id_#{store.id}", store.name %>
|
7
|
+
<% end %>
|
8
|
+
</div>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<div class="field alpha omega eight columns">
|
2
|
+
<label><%= Spree.t('store_rule.choose_stores') %></label><br>
|
3
|
+
<input type='hidden' name='<%= param_prefix %>[store_ids_string]' class='store_picker fullwidth' value='<%= promotion_rule.store_ids.join(",") %>'>
|
4
|
+
</div>
|
5
|
+
<script>
|
6
|
+
Spree.routes.store_search = '<%= spree.admin_stores_path(:format => :json) %>';
|
7
|
+
$('.store_picker').storeAutocomplete();
|
8
|
+
</script>
|
@@ -0,0 +1,90 @@
|
|
1
|
+
<div data-hook="admin_store_form_fields">
|
2
|
+
<div class="alpha four columns">
|
3
|
+
<%= f.field_container :name do %>
|
4
|
+
<%= f.label :name, Spree.t(:store_name) %><br />
|
5
|
+
<%= f.text_field :name, :class => 'fullwidth' %>
|
6
|
+
<%= error_message_on :store, :name %>
|
7
|
+
<% end %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="four columns">
|
11
|
+
<%= f.field_container :code do %>
|
12
|
+
<%= f.label :code, Spree.t(:store_code) %><br />
|
13
|
+
<%= f.text_field :code, :class => 'fullwidth' %>
|
14
|
+
<%= error_message_on :store, :code %>
|
15
|
+
<% end %>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="two columns">
|
19
|
+
<%= f.field_container :default do %>
|
20
|
+
<%= f.label :default, Spree.t(:default) %>
|
21
|
+
<ul>
|
22
|
+
<li><%= f.radio_button :default, "true", :class => 'fullwidth' %> <%= Spree.t(:yes) %></li>
|
23
|
+
<li><%= f.radio_button :default, "false", :class => 'fullwidth' %> <%= Spree.t(:no) %></li>
|
24
|
+
</ul>
|
25
|
+
<%= error_message_on :store, :default %>
|
26
|
+
<% end %>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div class="four columns">
|
30
|
+
<%= f.field_container :mail_from_address do %>
|
31
|
+
<%= f.label :mail_from_address, Spree.t(:send_mails_as) %><br />
|
32
|
+
<%= f.text_field :mail_from_address, :class => 'fullwidth' %>
|
33
|
+
<%= error_message_on :store, :mail_from_address %>
|
34
|
+
<% end %>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<div class="four columns">
|
38
|
+
<%= f.field_container :default_currency do %>
|
39
|
+
<%= f.label :default_currency, Spree.t(:default_currency) %>
|
40
|
+
<%= f.text_field :default_currency %>
|
41
|
+
<% end %>
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<div class="six columns">
|
45
|
+
<%= f.field_container :url do %>
|
46
|
+
<%= f.label :url, Spree.t(:domains) %><br />
|
47
|
+
<%= f.text_area :url, :cols => 60, :rows => 4, :class => 'fullwidth' %>
|
48
|
+
<%= error_message_on :store, :url %>
|
49
|
+
<% end %>
|
50
|
+
</div>
|
51
|
+
|
52
|
+
<div class="eight columns">
|
53
|
+
<%= image_tag @store.logo %>
|
54
|
+
<%= f.field_container :logo do %>
|
55
|
+
<%= f.label :logo, Spree.t(:logo) %><br />
|
56
|
+
<%= f.file_field :logo %>
|
57
|
+
<%= error_message_on :store, :logo %>
|
58
|
+
<% end %>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<div class='row'>
|
62
|
+
<div class="alpha six columns">
|
63
|
+
<%= f.field_container :payment_methods do %>
|
64
|
+
<%= f.label :payment_methods, Spree.t(:payment_methods) %><br />
|
65
|
+
<% @payment_methods.each do |payment_method| %>
|
66
|
+
<label class="sub">
|
67
|
+
<%= check_box_tag 'store[payment_method_ids][]', payment_method.id, @store.payment_methods.include?(payment_method) %>
|
68
|
+
</label>
|
69
|
+
<%= "#{payment_method.name} (#{payment_method.environment})" %>
|
70
|
+
<br>
|
71
|
+
<% end %>
|
72
|
+
<%= hidden_field_tag 'store[payment_method_ids][]', '' %>
|
73
|
+
<% end %>
|
74
|
+
</div>
|
75
|
+
|
76
|
+
<div class="omega six columns">
|
77
|
+
<%= f.field_container :shipping_methods do %>
|
78
|
+
<%= f.label :shipping_methods, Spree.t(:shipping_methods) %><br />
|
79
|
+
<% @shipping_methods.each do |shipping_method| %>
|
80
|
+
<label class="sub">
|
81
|
+
<%= check_box_tag 'store[shipping_method_ids][]', shipping_method.id, @store.shipping_methods.include?(shipping_method) %>
|
82
|
+
</label>
|
83
|
+
<%= shipping_method.name %>
|
84
|
+
<br>
|
85
|
+
<% end %>
|
86
|
+
<%= hidden_field_tag 'store[shipping_method_ids][]', '' %>
|
87
|
+
<% end %>
|
88
|
+
</div>
|
89
|
+
</div>
|
90
|
+
</div>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<%= render :partial => 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t(:editing_store) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<li>
|
9
|
+
<%= button_link_to Spree.t(:back_to_stores_list), spree.admin_stores_path, :icon => 'icon-arrow-left' %>
|
10
|
+
</li>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<div data-hook="admin_store_edit_form_header">
|
14
|
+
<%= render :partial => 'spree/shared/error_messages', :locals => { :target => @store } %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div data-hook="admin_store_edit_form">
|
18
|
+
<%= form_for [:admin, @store], :html => {:multipart => true} do |f| %>
|
19
|
+
<fieldset class="no-border-top">
|
20
|
+
<%= render :partial => 'form', :locals => { :f => f } %>
|
21
|
+
|
22
|
+
<div class="clear"></div>
|
23
|
+
|
24
|
+
<div data-hook="admin_store_edit_form_buttons">
|
25
|
+
<%= render :partial => 'spree/admin/shared/edit_resource_links' %>
|
26
|
+
</div>
|
27
|
+
</fieldset>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
<%= render :partial => 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t(:stores) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<li>
|
9
|
+
<%= button_link_to Spree.t(:new_store), new_object_url, :icon => 'icon-plus', :id => 'admin_new_store_link' %>
|
10
|
+
</li>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<table class="index" id='listing_stores'>
|
14
|
+
<colgroup>
|
15
|
+
<col style="width: 120px">
|
16
|
+
<col style="width: 80px">
|
17
|
+
<col style="width: 80px">
|
18
|
+
<col style="width: 220px">
|
19
|
+
<col style="width: 15%">
|
20
|
+
</colgroup>
|
21
|
+
<thead>
|
22
|
+
<th><%= Spree.t(:store_name) %></th>
|
23
|
+
<th><%= Spree.t(:store_code) %></th>
|
24
|
+
<th><%= Spree.t(:send_mails_as) %></th>
|
25
|
+
<th><%= Spree.t(:domains) %></th>
|
26
|
+
<th data-hook="admin_stores_index_header_actions" class="actions"></th>
|
27
|
+
</thead>
|
28
|
+
<tbody>
|
29
|
+
<% @stores.each do |store|%>
|
30
|
+
<tr id="<%= spree_dom_id store %>"
|
31
|
+
data-hook="admin_stores_index_rows" class="<%= cycle('odd', 'even') %>">
|
32
|
+
<td><%= store.name %></td>
|
33
|
+
<td><%= store.code %></td>
|
34
|
+
<td><%= store.mail_from_address %></td>
|
35
|
+
<td><%= store.url %></td>
|
36
|
+
<td data-hook="admin_stores_index_row_actions" class="actions">
|
37
|
+
<%= link_to_edit store, :no_text => true %>
|
38
|
+
<%= link_to_delete store, :no_text => true %>
|
39
|
+
</td>
|
40
|
+
</tr>
|
41
|
+
<% end %>
|
42
|
+
</tbody>
|
43
|
+
</table>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<%= render :partial => 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t(:new_store) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<li>
|
9
|
+
<%= button_link_to Spree.t(:back_to_stores_list), spree.admin_stores_path, :icon => 'icon-arrow-left' %>
|
10
|
+
</li>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<div data-hook="admin_store_new_form_header">
|
14
|
+
<%= render :partial => 'spree/shared/error_messages', :locals => { :target => @store } %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div data-hook="admin_store_new_form">
|
18
|
+
<%= form_for [:admin, @store], :html => {:multipart => true} do |f| %>
|
19
|
+
<fieldset class="no-border-top">
|
20
|
+
<%= render :partial => 'form', :locals => { :f => f } %>
|
21
|
+
|
22
|
+
<div class="clear"></div>
|
23
|
+
|
24
|
+
<div data-hook="admin_store_new_form_buttons">
|
25
|
+
<%= render :partial => 'spree/admin/shared/new_resource_links' %>
|
26
|
+
</div>
|
27
|
+
</fieldset>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div data-hook="admin_inside_taxonomy_form">
|
2
|
+
<%= f.field_container :name do %>
|
3
|
+
<%= f.label :name, Spree.t(:name) %> <span class="required">*</span><br />
|
4
|
+
<%= error_message_on :taxonomy, :name, :class => 'fullwidth title' %>
|
5
|
+
<%= text_field :taxonomy, :name %>
|
6
|
+
<% end %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<p>
|
10
|
+
<%= f.label :name, Spree.t(:store) %> <span class="required">*</span><br />
|
11
|
+
<%= collection_select :taxonomy, :store_id, Spree::Store.all, :id, :name %>
|
12
|
+
</p>
|
@@ -0,0 +1 @@
|
|
1
|
+
<td><%=tracker.store.name %></td>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<% if tracker = current_tracker %>
|
2
|
+
|
3
|
+
<%= javascript_tag do %>
|
4
|
+
var _gaq = _gaq || [];
|
5
|
+
_gaq.push(['_setAccount', '<%= tracker.analytics_id %>']);
|
6
|
+
_gaq.push(['_trackPageview']);
|
7
|
+
|
8
|
+
<% if flash[:commerce_tracking] && @order.present? %>
|
9
|
+
<%# more info: https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiEcommerce %>
|
10
|
+
_gaq.push(['_addTrans',
|
11
|
+
"<%= j @order.number %>",
|
12
|
+
"<%= tracker.store.name %>",
|
13
|
+
"<%= @order.total %>",
|
14
|
+
"<%= @order.adjustments.tax.sum(:amount) %>",
|
15
|
+
"<%= @order.adjustments.shipping.sum(:amount) %>",
|
16
|
+
"<%= j @order.bill_address.city %>",
|
17
|
+
"<%= j @order.bill_address.state_text %>",
|
18
|
+
"<%= j @order.bill_address.country.name %>"
|
19
|
+
]);
|
20
|
+
<% @order.line_items.each do |line_item| %>
|
21
|
+
_gaq.push(['_addItem',
|
22
|
+
"<%= j @order.number %>",
|
23
|
+
"<%= j line_item.variant.sku %>",
|
24
|
+
"<%= j line_item.variant.product.name %>",
|
25
|
+
"",
|
26
|
+
"<%= line_item.price %>",
|
27
|
+
"<%= line_item.quantity %>"
|
28
|
+
]);
|
29
|
+
<% end %>
|
30
|
+
_gaq.push(['_trackTrans']);
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
(function() {
|
34
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
35
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
36
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
37
|
+
})();
|
38
|
+
<% end %>
|
39
|
+
<% end %>
|