camaleon_ecommerce 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/plugins/ecommerce/switch.png +0 -0
  3. data/app/assets/javascripts/plugins/ecommerce/admin_product.js.coffee +1 -1
  4. data/app/assets/javascripts/plugins/ecommerce/admin_settings.js +16 -0
  5. data/app/assets/javascripts/plugins/ecommerce/cart.js +1 -0
  6. data/app/assets/javascripts/plugins/ecommerce/jquery.multi-select.js +535 -0
  7. data/app/assets/stylesheets/plugins/ecommerce/multi-select.css.scss +94 -0
  8. data/app/controllers/plugins/ecommerce/admin/orders_controller.rb +37 -20
  9. data/app/controllers/plugins/ecommerce/admin/settings_controller.rb +2 -2
  10. data/app/controllers/plugins/ecommerce/front/checkout_controller.rb +16 -15
  11. data/app/decorators/plugins/ecommerce/cart_decorator.rb +19 -0
  12. data/app/decorators/plugins/ecommerce/order_decorator.rb +70 -0
  13. data/app/decorators/plugins/ecommerce/product_decorator.rb +16 -9
  14. data/app/decorators/plugins/ecommerce/product_item_decorator.rb +5 -1
  15. data/app/helpers/plugins/ecommerce/ecommerce_email_helper.rb +60 -59
  16. data/app/helpers/plugins/ecommerce/ecommerce_functions_helper.rb +5 -10
  17. data/app/helpers/plugins/ecommerce/ecommerce_helper.rb +12 -3
  18. data/app/models/plugins/ecommerce/cart.rb +3 -25
  19. data/app/models/plugins/ecommerce/order.rb +0 -21
  20. data/app/models/plugins/ecommerce/payment_method.rb +4 -0
  21. data/app/models/plugins/ecommerce/shipping_method.rb +4 -1
  22. data/app/services/plugins/ecommerce/cart_service.rb +0 -9
  23. data/app/views/plugins/ecommerce/admin/orders/index.html.erb +47 -51
  24. data/app/views/plugins/ecommerce/admin/orders/show.html.erb +1 -1
  25. data/app/views/plugins/ecommerce/admin/payment_methods/form.html.erb +2 -6
  26. data/app/views/plugins/ecommerce/admin/payment_methods/index.html.erb +4 -6
  27. data/app/views/plugins/ecommerce/admin/settings/index.html.erb +60 -20
  28. data/app/views/plugins/ecommerce/admin/shipping_methods/form.html.erb +1 -5
  29. data/app/views/plugins/ecommerce/admin/shipping_methods/index.html.erb +2 -4
  30. data/app/views/plugins/ecommerce/front/checkout/cart_index.html.erb +2 -2
  31. data/app/views/plugins/ecommerce/front/checkout/index.html.erb +1 -1
  32. data/app/views/plugins/ecommerce/front/login.html.erb +1 -1
  33. data/app/views/plugins/ecommerce/front/orders/index.html.erb +2 -2
  34. data/app/views/plugins/ecommerce/front/orders/show.html.erb +13 -14
  35. data/app/views/plugins/ecommerce/partials/checkout/_details.html.erb +1 -1
  36. data/app/views/plugins/ecommerce/partials/checkout/_payments.html.erb +116 -110
  37. data/app/views/plugins/ecommerce/partials/checkout/_products_detail.html.erb +5 -2
  38. data/app/views/plugins/ecommerce/partials/checkout/_user_info.html.erb +0 -1
  39. data/app/views/plugins/ecommerce/partials/email/_billing_address.html.erb +11 -0
  40. data/app/views/plugins/ecommerce/partials/email/_product_table.html.erb +46 -0
  41. data/app/views/plugins/ecommerce/partials/email/_shipping_address.html.erb +11 -0
  42. data/app/views/{plugins/ecommerce/partials → post_types/commerce}/_cart_widget.html.erb +0 -0
  43. data/app/views/post_types/commerce/_product_info.html.erb +30 -32
  44. data/app/views/post_types/commerce/single.html.erb +9 -13
  45. data/config/camaleon_plugin.json +2 -1
  46. data/config/custom_models.rb +43 -0
  47. data/config/locales/en.yml +0 -1
  48. data/config/locales/es.yml +69 -7
  49. data/config/routes.rb +1 -0
  50. data/db/migrate/20161213222142_add_invoice_number.rb +6 -0
  51. data/db/migrate/20161214224919_remove_ecommerce_stock_field.rb +7 -0
  52. data/lib/ecommerce/engine.rb +4 -2
  53. data/lib/ecommerce/version.rb +1 -1
  54. metadata +58 -15
  55. data/app/assets/javascripts/plugins/ecommerce/jquery.creditCardValidator.js +0 -208
  56. data/app/services/plugins/ecommerce/order_service.rb +0 -26
  57. data/app/views/camaleon_cms/html_mailer/order_canceled.html.erb +0 -2
  58. data/app/views/camaleon_cms/html_mailer/order_confirmed.html.erb +0 -2
  59. data/app/views/camaleon_cms/html_mailer/order_received.html.erb +0 -5
  60. data/app/views/camaleon_cms/html_mailer/order_received_admin.html.erb +0 -3
  61. data/app/views/camaleon_cms/html_mailer/order_shipped.html.erb +0 -2
  62. 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| product = item.product.decorate %>
