solidus_subscriptions-alpha 0.0.4 → 0.0.5

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +26 -26
  3. data/README.md +130 -130
  4. data/Rakefile +28 -28
  5. data/app/assets/javascripts/spree/backend/solidus_subscriptions.js +1 -1
  6. data/app/assets/javascripts/spree/frontend/solidus_subscriptions.js +1 -1
  7. data/app/assets/stylesheets/spree/backend/solidus_subscriptions.css +4 -4
  8. data/app/assets/stylesheets/spree/frontend/solidus_subscriptions.css +4 -4
  9. data/app/controllers/solidus_subscriptions/api/v1/line_items_controller.rb +35 -35
  10. data/app/controllers/solidus_subscriptions/api/v1/subscriptions_controller.rb +44 -44
  11. data/app/controllers/spree/admin/subscriptions_controller.rb +66 -66
  12. data/app/decorators/spree/controllers/api/line_items/create_subscription_line_items.rb +28 -28
  13. data/app/decorators/spree/controllers/orders/create_subscription_line_items.rb +33 -33
  14. data/app/decorators/spree/line_items/subscription_line_items_association.rb +22 -22
  15. data/app/decorators/spree/orders/after_create.rb +15 -15
  16. data/app/decorators/spree/orders/finalize_creates_subscriptions.rb +19 -19
  17. data/app/decorators/spree/orders/subscription_line_items_association.rb +15 -15
  18. data/app/decorators/spree/products/subscribable_decorator.rb +11 -11
  19. data/app/decorators/spree/users/have_many_subscriptions.rb +18 -18
  20. data/app/decorators/spree/variant_pretty_name.rb +13 -13
  21. data/app/jobs/solidus_subscriptions/process_installments_job.rb +22 -22
  22. data/app/models/solidus_subscriptions/checkout.rb +141 -141
  23. data/app/models/solidus_subscriptions/dispatcher.rb +32 -32
  24. data/app/models/solidus_subscriptions/failure_dispatcher.rb +19 -19
  25. data/app/models/solidus_subscriptions/installment.rb +126 -126
  26. data/app/models/solidus_subscriptions/installment_detail.rb +23 -23
  27. data/app/models/solidus_subscriptions/interval.rb +24 -24
  28. data/app/models/solidus_subscriptions/line_item.rb +98 -98
  29. data/app/models/solidus_subscriptions/line_item_builder.rb +44 -44
  30. data/app/models/solidus_subscriptions/order_builder.rb +40 -40
  31. data/app/models/solidus_subscriptions/out_of_stock_dispatcher.rb +19 -19
  32. data/app/models/solidus_subscriptions/payment_failed_dispatcher.rb +23 -23
  33. data/app/models/solidus_subscriptions/subscription.rb +217 -217
  34. data/app/models/solidus_subscriptions/subscription_generator.rb +60 -60
  35. data/app/models/solidus_subscriptions/subscription_line_item_builder.rb +21 -21
  36. data/app/models/solidus_subscriptions/subscription_order_promotion_rule.rb +25 -25
  37. data/app/models/solidus_subscriptions/subscription_promotion_rule.rb +38 -38
  38. data/app/models/solidus_subscriptions/success_dispatcher.rb +16 -16
  39. data/app/models/solidus_subscriptions/unsubscribable_error.rb +17 -17
  40. data/app/models/solidus_subscriptions/user_mismatch_error.rb +15 -15
  41. data/app/overrides/views/admin_subscribable_checkbox.rb +13 -13
  42. data/app/overrides/views/admin_subscriptions_menu_link.rb +8 -8
  43. data/app/overrides/views/subscription_line_item_fields.rb +6 -6
  44. data/app/views/spree/admin/products/_subscribable_checkbox.html.erb +8 -8
  45. data/app/views/spree/admin/promotions/rules/_subscription_order_promotion_rule.html.erb +0 -0
  46. data/app/views/spree/admin/promotions/rules/_subscription_promotion_rule.html.erb +0 -0
  47. data/app/views/spree/admin/shared/_no_objects_found.html.erb +4 -4
  48. data/app/views/spree/admin/shared/_subscription_tab.html.erb +3 -3
  49. data/app/views/spree/admin/solidus_subscriptions/subscriptions/_subscription.html.erb +66 -66
  50. data/app/views/spree/admin/subscriptions/_form.html.erb +81 -81
  51. data/app/views/spree/admin/subscriptions/_legacy_form.html.erb +81 -81
  52. data/app/views/spree/admin/subscriptions/_legacy_sidebar.html.erb +28 -28
  53. data/app/views/spree/admin/subscriptions/edit.html.erb +21 -21
  54. data/app/views/spree/admin/subscriptions/index.html.erb +119 -119
  55. data/app/views/spree/admin/subscriptions/new.html.erb +9 -9
  56. data/app/views/spree/admin/variants/_subscribable_checkbox.html.erb +6 -6
  57. data/app/views/spree/frontend/products/_subscription_line_item_fields.html.erb +30 -30
  58. data/config/locales/en.yml +91 -91
  59. data/config/routes.rb +25 -25
  60. data/db/migrate/20160825164850_create_solidus_subscriptions_subscriptions.rb +11 -11
  61. data/db/migrate/20160825173548_create_solidus_subscriptions_line_items.rb +17 -17
  62. data/db/migrate/20160825202248_create_solidus_subscriptions_installments.rb +23 -23
  63. data/db/migrate/20160825211202_create_solidus_subscriptions_installment_details.rb +22 -22
  64. data/db/migrate/20160825214240_add_subscribable_to_spree_variants.rb +5 -5
  65. data/db/migrate/20160829201653_change_subscription_line_items_installments_to_max_installments.rb +5 -5
  66. data/db/migrate/20160902220242_remove_state_from_solidus_susbscriptions_installment_details.rb +5 -5
  67. data/db/migrate/20160902220604_add_successful_to_solidus_subscriptions_installment_details.rb +5 -5
  68. data/db/migrate/20160902221218_add_message_to_solidus_subscriptions_installment_details.rb +5 -5
  69. data/db/migrate/20160922164101_add_interval_length_and_units_to_subscription_line_items.rb +8 -8
  70. data/db/migrate/20161006191003_add_skip_count_to_solidus_subscriptions_subscriptions.rb +5 -5
  71. data/db/migrate/20161006191127_add_successive_skip_count_to_solidus_subscriptions_subscriptions.rb +5 -5
  72. data/db/migrate/20161014212649_allow_spree_line_item_id_to_be_null.rb +5 -5
  73. data/db/migrate/20161017155749_add_order_id_to_solidus_subscriptions_installment_details.rb +6 -6
  74. data/db/migrate/20161017175509_remove_order_id_from_solidus_subscriptions_installments.rb +6 -6
  75. data/db/migrate/20161017201944_add_subscription_order_to_spree_orders.rb +5 -5
  76. data/db/migrate/20161221155142_add_store_to_solidus_subscriptions_subscriptions.rb +6 -6
  77. data/db/migrate/20161223152905_add_address_id_to_solidus_subscriptions_subscriptions.rb +7 -7
  78. data/db/migrate/20170106224713_change_line_item_max_installments_to_end_date.rb +6 -6
  79. data/db/migrate/20170111224458_change_subscription_actionable_date_to_datetime.rb +5 -5
  80. data/db/migrate/20170111232801_change_inteval_actionable_date_to_datetime.rb +5 -5
  81. data/db/migrate/20170112012407_add_config_options_to_subscriptions.rb +7 -7
  82. data/lib/generators/solidus_subscriptions/install/install_generator.rb +30 -30
  83. data/lib/solidus_subscriptions.rb +6 -6
  84. data/lib/solidus_subscriptions/ability.rb +19 -19
  85. data/lib/solidus_subscriptions/config.rb +97 -97
  86. data/lib/solidus_subscriptions/engine.rb +56 -56
  87. data/lib/solidus_subscriptions/permitted_attributes.rb +36 -36
  88. data/lib/solidus_subscriptions/processor.rb +108 -108
  89. data/lib/solidus_subscriptions/testing_support/factories.rb +5 -5
  90. data/lib/solidus_subscriptions/testing_support/factories/installment_detail_factory.rb +7 -7
  91. data/lib/solidus_subscriptions/testing_support/factories/installment_factory.rb +21 -21
  92. data/lib/solidus_subscriptions/testing_support/factories/line_item_factory.rb +18 -18
  93. data/lib/solidus_subscriptions/testing_support/factories/spree/line_item_factory.rb +17 -17
  94. data/lib/solidus_subscriptions/testing_support/factories/spree/order_factory.rb +18 -18
  95. data/lib/solidus_subscriptions/testing_support/factories/spree_modification_factory.rb +8 -8
  96. data/lib/solidus_subscriptions/testing_support/factories/subscription_factory.rb +43 -43
  97. data/lib/solidus_subscriptions/version.rb +3 -3
  98. data/lib/solidus_subscriptions/version.rb~ +3 -0
  99. data/lib/tasks/process_subscriptions.rake +6 -6
  100. metadata +4 -3
