solidus_subscriptions-alpha 0.0.1

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 (97) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +26 -0
  3. data/README.md +128 -0
  4. data/Rakefile +28 -0
  5. data/app/assets/javascripts/spree/backend/solidus_subscriptions.js +2 -0
  6. data/app/assets/javascripts/spree/frontend/solidus_subscriptions.js +2 -0
  7. data/app/assets/stylesheets/spree/backend/solidus_subscriptions.css +4 -0
  8. data/app/assets/stylesheets/spree/frontend/solidus_subscriptions.css +4 -0
  9. data/app/controllers/solidus_subscriptions/api/v1/line_items_controller.rb +35 -0
  10. data/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb +44 -0
  11. data/app/controllers/spree/admin/subscriptions_controller.rb +66 -0
  12. data/app/decorators/spree/controllers/api/line_items/create_subscription_line_items.rb +28 -0
  13. data/app/decorators/spree/controllers/orders/create_subscription_line_items.rb +33 -0
  14. data/app/decorators/spree/line_items/subscription_line_items_association.rb +22 -0
  15. data/app/decorators/spree/orders/after_create.rb +15 -0
  16. data/app/decorators/spree/orders/finalize_creates_subscriptions.rb +19 -0
  17. data/app/decorators/spree/orders/subscription_line_items_association.rb +15 -0
  18. data/app/decorators/spree/users/have_many_subscriptions.rb +18 -0
  19. data/app/decorators/spree/variant_pretty_name.rb +13 -0
  20. data/app/jobs/solidus_subscriptions/process_installments_job.rb +22 -0
  21. data/app/models/solidus_subscriptions/checkout.rb +137 -0
  22. data/app/models/solidus_subscriptions/dispatcher.rb +32 -0
  23. data/app/models/solidus_subscriptions/failure_dispatcher.rb +19 -0
  24. data/app/models/solidus_subscriptions/installment.rb +126 -0
  25. data/app/models/solidus_subscriptions/installment_detail.rb +23 -0
  26. data/app/models/solidus_subscriptions/interval.rb +24 -0
  27. data/app/models/solidus_subscriptions/line_item.rb +98 -0
  28. data/app/models/solidus_subscriptions/line_item_builder.rb +44 -0
  29. data/app/models/solidus_subscriptions/order_builder.rb +40 -0
  30. data/app/models/solidus_subscriptions/out_of_stock_dispatcher.rb +19 -0
  31. data/app/models/solidus_subscriptions/payment_failed_dispatcher.rb +23 -0
  32. data/app/models/solidus_subscriptions/subscription.rb +217 -0
  33. data/app/models/solidus_subscriptions/subscription_generator.rb +60 -0
  34. data/app/models/solidus_subscriptions/subscription_line_item_builder.rb +21 -0
  35. data/app/models/solidus_subscriptions/subscription_order_promotion_rule.rb +25 -0
  36. data/app/models/solidus_subscriptions/subscription_promotion_rule.rb +38 -0
  37. data/app/models/solidus_subscriptions/success_dispatcher.rb +16 -0
  38. data/app/models/solidus_subscriptions/unsubscribable_error.rb +17 -0
  39. data/app/models/solidus_subscriptions/user_mismatch_error.rb +15 -0
  40. data/app/overrides/views/admin_subscribable_checkbox.rb +6 -0
  41. data/app/overrides/views/admin_subscriptions_menu_link.rb +8 -0
  42. data/app/overrides/views/subscription_line_item_fields.rb +6 -0
  43. data/app/views/spree/admin/promotions/rules/_subscription_order_promotion_rule.html.erb +0 -0
  44. data/app/views/spree/admin/promotions/rules/_subscription_promotion_rule.html.erb +0 -0
  45. data/app/views/spree/admin/shared/_no_objects_found.html.erb +4 -0
  46. data/app/views/spree/admin/shared/_subscription_tab.html.erb +3 -0
  47. data/app/views/spree/admin/solidus_subscriptions/subscriptions/_subscription.html.erb +66 -0
  48. data/app/views/spree/admin/subscriptions/_form.html.erb +81 -0
  49. data/app/views/spree/admin/subscriptions/_legacy_form.html.erb +81 -0
  50. data/app/views/spree/admin/subscriptions/_legacy_sidebar.html.erb +28 -0
  51. data/app/views/spree/admin/subscriptions/edit.html.erb +21 -0
  52. data/app/views/spree/admin/subscriptions/index.html.erb +119 -0
  53. data/app/views/spree/admin/subscriptions/new.html.erb +9 -0
  54. data/app/views/spree/admin/variants/_subscribable_checkbox.html.erb +6 -0
  55. data/app/views/spree/frontend/products/_subscription_line_item_fields.html.erb +30 -0
  56. data/config/locales/en.yml +91 -0
  57. data/config/routes.rb +25 -0
  58. data/db/migrate/20160825164850_create_solidus_subscriptions_subscriptions.rb +11 -0
  59. data/db/migrate/20160825173548_create_solidus_subscriptions_line_items.rb +17 -0
  60. data/db/migrate/20160825202248_create_solidus_subscriptions_installments.rb +23 -0
  61. data/db/migrate/20160825211202_create_solidus_subscriptions_installment_details.rb +22 -0
  62. data/db/migrate/20160825214240_add_subscribable_to_spree_variants.rb +5 -0
  63. data/db/migrate/20160829201653_change_subscription_line_items_installments_to_max_installments.rb +5 -0
  64. data/db/migrate/20160902220242_remove_state_from_solidus_susbscriptions_installment_details.rb +5 -0
  65. data/db/migrate/20160902220604_add_successful_to_solidus_subscriptions_installment_details.rb +5 -0
  66. data/db/migrate/20160902221218_add_message_to_solidus_subscriptions_installment_details.rb +5 -0
  67. data/db/migrate/20160922164101_add_interval_length_and_units_to_subscription_line_items.rb +8 -0
  68. data/db/migrate/20161006191003_add_skip_count_to_solidus_subscriptions_subscriptions.rb +5 -0
  69. data/db/migrate/20161006191127_add_successive_skip_count_to_solidus_subscriptions_subscriptions.rb +5 -0
  70. data/db/migrate/20161014212649_allow_spree_line_item_id_to_be_null.rb +5 -0
  71. data/db/migrate/20161017155749_add_order_id_to_solidus_subscriptions_installment_details.rb +6 -0
  72. data/db/migrate/20161017175509_remove_order_id_from_solidus_subscriptions_installments.rb +6 -0
  73. data/db/migrate/20161017201944_add_subscription_order_to_spree_orders.rb +5 -0
  74. data/db/migrate/20161221155142_add_store_to_solidus_subscriptions_subscriptions.rb +6 -0
  75. data/db/migrate/20161223152905_add_address_id_to_solidus_subscriptions_subscriptions.rb +7 -0
  76. data/db/migrate/20170106224713_change_line_item_max_installments_to_end_date.rb +6 -0
  77. data/db/migrate/20170111224458_change_subscription_actionable_date_to_datetime.rb +5 -0
  78. data/db/migrate/20170111232801_change_inteval_actionable_date_to_datetime.rb +5 -0
  79. data/db/migrate/20170112012407_add_config_options_to_subscriptions.rb +7 -0
  80. data/lib/generators/solidus_subscriptions/install/install_generator.rb +30 -0
  81. data/lib/solidus_subscriptions.rb +6 -0
  82. data/lib/solidus_subscriptions/ability.rb +19 -0
  83. data/lib/solidus_subscriptions/config.rb +97 -0
  84. data/lib/solidus_subscriptions/engine.rb +56 -0
  85. data/lib/solidus_subscriptions/permitted_attributes.rb +36 -0
  86. data/lib/solidus_subscriptions/processor.rb +108 -0
  87. data/lib/solidus_subscriptions/testing_support/factories.rb +5 -0
  88. data/lib/solidus_subscriptions/testing_support/factories/installment_detail_factory.rb +7 -0
  89. data/lib/solidus_subscriptions/testing_support/factories/installment_factory.rb +21 -0
  90. data/lib/solidus_subscriptions/testing_support/factories/line_item_factory.rb +18 -0
  91. data/lib/solidus_subscriptions/testing_support/factories/spree/line_item_factory.rb +17 -0
  92. data/lib/solidus_subscriptions/testing_support/factories/spree/order_factory.rb +18 -0
  93. data/lib/solidus_subscriptions/testing_support/factories/spree_modification_factory.rb +8 -0
  94. data/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb +43 -0
  95. data/lib/solidus_subscriptions/version.rb +3 -0
  96. data/lib/tasks/process_subscriptions.rake +6 -0
  97. metadata +460 -0