14
+ <% @cart.product_items.decorate.each do |item| %>
14
15
  <tr>
15
16
  <td><%= item.qty %></td>
16
- <td><%= link_to(item.the_title, product.the_url) %></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>
@@ -47,7 +47,6 @@
47
47
  <div id="shipping_address" class="col-md-6">
48
48
  <h3>
49
49
  <%= t('.shipping_address') %>
50
- <small><a href="#" id="ec_copy">(<%= t('.copy_address', default: 'copy from billing') %>)</a></small>
51
50
  </h3>
52
51
 
53
52
  <div class="form-group">
@@ -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>
@@ -7,39 +7,37 @@
7
7
  <hr/>
8
8
  <p><%= product.the_excerpt %></p>
9
9
  <hr/>
10
- <% if product.in_stock? %>
11
- <% if product.the_qty_real.to_i > 0 || product.is_variation_product? %>
12
- <%= form_tag(plugins_ecommerce_checkout_cart_add_path, :method => "post", :class => "form") do %>
13
- <% if product.is_variation_product? %>
14
- <div class="form-group">
15
- <%= label_tag :variation_id %>
16
- <select class="form-control required" name="variation_id" id="product_variation_id">
17
- <% product.product_variations.each_with_index do |variation, index| %>
18
- <option data-sku="<%= variation.sku %>" <%= 'selected' if index == 0 %> <%= 'disabled' if !product.in_stock?(variation.id) || product.the_qty_real(variation.id) <= 0 %> data-price="<%= product.the_price(variation.id) %>" value="<%= variation.id %>"><%= product.the_variation_title(variation.id) %></option>
19
- <% end %>
20
- </select>
21
- </div>
22
- <script>
23
- jQuery(function(){
24
- var panel = $('#product_view');
25
- panel.find('#product_variation_id').change(function(){ var op = $(this).find('option:selected'); panel.find('#product_sku').html(op.attr('data-sku')); panel.find('#product_price').html(op.attr('data-price')); }).trigger('change');
26
- if(panel.find('#product_variation_id option').not('[disabled]').length == 0){
27
- panel.find('#e_add_to_cart_field_group').html('<p><%= t('plugins.ecommerce.single.noavailable_items', default: 'No items available') %></p>')
28
- panel.find('#product_price').next().hide();
29
- }
30
- });
31
- </script>
32
- <% end %>
33
- <div class="input-group" id="e_add_to_cart_field_group">
34
- <span class="input-group-addon"><%= t('plugins.ecommerce.single.qty', default: 'Qty') %></span>
35
- <%= number_field :cart, :qty, class: 'form-control', value: 1, min: 0, max: product.the_qty_real.to_i %>
36
- <%= hidden_field :cart, :product_id, value: product.id %>
37
- <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>
38
- </div>
39
- <% end %>
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, custom_cart_widget: nil, product: @post}; hooks_run('ecommerce_product_page', args) # permit custom footer %>
2
- <% if args[:custom_cart_widget].nil? %>
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="carousel-example-generic" class="carousel slide" data-ride="carousel">
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="#carousel-example-generic" data-slide-to="<%= index %>" class="<%= 'active' if index == 0 %>"></li>
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="#carousel-example-generic" role="button" data-slide="prev">
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="#carousel-example-generic" role="button" data-slide="next">
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-6">
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-6">
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| %>
@@ -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
  }
@@ -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
@@ -14,7 +14,6 @@
14
14
  accepted: 'Accepted'
15
15
  coupons: 'Coupons'
16
16
  e_commerce: 'E-Commerce'
17
- e_commerce_settings: 'E-commerce Settings'
18
17
  e_mail_address: 'E-Mail Address'
19
18
  edit_tax_rate: 'Edit Tax Rate'
20
19
  edit_shipping_methods: 'Edit Shipping Method'
@@ -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
- order_received:
232
- subject: "Gracias por su compra"
233
- recovery_cart:
234
- subject: "Hemos observado que usted a dejado pendiente una compra."
235
- order_received_admin:
236
- subject: "Nueva Compra"
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: '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)'
@@ -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'
@@ -0,0 +1,6 @@
1
+ class AddInvoiceNumber < ActiveRecord::Migration
2
+ def change
3
+ add_column :plugins_ecommerce_orders, :invoice_number, :string, default: ''
4
+ add_column :plugins_ecommerce_orders, :invoice_path, :string, default: ''
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ class RemoveEcommerceStockField < ActiveRecord::Migration
2
+ def change
3
+ Cama::PostType.where(slug: 'commerce').each do |pt|
4
+ pt.get_field_object('ecommerce_stock').try(:destroy)
5
+ end
6
+ end
7
+ end
@@ -1,5 +1,7 @@
1
- require "country_select"
2
- require "activemerchant"
1
+ require 'country_select'
2
+ require 'ransack'
3
+ require 'wicked_pdf'
4
+ require 'activemerchant'
3
5
  module Ecommerce
4
6
  class Engine < ::Rails::Engine
5
7
  end
@@ -1,3 +1,3 @@
1
1
  module Ecommerce
2
- VERSION = '1.2.1'
2
+ VERSION = '2.0.0'
3
3
  end