solidus_tiny 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/.circleci/config.yml +53 -0
- data/.gem_release.yml +5 -0
- data/.github/stale.yml +1 -0
- data/.github_changelog_generator +2 -0
- data/.gitignore +21 -0
- data/.rspec +2 -0
- data/.rubocop.yml +5 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +48 -0
- data/LICENSE +26 -0
- data/README.md +73 -0
- data/Rakefile +7 -0
- data/app/controllers/spree/admin/orders/solidus_tiny/sellers_controller.rb +38 -0
- data/app/controllers/spree/admin/solidus_tiny/accounts_controller.rb +82 -0
- data/app/controllers/spree/admin/solidus_tiny/orders_controller.rb +20 -0
- data/app/jobs/solidus_tiny/application_job.rb +9 -0
- data/app/jobs/solidus_tiny/order_job.rb +10 -0
- data/app/jobs/solidus_tiny/upsert_sellers_job.rb +9 -0
- data/app/models/solidus_tiny/account.rb +8 -0
- data/app/models/solidus_tiny/event.rb +4 -0
- data/app/models/solidus_tiny/order.rb +129 -0
- data/app/models/solidus_tiny/payment_method.rb +4 -0
- data/app/models/solidus_tiny/seller.rb +44 -0
- data/app/models/solidus_tiny/shipping_method.rb +10 -0
- data/app/models/spree/permission_sets/tiny_seller_update.rb +9 -0
- data/app/subscribers/solidus_tiny/subscriber.rb +12 -0
- data/app/views/spree/admin/orders/solidus_tiny/sellers/edit.html.erb +19 -0
- data/app/views/spree/admin/shared/_order_submenu.html.erb +67 -0
- data/app/views/spree/admin/shared/_order_summary.html.erb +75 -0
- data/app/views/spree/admin/solidus_tiny/accounts/_form.html.erb +110 -0
- data/app/views/spree/admin/solidus_tiny/accounts/edit.html.erb +3 -0
- data/app/views/spree/admin/solidus_tiny/accounts/index.html.erb +54 -0
- data/app/views/spree/admin/solidus_tiny/accounts/new.html.erb +3 -0
- data/bin/console +17 -0
- data/bin/rails +7 -0
- data/bin/rails-engine +13 -0
- data/bin/rails-sandbox +16 -0
- data/bin/rake +7 -0
- data/bin/sandbox +76 -0
- data/bin/setup +8 -0
- data/config/locales/en.yml +5 -0
- data/config/locales/pt-BR.yml +5 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20240506185512_create_solidus_tiny_accounts.rb +11 -0
- data/db/migrate/20240507111938_create_solidus_tiny_sellers.rb +15 -0
- data/db/migrate/20240507112822_add_solidus_tiny_seller_id_to_orders.rb +5 -0
- data/db/migrate/20240507114823_create_solidus_tiny_shipping_methods.rb +15 -0
- data/db/migrate/20240507121424_create_solidus_tiny_payment_methods.rb +13 -0
- data/db/migrate/20240507181649_add_tiny_order_id_to_spree_orders.rb +5 -0
- data/db/migrate/20240507190528_create_solidus_tiny_events.rb +13 -0
- data/lib/generators/solidus_tiny/install/install_generator.rb +31 -0
- data/lib/generators/solidus_tiny/install/templates/initializer.rb +4 -0
- data/lib/solidus_tiny/configuration.rb +18 -0
- data/lib/solidus_tiny/engine.rb +38 -0
- data/lib/solidus_tiny/testing_support/factories.rb +4 -0
- data/lib/solidus_tiny/version.rb +5 -0
- data/lib/solidus_tiny.rb +7 -0
- data/solidus_tiny.gemspec +36 -0
- metadata +182 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
<%= render partial: 'spree/admin/shared/order_tabs', locals: { current: 'Vendedor' } %>
|
2
|
+
|
3
|
+
<% admin_breadcrumb("Vendedor") %>
|
4
|
+
|
5
|
+
<div data-order-number="<%= @order.number %>">
|
6
|
+
<div>
|
7
|
+
<fieldset class="no-border-bottom">
|
8
|
+
<legend>Vendedor</legend>
|
9
|
+
<%= form_with model: @order, url: admin_orders_solidus_tiny_update_seller_path(@order) do |form| %>
|
10
|
+
<%= form.select :seller_id, @sellers.pluck(:name, :id), { selected: @order.solidus_tiny_seller_id || @sellers.default&.id }, class:"custom-select fullwidth" %>
|
11
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
12
|
+
<%= form.submit t('spree.actions.update'), class: 'btn btn-primary mt-4' %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
</fieldset>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<%= render partial: 'spree/shared/error_messages', locals: { target: @order } %>
|
19
|
+
</div>
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<nav>
|
2
|
+
<ul class="tabs" data-hook="admin_order_tabs">
|
3
|
+
<% if (@order.shipments.count == 0 || @order.shipped_shipments.count == 0) %>
|
4
|
+
<li class="<%= "active" if current == "Cart" %>" data-hook='admin_order_tabs_order_details'>
|
5
|
+
<%= link_to t('spree.cart'), spree.cart_admin_order_url(@order) %>
|
6
|
+
</li>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% if checkout_steps.include?("address") %>
|
10
|
+
<li class="<%= "active" if (current == "Customer Details") %>" data-hook='admin_order_tabs_customer_details'>
|
11
|
+
<% if can?(:update, @order) %>
|
12
|
+
<%= link_to t('spree.customer'), spree.edit_admin_order_customer_url(@order) %>
|
13
|
+
<% else %>
|
14
|
+
<%= link_to t('spree.customer'), spree.admin_order_customer_url(@order) %>
|
15
|
+
<% end %>
|
16
|
+
</li>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<li class="<%= "active" if current == "Vendedor" %>" data-hook='admin_order_tabs_order_details'>
|
20
|
+
<%= link_to "Vendedor", admin_orders_solidus_tiny_seller_path(@order) %>
|
21
|
+
</li>
|
22
|
+
|
23
|
+
<li class="<%= "active" if current == "Shipments" %>" data-hook='admin_order_tabs_order_details'>
|
24
|
+
<%= link_to plural_resource_name(Spree::Shipment), spree.edit_admin_order_url(@order) %>
|
25
|
+
</li>
|
26
|
+
|
27
|
+
<% if can? :show, Spree::Adjustment %>
|
28
|
+
<li class="<%= "active" if current == "Adjustments" %>" data-hook='admin_order_tabs_adjustments'>
|
29
|
+
<%= link_to plural_resource_name(Spree::Adjustment), spree.admin_order_adjustments_url(@order) %>
|
30
|
+
</li>
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
<% if can?(:show, Spree::Payment) %>
|
34
|
+
<li class="<%= "active" if current == "Payments" %>" data-hook='admin_order_tabs_payments'>
|
35
|
+
<%= link_to plural_resource_name(Spree::Payment), spree.admin_order_payments_url(@order) %>
|
36
|
+
</li>
|
37
|
+
<% end %>
|
38
|
+
|
39
|
+
<% if !@order.completed? && can?(:update, @order) %>
|
40
|
+
<li class="<%= "active" if current == "Confirm" %>" data-hook='admin_order_tabs_confirm'>
|
41
|
+
<%= link_to t('spree.confirm'), spree.confirm_admin_order_url(@order) %>
|
42
|
+
</li>
|
43
|
+
<% end %>
|
44
|
+
|
45
|
+
<% if can? :show, Spree::ReturnAuthorization %>
|
46
|
+
<% if @order.completed? %>
|
47
|
+
<li class="tab <%= "active" if current == "Return Authorizations" %>" data-hook='admin_order_tabs_return_authorizations'>
|
48
|
+
<%= link_to t('spree.admin.tab.rma'), spree.admin_order_return_authorizations_url(@order) %>
|
49
|
+
</li>
|
50
|
+
<% end %>
|
51
|
+
<% end %>
|
52
|
+
|
53
|
+
<% if can? :show, Spree::CustomerReturn %>
|
54
|
+
<% if @order.completed? %>
|
55
|
+
<li class="<%= "active" if current == "Customer Returns" %>" data-hook='admin_order_tabs_customer_returns'>
|
56
|
+
<%= link_to plural_resource_name(Spree::CustomerReturn), spree.admin_order_customer_returns_url(@order) %>
|
57
|
+
</li>
|
58
|
+
<% end %>
|
59
|
+
<% end %>
|
60
|
+
|
61
|
+
<% if can?(:manage, Spree::OrderCancellations) && @order.inventory_units.cancelable.present? %>
|
62
|
+
<li class="<%= "active" if current == "Cancel Inventory" %>" data-hook='admin_order_tabs_cancel_inventory'>
|
63
|
+
<%= link_to t('spree.cancel_inventory'), spree.admin_order_cancellations_path(@order) %>
|
64
|
+
</li>
|
65
|
+
<% end %>
|
66
|
+
</ul>
|
67
|
+
</nav>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
<header id="order_tab_summary" data-hook>
|
3
|
+
<dl class="additional-info">
|
4
|
+
<dt class="order-state" id="order_status" data-hook><%= t('spree.status') %>:</dt>
|
5
|
+
<dd class="order-state">
|
6
|
+
<span class="pill pill-<%= @order.state %>">
|
7
|
+
<%= t(@order.state, scope: 'spree.order_state') %>
|
8
|
+
</span>
|
9
|
+
|
10
|
+
<% if @order.user.present? %>
|
11
|
+
<dt data-hook='admin_order_user_link'><%= t('spree.user') %>:</dt>
|
12
|
+
<dd id='order_user_link'><%= link_to @order.user.email, spree.edit_admin_user_path(@order.user) %></dd>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<dt data-hook='admin_order_tab_subtotal_title'><%= Spree::Order.human_attribute_name(:item_total) %>:</dt>
|
16
|
+
<dd id='item_total'><%= @order.display_item_total.to_html %></dd>
|
17
|
+
|
18
|
+
<% if checkout_steps.include?("delivery") %>
|
19
|
+
<dt class="order-shipment_total <%= "hidden" if @order.ship_total.zero? %>" data-hook='admin_order_tab_ship_total_title'><%= Spree::Order.human_attribute_name(:shipment_total) %>:</dt>
|
20
|
+
<dd class="order-shipment_total <%= "hidden" if @order.ship_total.zero? %>" id='ship_total'><%= @order.display_ship_total.to_html %></dd>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<dt class="order-included_tax_total <%= "hidden" if @order.included_tax_total.zero? %>" data-hook='admin_order_tab_included_tax_title'><%= Spree::Order.human_attribute_name(:included_tax_total) %>:</dt>
|
24
|
+
<dd class="order-included_tax_total <%= "hidden" if @order.included_tax_total.zero? %>" id='included_tax_total'><%= @order.display_included_tax_total.to_html %></dd>
|
25
|
+
|
26
|
+
<dt class="order-additional_tax_total <%= "hidden" if @order.additional_tax_total.zero? %>" data-hook='admin_order_tab_additional_tax_title'><%= Spree::Order.human_attribute_name(:additional_tax_total) %>:</dt>
|
27
|
+
<dd class="order-additional_tax_total <%= "hidden" if @order.additional_tax_total.zero? %>" id='additional_tax_total'><%= @order.display_additional_tax_total.to_html %></dd>
|
28
|
+
|
29
|
+
<dt data-hook='admin_order_tab_total_title'><%= Spree::Order.human_attribute_name(:total) %>:</dt>
|
30
|
+
<dd id='order_total'><%= @order.display_total.to_html %></dd>
|
31
|
+
|
32
|
+
<% if @order.shipment_state %>
|
33
|
+
<dt class="order-shipment_state"><%= Spree::Shipment.model_name.human %>: </dt>
|
34
|
+
<dd class="order-shipment_state" id='shipment_status'>
|
35
|
+
<span class="pill pill-<%= @order.shipment_state %>">
|
36
|
+
<%= t(@order.shipment_state, scope: 'spree.shipment_states') %>
|
37
|
+
</span>
|
38
|
+
</dd>
|
39
|
+
<% end %>
|
40
|
+
|
41
|
+
<% if @order.payment_state %>
|
42
|
+
<dt class="order-payment_state"><%= Spree::Payment.model_name.human %>: </dt>
|
43
|
+
<dd class="order-payment_state" id='payment_status'>
|
44
|
+
<span class="pill pill-<%= @order.payment_state %>">
|
45
|
+
<%= t(@order.payment_state, scope: 'spree.payment_states') %>
|
46
|
+
</span>
|
47
|
+
</dd>
|
48
|
+
<% end %>
|
49
|
+
|
50
|
+
<% if @order.completed? %>
|
51
|
+
<dt data-hook='admin_order_tab_date_completed_title'><%= Spree::Order.human_attribute_name(:completed_at) %>:</dt>
|
52
|
+
<dd id='date_complete'><%= pretty_time(@order.completed_at) %></dd>
|
53
|
+
<% end %>
|
54
|
+
|
55
|
+
<% if @order.approved? %>
|
56
|
+
<dt><%= Spree::Order.human_attribute_name(:approver) %></dt>
|
57
|
+
<dd><%= @order.approver.try(:email) || @order.approver_name %></dd>
|
58
|
+
<dt><%= Spree::Order.human_attribute_name(:approved_at) %></dt>
|
59
|
+
<dd><%= pretty_time(@order.approved_at) %></dd>
|
60
|
+
<% end %>
|
61
|
+
|
62
|
+
<% if @order.canceled? && @order.canceler && @order.canceled_at %>
|
63
|
+
<dt><%= Spree::Order.human_attribute_name(:canceler) %></dt>
|
64
|
+
<dd><%= @order.canceler.email %></dd>
|
65
|
+
<dt><%= Spree::Order.human_attribute_name(:canceled_at) %></dt>
|
66
|
+
<dd><%= pretty_time(@order.canceled_at) %></dd>
|
67
|
+
<% end %>
|
68
|
+
|
69
|
+
<% if @order.solidus_tiny_seller_id %>
|
70
|
+
<dt data-hook='admin_order_tab_seller_title'>Vendedor:</dt>
|
71
|
+
<dd id='seller'><%= ::SolidusTiny::Seller.find_by(id: @order.solidus_tiny_seller_id).name %></dd>
|
72
|
+
<% end %>
|
73
|
+
</dl>
|
74
|
+
|
75
|
+
</header>
|
@@ -0,0 +1,110 @@
|
|
1
|
+
<%= form_with model: tiny_account, url: form_url do |form| %>
|
2
|
+
<fieldset class="no-border-top">
|
3
|
+
<legend>
|
4
|
+
Dados da Conta
|
5
|
+
</legend>
|
6
|
+
<div class="row">
|
7
|
+
<div class="col-12">
|
8
|
+
<%= form.field_container :api_key do %>
|
9
|
+
<%= form.label :api_key, "API Key", class: 'required' %>
|
10
|
+
<%= form.text_field :api_key, required: true, class: 'fullwidth' %>
|
11
|
+
<%= form.error_message_on :api_key %>
|
12
|
+
<% end %>
|
13
|
+
</div>
|
14
|
+
<div class="col-md-6 col-12">
|
15
|
+
<%= form.field_container :stock_location do %>
|
16
|
+
<%= form.label :stock_location, "Depósito", class: 'required' %>
|
17
|
+
<%= form.text_field :stock_location, required: true, class: 'fullwidth' %>
|
18
|
+
<%= form.error_message_on :stock_location %>
|
19
|
+
<% end %>
|
20
|
+
</div>
|
21
|
+
<div class="col-md-6 col-12">
|
22
|
+
<%= form.field_container :operation_id do %>
|
23
|
+
<%= form.label :operation_id, "ID Natureza de Operação", class: 'required' %>
|
24
|
+
<%= form.text_field :operation_id, required: true, class: 'fullwidth' %>
|
25
|
+
<%= form.error_message_on :operation_id %>
|
26
|
+
<% end %>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</fieldset>
|
30
|
+
|
31
|
+
<fieldset id="payment_methods" class="no-border-top">
|
32
|
+
<legend>
|
33
|
+
Métodos de Pagamento
|
34
|
+
</legend>
|
35
|
+
<%= form.fields_for :payment_methods do |payment_form| %>
|
36
|
+
<div class="row">
|
37
|
+
<div class="col-12 col-md-6">
|
38
|
+
<div class="field">
|
39
|
+
<%= payment_form.label :spree_payment_method_id, "Método de Pagamento", class: 'required' %>
|
40
|
+
<%= payment_form.select :spree_payment_method_id, @payment_methods, {}, { class: "custom-select fullwidth" } %>
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
<div class="col-12 col-md-6">
|
44
|
+
<div class="field">
|
45
|
+
<%= payment_form.label :alias, "Nome da Forma de Pagamento", class: 'required' %>
|
46
|
+
<%= payment_form.text_field :alias, required: true, class:"fullwidth" %>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
<% end %>
|
51
|
+
</fieldset>
|
52
|
+
|
53
|
+
<fieldset class="no-border-top">
|
54
|
+
<legend>
|
55
|
+
Métodos de Envio
|
56
|
+
</legend>
|
57
|
+
<%= form.fields_for :shipping_methods do |ship_form| %>
|
58
|
+
<div class="row">
|
59
|
+
<div class="col-12 col-md-3">
|
60
|
+
<div class="field">
|
61
|
+
<%= ship_form.label :spree_shipping_method_id, "Método de Envio", class: 'required' %>
|
62
|
+
<%= ship_form.select :spree_shipping_method_id, @shipping_methods, {}, { class: "custom-select fullwidth" } %>
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
<div class="col-12 col-md-3">
|
66
|
+
<div class="field">
|
67
|
+
<%= ship_form.label :name, "Nome da Logística", class: 'required' %>
|
68
|
+
<%= ship_form.text_field :name, required: true, class:"fullwidth" %>
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
<div class="col-12 col-md-3">
|
72
|
+
<div class="field">
|
73
|
+
<%= ship_form.label :service, "Serviço", class: 'required' %>
|
74
|
+
<%= ship_form.text_field :service, required: true, class:"fullwidth" %>
|
75
|
+
</div>
|
76
|
+
</div>
|
77
|
+
<div class="col-12 col-md-3">
|
78
|
+
<div class="field">
|
79
|
+
<%= ship_form.label :company, "Nome Transportadora", class: 'required' %>
|
80
|
+
<%= ship_form.text_field :company, required: true, class:"fullwidth" %>
|
81
|
+
</div>
|
82
|
+
</div>
|
83
|
+
</div>
|
84
|
+
<% end %>
|
85
|
+
</fieldset>
|
86
|
+
|
87
|
+
<% if @sellers %>
|
88
|
+
<fieldset class="no-border-top text-center">
|
89
|
+
<legend>
|
90
|
+
Vendedor padrão
|
91
|
+
</legend>
|
92
|
+
<div class="field">
|
93
|
+
<%= form.label "default_seller[id]", "Vendedor Padrão", class: '' %>
|
94
|
+
<%= form.select "default_seller[id]", @sellers, {selected: ::SolidusTiny::Seller.default&.id, include_blank: true }, { class: "custom-select fullwidth" } %>
|
95
|
+
</div>
|
96
|
+
</fieldset>
|
97
|
+
<% end %>
|
98
|
+
|
99
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
100
|
+
<%= form.submit "Salvar", class: 'btn btn-primary' %>
|
101
|
+
<% if params["action"] == 'edit' %>
|
102
|
+
<%= link_to "Excluir", admin_solidus_tiny_account_path(tiny_account.id), method: :delete, data: { confirm: "Tem certeza que deseja excluir a conta?"}, class: 'button' %>
|
103
|
+
<% end %>
|
104
|
+
</div>
|
105
|
+
<% end %>
|
106
|
+
|
107
|
+
|
108
|
+
<script>
|
109
|
+
|
110
|
+
</script>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
|
2
|
+
<% admin_layout "full-width" %>
|
3
|
+
|
4
|
+
<% admin_breadcrumb("Tiny") %>
|
5
|
+
|
6
|
+
<% content_for :page_actions do %>
|
7
|
+
<% if SolidusTiny::Account.count < 1 %>
|
8
|
+
<li>
|
9
|
+
<%= link_to "Nova Conta", new_admin_solidus_tiny_account_path, class: 'btn btn-primary' %>
|
10
|
+
</li>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="content-wrapper">
|
15
|
+
<% @accounts.each do |account| %>
|
16
|
+
|
17
|
+
<fieldset class="no-border-top">
|
18
|
+
<legend>
|
19
|
+
Dados da Conta
|
20
|
+
</legend>
|
21
|
+
<div class="row">
|
22
|
+
|
23
|
+
<div class="col-12">
|
24
|
+
<div class="field">
|
25
|
+
<%= label_tag :api_key, "API Key" %>
|
26
|
+
<%= text_field_tag :api_key, account.api_key, class:"fullwidth", disabled: true %>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
<div class="col-md-6 col-12">
|
30
|
+
<div class="field">
|
31
|
+
<%= label_tag :stock_location, "Depósito" %>
|
32
|
+
<%= text_field_tag :stock_location, account.stock_location, class:"fullwidth", disabled: true %>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<div class="col-md-6 col-12">
|
36
|
+
<div class="field">
|
37
|
+
<%= label_tag :operation_id, "ID Natureza de Operação" %>
|
38
|
+
<%= text_field_tag :operation_id, account.operation_id, class:"fullwidth", disabled: true %>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
</div>
|
43
|
+
<div class="field">
|
44
|
+
<%= button_to "Atualizar vendedores", upsert_sellers_admin_solidus_tiny_accounts_path %>
|
45
|
+
</div>
|
46
|
+
</fieldset>
|
47
|
+
|
48
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
49
|
+
<%= link_to "Editar", edit_admin_solidus_tiny_account_path(account.id), class: 'btn btn-primary' %>
|
50
|
+
<%= link_to "Excluir", admin_solidus_tiny_account_path(account.id), method: :delete, data: { confirm: "Tem certeza que deseja excluir a conta?"}, class: 'button' %>
|
51
|
+
</div>
|
52
|
+
<% end %>
|
53
|
+
</div>
|
54
|
+
|
data/bin/console
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require "bundler/setup"
|
6
|
+
require "solidus_tiny"
|
7
|
+
|
8
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
9
|
+
# with your gem easier. You can also use a different console, if you like.
|
10
|
+
$LOAD_PATH.unshift(*Dir["#{__dir__}/../app/*"])
|
11
|
+
|
12
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
13
|
+
# require "pry"
|
14
|
+
# Pry.start
|
15
|
+
|
16
|
+
require "irb"
|
17
|
+
IRB.start(__FILE__)
|
data/bin/rails
ADDED
data/bin/rails-engine
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails gems
|
3
|
+
# installed from the root of your application.
|
4
|
+
|
5
|
+
ENGINE_ROOT = File.expand_path('..', __dir__)
|
6
|
+
ENGINE_PATH = File.expand_path('../lib/solidus_tiny/engine', __dir__)
|
7
|
+
|
8
|
+
# Set up gems listed in the Gemfile.
|
9
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
|
10
|
+
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
11
|
+
|
12
|
+
require 'rails/all'
|
13
|
+
require 'rails/engine/commands'
|
data/bin/rails-sandbox
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
app_root = 'sandbox'
|
4
|
+
|
5
|
+
unless File.exist? "#{app_root}/bin/rails"
|
6
|
+
warn 'Creating the sandbox app...'
|
7
|
+
Dir.chdir "#{__dir__}/.." do
|
8
|
+
system "#{__dir__}/sandbox" or begin
|
9
|
+
warn 'Automatic creation of the sandbox app failed'
|
10
|
+
exit 1
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir.chdir app_root
|
16
|
+
exec 'bin/rails', *ARGV
|
data/bin/rake
ADDED
data/bin/sandbox
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
test -z "${DEBUG+empty_string}" || set -x
|
5
|
+
|
6
|
+
test "$DB" = "sqlite" && export DB="sqlite3"
|
7
|
+
|
8
|
+
if [ -z "$PAYMENT_METHOD" ]
|
9
|
+
then
|
10
|
+
PAYMENT_METHOD="none"
|
11
|
+
fi
|
12
|
+
|
13
|
+
if [ -z "$SOLIDUS_BRANCH" ]
|
14
|
+
then
|
15
|
+
echo "~~> Use 'export SOLIDUS_BRANCH=[main|v4.0|...]' to control the Solidus branch"
|
16
|
+
SOLIDUS_BRANCH="main"
|
17
|
+
fi
|
18
|
+
echo "~~> Using branch $SOLIDUS_BRANCH of solidus"
|
19
|
+
|
20
|
+
extension_name="solidus_tiny"
|
21
|
+
|
22
|
+
# Stay away from the bundler env of the containing extension.
|
23
|
+
function unbundled {
|
24
|
+
ruby -rbundler -e'
|
25
|
+
Bundler.with_unbundled_env {system *ARGV}' -- \
|
26
|
+
env BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES=true $@
|
27
|
+
}
|
28
|
+
|
29
|
+
echo "~~~> Removing the old sandbox"
|
30
|
+
rm -rf ./sandbox
|
31
|
+
|
32
|
+
echo "~~~> Creating a pristine Rails app"
|
33
|
+
rails new sandbox \
|
34
|
+
--database="${DB:-sqlite3}" \
|
35
|
+
--skip-git \
|
36
|
+
--skip-keeps \
|
37
|
+
--skip-rc \
|
38
|
+
--skip-bootsnap \
|
39
|
+
--skip-test
|
40
|
+
|
41
|
+
if [ ! -d "sandbox" ]; then
|
42
|
+
echo 'sandbox rails application failed'
|
43
|
+
exit 1
|
44
|
+
fi
|
45
|
+
|
46
|
+
echo "~~~> Adding solidus (with i18n) to the Gemfile"
|
47
|
+
cd ./sandbox
|
48
|
+
cat <<RUBY >> Gemfile
|
49
|
+
gem 'solidus', github: 'solidusio/solidus', branch: '$SOLIDUS_BRANCH'
|
50
|
+
gem 'rails-i18n'
|
51
|
+
gem 'solidus_i18n'
|
52
|
+
gem 'solidus_auth_devise'
|
53
|
+
|
54
|
+
gem '$extension_name', path: '..'
|
55
|
+
|
56
|
+
group :test, :development do
|
57
|
+
platforms :mri do
|
58
|
+
gem 'pry-byebug'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
RUBY
|
62
|
+
|
63
|
+
unbundled bundle install --gemfile Gemfile
|
64
|
+
|
65
|
+
unbundled bundle exec rake db:drop db:create
|
66
|
+
|
67
|
+
unbundled bundle exec rails generate solidus:install \
|
68
|
+
--auto-accept \
|
69
|
+
$@
|
70
|
+
|
71
|
+
unbundled bundle exec rails generate solidus:auth:install --auto-run-migrations
|
72
|
+
unbundled bundle exec rails generate ${extension_name}:install --auto-run-migrations
|
73
|
+
|
74
|
+
echo
|
75
|
+
echo "🚀 Sandbox app successfully created for $extension_name!"
|
76
|
+
echo "🧪 This app is intended for test purposes."
|
data/bin/setup
ADDED
data/config/routes.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
Spree::Core::Engine.routes.draw do
|
2
|
+
namespace :admin do
|
3
|
+
namespace :orders do
|
4
|
+
namespace :solidus_tiny do
|
5
|
+
get "/:order_number/sellers", controller: "sellers", action: "edit", as: :seller
|
6
|
+
patch "/:order_number/sellers", controller: "sellers", action: "update", as: :update_seller
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
namespace :solidus_tiny do
|
11
|
+
resources :accounts do
|
12
|
+
post "upsert_sellers", on: :collection
|
13
|
+
end
|
14
|
+
resources :orders, only: [:update]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateSolidusTinySellers < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :solidus_tiny_sellers do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :external_id
|
6
|
+
t.integer :account_id, null: false, index: true
|
7
|
+
t.boolean :default, default: false
|
8
|
+
t.boolean :active, default: true
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :solidus_tiny_sellers, :external_id, unique: true
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateSolidusTinyShippingMethods < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :solidus_tiny_shipping_methods do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :service
|
6
|
+
t.string :company
|
7
|
+
t.integer :account_id, null: false, index: { name: "solidus_tiny_shipping_account_index" }
|
8
|
+
t.integer :spree_shipping_method_id, null: false, index: { name: "solidus_tiny_spree_shipping_index" }
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
|
12
|
+
t.foreign_key :spree_shipping_methods, column: :spree_shipping_method_id
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateSolidusTinyPaymentMethods < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :solidus_tiny_payment_methods do |t|
|
4
|
+
t.string :alias
|
5
|
+
t.integer :account_id, null: false, index: true
|
6
|
+
t.integer :spree_payment_method_id, null: false, index: true
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
|
10
|
+
t.foreign_key :spree_payment_methods, column: :spree_payment_method_id
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SolidusTiny
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
class_option :auto_run_migrations, type: :boolean, default: false
|
7
|
+
source_root File.expand_path('templates', __dir__)
|
8
|
+
|
9
|
+
def self.exit_on_failure?
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
def copy_initializer
|
14
|
+
template 'initializer.rb', 'config/initializers/solidus_tiny.rb'
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_migrations
|
18
|
+
run 'bin/rails railties:install:migrations FROM=solidus_tiny'
|
19
|
+
end
|
20
|
+
|
21
|
+
def run_migrations
|
22
|
+
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]')) # rubocop:disable Layout/LineLength
|
23
|
+
if run_migrations
|
24
|
+
run 'bin/rails db:migrate'
|
25
|
+
else
|
26
|
+
puts 'Skipping bin/rails db:migrate, don\'t forget to run it!' # rubocop:disable Rails/Output
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|