camaleon_ecommerce 1.2.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/images/plugins/ecommerce/switch.png +0 -0
- data/app/assets/javascripts/plugins/ecommerce/admin_product.js.coffee +1 -1
- data/app/assets/javascripts/plugins/ecommerce/admin_settings.js +16 -0
- data/app/assets/javascripts/plugins/ecommerce/cart.js +1 -0
- data/app/assets/javascripts/plugins/ecommerce/jquery.multi-select.js +535 -0
- data/app/assets/stylesheets/plugins/ecommerce/multi-select.css.scss +94 -0
- data/app/controllers/plugins/ecommerce/admin/orders_controller.rb +37 -20
- data/app/controllers/plugins/ecommerce/admin/settings_controller.rb +2 -2
- data/app/controllers/plugins/ecommerce/front/checkout_controller.rb +16 -15
- data/app/decorators/plugins/ecommerce/cart_decorator.rb +19 -0
- data/app/decorators/plugins/ecommerce/order_decorator.rb +70 -0
- data/app/decorators/plugins/ecommerce/product_decorator.rb +16 -9
- data/app/decorators/plugins/ecommerce/product_item_decorator.rb +5 -1
- data/app/helpers/plugins/ecommerce/ecommerce_email_helper.rb +60 -59
- data/app/helpers/plugins/ecommerce/ecommerce_functions_helper.rb +5 -10
- data/app/helpers/plugins/ecommerce/ecommerce_helper.rb +12 -3
- data/app/models/plugins/ecommerce/cart.rb +3 -25
- data/app/models/plugins/ecommerce/order.rb +0 -21
- data/app/models/plugins/ecommerce/payment_method.rb +4 -0
- data/app/models/plugins/ecommerce/shipping_method.rb +4 -1
- data/app/services/plugins/ecommerce/cart_service.rb +0 -9
- data/app/views/plugins/ecommerce/admin/orders/index.html.erb +47 -51
- data/app/views/plugins/ecommerce/admin/orders/show.html.erb +1 -1
- data/app/views/plugins/ecommerce/admin/payment_methods/form.html.erb +2 -6
- data/app/views/plugins/ecommerce/admin/payment_methods/index.html.erb +4 -6
- data/app/views/plugins/ecommerce/admin/settings/index.html.erb +60 -20
- data/app/views/plugins/ecommerce/admin/shipping_methods/form.html.erb +1 -5
- data/app/views/plugins/ecommerce/admin/shipping_methods/index.html.erb +2 -4
- data/app/views/plugins/ecommerce/front/checkout/cart_index.html.erb +2 -2
- data/app/views/plugins/ecommerce/front/checkout/index.html.erb +1 -1
- data/app/views/plugins/ecommerce/front/login.html.erb +1 -1
- data/app/views/plugins/ecommerce/front/orders/index.html.erb +2 -2
- data/app/views/plugins/ecommerce/front/orders/show.html.erb +13 -14
- data/app/views/plugins/ecommerce/partials/checkout/_details.html.erb +1 -1
- data/app/views/plugins/ecommerce/partials/checkout/_payments.html.erb +116 -110
- data/app/views/plugins/ecommerce/partials/checkout/_products_detail.html.erb +5 -2
- data/app/views/plugins/ecommerce/partials/checkout/_user_info.html.erb +0 -1
- data/app/views/plugins/ecommerce/partials/email/_billing_address.html.erb +11 -0
- data/app/views/plugins/ecommerce/partials/email/_product_table.html.erb +46 -0
- data/app/views/plugins/ecommerce/partials/email/_shipping_address.html.erb +11 -0
- data/app/views/{plugins/ecommerce/partials → post_types/commerce}/_cart_widget.html.erb +0 -0
- data/app/views/post_types/commerce/_product_info.html.erb +30 -32
- data/app/views/post_types/commerce/single.html.erb +9 -13
- data/config/camaleon_plugin.json +2 -1
- data/config/custom_models.rb +43 -0
- data/config/locales/en.yml +0 -1
- data/config/locales/es.yml +69 -7
- data/config/routes.rb +1 -0
- data/db/migrate/20161213222142_add_invoice_number.rb +6 -0
- data/db/migrate/20161214224919_remove_ecommerce_stock_field.rb +7 -0
- data/lib/ecommerce/engine.rb +4 -2
- data/lib/ecommerce/version.rb +1 -1
- metadata +58 -15
- data/app/assets/javascripts/plugins/ecommerce/jquery.creditCardValidator.js +0 -208
- data/app/services/plugins/ecommerce/order_service.rb +0 -26
- data/app/views/camaleon_cms/html_mailer/order_canceled.html.erb +0 -2
- data/app/views/camaleon_cms/html_mailer/order_confirmed.html.erb +0 -2
- data/app/views/camaleon_cms/html_mailer/order_received.html.erb +0 -5
- data/app/views/camaleon_cms/html_mailer/order_received_admin.html.erb +0 -3
- data/app/views/camaleon_cms/html_mailer/order_shipped.html.erb +0 -2
- data/app/views/camaleon_cms/html_mailer/recovery_cart.html.erb +0 -4
@@ -1,3 +1,4 @@
|
|
1
|
+
<%= content_tag :div, "<small><i>#{@cart.shipping_method.description.translate}</i></small>".html_safe, class: 'shipping_method_descr text-right' if @cart.shipping_method_id.present? %>
|
1
2
|
<div id="totals_section">
|
2
3
|
<h3><%= t('.total', default: 'Total') %></h3>
|
3
4
|
<table class="table table-bordered">
|
@@ -10,10 +11,12 @@
|
|
10
11
|
<th id="tax_col"><%= t('.tax', default: 'Tax') %></th>
|
11
12
|
<th id="subtotal_col"><%= t('.subtotal', default: 'Sub Total') %></th>
|
12
13
|
</tr>
|
13
|
-
<% @cart.product_items.decorate.each do |item|
|
14
|
+
<% @cart.product_items.decorate.each do |item| %>
|
14
15
|
<tr>
|
15
16
|
<td><%= item.qty %></td>
|
16
|
-
<td
|
17
|
+
<td>
|
18
|
+
<%= link_to(item.the_title, item.the_url) %>
|
19
|
+
</td>
|
17
20
|
<td><%= item.the_price %></td>
|
18
21
|
<td><%= item.the_tax %></td>
|
19
22
|
<td><%= item.the_sub_total %></td>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% detail = order.get_meta("billing_address", {}) %>
|
2
|
+
<ul class="ec-list-orders-address">
|
3
|
+
<li><strong><%= t('.address', default: 'Address') %>1:</strong> <%= detail[:address1] %></li>
|
4
|
+
<li><strong><%= t('.address', default: 'Address') %>2:</strong> <%= detail[:address2] %></li>
|
5
|
+
<li><strong><%= t('.city', default: 'City') %>:</strong> <%= detail[:city] %></li>
|
6
|
+
<li><strong><%= t('.state', default: 'State') %>:</strong> <%= detail[:state] %></li>
|
7
|
+
<li><strong><%= t('.zip_code', default: 'Zip code') %>:</strong> <%= detail[:zip] %></li>
|
8
|
+
<li><strong><%= t('.country', default: 'Country') %>:</strong> <%= detail[:country] %></li>
|
9
|
+
<li><strong><%= t('.phone_number', default: 'Phone Number') %>:</strong> <%= detail[:phone_number] %>
|
10
|
+
</li>
|
11
|
+
</ul>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<table style="width: 100%;">
|
2
|
+
<tbody>
|
3
|
+
<tr>
|
4
|
+
<th><%= t('.qty', default: 'Quantity') %></th>
|
5
|
+
<th><%= t('.item', default: 'Item') %></th>
|
6
|
+
<th><%= t('.price', default: 'Price') %></th>
|
7
|
+
|
8
|
+
<th><%= t('.tax', default: 'Tax') %></th>
|
9
|
+
<th><%= t('.subtotal', default: 'Sub Total') %></th>
|
10
|
+
</tr>
|
11
|
+
<% order.product_items.decorate.each do |item| %>
|
12
|
+
<tr>
|
13
|
+
<td><%= item.qty %></td>
|
14
|
+
<td><%= link_to(item.cache_the_title, item.the_url) %></td>
|
15
|
+
<td><%= item.cache_the_price %></td>
|
16
|
+
<td><%= item.cache_the_tax %></td>
|
17
|
+
<td><%= item.cache_the_sub_total %></td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
<tr>
|
21
|
+
<td colspan="2"></td>
|
22
|
+
<td colspan="2" class="text-right"><%= t('.total_excl', default: 'Total (excluding Tax)') %> </td>
|
23
|
+
<td><%= order.cache_the_sub_total %></td>
|
24
|
+
</tr>
|
25
|
+
<tr>
|
26
|
+
<td colspan="2"></td>
|
27
|
+
<td colspan="2" class="text-right"><%= t('.tax', default: 'Tax') %></td>
|
28
|
+
<td id="tax_total"><%= order.cache_the_tax %></td>
|
29
|
+
</tr>
|
30
|
+
<tr>
|
31
|
+
<td colspan="2"></td>
|
32
|
+
<td colspan="2" class="text-right"><%= t('.discount', default: 'Discount') %></td>
|
33
|
+
<td><%= order.cache_the_discounts %></td>
|
34
|
+
</tr>
|
35
|
+
<tr>
|
36
|
+
<td colspan="2"></td>
|
37
|
+
<td colspan="2" class="text-right"><%= t('.total_shipping', default: 'Total shipping') %></td>
|
38
|
+
<td><%= order.cache_the_shipping %></td>
|
39
|
+
</tr>
|
40
|
+
<tr>
|
41
|
+
<td colspan="2"></td>
|
42
|
+
<td colspan="2" class="text-right"><%= t('.total_price', default: 'Total Price') %></td>
|
43
|
+
<td><%= order.cache_the_total %></td>
|
44
|
+
</tr>
|
45
|
+
</tbody>
|
46
|
+
</table>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% detail = order.get_meta("shipping_address", {}) %>
|
2
|
+
<ul class="ec-list-orders-address">
|
3
|
+
<li><strong><%= t('.address', default: 'Address') %>1:</strong> <%= detail[:address1] %></li>
|
4
|
+
<li><strong><%= t('.address', default: 'Address') %>2:</strong> <%= detail[:address2] %></li>
|
5
|
+
<li><strong><%= t('.city', default: 'City') %>:</strong> <%= detail[:city] %></li>
|
6
|
+
<li><strong><%= t('.state', default: 'State') %>:</strong> <%= detail[:state] %></li>
|
7
|
+
<li><strong><%= t('.zip_code', default: 'Zip code') %>:</strong> <%= detail[:zip] %></li>
|
8
|
+
<li><strong><%= t('.country', default: 'Country') %>:</strong> <%= detail[:country] %></li>
|
9
|
+
<li><strong><%= t('.phone_number', default: 'Phone Number') %>:</strong> <%= detail[:phone_number] %>
|
10
|
+
</li>
|
11
|
+
</ul>
|
File without changes
|
@@ -7,39 +7,37 @@
|
|
7
7
|
<hr/>
|
8
8
|
<p><%= product.the_excerpt %></p>
|
9
9
|
<hr/>
|
10
|
-
|
11
|
-
<% if product.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
<
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
10
|
+
<%= form_tag(plugins_ecommerce_checkout_cart_add_path, :method => "post", :class => "form") do %>
|
11
|
+
<% if product.is_variation_product? %>
|
12
|
+
<div class="form-group">
|
13
|
+
<%= label_tag :variation_id %>
|
14
|
+
<select class="form-control required" name="variation_id" id="product_variation_id">
|
15
|
+
<% product.product_variations.each_with_index do |variation, index| %>
|
16
|
+
<option data-sku="<%= variation.sku %>" <%= 'selected' if params[:variation_id].to_s == variation.id.to_s %> <%= 'data-disabled="true"' if !product.in_stock?(variation.id) %> data-price="<%= product.the_price(variation.id) %>" value="<%= variation.id %>"><%= product.the_variation_title(variation.id) %></option>
|
17
|
+
<% end %>
|
18
|
+
</select>
|
19
|
+
</div>
|
20
|
+
<script>
|
21
|
+
jQuery(function(){
|
22
|
+
var panel = $('#product_view');
|
23
|
+
panel.find('#product_variation_id').change(function(){
|
24
|
+
var op = $(this).find('option:selected');
|
25
|
+
panel.find('#product_sku').html(op.attr('data-sku'));
|
26
|
+
panel.find('#product_price').html(op.attr('data-price'));
|
27
|
+
panel.find('#e_add_to_cart_field_group input, button').prop('disabled', !!op.attr('data-disabled'))
|
28
|
+
panel.find('#ecommerce-product-slider .carousel-indicators li:eq('+$(this).children().index(op)+')').click();
|
29
|
+
}).trigger('change');
|
30
|
+
});
|
31
|
+
</script>
|
32
|
+
<% end %>
|
33
|
+
<% if product.in_stock? %>
|
34
|
+
<div class="input-group" id="e_add_to_cart_field_group">
|
35
|
+
<span class="input-group-addon"><%= t('plugins.ecommerce.single.qty', default: 'Qty') %></span>
|
36
|
+
<%= number_field :cart, :qty, class: 'form-control', value: 1, min: 0 %>
|
37
|
+
<%= hidden_field :cart, :product_id, value: product.id %>
|
38
|
+
<span class="input-group-btn"><button class="btn btn-default" type="submit"><i class="fa fa-shopping-cart"></i> <%= t('plugins.ecommerce.single.add_to_cart', default: 'Add to cart') %></button></span>
|
39
|
+
</div>
|
40
40
|
<% else %>
|
41
41
|
<p><%= t('plugins.ecommerce.single.noavailable_items', default: 'No items available') %></p>
|
42
42
|
<% end %>
|
43
|
-
<% else %>
|
44
|
-
<p><%= t('plugins.ecommerce.single.no_stock', default: 'This product is not in stock') %></p>
|
45
43
|
<% end %>
|
@@ -1,20 +1,16 @@
|
|
1
|
-
<% args={custom_slider: nil, custom_footer: nil, extra_footer: nil, custom_sidebar: nil,
|
2
|
-
|
3
|
-
<%= render plugin_view('partials/cart_widget') %>
|
4
|
-
<% else %>
|
5
|
-
<%= raw args[:custom_cart_widget] %>
|
6
|
-
<% end %>
|
1
|
+
<% args={custom_slider: nil, custom_footer: nil, extra_footer: nil, custom_sidebar: nil, product: @post}; hooks_run('ecommerce_product_page', args) # permit custom footer %>
|
2
|
+
<%= render 'post_types/commerce/cart_widget' %>
|
7
3
|
<div class="row">
|
8
4
|
<div class="col-md-9 post-view">
|
9
5
|
<article class="post-content" id="product_view">
|
10
6
|
<div class="row">
|
11
7
|
<div class="col-md-6">
|
12
8
|
<% unless args[:custom_slider].present? %>
|
13
|
-
<div id="
|
9
|
+
<div id="ecommerce-product-slider" class="carousel slide" data-ride="carousel" data-interval="false">
|
14
10
|
<!-- Indicators -->
|
15
11
|
<ol class="carousel-indicators">
|
16
12
|
<% @post.the_photos.each_with_index do |pthoto, index| %>
|
17
|
-
<li data-target="#
|
13
|
+
<li data-target="#ecommerce-product-slider" data-slide-to="<%= index %>" class="<%= 'active' if index == 0 %>"></li>
|
18
14
|
<% end %>
|
19
15
|
</ol>
|
20
16
|
|
@@ -28,11 +24,11 @@
|
|
28
24
|
</div>
|
29
25
|
|
30
26
|
<!-- Controls -->
|
31
|
-
<a class="left carousel-control" href="#
|
27
|
+
<a class="left carousel-control" href="#ecommerce-product-slider" role="button" data-slide="prev">
|
32
28
|
<span class="glyphicon glyphicon-chevron-left fa fa-chevron-left" aria-hidden="true"></span>
|
33
29
|
<span class="sr-only">Previous</span>
|
34
30
|
</a>
|
35
|
-
<a class="right carousel-control" href="#
|
31
|
+
<a class="right carousel-control" href="#ecommerce-product-slider" role="button" data-slide="next">
|
36
32
|
<span class="glyphicon glyphicon-chevron-right fa fa-chevron-right " aria-hidden="true"></span>
|
37
33
|
<span class="sr-only">Next</span>
|
38
34
|
</a>
|
@@ -49,14 +45,14 @@
|
|
49
45
|
|
50
46
|
<% unless args[:custom_footer].present? %>
|
51
47
|
<div class="row">
|
52
|
-
<div class="col-md-
|
48
|
+
<div class="col-md-12">
|
53
49
|
<h3><%= t('plugins.ecommerce.single.descr', default: 'Description') %></h3>
|
54
50
|
<div class="item-content">
|
55
51
|
<%= raw @post.the_content %>
|
56
52
|
</div>
|
57
53
|
</div>
|
58
|
-
<% if (attrs = @post.the_attribute_fields('ecommerce_attrs').to_a).present? %>
|
59
|
-
<div class="col-md-
|
54
|
+
<% if (attrs = @post.the_attribute_fields('ecommerce_attrs').to_a).present? && attrs.map{|k,v| v.present? }.any? %>
|
55
|
+
<div class="col-md-12">
|
60
56
|
<h3><%= t('plugins.ecommerce.single.attrs', default: 'Attributes') %></h3>
|
61
57
|
<table class="table table-bordered">
|
62
58
|
<% attrs.each_with_index do |attr, index| %>
|
data/config/camaleon_plugin.json
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
],
|
31
31
|
"post_form_custom_html": ["ecommerce_admin_product_form"],
|
32
32
|
"created_post": ["ecommerce_admin_product_saved"],
|
33
|
-
"updated_post": ["ecommerce_admin_product_saved"]
|
33
|
+
"updated_post": ["ecommerce_admin_product_saved"],
|
34
|
+
"email_late": ["ecommerce_admin_before_email_send"]
|
34
35
|
}
|
35
36
|
}
|
data/config/custom_models.rb
CHANGED
@@ -24,6 +24,49 @@ Rails.application.config.to_prepare do
|
|
24
24
|
end
|
25
25
|
payment_method
|
26
26
|
end
|
27
|
+
|
28
|
+
# return the invoice number to start
|
29
|
+
def e_invoice_number_from
|
30
|
+
(e_settings[:invoice_number_from] || 1000000000).to_s.to_i
|
31
|
+
end
|
32
|
+
|
33
|
+
# return the invoice number to end
|
34
|
+
def e_invoice_number_to
|
35
|
+
(e_settings[:invoice_number_to] || 9999999999).to_s.to_i
|
36
|
+
end
|
37
|
+
|
38
|
+
# set a new value for of a ecommerce setting
|
39
|
+
def e_set_setting(key, value)
|
40
|
+
set_option(key, value, '_setting_ecommerce')
|
41
|
+
end
|
42
|
+
|
43
|
+
# return the settings for ecommerce
|
44
|
+
def e_settings(new_settings = nil)
|
45
|
+
set_meta('_setting_ecommerce', new_settings) if new_settings.present?
|
46
|
+
get_meta("_setting_ecommerce", {})
|
47
|
+
end
|
48
|
+
|
49
|
+
# return the email template for ecommerce events
|
50
|
+
def e_email_for(key = 'email_order_paid')
|
51
|
+
(e_settings[key]) || case key.to_s
|
52
|
+
when 'email_order_received'
|
53
|
+
'<h1>ORDER SUMMARY {number}</h1> Dear {name}, please review and retain the following order information for your records.<br>{order_table}'
|
54
|
+
when 'email_order_confirmed'
|
55
|
+
'<h1>ORDER CONFIRMED {number}</h1> Dear {name}, your order has been confirmed. Please retain the following order information for your records<br>{order_table}'
|
56
|
+
when 'email_order_shipped'
|
57
|
+
'<h1>SHIPMENT SUMMARY</h1> Dear {name}, your order {number} has been shipped. Shipped method: {shipping_name} <br>{order_table}<br>{tracking_url}'
|
58
|
+
when 'email_order_cancelled'
|
59
|
+
'<h1>ORDER {number} CANCELLED</h1> Dear {name}, your order has been cancelled. Please retain this cancellation information for your records. <br>{order_table}'
|
60
|
+
when 'email_order_invoice'
|
61
|
+
'<table style="width: 100%;"><tr><td><h1>INVOICE #{invoice_number}</h1> <h4>Order #{number}</h4><div>{current_date}</div></td><td style="text-align: center;"><img src="http://camaleon.tuzitio.com/media/132/logo2.png"></td></tr></table> <table style="width: 100%;"><tr><td><strong>Billing Address</strong><br>{billing_info}</td><td><strong>Shipping Address</strong><br>{shipping_info}</td></tr><tr><td colspan="2">{order_table}</td></tr></table>'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# return all keys accepted to replace in ecommerce emails
|
66
|
+
def e_email_keys
|
67
|
+
'{root_url} => site url, {date} => order date, {number} => order number, {name} => client first name, {full_name}, {order_table} => table of products of the order, {shipping_name} => shipping method name, {tracking_url} => the url of tracking, {shipping_info} => Shipping info, {billing_info} => Billing info, {invoice_number} => Sequential Invoice Number, {url} => Order Url'
|
68
|
+
end
|
69
|
+
|
27
70
|
end
|
28
71
|
|
29
72
|
CamaleonCms::User.class_eval do
|
data/config/locales/en.yml
CHANGED
data/config/locales/es.yml
CHANGED
@@ -54,6 +54,8 @@ es:
|
|
54
54
|
list_payment_methods: "Lista Métodos de Pago"
|
55
55
|
list_coupons: "Lista Cupones"
|
56
56
|
mark_Shipped: "Marcar como enviado"
|
57
|
+
variations:
|
58
|
+
not_deletable_product_variations: 'Algunos variaciones de producto no pueden ser eliminados'
|
57
59
|
message:
|
58
60
|
consignment_number: "Use {{numero_envio}} para insertar el no."
|
59
61
|
error_paypal_values: "Error Valores Paypal"
|
@@ -68,6 +70,7 @@ es:
|
|
68
70
|
order_accepted: 'Orden aceptado'
|
69
71
|
order_shipped: 'Orden enviado'
|
70
72
|
order_canceled: 'Orden cancelado'
|
73
|
+
order_email_resent: 'Correo Re-Enviado'
|
71
74
|
order_updated: 'Orden actualizado'
|
72
75
|
not_deletable_product_variations: 'Algunas variaciones de producto no pueden ser eliminados.'
|
73
76
|
not_deletable_product: 'El Producto no puede ser eliminado porque existen órdenes referenciadas.'
|
@@ -228,14 +231,45 @@ es:
|
|
228
231
|
message: 'Tu orden %{order} a sido cancelado por la siguiente razon: %{message}'
|
229
232
|
|
230
233
|
email:
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
234
|
+
invoice_number_exceeded_subject: 'Número de factura excedido.'
|
235
|
+
invoice_number_exceeded_body: 'El número de factura %{number} fué excedido. Por favor revise las configuraciones de comercio electrónico.'
|
236
|
+
order_received_label: 'Orden Recibido'
|
237
|
+
order_confirmed_label: 'Orden Confirmado'
|
238
|
+
order_bank_confirmed_label: 'Orden Confirmado Por Banco'
|
239
|
+
order_on_delivery_confirmed_label: 'Orden Confirmado Contra Entrega'
|
240
|
+
order_shipped_label: 'Orden Enviado'
|
241
|
+
order_cancelled_label: 'Orden Cancelado'
|
237
242
|
|
238
243
|
admin:
|
244
|
+
settings:
|
245
|
+
index:
|
246
|
+
title: 'Configuración de Comercio Clectrónico'
|
247
|
+
keywords_to_use: 'Palabras Clave para usar'
|
248
|
+
email_settings: 'Email Settings'
|
249
|
+
system_currency_unit: 'Tipo de Moneda para el administrador'
|
250
|
+
currency_weight: 'Unidad de Peso'
|
251
|
+
invoice_number_from: 'Número de Inicio de facturación'
|
252
|
+
invoice_number_to: 'Número Final de facturación'
|
253
|
+
shipping_countries: 'Paises para envío'
|
254
|
+
available_currencies_unit: 'Unidades de Moneda disponibles para visitantes'
|
255
|
+
email_order_received: 'Orden Recibido'
|
256
|
+
email_order_confirmed: 'Orden Confirmado'
|
257
|
+
email_order_shipped: 'Orden Enviado'
|
258
|
+
email_order_cancelled: 'Orden Cancelado'
|
259
|
+
email_order_invoice: 'Formato de Factura'
|
260
|
+
select_all: 'Seleccionar todo'
|
261
|
+
deselect_all: 'Des seleccionar todo'
|
262
|
+
|
263
|
+
|
264
|
+
orders:
|
265
|
+
index:
|
266
|
+
search_field: 'Correo, Código o Cupón'
|
267
|
+
created_after: 'Creado despues de'
|
268
|
+
created_before: 'Creado antes de'
|
269
|
+
search_status: 'Estado'
|
270
|
+
search_user: 'Usuario'
|
271
|
+
resend_email: 'Reenviar Correo'
|
272
|
+
|
239
273
|
product_attributes:
|
240
274
|
group_label: 'Etiqueta de Grupo'
|
241
275
|
label: 'Etiqueta'
|
@@ -354,7 +388,8 @@ es:
|
|
354
388
|
details: 'Detalles'
|
355
389
|
shipping_address: 'Dirección de envío'
|
356
390
|
created_at: 'Fecha de Creación'
|
357
|
-
received_at: '
|
391
|
+
received_at: 'Fecha de Recepción'
|
392
|
+
invoice_number: 'Número de Factura'
|
358
393
|
shipped_at: 'Enviado En'
|
359
394
|
city: 'Ciudad'
|
360
395
|
state: 'Estado'
|
@@ -394,6 +429,33 @@ es:
|
|
394
429
|
|
395
430
|
|
396
431
|
partials:
|
432
|
+
email:
|
433
|
+
billing_address:
|
434
|
+
address: 'Dirección'
|
435
|
+
city: 'Ciudad'
|
436
|
+
state: 'Estado'
|
437
|
+
zip_code: 'Código Zip'
|
438
|
+
country: 'País'
|
439
|
+
phone_number: 'Número de Teléfono'
|
440
|
+
shipping_address:
|
441
|
+
address: 'Dirección'
|
442
|
+
city: 'Ciudad'
|
443
|
+
state: 'Estado'
|
444
|
+
zip_code: 'Código Zip'
|
445
|
+
country: 'País'
|
446
|
+
phone_number: 'Número de Teléfono'
|
447
|
+
|
448
|
+
product_table:
|
449
|
+
qty: 'Cantidad'
|
450
|
+
item: 'Item'
|
451
|
+
price: 'Precio'
|
452
|
+
tax: 'Impuestos'
|
453
|
+
subtotal: 'Sub Total'
|
454
|
+
total_excl: 'Total (excluyendo impuestos)'
|
455
|
+
discount: 'Descuento'
|
456
|
+
total_shipping: 'Total envío'
|
457
|
+
total_price: 'Precio Total'
|
458
|
+
|
397
459
|
checkout:
|
398
460
|
user_info:
|
399
461
|
firstname: 'Nombre(s)'
|
data/config/routes.rb
CHANGED
@@ -47,6 +47,7 @@ Rails.application.routes.draw do
|
|
47
47
|
post 'product_attributes' => 'admin#save_product_attributes'
|
48
48
|
resources :orders, controller: 'admin/orders' do
|
49
49
|
get 'mark_accepted'
|
50
|
+
get 'resend_email'
|
50
51
|
get 'mark_bank_confirmed'
|
51
52
|
post 'mark_shipped'
|
52
53
|
post 'mark_canceled'
|
data/lib/ecommerce/engine.rb
CHANGED
data/lib/ecommerce/version.rb
CHANGED