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.
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