@@ -1,8 +1,8 @@
1
- <% if !@product.has_variants? then %>
2
- <div class="field four columns checkbox" data-hook="subscribable">
3
- <%= f.label :subscribable do %>
4
- <%= f.check_box :subscribable %>
5
- <%= Spree::Product.human_attribute_name(:subscribable) %>
6
- <% end %>
7
- </div>
8
- <% end %>
1
+ <% if !@product.has_variants? then %>
2
+ <div class="field four columns checkbox" data-hook="subscribable">
3
+ <%= f.label :subscribable do %>
4
+ <%= f.check_box :subscribable %>
5
+ <%= Spree::Product.human_attribute_name(:subscribable) %>
6
+ <% end %>
7
+ </div>
8
+ <% end %>
@@ -1,4 +1,4 @@
1
- <%= Spree.t(:no_resource, resource: resource.model_name.human.pluralize) %>
2
- <% if can? :create, resource %>
3
- <%= link_to Spree.t(:create_one), new_resource_url %>
4
- <% end %>
1
+ <%= Spree.t(:no_resource, resource: resource.model_name.human.pluralize) %>
2
+ <% if can? :create, resource %>
3
+ <%= link_to Spree.t(:create_one), new_resource_url %>
4
+ <% end %>
@@ -1,3 +1,3 @@
1
- <% if can? :admin, SolidusSubscriptions::Subscription %>
2
- <%= tab :subscriptions, icon: 'repeat' %>
3
- <% end %>
1
+ <% if can? :admin, SolidusSubscriptions::Subscription %>
2
+ <%= tab :subscriptions, icon: 'repeat' %>
3
+ <% end %>
@@ -1,66 +1,66 @@
1
- <%= content_tag :tr, class: cycle('odd', 'even') do %>
2
- <%= content_tag :td, l(subscription.created_at.to_date), class: 'align-center' %>
3
-
4
- <%= content_tag :td, class: 'align-center' do %>
5
- <%= link_to subscription.user.email, admin_user_path(subscription.user) %>
6
- <% end %>
7
-
8
- <%= content_tag :td, class: 'align-center' do %>
9
- <%= subscription.actionable_date ? l(subscription.actionable_date) : '-' %>
10
- <% end %>
11
-
12
- <%= content_tag :td, class: 'align-center' do %>
13
- <%= subscription.interval.inspect %>
14
- <% end %>
15
-
16
- <%= content_tag :td, class: 'align-center' do %>
17
- <%= content_tag :span, subscription.human_state_name, class: "state #{ subscription.state }" %>
18
- <% end %>
19
-
20
- <%= content_tag :td, class: 'align-center' do %>
21
- <%= content_tag :span, class: "state #{ subscription.processing_state }" do %>
22
- <%= subscription.class.human_attribute_name("processing_state.#{ subscription.processing_state }") %>
23
- <% end %>
24
- <% end %>
25
-
26
- <td class="actions align-center">
27
- <% if subscription.state_events.include?(:cancel) %>
28
- <%=
29
- link_to_with_icon(
30
- :stop,
31
- t('.cancel'),
32
- spree.cancel_admin_subscription_path(subscription),
33
- no_text: true,
34
- method: :delete,
35
- data: { confirm: t('.cancel_alert') }
36
- )
37
- %>
38
- <% end %>
39
-
40
- <% if subscription.state_events.include?(:activate) %>
41
- <%=
42
- link_to_with_icon(
43
- :play,
44
- t('.activate'),
45
- spree.activate_admin_subscription_path(subscription),
46
- no_text: true,
47
- method: :post
48
- )
49
- %>
50
- <% end %>
51
-
52
- <% if subscription.active? %>
53
- <%=
54
- link_to_with_icon(
55
- :'fast-forward',
56
- t('.skip'),
57
- spree.skip_admin_subscription_path(subscription),
58
- no_text: true,
59
- method: :post
60
- )
61
- %>
62
- <% end %>
63
-
64
- <%= link_to_edit(subscription, no_text: true) %>
65
- </td>
66
- <% end %>
1
+ <%= content_tag :tr, class: cycle('odd', 'even') do %>
2
+ <%= content_tag :td, l(subscription.created_at.to_date), class: 'align-center' %>
3
+
4
+ <%= content_tag :td, class: 'align-center' do %>
5
+ <%= link_to subscription.user.email, admin_user_path(subscription.user) %>
6
+ <% end %>
7
+
8
+ <%= content_tag :td, class: 'align-center' do %>
9
+ <%= subscription.actionable_date ? l(subscription.actionable_date) : '-' %>
10
+ <% end %>
11
+
12
+ <%= content_tag :td, class: 'align-center' do %>
13
+ <%= subscription.interval.inspect %>
14
+ <% end %>
15
+
16
+ <%= content_tag :td, class: 'align-center' do %>
17
+ <%= content_tag :span, subscription.human_state_name, class: "state #{ subscription.state }" %>
18
+ <% end %>
19
+
20
+ <%= content_tag :td, class: 'align-center' do %>
21
+ <%= content_tag :span, class: "state #{ subscription.processing_state }" do %>
22
+ <%= subscription.class.human_attribute_name("processing_state.#{ subscription.processing_state }") %>
23
+ <% end %>
24
+ <% end %>
25
+
26
+ <td class="actions align-center">
27
+ <% if subscription.state_events.include?(:cancel) %>
28
+ <%=
29
+ link_to_with_icon(
30
+ :stop,
31
+ t('.cancel'),
32
+ spree.cancel_admin_subscription_path(subscription),
33
+ no_text: true,
34
+ method: :delete,
35
+ data: { confirm: t('.cancel_alert') }
36
+ )
37
+ %>
38
+ <% end %>
39
+
40
+ <% if subscription.state_events.include?(:activate) %>
41
+ <%=
42
+ link_to_with_icon(
43
+ :play,
44
+ t('.activate'),
45
+ spree.activate_admin_subscription_path(subscription),
46
+ no_text: true,
47
+ method: :post
48
+ )
49
+ %>
50
+ <% end %>
51
+
52
+ <% if subscription.active? %>
53
+ <%=
54
+ link_to_with_icon(
55
+ :'fast-forward',
56
+ t('.skip'),
57
+ spree.skip_admin_subscription_path(subscription),
58
+ no_text: true,
59
+ method: :post
60
+ )
61
+ %>
62
+ <% end %>
63
+
64
+ <%= link_to_edit(subscription, no_text: true) %>
65
+ </td>
66
+ <% end %>
@@ -1,81 +1,81 @@
1
- <% new ||= false %>
2
-
3
- <fieldset class="no-border-top">
4
- <fieldset class="index no-border-bottom">
5
- <legend><%= t('.subscription') %></legend>
6
-
7
- <% if new %>
8
- <div class="row">
9
- <div class="field twelve columns">
10
- <%= f.label :user_id, Spree.t(:user), class: "required" %>
11
- <%= f.collection_select :user_id, Spree::User.all, :id, :email, {}, class: "select2 fullwidth" %>
12
- </div>
13
-
14
- </div>
15
- <% end %>
16
- </fieldset>
17
-
18
- <div class="row">
19
- <%= content_tag :div, class: "field alpha three columns" do %>
20
- <%= f.label :actionable_date %>
21
- <%= f.text_field :actionable_date, class: "fullwidth datepicker" %>
22
- <% end %>
23
-
24
- <div class='field three columns'>
25
- <%= f.label :inverval_length %>
26
- <%= f.number_field :interval_length, class: "fullwidth" %>
27
- </div>
28
-
29
- <div class='field three columns'>
30
- <%= f.label :interval_units %>
31
- <%
32
- unit_values = SolidusSubscriptions::LineItem.interval_units.keys
33
- units = unit_values.map do |unit|
34
- [
35
- unit,
36
- SolidusSubscriptions::LineItem.human_attribute_name("interval_units.#{ unit }")
37
- ]
38
- end
39
- %>
40
-
41
- <div>
42
- <% units.each_with_index do |(value, name), i| %>
43
- <div>
44
- <%= f.label :interval_units, for: "interval_units_#{ value }", class: 'fullwidth' do %>
45
- <%= f.radio_button :interval_units, value, id: "interval_units_#{ value }" %>
46
- <%= name %>
47
- <% end %>
48
- </div>
49
- <% end %>
50
- </div>
51
- </div>
52
-
53
- <div class="field omega three columns">
54
- <%= f.label :end_date %>
55
- <%= f.date_field :end_date, class: "required fullwidth" %>
56
- </div>
57
- </div>
58
-
59
- <%= f.fields_for :line_items do |lf| %>
60
- <fieldset class='no-border-bottom'>
61
- <legend><%= t('.subscription_line_item') %></legend>
62
-
63
- <div class="row">
64
- <div class='field alpha two columns'>
65
- <%= lf.label :quantity %>
66
- <%= lf.number_field :quantity, min: 1, class: "fullwidth" %>
67
- </div>
68
-
69
- <div class="field columns ten omega">
70
- <%= lf.label :subscribable_id %>
71
- <%= lf.collection_select :subscribable_id, Spree::Variant.where(subscribable: true), :id, :pretty_name, {}, { class: "fullwidth select2" } %>
72
- </div>
73
- </div>
74
-
75
- </fieldset>
76
- <% end %>
77
-
78
- <div class="filter-actions" data-hook='buttons'>
79
- <%= f.button type: :submit %>
80
- </div>
81
- </fieldset>
1
+ <% new ||= false %>
2
+
3
+ <fieldset class="no-border-top">
4
+ <fieldset class="index no-border-bottom">
5
+ <legend><%= t('.subscription') %></legend>
6
+
7
+ <% if new %>
8
+ <div class="row">
9
+ <div class="field twelve columns">
10
+ <%= f.label :user_id, Spree.t(:user), class: "required" %>
11
+ <%= f.collection_select :user_id, Spree::User.all, :id, :email, {}, class: "select2 fullwidth" %>
12
+ </div>
13
+
14
+ </div>
15
+ <% end %>
16
+ </fieldset>
17
+
18
+ <div class="row">
19
+ <%= content_tag :div, class: "field alpha three columns" do %>
20
+ <%= f.label :actionable_date %>
21
+ <%= f.text_field :actionable_date, class: "fullwidth datepicker" %>
22
+ <% end %>
23
+
24
+ <div class='field three columns'>
25
+ <%= f.label :inverval_length %>
26
+ <%= f.number_field :interval_length, class: "fullwidth" %>
27
+ </div>
28
+
29
+ <div class='field three columns'>
30
+ <%= f.label :interval_units %>
31
+ <%
32
+ unit_values = SolidusSubscriptions::LineItem.interval_units.keys
33
+ units = unit_values.map do |unit|
34
+ [
35
+ unit,
36
+ SolidusSubscriptions::LineItem.human_attribute_name("interval_units.#{ unit }")
37
+ ]
38
+ end
39
+ %>
40
+
41
+ <div>
42
+ <% units.each_with_index do |(value, name), i| %>
43
+ <div>
44
+ <%= f.label :interval_units, for: "interval_units_#{ value }", class: 'fullwidth' do %>
45
+ <%= f.radio_button :interval_units, value, id: "interval_units_#{ value }" %>
46
+ <%= name %>
47
+ <% end %>
48
+ </div>
49
+ <% end %>
50
+ </div>
51
+ </div>
52
+
53
+ <div class="field omega three columns">
54
+ <%= f.label :end_date %>
55
+ <%= f.date_field :end_date, class: "required fullwidth" %>
56
+ </div>
57
+ </div>
58
+
59
+ <%= f.fields_for :line_items do |lf| %>
60
+ <fieldset class='no-border-bottom'>
61
+ <legend><%= t('.subscription_line_item') %></legend>
62
+
63
+ <div class="row">
64
+ <div class='field alpha two columns'>
65
+ <%= lf.label :quantity %>
66
+ <%= lf.number_field :quantity, min: 1, class: "fullwidth" %>
67
+ </div>
68
+
69
+ <div class="field columns ten omega">
70
+ <%= lf.label :subscribable_id %>
71
+ <%= lf.collection_select :subscribable_id, Spree::Variant.where(subscribable: true), :id, :pretty_name, {}, { class: "fullwidth select2" } %>
72
+ </div>
73
+ </div>
74
+
75
+ </fieldset>
76
+ <% end %>
77
+
78
+ <div class="filter-actions" data-hook='buttons'>
79
+ <%= f.button type: :submit %>
80
+ </div>
81
+ </fieldset>
@@ -1,81 +1,81 @@
1
- <% new ||= false %>
2
-
3
- <fieldset class="no-border-top">
4
- <fieldset class="index no-border-bottom">
5
- <legend><%= t('.subscription') %></legend>
6
-
7
- <% if new %>
8
- <div class="row">
9
- <div class="field twelve columns">
10
- <%= f.label :user_id, Spree.t(:user), class: "required" %>
11
- <%= f.collection_select :user_id, Spree::User.all, :id, :email, {}, class: "select2 fullwidth" %>
12
- </div>
13
-
14
- </div>
15
- <% end %>
16
- </fieldset>
17
-
18
- <%= f.fields_for :line_item, @line_item do |lf| %>
19
- <div class="row">
20
- <%= content_tag :div, class: "field alpha three columns" do %>
21
- <%= f.label :actionable_date %>
22
- <%= f.text_field :actionable_date, class: "fullwidth datepicker" %>
23
- <% end %>
24
-
25
- <div class='field three columns'>
26
- <%= lf.label :inverval_length %>
27
- <%= lf.number_field :interval_length, class: "fullwidth" %>
28
- </div>
29
-
30
- <div class='field three columns'>
31
- <%= lf.label :interval_units %>
32
- <%
33
- unit_values = SolidusSubscriptions::LineItem.interval_units.keys
34
- units = unit_values.map do |unit|
35
- [
36
- unit,
37
- SolidusSubscriptions::LineItem.human_attribute_name("interval_units.#{ unit }")
38
- ]
39
- end
40
- %>
41
-
42
- <div>
43
- <% units.each_with_index do |(value, name), i| %>
44
- <div>
45
- <%= lf.label :interval_units, for: "interval_units_#{ value }", class: 'fullwidth' do %>
46
- <%= lf.radio_button :interval_units, value, id: "interval_units_#{ value }" %>
47
- <%= name %>
48
- <% end %>
49
- </div>
50
- <% end %>
51
- </div>
52
- </div>
53
-
54
- <div class="field omega three columns">
55
- <%= lf.label :end_date %>
56
- <%= lf.date_field :end_date, class: "required", class: "fullwidth" %>
57
- </div>
58
- </div>
59
-
60
- <fieldset class='no-border-bottom'>
61
- <legend><%= t('.subscription_line_item') %></legend>
62
-
63
- <div class="row">
64
- <div class='field alpha two columns'>
65
- <%= lf.label :quantity %>
66
- <%= lf.number_field :quantity, min: 1, class: "fullwidth" %>
67
- </div>
68
-
69
- <div class="field columns ten omega">
70
- <%= lf.label :subscribable_id %>
71
- <%= lf.collection_select :subscribable_id, Spree::Variant.where(subscribable: true), :id, :pretty_name, {}, { class: "fullwidth select2" } %>
72
- </div>
73
- </div>
74
-
75
- </fieldset>
76
- <% end %>
77
-
78
- <div class="filter-actions" data-hook='buttons'>
79
- <%= f.button type: :submit %>
80
- </div>
81
- </fieldset>
1
+ <% new ||= false %>
2
+
3
+ <fieldset class="no-border-top">
4
+ <fieldset class="index no-border-bottom">
5
+ <legend><%= t('.subscription') %></legend>
6
+
7
+ <% if new %>
8
+ <div class="row">
9
+ <div class="field twelve columns">
10
+ <%= f.label :user_id, Spree.t(:user), class: "required" %>
11
+ <%= f.collection_select :user_id, Spree::User.all, :id, :email, {}, class: "select2 fullwidth" %>
12
+ </div>
13
+
14
+ </div>
15
+ <% end %>
16
+ </fieldset>
17
+
18
+ <%= f.fields_for :line_item, @line_item do |lf| %>
19
+ <div class="row">
20
+ <%= content_tag :div, class: "field alpha three columns" do %>
21
+ <%= f.label :actionable_date %>
22
+ <%= f.text_field :actionable_date, class: "fullwidth datepicker" %>
23
+ <% end %>
24
+
25
+ <div class='field three columns'>
26
+ <%= lf.label :inverval_length %>
27
+ <%= lf.number_field :interval_length, class: "fullwidth" %>
28
+ </div>
29
+
30
+ <div class='field three columns'>
31
+ <%= lf.label :interval_units %>
32
+ <%
33
+ unit_values = SolidusSubscriptions::LineItem.interval_units.keys
34
+ units = unit_values.map do |unit|
35
+ [
36
+ unit,
37
+ SolidusSubscriptions::LineItem.human_attribute_name("interval_units.#{ unit }")
38
+ ]
39
+ end
40
+ %>
41
+
42
+ <div>
43
+ <% units.each_with_index do |(value, name), i| %>
44
+ <div>
45
+ <%= lf.label :interval_units, for: "interval_units_#{ value }", class: 'fullwidth' do %>
46
+ <%= lf.radio_button :interval_units, value, id: "interval_units_#{ value }" %>
47
+ <%= name %>
48
+ <% end %>
49
+ </div>
50
+ <% end %>
51
+ </div>
52
+ </div>
53
+
54
+ <div class="field omega three columns">
55
+ <%= lf.label :end_date %>
56
+ <%= lf.date_field :end_date, class: "required", class: "fullwidth" %>
57
+ </div>
58
+ </div>
59
+
60
+ <fieldset class='no-border-bottom'>
61
+ <legend><%= t('.subscription_line_item') %></legend>
62
+
63
+ <div class="row">
64
+ <div class='field alpha two columns'>
65
+ <%= lf.label :quantity %>
66
+ <%= lf.number_field :quantity, min: 1, class: "fullwidth" %>
67
+ </div>
68
+
69
+ <div class="field columns ten omega">
70
+ <%= lf.label :subscribable_id %>
71
+ <%= lf.collection_select :subscribable_id, Spree::Variant.where(subscribable: true), :id, :pretty_name, {}, { class: "fullwidth select2" } %>
72
+ </div>
73
+ </div>
74
+
75
+ </fieldset>
76
+ <% end %>
77
+
78
+ <div class="filter-actions" data-hook='buttons'>
79
+ <%= f.button type: :submit %>
80
+ </div>
81
+ </fieldset>