@@ -0,0 +1,28 @@
1
+ <dl>
2
+ <dt><%= t('.customer') %></dt>
3
+ <dd>
4
+ <%= link_to @subscription.user.email, spree.admin_user_path(@subscription.user) %>
5
+ </dd>
6
+
7
+ <dt><%= t('.status') %></dt>
8
+ <dd>
9
+ <%= content_tag :span, class: "state #{ @subscription.state }" do %>
10
+ <%= @subscription.human_state_name %>
11
+ <% end %>
12
+ </dd>
13
+
14
+ <dt><%= t('.fulfillment_status') %></dt>
15
+ <dd>
16
+ <%= content_tag :span, class: "state #{ @subscription.processing_state }" do %>
17
+ <%= @subscription.class.human_attribute_name("processing_state.#{ @subscription.processing_state }") %>
18
+ <% end %>
19
+ </dd>
20
+
21
+ <dt><%= t('.revenue') %></dt>
22
+ <dd>
23
+ <%= @subscription.line_item.dummy_line_item.try(:display_price) %>
24
+ </dd>
25
+
26
+ <dt><%= t('.interval') %></dt>
27
+ <dd><%= @subscription.line_item.interval.inspect %></dd>
28
+ </dl>
@@ -0,0 +1,21 @@
1
+ <% content_for(:page_title) { t('.title') } %>
2
+
3
+ <% content_for :page_actions do %>
4
+ <li><%= button_link_to t('.back'), admin_subscriptions_path %></li>
5
+ <% end %>
6
+
7
+ <% content_for :sidebar_title do %>
8
+ Details
9
+ <% end %>
10
+
11
+ <% content_for :sidebar do %>
12
+ <%= render 'spree/admin/subscriptions/legacy_sidebar' if @subscription.respond_to?(:line_item) %>
13
+ <% end %>
14
+
15
+ <%= form_for @subscription, url: spree.admin_subscription_path(@subscription) do |f| %>
16
+ <% if f.object.respond_to?(:line_items) %>
17
+ <%= render "form", f: f %>
18
+ <% else %>
19
+ <%= render "legacy_form", f: f %>
20
+ <% end %>
21
+ <% end %>
@@ -0,0 +1,119 @@
1
+ <% if respond_to?(:admin_breadcrumb) %>
2
+ <% admin_breadcrumb(SolidusSubscriptions::Subscription.model_name.human) %>
3
+ <% else %>
4
+ <% content_for(:page_title, SolidusSubscriptions::Subscription.model_name.human) %>
5
+ <% end %>
6
+
7
+ <% content_for :page_actions do %>
8
+ <li><%= button_link_to t('.new_subscription'), new_admin_subscription_path %></li>
9
+ <% end %>
10
+
11
+ <% content_for :table_filter_title do %>
12
+ <%= Spree.t(:search) %>
13
+ <% end %>
14
+
15
+ <% content_for :table_filter do %>
16
+ <%= search_form_for [:admin, @search] do |f| %>
17
+ <div class='field-block alpha four columns'>
18
+ <div class="date-range-filter field">
19
+ <%= label_tag :q_created_at_gt, Spree.t(:date_range) %>
20
+ <div class="date-range-fields">
21
+ <%= f.text_field :created_at_gt, class: 'datepicker datepicker-from', placeholder: Spree.t(:start) %>
22
+
23
+ <span class="range-divider">
24
+ <i class="fa fa-arrow-right"></i>
25
+ </span>
26
+
27
+ <%= f.text_field :created_at_lt, class: 'datepicker datepicker-to', placeholder: Spree.t(:stop) %>
28
+ </div>
29
+ </div>
30
+
31
+ <div class="date-range-filter field">
32
+ <%= label_tag :q_actionable_date_gt, SolidusSubscriptions::Subscription.human_attribute_name(:actionable_date) %>
33
+ <div class="date-range-fields">
34
+ <%= f.text_field :actionable_date_gt, class: 'datepicker datepicker-from', placeholder: Spree.t(:start) %>
35
+
36
+ <span class="range-divider">
37
+ <i class="fa fa-arrow-right"></i>
38
+ </span>
39
+
40
+ <%= f.text_field :actionable_date_lt, class: 'datepicker datepicker-to', placeholder: Spree.t(:stop) %>
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+ <div class="four columns">
46
+ <div class="field">
47
+ <%= label_tag :q_state_eq, Spree.t(:status) %>
48
+ <%= f.select :state_eq, SolidusSubscriptions::Subscription.state_machines[:state].states.map {|s| [s.human_name, s.value]}, {include_blank: true}, class: 'select2 fullwidth' %>
49
+ </div>
50
+ </div>
51
+
52
+ <div class="four columns">
53
+ <div class="field">
54
+ <%= label_tag :q_user_email_cont, Spree::User.human_attribute_name(:email) %>
55
+ <%= f.text_field :user_email_cont, size: 25 %>
56
+ </div>
57
+ </div>
58
+
59
+ <div class="omega four columns">
60
+ <div class="field">
61
+ <%= label_tag :q_processing_state_eq, SolidusSubscriptions::Subscription.human_attribute_name(:processing_state) %>
62
+
63
+ <%
64
+ processing_states = SolidusSubscriptions::Subscription.processing_states.map do |state|
65
+ [
66
+ SolidusSubscriptions::Subscription.human_attribute_name("processing_state.#{ state }"),
67
+ state
68
+ ]
69
+ end
70
+ %>
71
+
72
+ <%=
73
+ f.select(
74
+ :in_processing_state,
75
+ options_for_select(processing_states),
76
+ { include_blank: true },
77
+ class: 'select2 fullwidth'
78
+ )
79
+ %>
80
+ </div>
81
+ </div>
82
+
83
+ <div class="clearfix"></div>
84
+
85
+ <div class="actions filter-actions">
86
+ <div><%= button Spree.t(:filter_results) %></div>
87
+ </div>
88
+ <% end %>
89
+ <% end %>
90
+
91
+ <% if Spree.respond_to?(:solidus_version) && (Spree.solidus_gem_version <=> Gem::Version.new('1.3.0')) >= 0 %>
92
+ <%= paginate @subscriptions, theme: 'solidus_admin' %>
93
+ <% else %>
94
+ <%= paginate @subscriptions %>
95
+ <% end %>
96
+
97
+ <% if @subscriptions.any? %>
98
+ <table id="listing_subscriptions" class="index">
99
+ <thead>
100
+ <tr>
101
+ <th><%= sort_link(@search, :created_at, SolidusSubscriptions::Subscription.human_attribute_name(:created_at)) %></th>
102
+ <th><%= sort_link(@search, :user_email, SolidusSubscriptions::Subscription.human_attribute_name(:user)) %></th>
103
+ <th><%= sort_link(@search, :actionable_date, SolidusSubscriptions::Subscription.human_attribute_name(:actionable_date)) %></th>
104
+ <th><%= sort_link(@search, :line_item_interval_length, SolidusSubscriptions::Subscription.human_attribute_name(:interval)) %></th>
105
+ <th><%= sort_link(@search, :state, SolidusSubscriptions::Subscription.human_attribute_name(:state)) %></th>
106
+ <th><%= sort_link(@search, :processing_state, SolidusSubscriptions::Subscription.human_attribute_name(:processing_state)) %></th>
107
+ <th class='actions'></th>
108
+ </tr>
109
+ </thead>
110
+
111
+ <tbody>
112
+ <%= render @subscriptions %>
113
+ </tbody>
114
+ </table>
115
+ <% else %>
116
+ <div class="alpha twelve columns no-objects-found">
117
+ <%= render 'spree/admin/shared/no_objects_found', resource: SolidusSubscriptions::Subscription, new_resource_url: spree.new_admin_subscription_path %>
118
+ </div>
119
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <% content_for(:page_title) { t('.title') } %>
2
+
3
+ <% content_for :page_actions do %>
4
+ <li><%= button_link_to t('.back'), admin_subscriptions_path %></li>
5
+ <% end %>
6
+
7
+ <%= form_for @subscription, url: spree.admin_subscriptions_url, class: "row" do |f| %>
8
+ <%= render "form", f: f, new: true %>
9
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <div class="field four columns checkbox" data-hook="subscribable">
2
+ <%= f.label :subscribable do %>
3
+ <%= f.check_box :subscribable %>
4
+ <%= Spree::Variant.human_attribute_name(:subscribable) %>
5
+ <% end %>
6
+ </div>
@@ -0,0 +1,30 @@
1
+ <%= content_tag :h3, t('.subscription_fields') %>
2
+ <%= fields_for :'subscription_line_item', SolidusSubscriptions::LineItem.new do |ff| %>
3
+ <div>
4
+ <%= ff.label :quantity, t('.quantity') %>
5
+ <%= ff.number_field :quantity %>
6
+ <%= ff.label :quantity, t('.quantity_suffix') %>
7
+ </div>
8
+
9
+ <div>
10
+ <%= ff.label :interval_length, t('.interval_length') %>
11
+ <%= ff.number_field :interval_length %>
12
+
13
+ <%= ff.collection_radio_buttons :interval_units, SolidusSubscriptions::LineItem.interval_units.to_a, :first, :first %>
14
+ </div>
15
+
16
+ <%= ff.hidden_field :subscribable_id %>
17
+ <% end %>
18
+
19
+ <script>
20
+ document.addEventListener("DOMContentLoaded", function(e) {
21
+ var cartForm = document.querySelector('#cart-form form');
22
+ cartForm.addEventListener('submit', function(e) {
23
+ var quantityInput = e.target.querySelector('[name*="quantity"]');
24
+ var subscriptionQuantityInput = e.target.querySelector('[name*="subscribable_id"]');
25
+
26
+ subscriptionQuantityInput.value = quantityInput.value;
27
+ return true;
28
+ });
29
+ });
30
+ </script>
@@ -0,0 +1,91 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ time:
6
+ formats:
7
+ human:
8
+ solidus_subscriptions:
9
+ subscription:
10
+ actionable_date: "Actionable Date"
11
+ installment_details:
12
+ out_of_stock: >
13
+ This installment could not be processed because of insufficient
14
+ stock.
15
+ success: This installment has been processed successfully!
16
+ failed: This installment could not be processed
17
+ payment_failed: The payment for this installment failed
18
+
19
+ spree:
20
+ new_subscription: New Subscription
21
+ admin:
22
+ solidus_subscriptions:
23
+ subscriptions:
24
+ subscription:
25
+ cancel: Cancel
26
+ cancel_alert: "Are you sure you want to cancel this subscription?"
27
+ activate: Activate
28
+ skip: Skip One
29
+
30
+ subscriptions:
31
+ successfully_canceled: Subsciption Canceled!
32
+ successfully_activated: Subsciption Activated!
33
+ successfully_skipped: Subsciption delayed until %{date}
34
+ index:
35
+ new_subscription: New Subscription
36
+ edit:
37
+ back: Back to Subscriptions List
38
+ title: Edit a Susbcription
39
+ customer: Customer
40
+ status: Status
41
+ fulfillment_status: Fulfillment Status
42
+ revenue: Revenue
43
+ interval: Interval
44
+ new:
45
+ back: Back to Subscriptions List
46
+ title: Create a Susbcription
47
+ form:
48
+ subscription: Subscription
49
+ subscription_line_item: Subscription Line Item
50
+ tab:
51
+ subscriptions: Subscriptions
52
+ promotion_rule_types:
53
+ subscription_promotion_rule:
54
+ name: Subscription
55
+ description: Order contains a subscription
56
+ subscription_order_promotion_rule:
57
+ name: Subscription Order
58
+ description: Order fulfills a subscription
59
+
60
+ products:
61
+ cart_form:
62
+ quantity: I want
63
+ quantity_suffix: items
64
+ interval_length: every
65
+ subscription_fields: Subscription Settings
66
+
67
+ activerecord:
68
+ attributes:
69
+ solidus_subscriptions/line_item/interval_units:
70
+ day: Days
71
+ week: Weeks
72
+ month: Months
73
+ year: Years
74
+ solidus_subscriptions/subscription/processing_state:
75
+ pending: new
76
+ success: success
77
+ failed: failure
78
+
79
+ errors:
80
+ models:
81
+ solidus_subscriptions/subscription:
82
+ attributes:
83
+ successive_skip_count:
84
+ exceeded: >
85
+ This subscription has exceeded the maximum configured successive
86
+ skip limit. It can be skipped again after the next time it is
87
+ processed.
88
+ skip_count:
89
+ exceeded: >
90
+ This subscription has exceeded the maximum configured skip
91
+ limit. It can no longer be skipped.
@@ -0,0 +1,25 @@
1
+ SolidusSubscriptions::Engine.routes.draw do
2
+ namespace :api do
3
+ namespace :v1 do
4
+ resources :line_items, only: [:update, :destroy]
5
+ resources :subscriptions, only: [:update] do
6
+ member do
7
+ post :cancel
8
+ post :skip
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ Spree::Core::Engine.routes.draw do
16
+ mount SolidusSubscriptions::Engine, at: '/subscriptions'
17
+
18
+ namespace :admin do
19
+ resources :subscriptions, only: [:index, :new, :create, :edit, :update] do
20
+ delete :cancel, on: :member
21
+ post :activate, on: :member
22
+ post :skip, on: :member
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ class CreateSolidusSubscriptionsSubscriptions < SolidusSupport::Migration[4.2]
2
+ def change
3
+ create_table :solidus_subscriptions_subscriptions do |t|
4
+ t.date :actionable_date
5
+ t.string :state
6
+ t.integer :user_id, index: true
7
+
8
+ t.timestamps null: false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ class CreateSolidusSubscriptionsLineItems < SolidusSupport::Migration[4.2]
2
+ def change
3
+ create_table :solidus_subscriptions_line_items do |t|
4
+ t.references :spree_line_item, index: true, foreign_key: true, null: false
5
+ t.references :subscription, index: true
6
+ t.integer :quantity, null: false
7
+ t.integer :interval, null: false
8
+ t.integer :installments
9
+ t.integer :subscribable_id, index: true, null: false
10
+
11
+ t.timestamps null: false
12
+ end
13
+
14
+ add_index :solidus_subscriptions_line_items, :subscription_id, name: :index_line_items_on_subscription_id
15
+ add_foreign_key :solidus_subscriptions_line_items, :solidus_subscriptions_subscriptions, column: :subscription_id
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ class CreateSolidusSubscriptionsInstallments < SolidusSupport::Migration[4.2]
2
+ def change
3
+ create_table :solidus_subscriptions_installments do |t|
4
+ t.references :subscription, index: true, null: false
5
+ t.references :order, index: true
6
+ t.date :actionable_date
7
+
8
+ t.timestamps null: false
9
+ end
10
+
11
+ add_foreign_key(
12
+ :solidus_subscriptions_installments,
13
+ :solidus_subscriptions_subscriptions,
14
+ column: :subscription_id
15
+ )
16
+
17
+ add_foreign_key(
18
+ :solidus_subscriptions_installments,
19
+ :spree_orders,
20
+ column: :order_id
21
+ )
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ class CreateSolidusSubscriptionsInstallmentDetails < SolidusSupport::Migration[4.2]
2
+ def change
3
+ create_table :solidus_subscriptions_installment_details do |t|
4
+ t.references :installment, null: false
5
+ t.string :state, null: false
6
+
7
+ t.timestamps null: false
8
+ end
9
+
10
+ add_index(
11
+ :solidus_subscriptions_installment_details,
12
+ :installment_id,
13
+ name: :index_installment_details_on_installment_id
14
+ )
15
+
16
+ add_foreign_key(
17
+ :solidus_subscriptions_installment_details,
18
+ :solidus_subscriptions_installments,
19
+ column: :installment_id
20
+ )
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ class AddSubscribableToSpreeVariants < SolidusSupport::Migration[4.2]
2
+ def change
3
+ add_column :spree_variants, :subscribable, :boolean, default: false
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class ChangeSubscriptionLineItemsInstallmentsToMaxInstallments < SolidusSupport::Migration[4.2]
2
+ def change
3
+ rename_column :solidus_subscriptions_line_items, :installments, :max_installments
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class RemoveStateFromSolidusSusbscriptionsInstallmentDetails < SolidusSupport::Migration[4.2]
2
+ def change
3
+ remove_column :solidus_subscriptions_installment_details, :state, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddSuccessfulToSolidusSubscriptionsInstallmentDetails < SolidusSupport::Migration[4.2]
2
+ def change
3
+ add_column :solidus_subscriptions_installment_details, :success, :boolean
4
+ end
5
+ end