solidus_subscriptions-alpha 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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>