effective_memberships 0.1.6 → 0.1.10
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.
- checksums.yaml +4 -4
- data/app/controllers/admin/registrar_actions_controller.rb +4 -0
- data/app/controllers/effective/fee_payments_controller.rb +4 -0
- data/app/datatables/admin/effective_membership_histories_datatable.rb +9 -1
- data/app/models/concerns/effective_memberships_applicant.rb +12 -1
- data/app/models/concerns/effective_memberships_fee_payment.rb +13 -2
- data/app/models/concerns/effective_memberships_owner.rb +6 -0
- data/app/models/effective/registrar_action.rb +24 -10
- data/app/views/admin/categories/_form_renewals.html.haml +3 -3
- data/app/views/admin/registrar_actions/_form_assign.html.haml +34 -0
- data/app/views/admin/registrar_actions/_form_bad_standing.html.haml +6 -5
- data/app/views/admin/registrar_actions/_form_reclassify.html.haml +2 -3
- data/app/views/admin/registrar_actions/_form_register.html.haml +1 -1
- data/app/views/effective/applicants/_layout.html.haml +1 -1
- data/app/views/effective/fee_payments/_layout.html.haml +1 -1
- data/app/views/effective/fee_payments/submitted.html.haml +5 -4
- data/app/views/effective/fees/_dashboard.html.haml +2 -2
- data/lib/effective_memberships/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2fa9825b98ff831e92982093f101688968d4a9de0e1b61bd40d30b4ecdc508a
|
4
|
+
data.tar.gz: 3099497fce47b55f6d47009e5637aac7fdc70990f2bccd4d5d08cd448b7982a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ea91efb59aa3d7408a76fbc463febca221f0150f83964361a72aa2c79ae8f14071be1fd91ef6e060dcdd2d08d36edb74c369b6287d2698722000b80ffce02c6
|
7
|
+
data.tar.gz: 826d97b4c4f2fc50cd30dde0b0bbccf2eefdea7c2e1fc73c27e87916ae64a07a00d0d74e2b775cf41b8e2f55268403885a92e3fc932969ed350aa0fde1893737
|
@@ -14,6 +14,10 @@ module Admin
|
|
14
14
|
success: -> { "#{resource.owner} has been reclassified to #{resource.owner.membership.category}" },
|
15
15
|
redirect: -> { admin_owners_path(resource) }
|
16
16
|
|
17
|
+
submit :assign, 'Assign',
|
18
|
+
success: -> { "#{resource.owner} has been assigned to #{resource.owner.membership.categories.to_sentence}" },
|
19
|
+
redirect: -> { admin_owners_path(resource) }
|
20
|
+
|
17
21
|
submit :remove, 'Remove',
|
18
22
|
success: -> { "#{resource.owner} has been removed" },
|
19
23
|
redirect: -> { admin_owners_path(resource) }
|
@@ -14,7 +14,15 @@ module Admin
|
|
14
14
|
|
15
15
|
col :number
|
16
16
|
|
17
|
-
col :categories, label: 'Category'
|
17
|
+
col :categories, label: 'Category' do |history|
|
18
|
+
history.categories.map.with_index do |category, index|
|
19
|
+
category_id = history.category_ids[index]
|
20
|
+
link = link_to(category, effective_memberships.edit_admin_category_path(category_id))
|
21
|
+
|
22
|
+
content_tag(:div, link, class: 'col-resource_item')
|
23
|
+
end.join.html_safe
|
24
|
+
end
|
25
|
+
|
18
26
|
col :category_ids, visible: false
|
19
27
|
|
20
28
|
col :bad_standing
|
@@ -247,6 +247,12 @@ module EffectiveMembershipsApplicant
|
|
247
247
|
validates :declare_truth, acceptance: true
|
248
248
|
end
|
249
249
|
|
250
|
+
# Billing Step
|
251
|
+
validate(if: -> { current_step == :billing && owner.present? }) do
|
252
|
+
self.errors.add(:base, "must have a billing address") unless owner.billing_address.present?
|
253
|
+
self.errors.add(:base, "must have an email") unless owner.email.present?
|
254
|
+
end
|
255
|
+
|
250
256
|
# Admin Approve
|
251
257
|
validate(if: -> { approved_membership_date.present? }) do
|
252
258
|
if approved_membership_date.to_date > Time.zone.now.to_date
|
@@ -453,12 +459,17 @@ module EffectiveMembershipsApplicant
|
|
453
459
|
|
454
460
|
def find_or_build_submit_order
|
455
461
|
order = submit_order || orders.build(user: owner)
|
462
|
+
fees = submit_fees()
|
456
463
|
|
457
464
|
# Adds fees, but does not overwrite any existing price.
|
458
|
-
|
465
|
+
fees.each do |fee|
|
459
466
|
order.add(fee) unless order.purchasables.include?(fee)
|
460
467
|
end
|
461
468
|
|
469
|
+
order.purchasables.each do |purchasable|
|
470
|
+
order.remove(purchasable) unless fees.include?(purchasable)
|
471
|
+
end
|
472
|
+
|
462
473
|
# From Billing Step
|
463
474
|
order.billing_address = owner.billing_address if owner.billing_address.present?
|
464
475
|
|
@@ -110,6 +110,12 @@ module EffectiveMembershipsFeePayment
|
|
110
110
|
validates :declare_truth, acceptance: true
|
111
111
|
end
|
112
112
|
|
113
|
+
# Billing Step
|
114
|
+
validate(if: -> { current_step == :billing && owner.present? }) do
|
115
|
+
self.errors.add(:base, "must have a billing address") unless owner.billing_address.present?
|
116
|
+
self.errors.add(:base, "must have an email") unless owner.email.present?
|
117
|
+
end
|
118
|
+
|
113
119
|
# Clear required steps memoization
|
114
120
|
after_save { @_required_steps = nil }
|
115
121
|
|
@@ -205,17 +211,22 @@ module EffectiveMembershipsFeePayment
|
|
205
211
|
|
206
212
|
# We take over the owner's outstanding fees.
|
207
213
|
def find_or_build_submit_fees
|
208
|
-
Array(outstanding_fees).each { |fee| fees << fee }
|
214
|
+
Array(outstanding_fees).each { |fee| fees << fee unless fees.include?(fee) }
|
209
215
|
submit_fees
|
210
216
|
end
|
211
217
|
|
212
218
|
def find_or_build_submit_order
|
213
219
|
order = submit_order || orders.build(user: owner)
|
220
|
+
fees = submit_fees()
|
214
221
|
|
215
|
-
|
222
|
+
fees.each do |fee|
|
216
223
|
order.add(fee) unless order.purchasables.include?(fee)
|
217
224
|
end
|
218
225
|
|
226
|
+
order.purchasables.each do |purchasable|
|
227
|
+
order.remove(purchasable) unless fees.include?(purchasable)
|
228
|
+
end
|
229
|
+
|
219
230
|
order.billing_address = owner.billing_address if owner.billing_address.present?
|
220
231
|
|
221
232
|
order
|
@@ -103,6 +103,10 @@ module EffectiveMembershipsOwner
|
|
103
103
|
membership_histories.find { |history| history.removed? }.start_on
|
104
104
|
end
|
105
105
|
|
106
|
+
def registrar_action_categories(action)
|
107
|
+
EffectiveMemberships.Category.sorted.all
|
108
|
+
end
|
109
|
+
|
106
110
|
# Instance Methods
|
107
111
|
def additional_fee_attributes(fee)
|
108
112
|
raise('expected an Effective::Fee') unless fee.kind_of?(Effective::Fee)
|
@@ -177,6 +181,8 @@ module EffectiveMembershipsOwner
|
|
177
181
|
late_on: nil,
|
178
182
|
bad_standing_on: nil
|
179
183
|
)
|
184
|
+
|
185
|
+
fee
|
180
186
|
end
|
181
187
|
|
182
188
|
def build_renewal_fee(category:, period:, late_on:, bad_standing_on:)
|
@@ -17,6 +17,9 @@ module Effective
|
|
17
17
|
attr_accessor :membership_number
|
18
18
|
attr_accessor :skip_fees
|
19
19
|
|
20
|
+
# Assign
|
21
|
+
attr_accessor :category_ids
|
22
|
+
|
20
23
|
# All Action Validations
|
21
24
|
validates :current_action, presence: true
|
22
25
|
validates :current_user, presence: true
|
@@ -29,10 +32,27 @@ module Effective
|
|
29
32
|
validates :category_id, presence: true,
|
30
33
|
if: -> { current_action == :reclassify || current_action == :register }
|
31
34
|
|
35
|
+
validates :category_ids, presence: true, if: -> { current_action == :assign }
|
36
|
+
|
32
37
|
def to_s
|
33
38
|
'action'
|
34
39
|
end
|
35
40
|
|
41
|
+
def register!
|
42
|
+
update!(current_action: :register)
|
43
|
+
EffectiveMemberships.Registrar.register!(owner, to: category, number: membership_number.presence, skip_fees: skip_fees?)
|
44
|
+
end
|
45
|
+
|
46
|
+
def reclassify!
|
47
|
+
update!(current_action: :reclassify)
|
48
|
+
EffectiveMemberships.Registrar.reclassify!(owner, to: category, skip_fees: skip_fees?)
|
49
|
+
end
|
50
|
+
|
51
|
+
def assign!
|
52
|
+
update!(current_action: :assign)
|
53
|
+
EffectiveMemberships.Registrar.assign!(owner, categories: categories, number: membership_number.presence)
|
54
|
+
end
|
55
|
+
|
36
56
|
def good_standing!
|
37
57
|
update!(current_action: :good_standing)
|
38
58
|
EffectiveMemberships.Registrar.good_standing!(owner)
|
@@ -43,11 +63,6 @@ module Effective
|
|
43
63
|
EffectiveMemberships.Registrar.bad_standing!(owner, reason: bad_standing_reason)
|
44
64
|
end
|
45
65
|
|
46
|
-
def reclassify!
|
47
|
-
update!(current_action: :reclassify)
|
48
|
-
EffectiveMemberships.Registrar.reclassify!(owner, to: category, skip_fees: skip_fees?)
|
49
|
-
end
|
50
|
-
|
51
66
|
def fees_paid!
|
52
67
|
update!(current_action: :fees_paid)
|
53
68
|
EffectiveMemberships.Registrar.fees_paid!(owner)
|
@@ -58,11 +73,6 @@ module Effective
|
|
58
73
|
EffectiveMemberships.Registrar.remove!(owner)
|
59
74
|
end
|
60
75
|
|
61
|
-
def register!
|
62
|
-
update!(current_action: :register)
|
63
|
-
EffectiveMemberships.Registrar.register!(owner, to: category, number: membership_number.presence, skip_fees: skip_fees?)
|
64
|
-
end
|
65
|
-
|
66
76
|
def update!(atts)
|
67
77
|
assign_attributes(atts); save!
|
68
78
|
end
|
@@ -89,6 +99,10 @@ module Effective
|
|
89
99
|
EffectiveMemberships.Category.find(@category_id) if @category_id
|
90
100
|
end
|
91
101
|
|
102
|
+
def categories
|
103
|
+
EffectiveMemberships.Category.where(id: @category_ids) if @category_ids
|
104
|
+
end
|
105
|
+
|
92
106
|
def skip_fees?
|
93
107
|
EffectiveResources.truthy?(@skip_fees)
|
94
108
|
end
|
@@ -7,7 +7,7 @@
|
|
7
7
|
= f.show_if(:create_renewal_fees, true) do
|
8
8
|
- date = EffectiveMemberships.Registrar.renewal_fee_date(date: Time.zone.now)
|
9
9
|
|
10
|
-
%p Charged to members, every #{date.strftime('%B %
|
10
|
+
%p Charged to members, every #{date.strftime('%B %e')}, to renew their dues.
|
11
11
|
= f.price_field :renewal_fee
|
12
12
|
|
13
13
|
%h3 Late Fees
|
@@ -17,7 +17,7 @@
|
|
17
17
|
- period = EffectiveMemberships.Registrar.current_period
|
18
18
|
- date = EffectiveMemberships.Registrar.late_fee_date(period: period)
|
19
19
|
|
20
|
-
%p Charged to members, on #{date.strftime('%B %
|
20
|
+
%p Charged to members, on #{date.strftime('%B %e')}, with outstanding renewal fees
|
21
21
|
= f.price_field :late_fee
|
22
22
|
|
23
23
|
%h3 Bad Standing
|
@@ -27,6 +27,6 @@
|
|
27
27
|
- period = EffectiveMemberships.Registrar.current_period
|
28
28
|
- date = EffectiveMemberships.Registrar.bad_standing_date(period: period)
|
29
29
|
|
30
|
-
%p Members with outstanding fees, on #{date.strftime('%B %
|
30
|
+
%p Members with outstanding fees, on #{date.strftime('%B %e')}, will automatically be marked in bad standing.
|
31
31
|
|
32
32
|
= effective_submit(f)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
.card
|
2
|
+
.card-body
|
3
|
+
%h5.card-title Assign
|
4
|
+
|
5
|
+
= effective_form_with(model: [:admin, registrar_action], url: effective_memberships.admin_registrar_actions_path) do |f|
|
6
|
+
= f.hidden_field :owner_id
|
7
|
+
= f.hidden_field :owner_type
|
8
|
+
|
9
|
+
- membership = f.object.owner.membership
|
10
|
+
|
11
|
+
%p.text-muted
|
12
|
+
Assign to one or more categories.
|
13
|
+
|
14
|
+
= f.static_field :current_action, label: 'Current Categories' do
|
15
|
+
- Array(membership&.categories).each do |category|
|
16
|
+
%div= link_to(category, effective_memberships.edit_admin_category_path(category))
|
17
|
+
|
18
|
+
- if membership.blank?
|
19
|
+
None
|
20
|
+
|
21
|
+
= f.check_box :current_action, label: 'Yes, assign this member to categories'
|
22
|
+
|
23
|
+
= f.show_if :current_action, true do
|
24
|
+
- categories = f.object.owner.registrar_action_categories(:assign)
|
25
|
+
= f.select :category_ids, categories, label: 'Assign to', required: true, multiple: true
|
26
|
+
|
27
|
+
- if membership.present?
|
28
|
+
%p The member will keep their existing membership number: #{membership.number}.
|
29
|
+
- else
|
30
|
+
= f.text_field :membership_number, hint: "leave blank to assign the next number"
|
31
|
+
|
32
|
+
%p No fees will be created
|
33
|
+
|
34
|
+
= f.submit 'Assign', border: false, center: true, 'data-confirm': "Really assign #{f.object.owner}?"
|
@@ -9,13 +9,14 @@
|
|
9
9
|
- membership = f.object.owner.membership
|
10
10
|
|
11
11
|
- period = EffectiveMemberships.Registrar.current_period
|
12
|
-
- date = EffectiveMemberships.Registrar.bad_standing_date(period: period)
|
12
|
+
- date = (EffectiveMemberships.Registrar.bad_standing_date(period: period) rescue false)
|
13
13
|
|
14
14
|
%p.text-muted
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
- if date.present?
|
16
|
+
Members with outstanding renewal fees are automatically marked
|
17
|
+
not in good standing on #{date.strftime('%B %e')}.
|
18
|
+
The status is cleared when they pay their fees.
|
19
|
+
You can also mark a member as always in bad standing.
|
19
20
|
|
20
21
|
= f.static_field :current_action, label: 'Current Status' do
|
21
22
|
|
@@ -7,9 +7,7 @@
|
|
7
7
|
= f.hidden_field :owner_type
|
8
8
|
|
9
9
|
- membership = f.object.owner.membership
|
10
|
-
|
11
10
|
- period = EffectiveMemberships.Registrar.current_period
|
12
|
-
- date = EffectiveMemberships.Registrar.bad_standing_date(period: period)
|
13
11
|
|
14
12
|
%p.text-muted
|
15
13
|
Change a member's existing category and optionally create fees.
|
@@ -22,7 +20,8 @@
|
|
22
20
|
= f.show_if :current_action, true do
|
23
21
|
%p The member will keep their existing membership number: #{membership.number}.
|
24
22
|
|
25
|
-
- categories =
|
23
|
+
- categories = f.object.owner.registrar_action_categories(:reclassify) - membership.categories
|
24
|
+
|
26
25
|
= f.select :category_id, categories, label: 'Reclassify to', required: true
|
27
26
|
|
28
27
|
= f.check_box :skip_fees, label: 'Yes, skip creating fees and just set the category'
|
@@ -17,7 +17,7 @@
|
|
17
17
|
= f.check_box :current_action, label: 'Yes, register to a membership'
|
18
18
|
|
19
19
|
= f.show_if :current_action, true do
|
20
|
-
- categories =
|
20
|
+
- categories = f.object.owner.registrar_action_categories(:register)
|
21
21
|
= f.select :category_id, categories, label: 'Register to'
|
22
22
|
|
23
23
|
= f.text_field :membership_number, hint: "leave blank to assign the next number"
|
@@ -4,11 +4,12 @@
|
|
4
4
|
- raise('expected a submitted fee_payment') unless resource.was_submitted?
|
5
5
|
- raise('expected a purchased fee_payment submit_order') unless resource.submit_order&.purchased?
|
6
6
|
|
7
|
-
.alert.alert-
|
8
|
-
|
9
|
-
|
7
|
+
.alert.alert-warning.mb-4
|
8
|
+
Successfully paid on #{resource.submit_order.purchased_at.strftime('%F')}.
|
9
|
+
|
10
|
+
= link_to "Return to Dashboard", root_path, class: 'btn btn-lg btn-primary mb-4'
|
10
11
|
|
11
12
|
= render 'effective/fee_payments/fee_payment', fee_payment: resource
|
12
13
|
= render 'effective/fee_payments/orders', fee_payment: resource
|
13
14
|
|
14
|
-
= link_to "Return to Dashboard", root_path, class: 'btn btn-lg btn-primary
|
15
|
+
= link_to "Return to Dashboard", root_path, class: 'btn btn-lg btn-primary'
|
@@ -7,11 +7,11 @@
|
|
7
7
|
- if membership.present?
|
8
8
|
- if membership.category.create_renewal_fees?
|
9
9
|
- date = EffectiveMemberships.Registrar.renewal_fee_date(date: Time.zone.now)
|
10
|
-
%p Annual fees become available for purchase on #{date.strftime('%B %
|
10
|
+
%p Annual fees become available for purchase on #{date.strftime('%B %e')} of each year.
|
11
11
|
|
12
12
|
- if membership.category.create_late_fees?
|
13
13
|
- date = EffectiveMemberships.Registrar.late_fee_date(date: Time.zone.now)
|
14
|
-
%p Late fees will be applied on #{date.strftime('%B %
|
14
|
+
%p Late fees will be applied on #{date.strftime('%B %e')}.
|
15
15
|
|
16
16
|
- if fees.present?
|
17
17
|
.alert.alert-warning.mb-3 You have #{pluralize(fees.length , 'outstanding fee')}.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_memberships
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -282,6 +282,7 @@ files:
|
|
282
282
|
- app/views/admin/fees/_form.html.haml
|
283
283
|
- app/views/admin/memberships/_status.html.haml
|
284
284
|
- app/views/admin/registrar_actions/_form.html.haml
|
285
|
+
- app/views/admin/registrar_actions/_form_assign.html.haml
|
285
286
|
- app/views/admin/registrar_actions/_form_bad_standing.html.haml
|
286
287
|
- app/views/admin/registrar_actions/_form_fees_paid.html.haml
|
287
288
|
- app/views/admin/registrar_actions/_form_reclassify.html.haml
|